From 9e00c1cdffbac166ecfd5d5be80d098117e09805 Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 13 Mar 2017 19:27:14 +0000 Subject: [PATCH 001/313] Code for Dependency Injection Article. --- .../baeldung/constructordi/SpringRunner.java | 62 +++++++++---------- .../baeldung/constructordi/domain/Car.java | 42 ++++++------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java b/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java index 623739f036..bffd35ec59 100644 --- a/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java +++ b/spring-core/src/main/java/com/baeldung/constructordi/SpringRunner.java @@ -1,31 +1,31 @@ -package com.baeldung.constructordi; - -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.constructordi.domain.Car; - -public class SpringRunner { - public static void main(String[] args) { - Car toyota = getCarFromXml(); - - System.out.println(toyota); - - toyota = getCarFromJavaConfig(); - - System.out.println(toyota); - } - - private static Car getCarFromJavaConfig() { - ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); - - return context.getBean(Car.class); - } - - private static Car getCarFromXml() { - ApplicationContext context = new ClassPathXmlApplicationContext("baeldung.xml"); - - return context.getBean(Car.class); - } -} +package com.baeldung.constructordi; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.constructordi.domain.Car; + +public class SpringRunner { + public static void main(String[] args) { + Car toyota = getCarFromXml(); + + System.out.println(toyota); + + toyota = getCarFromJavaConfig(); + + System.out.println(toyota); + } + + private static Car getCarFromJavaConfig() { + ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); + + return context.getBean(Car.class); + } + + private static Car getCarFromXml() { + ApplicationContext context = new ClassPathXmlApplicationContext("constructordi.xml"); + + return context.getBean(Car.class); + } +} diff --git a/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java b/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java index 9f68ba5cd9..5c9467fdf4 100644 --- a/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java +++ b/spring-core/src/main/java/com/baeldung/constructordi/domain/Car.java @@ -1,21 +1,21 @@ -package com.baeldung.constructordi.domain; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class Car { - private Engine engine; - private Transmission transmission; - - @Autowired - public Car(Engine engine, Transmission transmission) { - this.engine = engine; - this.transmission = transmission; - } - - @Override - public String toString() { - return String.format("Engine: %s Transmission: %s", engine, transmission); - } -} +package com.baeldung.constructordi.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Car { + private Engine engine; + private Transmission transmission; + + @Autowired + public Car(Engine engine, Transmission transmission) { + this.engine = engine; + this.transmission = transmission; + } + + @Override + public String toString() { + return String.format("Engine: %s Transmission: %s", engine, transmission); + } +} From 112fa1290f2cf7570f183d64d39788d034c7614c Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 14 Mar 2017 16:00:38 +0000 Subject: [PATCH 002/313] Added Java based configuration. Downloaded formatter.xml and reformatted all changed files. Manually changed tab into 4 spaces in XML configuration files. --- .../java/com/baeldung/setterdi/Config.java | 35 +++++++++++++++++++ .../com/baeldung/setterdi/SpringRunner.java | 33 +++++++++++++++++ .../com/baeldung/setterdi/domain/Car.java | 34 ++++++++++++++++++ .../com/baeldung/setterdi/domain/Engine.java | 22 ++++++++++++ .../com/baeldung/setterdi/domain/Trailer.java | 11 ++++++ .../setterdi/domain/Transmission.java | 17 +++++++++ .../src/main/resources/constructordi.xml | 20 +++++++++++ spring-core/src/main/resources/setterdi.xml | 24 +++++++++++++ 8 files changed, 196 insertions(+) create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/Config.java create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java create mode 100644 spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java create mode 100644 spring-core/src/main/resources/constructordi.xml create mode 100644 spring-core/src/main/resources/setterdi.xml diff --git a/spring-core/src/main/java/com/baeldung/setterdi/Config.java b/spring-core/src/main/java/com/baeldung/setterdi/Config.java new file mode 100644 index 0000000000..68c1ae12a2 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/Config.java @@ -0,0 +1,35 @@ +package com.baeldung.setterdi; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.setterdi.domain.Engine; +import com.baeldung.setterdi.domain.Trailer; +import com.baeldung.setterdi.domain.Transmission; + +@Configuration +@ComponentScan("com.baeldung.setterdi") +public class Config { + + @Bean + public Engine engine() { + Engine engine = new Engine(); + engine.setType("v8"); + engine.setVolume(5); + return engine; + } + + @Bean + public Transmission transmission() { + Transmission transmission = new Transmission(); + transmission.setType("sliding"); + return transmission; + } + + @Bean + public Trailer trailer() { + Trailer trailer = new Trailer(); + return trailer; + } +} \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java b/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java new file mode 100644 index 0000000000..bc92b79e8a --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/SpringRunner.java @@ -0,0 +1,33 @@ +package com.baeldung.setterdi; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.setterdi.Config; +import com.baeldung.setterdi.domain.Car; + +public class SpringRunner { + public static void main(String[] args) { + Car toyota = getCarFromXml(); + + System.out.println(toyota); + + toyota = getCarFromJavaConfig(); + + System.out.println(toyota); + + } + + private static Car getCarFromJavaConfig() { + ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); + + return context.getBean(Car.class); + } + + private static Car getCarFromXml() { + ApplicationContext context = new ClassPathXmlApplicationContext("setterdi.xml"); + + return context.getBean(Car.class); + } +} \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java new file mode 100644 index 0000000000..749ff3984a --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Car.java @@ -0,0 +1,34 @@ +package com.baeldung.setterdi.domain; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Car { + private Engine engine; + private Transmission transmission; + private Trailer trailer; + + public Car() { + } + + @Autowired + public void setEngine(Engine engine) { + this.engine = engine; + } + + @Autowired + public void setTransmission(Transmission transmission) { + this.transmission = transmission; + } + + @Autowired + public void setTrailer(Trailer trailer) { + this.trailer = trailer; + } + + @Override + public String toString() { + return String.format("Engine: %s Transmission: %s Trailer: %s", engine, transmission, trailer); + } +} diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java new file mode 100644 index 0000000000..50c247cacf --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Engine.java @@ -0,0 +1,22 @@ +package com.baeldung.setterdi.domain; + +public class Engine { + private String type; + private int volume; + + public Engine() { + } + + public void setType(String type) { + this.type = type; + } + + public void setVolume(int volume) { + this.volume = volume; + } + + @Override + public String toString() { + return String.format("%s %d", type, volume); + } +} \ No newline at end of file diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java new file mode 100644 index 0000000000..616732309e --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Trailer.java @@ -0,0 +1,11 @@ +package com.baeldung.setterdi.domain; + +public class Trailer { + public Trailer() { + } + + @Override + public String toString() { + return "Trailer"; + } +} diff --git a/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java b/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java new file mode 100644 index 0000000000..18b62afdc1 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/setterdi/domain/Transmission.java @@ -0,0 +1,17 @@ +package com.baeldung.setterdi.domain; + +public class Transmission { + private String type; + + public Transmission() { + } + + public void setType(String type) { + this.type = type; + } + + @Override + public String toString() { + return String.format("%s", type); + } +} diff --git a/spring-core/src/main/resources/constructordi.xml b/spring-core/src/main/resources/constructordi.xml new file mode 100644 index 0000000000..231e72adcb --- /dev/null +++ b/spring-core/src/main/resources/constructordi.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/spring-core/src/main/resources/setterdi.xml b/spring-core/src/main/resources/setterdi.xml new file mode 100644 index 0000000000..8b7f0d41e7 --- /dev/null +++ b/spring-core/src/main/resources/setterdi.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + From 57551f33a0d408957fd905ded0fae86e91592f6a Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 4 Apr 2017 15:10:36 +0100 Subject: [PATCH 003/313] BAEL-434 - Spring Roo project files generated by Spring Roo. No formatting applied. Added POM, java and resources folders. --- roo/pom.xml | 644 ++ .../java/com/baeldung/RooApplication.java | 23 + ...aJpaDetachableRepositoryConfiguration.java | 11 + ...ration_Roo_Jpa_Repository_Configuration.aj | 18 + .../baeldung/config/WebMvcConfiguration.java | 13 + ...figuration_Roo_ThymeleafUIConfiguration.aj | 110 + ...vcConfiguration_Roo_WebMvcConfiguration.aj | 72 + .../config/jackson/DomainModelModule.java | 11 + ...DomainModelModule_Roo_DomainModelModule.aj | 28 + .../main/java/com/baeldung/domain/Book.java | 58 + .../com/baeldung/domain/Book_Roo_Equals.aj | 41 + .../com/baeldung/domain/Book_Roo_JavaBean.aj | 100 + .../baeldung/domain/Book_Roo_Jpa_Entity.aj | 28 + .../com/baeldung/domain/Book_Roo_ToString.aj | 26 + .../baeldung/repository/BookRepository.java | 12 + .../repository/BookRepositoryCustom.java | 12 + ...ositoryCustom_Roo_Jpa_Repository_Custom.aj | 23 + .../repository/BookRepositoryImpl.java | 22 + ...kRepositoryImpl_Roo_Jpa_Repository_Impl.aj | 69 + .../BookRepository_Roo_Jpa_Repository.aj | 20 + .../com/baeldung/service/api/BookService.java | 12 + .../service/api/BookService_Roo_Service.aj | 95 + .../service/impl/BookServiceImpl.java | 12 + .../impl/BookServiceImpl_Roo_Service_Impl.aj | 177 + .../com/baeldung/web/BookDeserializer.java | 41 + ...BookDeserializer_Roo_EntityDeserializer.aj | 78 + .../java/com/baeldung/web/BookJsonMixin.java | 12 + .../BooksCollectionThymeleafController.java | 15 + ...ctionThymeleafController_Roo_Controller.aj | 35 + ...ectionThymeleafController_Roo_Thymeleaf.aj | 470 ++ .../BooksCollectionThymeleafLinkFactory.java | 11 + ...ionThymeleafLinkFactory_Roo_LinkFactory.aj | 122 + .../web/BooksItemThymeleafController.java | 15 + ...sItemThymeleafController_Roo_Controller.aj | 35 + ...ksItemThymeleafController_Roo_Thymeleaf.aj | 251 + .../web/BooksItemThymeleafLinkFactory.java | 11 + ...temThymeleafLinkFactory_Roo_LinkFactory.aj | 86 + .../java/com/baeldung/web/MainController.java | 11 + ...Controller_Roo_Thymeleaf_MainController.aj | 59 + .../web/reports/ExportingErrorException.java | 19 + .../web/reports/JasperReportsCsvExporter.java | 71 + .../web/reports/JasperReportsExporter.java | 41 + .../web/reports/JasperReportsPdfExporter.java | 71 + .../web/reports/JasperReportsXlsExporter.java | 77 + .../main/resources/application-dev.properties | 13 + roo/src/main/resources/application.properties | 8 + roo/src/main/resources/banner.txt | 9 + roo/src/main/resources/messages.properties | 146 + .../resources/static/public/css/springroo.css | 475 ++ .../resources/static/public/css/theme.css | 6914 +++++++++++++++++ .../public/fonts/fontawesome-webfont.eot | Bin 0 -> 75220 bytes .../public/fonts/fontawesome-webfont.svg | 685 ++ .../public/fonts/fontawesome-webfont.ttf | Bin 0 -> 150920 bytes .../public/fonts/fontawesome-webfont.woff | Bin 0 -> 89076 bytes .../public/fonts/fontawesome-webfont.woff2 | Bin 0 -> 70728 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../static/public/img/apple-touch-icon.png | Bin 0 -> 4723 bytes .../main/resources/static/public/img/en.png | Bin 0 -> 599 bytes .../main/resources/static/public/img/es.png | Bin 0 -> 469 bytes .../resources/static/public/img/favicon.ico | Bin 0 -> 26918 bytes .../main/resources/static/public/img/geo.png | Bin 0 -> 142350 bytes .../main/resources/static/public/img/logo.png | Bin 0 -> 1761 bytes .../static/public/img/owasp_logo.png | Bin 0 -> 4271 bytes .../static/public/img/springroo-logo.png | Bin 0 -> 25823 bytes .../static/public/js/dataTables.advanced.js | 1334 ++++ .../static/public/js/datatables-defaults.js | 29 + .../public/js/datetimepicker-defaults.js | 107 + .../static/public/js/inputmask-defaults.js | 30 + .../main/resources/static/public/js/main.js | 70 + .../static/public/js/moment-defaults.js | 88 + .../static/public/js/moment-locale-es.js | 73 + .../static/public/js/select2-defaults.js | 49 + .../static/public/js/validation-defaults.js | 233 + .../resources/templates/accessibility.html | 61 + .../resources/templates/books/create.html | 153 + .../main/resources/templates/books/edit.html | 171 + .../main/resources/templates/books/list.html | 98 + .../main/resources/templates/books/show.html | 86 + .../resources/templates/books/showInline.html | 67 + roo/src/main/resources/templates/error.html | 40 + .../resources/templates/fragments/footer.html | 51 + .../resources/templates/fragments/header.html | 21 + .../fragments/js/datatables-locale.js | 67 + .../templates/fragments/js/datatables.html | 78 + .../templates/fragments/js/select2.html | 16 + .../templates/fragments/languages.html | 33 + .../resources/templates/fragments/menu.html | 107 + .../fragments/modal-confirm-delete-batch.html | 34 + .../fragments/modal-confirm-delete.html | 35 + .../templates/fragments/modal-confirm.html | 32 + .../fragments/modal-export-empty-error.html | 20 + .../resources/templates/fragments/modal.html | 27 + .../templates/fragments/session-links.html | 46 + roo/src/main/resources/templates/index.html | 150 + .../layouts/default-layout-no-menu.html | 103 + .../templates/layouts/default-layout.html | 110 + .../layouts/default-list-layout.html | 121 + .../templates/layouts/home-layout.html | 104 + roo/src/main/resources/templates/login.html | 108 + .../templates/reports/export_default.jrxml | 59 + 104 files changed, 15717 insertions(+) create mode 100644 roo/pom.xml create mode 100644 roo/src/main/java/com/baeldung/RooApplication.java create mode 100644 roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java create mode 100644 roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj create mode 100644 roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java create mode 100644 roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj create mode 100644 roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj create mode 100644 roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java create mode 100644 roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj create mode 100644 roo/src/main/java/com/baeldung/domain/Book.java create mode 100644 roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj create mode 100644 roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj create mode 100644 roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj create mode 100644 roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepository.java create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj create mode 100644 roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj create mode 100644 roo/src/main/java/com/baeldung/service/api/BookService.java create mode 100644 roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj create mode 100644 roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java create mode 100644 roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj create mode 100644 roo/src/main/java/com/baeldung/web/BookDeserializer.java create mode 100644 roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj create mode 100644 roo/src/main/java/com/baeldung/web/BookJsonMixin.java create mode 100644 roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java create mode 100644 roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj create mode 100644 roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj create mode 100644 roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java create mode 100644 roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj create mode 100644 roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java create mode 100644 roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj create mode 100644 roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj create mode 100644 roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java create mode 100644 roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj create mode 100644 roo/src/main/java/com/baeldung/web/MainController.java create mode 100644 roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj create mode 100644 roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java create mode 100644 roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java create mode 100644 roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java create mode 100644 roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java create mode 100644 roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java create mode 100644 roo/src/main/resources/application-dev.properties create mode 100644 roo/src/main/resources/application.properties create mode 100644 roo/src/main/resources/banner.txt create mode 100644 roo/src/main/resources/messages.properties create mode 100644 roo/src/main/resources/static/public/css/springroo.css create mode 100644 roo/src/main/resources/static/public/css/theme.css create mode 100644 roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot create mode 100644 roo/src/main/resources/static/public/fonts/fontawesome-webfont.svg create mode 100644 roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf create mode 100644 roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff create mode 100644 roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 create mode 100644 roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot create mode 100644 roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg create mode 100644 roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf create mode 100644 roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff create mode 100644 roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 create mode 100644 roo/src/main/resources/static/public/img/apple-touch-icon.png create mode 100644 roo/src/main/resources/static/public/img/en.png create mode 100644 roo/src/main/resources/static/public/img/es.png create mode 100644 roo/src/main/resources/static/public/img/favicon.ico create mode 100644 roo/src/main/resources/static/public/img/geo.png create mode 100644 roo/src/main/resources/static/public/img/logo.png create mode 100644 roo/src/main/resources/static/public/img/owasp_logo.png create mode 100644 roo/src/main/resources/static/public/img/springroo-logo.png create mode 100644 roo/src/main/resources/static/public/js/dataTables.advanced.js create mode 100644 roo/src/main/resources/static/public/js/datatables-defaults.js create mode 100644 roo/src/main/resources/static/public/js/datetimepicker-defaults.js create mode 100644 roo/src/main/resources/static/public/js/inputmask-defaults.js create mode 100644 roo/src/main/resources/static/public/js/main.js create mode 100644 roo/src/main/resources/static/public/js/moment-defaults.js create mode 100644 roo/src/main/resources/static/public/js/moment-locale-es.js create mode 100644 roo/src/main/resources/static/public/js/select2-defaults.js create mode 100644 roo/src/main/resources/static/public/js/validation-defaults.js create mode 100644 roo/src/main/resources/templates/accessibility.html create mode 100644 roo/src/main/resources/templates/books/create.html create mode 100644 roo/src/main/resources/templates/books/edit.html create mode 100644 roo/src/main/resources/templates/books/list.html create mode 100644 roo/src/main/resources/templates/books/show.html create mode 100644 roo/src/main/resources/templates/books/showInline.html create mode 100644 roo/src/main/resources/templates/error.html create mode 100644 roo/src/main/resources/templates/fragments/footer.html create mode 100644 roo/src/main/resources/templates/fragments/header.html create mode 100644 roo/src/main/resources/templates/fragments/js/datatables-locale.js create mode 100644 roo/src/main/resources/templates/fragments/js/datatables.html create mode 100644 roo/src/main/resources/templates/fragments/js/select2.html create mode 100644 roo/src/main/resources/templates/fragments/languages.html create mode 100644 roo/src/main/resources/templates/fragments/menu.html create mode 100644 roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html create mode 100644 roo/src/main/resources/templates/fragments/modal-confirm-delete.html create mode 100644 roo/src/main/resources/templates/fragments/modal-confirm.html create mode 100644 roo/src/main/resources/templates/fragments/modal-export-empty-error.html create mode 100644 roo/src/main/resources/templates/fragments/modal.html create mode 100644 roo/src/main/resources/templates/fragments/session-links.html create mode 100644 roo/src/main/resources/templates/index.html create mode 100644 roo/src/main/resources/templates/layouts/default-layout-no-menu.html create mode 100644 roo/src/main/resources/templates/layouts/default-layout.html create mode 100644 roo/src/main/resources/templates/layouts/default-list-layout.html create mode 100644 roo/src/main/resources/templates/layouts/home-layout.html create mode 100644 roo/src/main/resources/templates/login.html create mode 100644 roo/src/main/resources/templates/reports/export_default.jrxml diff --git a/roo/pom.xml b/roo/pom.xml new file mode 100644 index 0000000000..e1d69a3031 --- /dev/null +++ b/roo/pom.xml @@ -0,0 +1,644 @@ + + + + + io.spring.platform + platform-bom + Athens-RELEASE + + + 4.0.0 + com.baeldung + roo + 1.0.0.BUILD-SNAPSHOT + roo + + jar + + + 2.0.0.RC1 + 8 + UTF-8 + 1.8 + 1.5.4 + 1.4.1.RELEASE + 1.8 + 1.2.0.RC1 + 1.1.2 + 3.0.0.RELEASE + 2.0.0 + 2.0.1 + 5.0.11 + 1.0 + 3.3.6 + 1.10.12 + 1.10.11 + 1.1.2 + 1.1.2 + 2.0.2 + 2.0.2 + 1.1.2 + 1.1.2 + 1.1.2 + 2.0.0 + 2.5.4 + 4.6.2 + 1.12.3 + 3.3.1 + 1.15.0 + 2.13.0 + 4.0.3 + 0.1.0-beta.7 + 1.4.2 + 3.7.3 + 1.0.3 + + + + + + maven-snapshot-repository + Maven Snapshot Repository + https://oss.sonatype.org/content/repositories/snapshots + + false + + + true + + + + + spring-roo-repository + Spring Roo Repository + http://repo.spring.io/spring-roo + + + + + + + + + org.springframework.roo + org.springframework.roo.annotations + ${roo.version} + pom + provided + + + + io.springlets + springlets-data-jpa + ${springlets.version} + + + io.springlets + springlets-data-commons + ${springlets.version} + + + io.springlets + springlets-context + ${springlets.version} + + + org.springframework.roo + org.springframework.roo.querydsl.processor + 2.0.0.RELEASE + + + io.tracee.binding + tracee-springmvc + ${tracee.version} + + + io.springlets + springlets-boot-starter-web + ${springlets.version} + + + com.github.mxab.thymeleaf.extras + thymeleaf-extras-data-attribute + ${thymeleaf-data-dialect.version} + + + ar.com.fdvs + DynamicJasper + ${dynamicjasper.version} + + + ar.com.fdvs + DynamicJasper-core-fonts + ${dynamicjasper-fonts.version} + + + org.webjars.bower + bootstrap + ${bootstrap.version} + + + org.webjars.bower + datatables + ${datatables.version} + + + org.webjars.bower + datatables.net-bs + ${datatables-bs.version} + + + org.webjars.bower + datatables.net-buttons + ${datatables-buttons.version} + + + org.webjars.bower + datatables.net-buttons-bs + ${datatables-buttons-bs.version} + + + org.webjars.bower + datatables.net-responsive + ${datatables-responsive.version} + + + org.webjars.bower + datatables.net-responsive-bs + ${datatables-responsive-bs.version} + + + org.webjars.bower + datatables.net-select + ${datatables-select.version} + + + org.webjars.bower + datatables.net-select-bs + ${datatables-select-bs.version} + + + org.webjars.npm + jquery-datatables-checkboxes + ${datatables-checkboxes.version} + + + org.webjars.npm + jquery + + + org.webjars.npm + datatables.net + + + + + org.webjars.bower + github-com-julmot-datatables-mark-js + ${datatables-mark.version} + + + org.webjars.bower + datetimepicker + ${datetimepicker.version} + + + org.webjars.bower + font-awesome + ${fontawesome.version} + + + org.webjars.bower + jquery + ${jquery.version} + + + org.webjars + jquery.inputmask + ${jquery-inputmask.version} + + + org.webjars + jquery + + + + + org.webjars.bower + jquery-validation + ${jquery-validation.version} + + + org.webjars.bower + momentjs + ${momentjs.version} + + + org.webjars.bower + select2 + ${select2.version} + + + org.webjars.bower + select2-bootstrap-theme + ${select2-bootstrap-theme.version} + + + org.webjars + respond + ${respond.version} + + + org.webjars + html5shiv + ${html5shiv.version} + + + org.webjars.bower + ie10-viewport-bug-workaround + ${bootstrap.ie10-viewport-bug-workaround.version} + + + + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-devtools + true + + + + + org.springframework.roo + org.springframework.roo.annotations + pom + + + + + org.aspectj + aspectjrt + + + + + org.apache.commons + commons-lang3 + + + + + org.assertj + assertj-core + + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-jdbc + provided + + + org.hsqldb + hsqldb + provided + + + io.springlets + springlets-data-jpa + + + io.springlets + springlets-data-commons + + + io.springlets + springlets-context + + + javax.validation + validation-api + + + com.querydsl + querydsl-jpa + + + org.springframework.roo + org.springframework.roo.querydsl.processor + + + org.springframework.boot + spring-boot-starter-web + + + joda-time + joda-time + + + io.tracee.binding + tracee-springmvc + + + io.springlets + springlets-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + nz.net.ultraq.thymeleaf + thymeleaf-layout-dialect + + + com.github.mxab.thymeleaf.extras + thymeleaf-extras-data-attribute + + + ar.com.fdvs + DynamicJasper + + + ar.com.fdvs + DynamicJasper-core-fonts + + + org.apache.poi + poi + + + org.springframework + spring-context-support + + + org.webjars + webjars-locator + + + org.webjars.bower + bootstrap + + + org.webjars.bower + datatables + + + org.webjars.bower + datatables.net-bs + + + org.webjars.bower + datatables.net-buttons + + + org.webjars.bower + datatables.net-buttons-bs + + + org.webjars.bower + datatables.net-responsive + + + org.webjars.bower + datatables.net-responsive-bs + + + org.webjars.bower + datatables.net-select + + + org.webjars.bower + datatables.net-select-bs + + + org.webjars.npm + jquery-datatables-checkboxes + + + org.webjars.bower + github-com-julmot-datatables-mark-js + + + org.webjars.bower + datetimepicker + + + org.webjars.bower + font-awesome + + + org.webjars.bower + jquery + + + org.webjars + jquery.inputmask + + + org.webjars.bower + jquery-validation + + + org.webjars.bower + momentjs + + + org.webjars.bower + select2 + + + org.webjars.bower + select2-bootstrap-theme + + + org.webjars + respond + + + org.webjars + html5shiv + + + org.webjars.bower + ie10-viewport-bug-workaround + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + exec + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + false + + + + + org.codehaus.mojo + aspectj-maven-plugin + ${aspectj.plugin.version} + + ${java.version} + ${java.version} + ignore + ${java.version} + UTF-8 + + + + process-sources + + compile + test-compile + + + + + + org.aspectj + aspectjtools + ${aspectj.version} + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*_Roo_* + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + --base-dir ${project.basedir} + --attribute + "projectName=${project.name}" + --attribute + "projectVersion=${project.version}" + --attribute "doctype=book" + + + ${project.groupId}:* + + org.asciidoctor.Asciidoclet + + org.asciidoctor + asciidoclet + ${asciidoclet.version} + + true + true + + http://docs.oracle.com/javase/${java.version}/docs/api/ + http://docs.oracle.com/javaee/${java.product.version}/api/ + http://docs.spring.io/spring-framework/docs/${spring.version}/javadoc-api/ + http://docs.spring.io/spring-boot/docs/${spring-boot.version}/api/ + http://fasterxml.github.io/jackson-core/javadoc/2.8/ + http://fasterxml.github.io/jackson-databind/javadoc/2.8 + http://cxf.apache.org/javadoc/latest-3.1.x/ + + src/main/java/overview.adoc + private + ${java.version} + + + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + + process + + + target/generated-sources/java + + org.springframework.roo.querydsl.processor.RooAnnotationProcessor + + + + + + + + com.querydsl + querydsl-apt + ${querydsl.version} + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.codehaus.mojo + aspectj-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.mysema.maven + apt-maven-plugin + + + + + diff --git a/roo/src/main/java/com/baeldung/RooApplication.java b/roo/src/main/java/com/baeldung/RooApplication.java new file mode 100644 index 0000000000..96f5a4ccc2 --- /dev/null +++ b/roo/src/main/java/com/baeldung/RooApplication.java @@ -0,0 +1,23 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * = RooApplication + * + * TODO Auto-generated class documentation + * + */ +@SpringBootApplication +public class RooApplication { + + /** + * TODO Auto-generated method documentation + * + * @param args + */ + public static void main(String[] args) { + SpringApplication.run(RooApplication.class, args); + } +} \ No newline at end of file diff --git a/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java b/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java new file mode 100644 index 0000000000..98916a9412 --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java @@ -0,0 +1,11 @@ +package com.baeldung.config; +import org.springframework.roo.addon.layers.repository.jpa.annotations.RooJpaRepositoryConfiguration; + +/** + * = SpringDataJpaDetachableRepositoryConfiguration + TODO Auto-generated class documentation + * + */ +@RooJpaRepositoryConfiguration +public class SpringDataJpaDetachableRepositoryConfiguration { +} diff --git a/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj b/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj new file mode 100644 index 0000000000..7f54997ddb --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj @@ -0,0 +1,18 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.config; + +import com.baeldung.RooApplication; +import com.baeldung.config.SpringDataJpaDetachableRepositoryConfiguration; +import io.springlets.data.jpa.repository.support.DetachableJpaRepositoryImpl; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +privileged aspect SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration { + + declare @type: SpringDataJpaDetachableRepositoryConfiguration: @Configuration; + + declare @type: SpringDataJpaDetachableRepositoryConfiguration: @EnableJpaRepositories(repositoryBaseClass = DetachableJpaRepositoryImpl.class, basePackageClasses = RooApplication.class); + +} diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java new file mode 100644 index 0000000000..5276300091 --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java @@ -0,0 +1,13 @@ +package com.baeldung.config; +import org.springframework.roo.addon.web.mvc.controller.annotations.config.RooWebMvcConfiguration; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooWebMvcThymeleafUIConfiguration; + +/** + * = WebMvcConfiguration + TODO Auto-generated class documentation + * + */ +@RooWebMvcConfiguration(defaultLanguage = "en") +@RooWebMvcThymeleafUIConfiguration +public class WebMvcConfiguration { +} diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj new file mode 100644 index 0000000000..c21cb6b68c --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj @@ -0,0 +1,110 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.config; + +import com.baeldung.config.WebMvcConfiguration; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; +import org.thymeleaf.spring4.view.ThymeleafViewResolver; +import org.thymeleaf.templatemode.TemplateMode; + +privileged aspect WebMvcConfiguration_Roo_ThymeleafUIConfiguration { + + declare parents: WebMvcConfiguration implements ApplicationContextAware; + + /** + * TODO Auto-generated attribute documentation + * + */ + @Autowired + private ThymeleafProperties WebMvcConfiguration.thymeleafProperties; + + /** + * TODO Auto-generated attribute documentation + * + */ + @Autowired + private TemplateEngine WebMvcConfiguration.templateEngine; + + /** + * TODO Auto-generated attribute documentation + * + */ + private ApplicationContext WebMvcConfiguration.applicationContext; + + /** + * TODO Auto-generated method documentation + * + * @return ThymeleafProperties + */ + public ThymeleafProperties WebMvcConfiguration.getThymeleafProperties() { + return thymeleafProperties; + } + + /** + * TODO Auto-generated method documentation + * + * @return TemplateEngine + */ + public TemplateEngine WebMvcConfiguration.getTemplateEngine() { + return templateEngine; + } + + /** + * TODO Auto-generated method documentation + * + * @return ApplicationContext + */ + public ApplicationContext WebMvcConfiguration.getApplicationContext() { + return applicationContext; + } + + /** + * TODO Auto-generated method documentation + * + * @param applicationContext + */ + public void WebMvcConfiguration.setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + /** + * TODO Auto-generated method documentation + * + * @return ThymeleafViewResolver + */ + @Bean + public ThymeleafViewResolver WebMvcConfiguration.javascriptThymeleafViewResolver() { + ThymeleafViewResolver resolver = new ThymeleafViewResolver(); + resolver.setTemplateEngine(getTemplateEngine()); + resolver.setCharacterEncoding("UTF-8"); + resolver.setContentType("application/javascript"); + resolver.setViewNames(new String[] {"*.js"}); + resolver.setCache(getThymeleafProperties().isCache()); + return resolver; + } + + /** + * TODO Auto-generated method documentation + * + * @return SpringResourceTemplateResolver + */ + @Bean + public SpringResourceTemplateResolver WebMvcConfiguration.javascriptTemplateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(getApplicationContext()); + resolver.setPrefix("classpath:/templates/fragments/js/"); + resolver.setTemplateMode(TemplateMode.JAVASCRIPT); + resolver.setCharacterEncoding("UTF-8"); + resolver.setCheckExistence(true); + resolver.setCacheable(getThymeleafProperties().isCache()); + return resolver; + } + +} diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj new file mode 100644 index 0000000000..8031c83ca3 --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj @@ -0,0 +1,72 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.config; + +import com.baeldung.config.WebMvcConfiguration; +import io.tracee.binding.springmvc.TraceeInterceptor; +import java.lang.Override; +import java.util.Locale; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +privileged aspect WebMvcConfiguration_Roo_WebMvcConfiguration { + + declare parents: WebMvcConfiguration extends WebMvcConfigurerAdapter; + + declare @type: WebMvcConfiguration: @Configuration; + + /** + * TODO Auto-generated method documentation + * + * @return LocalValidatorFactoryBean + */ + @Primary + @Bean + public LocalValidatorFactoryBean WebMvcConfiguration.validator() { + return new LocalValidatorFactoryBean(); + } + + /** + * TODO Auto-generated method documentation + * + * @return LocaleResolver + */ + @Bean + public LocaleResolver WebMvcConfiguration.localeResolver() { + SessionLocaleResolver localeResolver = new SessionLocaleResolver(); + localeResolver.setDefaultLocale(new Locale("en")); + return localeResolver; + } + + /** + * TODO Auto-generated method documentation + * + * @return LocaleChangeInterceptor + */ + @Bean + public LocaleChangeInterceptor WebMvcConfiguration.localeChangeInterceptor() { + LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); + localeChangeInterceptor.setParamName("lang"); + return localeChangeInterceptor; + } + + /** + * TODO Auto-generated method documentation + * + * @param registry + */ + @Override + public void WebMvcConfiguration.addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(localeChangeInterceptor()); + registry.addInterceptor(new TraceeInterceptor()); + } + +} diff --git a/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java b/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java new file mode 100644 index 0000000000..2a66a48846 --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java @@ -0,0 +1,11 @@ +package com.baeldung.config.jackson; +import org.springframework.roo.addon.web.mvc.controller.annotations.config.RooDomainModelModule; + +/** + * = DomainModelModule + TODO Auto-generated class documentation + * + */ +@RooDomainModelModule +public class DomainModelModule { +} diff --git a/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj b/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj new file mode 100644 index 0000000000..4683a3fe2d --- /dev/null +++ b/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj @@ -0,0 +1,28 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.config.jackson; + +import com.baeldung.config.jackson.DomainModelModule; +import com.baeldung.domain.Book; +import com.baeldung.web.BookJsonMixin; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.springframework.boot.jackson.JsonComponent; + +privileged aspect DomainModelModule_Roo_DomainModelModule { + + declare parents: DomainModelModule extends SimpleModule; + + declare @type: DomainModelModule: @JsonComponent; + + /** + * TODO Auto-generated constructor documentation + * + */ + public DomainModelModule.new() { + // Mixin registration + + setMixInAnnotation(Book.class, BookJsonMixin.class); + } + +} diff --git a/roo/src/main/java/com/baeldung/domain/Book.java b/roo/src/main/java/com/baeldung/domain/Book.java new file mode 100644 index 0000000000..99e7b894e6 --- /dev/null +++ b/roo/src/main/java/com/baeldung/domain/Book.java @@ -0,0 +1,58 @@ +package com.baeldung.domain; +import org.springframework.roo.addon.javabean.annotations.RooEquals; +import org.springframework.roo.addon.javabean.annotations.RooJavaBean; +import org.springframework.roo.addon.javabean.annotations.RooToString; +import org.springframework.roo.addon.jpa.annotations.entity.RooJpaEntity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Version; +import javax.validation.constraints.NotNull; + +/** + * = Book + TODO Auto-generated class documentation + * + */ +@RooJavaBean +@RooToString +@RooJpaEntity +@RooEquals(isJpaEntity = true) +public class Book { + + /** + * TODO Auto-generated attribute documentation + * + */ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + /** + * TODO Auto-generated attribute documentation + * + */ + @Version + private Integer version; + + /** + * TODO Auto-generated attribute documentation + * + */ + @NotNull + private String title; + + /** + * TODO Auto-generated attribute documentation + * + */ + @NotNull + private String author; + + /** + * TODO Auto-generated attribute documentation + * + */ + @NotNull + private String isbn; +} diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj b/roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj new file mode 100644 index 0000000000..51d6069eb0 --- /dev/null +++ b/roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj @@ -0,0 +1,41 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.domain; + +import com.baeldung.domain.Book; +import java.util.Objects; + +privileged aspect Book_Roo_Equals { + + /** + * This `equals` implementation is specific for JPA entities and uses + * the entity identifier for it, following the article in + * https://vladmihalcea.com/2016/06/06/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/ + * + * @param obj + * @return Boolean + */ + public boolean Book.equals(Object obj) { + if (this == obj) { + return true; + } + // instanceof is false if the instance is null + if (!(obj instanceof Book)) { + return false; + } + return getId() != null && Objects.equals(getId(), ((Book) obj).getId()); + } + + /** + * This `hashCode` implementation is specific for JPA entities and uses a fixed `int` value to be able + * to identify the entity in collections after a new id is assigned to the entity, following the article in + * https://vladmihalcea.com/2016/06/06/how-to-implement-equals-and-hashcode-using-the-jpa-entity-identifier/ + * + * @return Integer + */ + public int Book.hashCode() { + return 31; + } + +} diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj b/roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj new file mode 100644 index 0000000000..3ea375ce12 --- /dev/null +++ b/roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj @@ -0,0 +1,100 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.domain; + +import com.baeldung.domain.Book; + +privileged aspect Book_Roo_JavaBean { + + /** + * TODO Auto-generated method documentation + * + * @return Long + */ + public Long Book.getId() { + return this.id; + } + + /** + * TODO Auto-generated method documentation + * + * @param id + */ + public void Book.setId(Long id) { + this.id = id; + } + + /** + * TODO Auto-generated method documentation + * + * @return Integer + */ + public Integer Book.getVersion() { + return this.version; + } + + /** + * TODO Auto-generated method documentation + * + * @param version + */ + public void Book.setVersion(Integer version) { + this.version = version; + } + + /** + * TODO Auto-generated method documentation + * + * @return String + */ + public String Book.getTitle() { + return this.title; + } + + /** + * TODO Auto-generated method documentation + * + * @param title + */ + public void Book.setTitle(String title) { + this.title = title; + } + + /** + * TODO Auto-generated method documentation + * + * @return String + */ + public String Book.getAuthor() { + return this.author; + } + + /** + * TODO Auto-generated method documentation + * + * @param author + */ + public void Book.setAuthor(String author) { + this.author = author; + } + + /** + * TODO Auto-generated method documentation + * + * @return String + */ + public String Book.getIsbn() { + return this.isbn; + } + + /** + * TODO Auto-generated method documentation + * + * @param isbn + */ + public void Book.setIsbn(String isbn) { + this.isbn = isbn; + } + +} diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj b/roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj new file mode 100644 index 0000000000..739a00e058 --- /dev/null +++ b/roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj @@ -0,0 +1,28 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.domain; + +import com.baeldung.domain.Book; +import io.springlets.format.EntityFormat; +import javax.persistence.Entity; + +privileged aspect Book_Roo_Jpa_Entity { + + declare @type: Book: @Entity; + + declare @type: Book: @EntityFormat; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String Book.ITERABLE_TO_ADD_CANT_BE_NULL_MESSAGE = "The given Iterable of items to add can't be null!"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String Book.ITERABLE_TO_REMOVE_CANT_BE_NULL_MESSAGE = "The given Iterable of items to add can't be null!"; + +} diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj b/roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj new file mode 100644 index 0000000000..69083eaf9e --- /dev/null +++ b/roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj @@ -0,0 +1,26 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.domain; + +import com.baeldung.domain.Book; + +privileged aspect Book_Roo_ToString { + + /** + * TODO Auto-generated method documentation + * + * @return String + */ + public String Book.toString() { + return "Book {" + + "id='" + id + '\'' + + ", version='" + version + '\'' + + ", title='" + title + '\'' + + ", author='" + author + '\'' + + ", isbn='" + isbn + '\'' + + ", ITERABLE_TO_ADD_CANT_BE_NULL_MESSAGE='" + ITERABLE_TO_ADD_CANT_BE_NULL_MESSAGE + '\'' + + ", ITERABLE_TO_REMOVE_CANT_BE_NULL_MESSAGE='" + ITERABLE_TO_REMOVE_CANT_BE_NULL_MESSAGE + '\'' + "}" + super.toString(); + } + +} diff --git a/roo/src/main/java/com/baeldung/repository/BookRepository.java b/roo/src/main/java/com/baeldung/repository/BookRepository.java new file mode 100644 index 0000000000..78567c1c92 --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepository.java @@ -0,0 +1,12 @@ +package com.baeldung.repository; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.layers.repository.jpa.annotations.RooJpaRepository; + +/** + * = BookRepository + TODO Auto-generated class documentation + * + */ +@RooJpaRepository(entity = Book.class) +public interface BookRepository { +} diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java b/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java new file mode 100644 index 0000000000..44469e31b6 --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java @@ -0,0 +1,12 @@ +package com.baeldung.repository; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.layers.repository.jpa.annotations.RooJpaRepositoryCustom; + +/** + * = BookRepositoryCustom + TODO Auto-generated class documentation + * + */ +@RooJpaRepositoryCustom(entity = Book.class) +public interface BookRepositoryCustom { +} diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj b/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj new file mode 100644 index 0000000000..7cb44f84a1 --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj @@ -0,0 +1,23 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.repository; + +import com.baeldung.domain.Book; +import com.baeldung.repository.BookRepositoryCustom; +import io.springlets.data.domain.GlobalSearch; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +privileged aspect BookRepositoryCustom_Roo_Jpa_Repository_Custom { + + /** + * TODO Auto-generated method documentation + * + * @param globalSearch + * @param pageable + * @return Page + */ + public abstract Page BookRepositoryCustom.findAll(GlobalSearch globalSearch, Pageable pageable); + +} diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java b/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java new file mode 100644 index 0000000000..e59ff8ab0e --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java @@ -0,0 +1,22 @@ +package com.baeldung.repository; + +import io.springlets.data.jpa.repository.support.QueryDslRepositorySupportExt; +import org.springframework.roo.addon.layers.repository.jpa.annotations.RooJpaRepositoryCustomImpl; +import com.baeldung.domain.Book; + +/** + * = BookRepositoryImpl + * + * TODO Auto-generated class documentation + * + */ +@RooJpaRepositoryCustomImpl(repository = BookRepositoryCustom.class) +public class BookRepositoryImpl extends QueryDslRepositorySupportExt { + + /** + * TODO Auto-generated constructor documentation + */ + BookRepositoryImpl() { + super(Book.class); + } +} \ No newline at end of file diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj b/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj new file mode 100644 index 0000000000..9e3db3e1f4 --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj @@ -0,0 +1,69 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.repository; + +import com.baeldung.domain.Book; +import com.baeldung.domain.QBook; +import com.baeldung.repository.BookRepositoryCustom; +import com.baeldung.repository.BookRepositoryImpl; +import com.querydsl.core.types.Path; +import com.querydsl.jpa.JPQLQuery; +import io.springlets.data.domain.GlobalSearch; +import io.springlets.data.jpa.repository.support.QueryDslRepositorySupportExt.AttributeMappingBuilder; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.transaction.annotation.Transactional; + +privileged aspect BookRepositoryImpl_Roo_Jpa_Repository_Impl { + + declare parents: BookRepositoryImpl implements BookRepositoryCustom; + + declare @type: BookRepositoryImpl: @Transactional(readOnly = true); + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BookRepositoryImpl.TITLE = "title"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BookRepositoryImpl.AUTHOR = "author"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BookRepositoryImpl.ISBN = "isbn"; + + /** + * TODO Auto-generated method documentation + * + * @param globalSearch + * @param pageable + * @return Page + */ + public Page BookRepositoryImpl.findAll(GlobalSearch globalSearch, Pageable pageable) { + + QBook book = QBook.book; + + JPQLQuery query = from(book); + + Path[] paths = new Path[] {book.title,book.author,book.isbn}; + applyGlobalSearch(globalSearch, query, paths); + + AttributeMappingBuilder mapping = buildMapper() + .map(TITLE, book.title) + .map(AUTHOR, book.author) + .map(ISBN, book.isbn); + + applyPagination(pageable, query, mapping); + applyOrderById(query); + + return loadPage(query, pageable, book); + } + +} diff --git a/roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj b/roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj new file mode 100644 index 0000000000..2f57062054 --- /dev/null +++ b/roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj @@ -0,0 +1,20 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.repository; + +import com.baeldung.domain.Book; +import com.baeldung.repository.BookRepository; +import com.baeldung.repository.BookRepositoryCustom; +import io.springlets.data.jpa.repository.DetachableJpaRepository; +import org.springframework.transaction.annotation.Transactional; + +privileged aspect BookRepository_Roo_Jpa_Repository { + + declare parents: BookRepository extends DetachableJpaRepository; + + declare parents: BookRepository extends BookRepositoryCustom; + + declare @type: BookRepository: @Transactional(readOnly = true); + +} diff --git a/roo/src/main/java/com/baeldung/service/api/BookService.java b/roo/src/main/java/com/baeldung/service/api/BookService.java new file mode 100644 index 0000000000..212ee1cdfc --- /dev/null +++ b/roo/src/main/java/com/baeldung/service/api/BookService.java @@ -0,0 +1,12 @@ +package com.baeldung.service.api; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.layers.service.annotations.RooService; + +/** + * = BookService + TODO Auto-generated class documentation + * + */ +@RooService(entity = Book.class) +public interface BookService { +} diff --git a/roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj b/roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj new file mode 100644 index 0000000000..d5698ffb37 --- /dev/null +++ b/roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj @@ -0,0 +1,95 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.service.api; + +import com.baeldung.domain.Book; +import com.baeldung.service.api.BookService; +import io.springlets.data.domain.GlobalSearch; +import io.springlets.format.EntityResolver; +import java.util.List; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +privileged aspect BookService_Roo_Service { + + declare parents: BookService extends EntityResolver; + + /** + * TODO Auto-generated method documentation + * + * @param id + * @return Book + */ + public abstract Book BookService.findOne(Long id); + + /** + * TODO Auto-generated method documentation + * + * @param book + */ + public abstract void BookService.delete(Book book); + + /** + * TODO Auto-generated method documentation + * + * @param entities + * @return List + */ + public abstract List BookService.save(Iterable entities); + + /** + * TODO Auto-generated method documentation + * + * @param ids + */ + public abstract void BookService.delete(Iterable ids); + + /** + * TODO Auto-generated method documentation + * + * @param entity + * @return Book + */ + public abstract Book BookService.save(Book entity); + + /** + * TODO Auto-generated method documentation + * + * @param id + * @return Book + */ + public abstract Book BookService.findOneForUpdate(Long id); + + /** + * TODO Auto-generated method documentation + * + * @param ids + * @return List + */ + public abstract List BookService.findAll(Iterable ids); + + /** + * TODO Auto-generated method documentation + * + * @return List + */ + public abstract List BookService.findAll(); + + /** + * TODO Auto-generated method documentation + * + * @return Long + */ + public abstract long BookService.count(); + + /** + * TODO Auto-generated method documentation + * + * @param globalSearch + * @param pageable + * @return Page + */ + public abstract Page BookService.findAll(GlobalSearch globalSearch, Pageable pageable); + +} diff --git a/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java b/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java new file mode 100644 index 0000000000..1b44547629 --- /dev/null +++ b/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java @@ -0,0 +1,12 @@ +package com.baeldung.service.impl; +import com.baeldung.service.api.BookService; +import org.springframework.roo.addon.layers.service.annotations.RooServiceImpl; + +/** + * = BookServiceImpl + TODO Auto-generated class documentation + * + */ +@RooServiceImpl(service = BookService.class) +public class BookServiceImpl implements BookService { +} diff --git a/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj b/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj new file mode 100644 index 0000000000..8f9fb846aa --- /dev/null +++ b/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj @@ -0,0 +1,177 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.service.impl; + +import com.baeldung.domain.Book; +import com.baeldung.repository.BookRepository; +import com.baeldung.service.impl.BookServiceImpl; +import io.springlets.data.domain.GlobalSearch; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +privileged aspect BookServiceImpl_Roo_Service_Impl { + + declare @type: BookServiceImpl: @Service; + + declare @type: BookServiceImpl: @Transactional(readOnly = true); + + /** + * TODO Auto-generated attribute documentation + * + */ + private BookRepository BookServiceImpl.bookRepository; + + /** + * TODO Auto-generated constructor documentation + * + * @param bookRepository + */ + @Autowired + public BookServiceImpl.new(BookRepository bookRepository) { + setBookRepository(bookRepository); + } + + /** + * TODO Auto-generated method documentation + * + * @return BookRepository + */ + public BookRepository BookServiceImpl.getBookRepository() { + return bookRepository; + } + + /** + * TODO Auto-generated method documentation + * + * @param bookRepository + */ + public void BookServiceImpl.setBookRepository(BookRepository bookRepository) { + this.bookRepository = bookRepository; + } + + /** + * TODO Auto-generated method documentation + * + * @param book + */ + @Transactional + public void BookServiceImpl.delete(Book book) { + getBookRepository().delete(book); + } + + /** + * TODO Auto-generated method documentation + * + * @param entities + * @return List + */ + @Transactional + public List BookServiceImpl.save(Iterable entities) { + return getBookRepository().save(entities); + } + + /** + * TODO Auto-generated method documentation + * + * @param ids + */ + @Transactional + public void BookServiceImpl.delete(Iterable ids) { + List toDelete = getBookRepository().findAll(ids); + getBookRepository().deleteInBatch(toDelete); + } + + /** + * TODO Auto-generated method documentation + * + * @param entity + * @return Book + */ + @Transactional + public Book BookServiceImpl.save(Book entity) { + return getBookRepository().save(entity); + } + + /** + * TODO Auto-generated method documentation + * + * @param id + * @return Book + */ + public Book BookServiceImpl.findOne(Long id) { + return getBookRepository().findOne(id); + } + + /** + * TODO Auto-generated method documentation + * + * @param id + * @return Book + */ + public Book BookServiceImpl.findOneForUpdate(Long id) { + return getBookRepository().findOneDetached(id); + } + + /** + * TODO Auto-generated method documentation + * + * @param ids + * @return List + */ + public List BookServiceImpl.findAll(Iterable ids) { + return getBookRepository().findAll(ids); + } + + /** + * TODO Auto-generated method documentation + * + * @return List + */ + public List BookServiceImpl.findAll() { + return getBookRepository().findAll(); + } + + /** + * TODO Auto-generated method documentation + * + * @return Long + */ + public long BookServiceImpl.count() { + return getBookRepository().count(); + } + + /** + * TODO Auto-generated method documentation + * + * @param globalSearch + * @param pageable + * @return Page + */ + public Page BookServiceImpl.findAll(GlobalSearch globalSearch, Pageable pageable) { + return getBookRepository().findAll(globalSearch, pageable); + } + + /** + * TODO Auto-generated method documentation + * + * @return Class + */ + public Class BookServiceImpl.getEntityType() { + return Book.class; + } + + /** + * TODO Auto-generated method documentation + * + * @return Class + */ + public Class BookServiceImpl.getIdType() { + return Long.class; + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BookDeserializer.java b/roo/src/main/java/com/baeldung/web/BookDeserializer.java new file mode 100644 index 0000000000..38c447e580 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BookDeserializer.java @@ -0,0 +1,41 @@ +package com.baeldung.web; +import com.baeldung.domain.Book; +import com.baeldung.service.api.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.jackson.JsonObjectDeserializer; +import org.springframework.context.annotation.Lazy; +import org.springframework.core.convert.ConversionService; +import org.springframework.roo.addon.web.mvc.controller.annotations.config.RooDeserializer; + +/** + * = BookDeserializer + TODO Auto-generated class documentation + * + */ +@RooDeserializer(entity = Book.class) +public class BookDeserializer extends JsonObjectDeserializer { + + /** + * TODO Auto-generated attribute documentation + * + */ + private BookService bookService; + + /** + * TODO Auto-generated attribute documentation + * + */ + private ConversionService conversionService; + + /** + * TODO Auto-generated constructor documentation + * + * @param bookService + * @param conversionService + */ + @Autowired + public BookDeserializer(@Lazy BookService bookService, ConversionService conversionService) { + this.bookService = bookService; + this.conversionService = conversionService; + } +} diff --git a/roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj b/roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj new file mode 100644 index 0000000000..5ca42cfb5e --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj @@ -0,0 +1,78 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.domain.Book; +import com.baeldung.service.api.BookService; +import com.baeldung.web.BookDeserializer; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import io.springlets.web.NotFoundException; +import java.io.IOException; +import org.springframework.boot.jackson.JsonComponent; +import org.springframework.core.convert.ConversionService; + +privileged aspect BookDeserializer_Roo_EntityDeserializer { + + declare @type: BookDeserializer: @JsonComponent; + + /** + * TODO Auto-generated method documentation + * + * @return BookService + */ + public BookService BookDeserializer.getBookService() { + return bookService; + } + + /** + * TODO Auto-generated method documentation + * + * @param bookService + */ + public void BookDeserializer.setBookService(BookService bookService) { + this.bookService = bookService; + } + + /** + * TODO Auto-generated method documentation + * + * @return ConversionService + */ + public ConversionService BookDeserializer.getConversionService() { + return conversionService; + } + + /** + * TODO Auto-generated method documentation + * + * @param conversionService + */ + public void BookDeserializer.setConversionService(ConversionService conversionService) { + this.conversionService = conversionService; + } + + /** + * TODO Auto-generated method documentation + * + * @param jsonParser + * @param context + * @param codec + * @param tree + * @return Book + * @throws IOException + */ + public Book BookDeserializer.deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec, JsonNode tree) throws IOException { + String idText = tree.asText(); + Long id = conversionService.convert(idText, Long.class); + Book book = bookService.findOne(id); + if (book == null) { + throw new NotFoundException("Book not found"); + } + return book; + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BookJsonMixin.java b/roo/src/main/java/com/baeldung/web/BookJsonMixin.java new file mode 100644 index 0000000000..1cde8f0e86 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BookJsonMixin.java @@ -0,0 +1,12 @@ +package com.baeldung.web; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.web.mvc.controller.annotations.config.RooJsonMixin; + +/** + * = BookJsonMixin + TODO Auto-generated class documentation + * + */ +@RooJsonMixin(entity = Book.class) +public abstract class BookJsonMixin { +} diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java new file mode 100644 index 0000000000..9b0179e234 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java @@ -0,0 +1,15 @@ +package com.baeldung.web; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.web.mvc.controller.annotations.ControllerType; +import org.springframework.roo.addon.web.mvc.controller.annotations.RooController; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooThymeleaf; + +/** + * = BooksCollectionThymeleafController + TODO Auto-generated class documentation + * + */ +@RooController(entity = Book.class, type = ControllerType.COLLECTION) +@RooThymeleaf +public class BooksCollectionThymeleafController { +} diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj new file mode 100644 index 0000000000..a87b76a745 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj @@ -0,0 +1,35 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.service.api.BookService; +import com.baeldung.web.BooksCollectionThymeleafController; + +privileged aspect BooksCollectionThymeleafController_Roo_Controller { + + /** + * TODO Auto-generated attribute documentation + * + */ + private BookService BooksCollectionThymeleafController.bookService; + + /** + * TODO Auto-generated method documentation + * + * @return BookService + */ + public BookService BooksCollectionThymeleafController.getBookService() { + return bookService; + } + + /** + * TODO Auto-generated method documentation + * + * @param bookService + */ + public void BooksCollectionThymeleafController.setBookService(BookService bookService) { + this.bookService = bookService; + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj new file mode 100644 index 0000000000..b0831730be --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj @@ -0,0 +1,470 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import ar.com.fdvs.dj.core.DynamicJasperHelper; +import ar.com.fdvs.dj.core.layout.ClassicLayoutManager; +import ar.com.fdvs.dj.domain.builders.ColumnBuilderException; +import ar.com.fdvs.dj.domain.builders.FastReportBuilder; +import com.baeldung.domain.Book; +import com.baeldung.service.api.BookService; +import com.baeldung.web.BooksCollectionThymeleafController; +import com.baeldung.web.BooksItemThymeleafController; +import com.baeldung.web.BooksItemThymeleafLinkFactory; +import com.baeldung.web.reports.ExportingErrorException; +import com.baeldung.web.reports.JasperReportsCsvExporter; +import com.baeldung.web.reports.JasperReportsExporter; +import com.baeldung.web.reports.JasperReportsPdfExporter; +import com.baeldung.web.reports.JasperReportsXlsExporter; +import io.springlets.data.domain.GlobalSearch; +import io.springlets.data.web.datatables.ConvertedDatatablesData; +import io.springlets.data.web.datatables.Datatables; +import io.springlets.data.web.datatables.DatatablesColumns; +import io.springlets.data.web.datatables.DatatablesPageable; +import io.springlets.data.web.select2.Select2DataSupport; +import io.springlets.data.web.select2.Select2DataWithConversion; +import io.springlets.web.mvc.util.ControllerMethodLinkBuilderFactory; +import io.springlets.web.mvc.util.MethodLinkBuilderFactory; +import java.io.IOException; +import java.util.Collection; +import java.util.Locale; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import net.sf.jasperreports.engine.JRDataSource; +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.core.convert.ConversionService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.util.UriComponents; + +privileged aspect BooksCollectionThymeleafController_Roo_Thymeleaf { + + declare @type: BooksCollectionThymeleafController: @Controller; + + declare @type: BooksCollectionThymeleafController: @RequestMapping(value = "/books", name = "BooksCollectionThymeleafController", produces = MediaType.TEXT_HTML_VALUE); + + /** + * TODO Auto-generated attribute documentation + * + */ + private MessageSource BooksCollectionThymeleafController.messageSource; + + /** + * TODO Auto-generated attribute documentation + * + */ + private MethodLinkBuilderFactory BooksCollectionThymeleafController.itemLink; + + /** + * TODO Auto-generated attribute documentation + * + */ + private ConversionService BooksCollectionThymeleafController.conversionService; + + /** + * TODO Auto-generated constructor documentation + * + * @param bookService + * @param conversionService + * @param messageSource + * @param linkBuilder + */ + @Autowired + public BooksCollectionThymeleafController.new(BookService bookService, ConversionService conversionService, MessageSource messageSource, ControllerMethodLinkBuilderFactory linkBuilder) { + setBookService(bookService); + setConversionService(conversionService); + setMessageSource(messageSource); + setItemLink(linkBuilder.of(BooksItemThymeleafController.class)); + } + + /** + * TODO Auto-generated method documentation + * + * @return MessageSource + */ + public MessageSource BooksCollectionThymeleafController.getMessageSource() { + return messageSource; + } + + /** + * TODO Auto-generated method documentation + * + * @param messageSource + */ + public void BooksCollectionThymeleafController.setMessageSource(MessageSource messageSource) { + this.messageSource = messageSource; + } + + /** + * TODO Auto-generated method documentation + * + * @return MethodLinkBuilderFactory + */ + public MethodLinkBuilderFactory BooksCollectionThymeleafController.getItemLink() { + return itemLink; + } + + /** + * TODO Auto-generated method documentation + * + * @param itemLink + */ + public void BooksCollectionThymeleafController.setItemLink(MethodLinkBuilderFactory itemLink) { + this.itemLink = itemLink; + } + + /** + * TODO Auto-generated method documentation + * + * @return ConversionService + */ + public ConversionService BooksCollectionThymeleafController.getConversionService() { + return conversionService; + } + + /** + * TODO Auto-generated method documentation + * + * @param conversionService + */ + public void BooksCollectionThymeleafController.setConversionService(ConversionService conversionService) { + this.conversionService = conversionService; + } + + /** + * TODO Auto-generated method documentation + * + * @param model + * @return ModelAndView + */ + @GetMapping(name = "list") + public ModelAndView BooksCollectionThymeleafController.list(Model model) { + return new ModelAndView("/books/list"); + } + + /** + * TODO Auto-generated method documentation + * + * @param datatablesColumns + * @param search + * @param pageable + * @param draw + * @return ResponseEntity + */ + @GetMapping(produces = Datatables.MEDIA_TYPE, name = "datatables", value = "/dt") + @ResponseBody + public ResponseEntity> BooksCollectionThymeleafController.datatables(DatatablesColumns datatablesColumns, GlobalSearch search, DatatablesPageable pageable, @RequestParam("draw") Integer draw) { + Page books = getBookService().findAll(search, pageable); + long totalBooksCount = books.getTotalElements(); + if (search != null && StringUtils.isNotBlank(search.getText())) { + totalBooksCount = getBookService().count(); + } + ConvertedDatatablesData datatablesData = new ConvertedDatatablesData(books, totalBooksCount, draw, getConversionService(), datatablesColumns); + return ResponseEntity.ok(datatablesData); + } + + /** + * TODO Auto-generated method documentation + * + * @param search + * @param pageable + * @param locale + * @return ResponseEntity + */ + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE, name = "select2", value = "/s2") + @ResponseBody + public ResponseEntity> BooksCollectionThymeleafController.select2(GlobalSearch search, Pageable pageable, Locale locale) { + Page books = getBookService().findAll(search, pageable); + String idExpression = "#{id}"; + Select2DataSupport select2Data = new Select2DataWithConversion(books, idExpression, getConversionService()); + return ResponseEntity.ok(select2Data); + } + + /** + * TODO Auto-generated method documentation + * + * @param dataBinder + */ + @InitBinder("book") + public void BooksCollectionThymeleafController.initBookBinder(WebDataBinder dataBinder) { + dataBinder.setDisallowedFields("id"); + } + + /** + * TODO Auto-generated method documentation + * + * @param model + */ + public void BooksCollectionThymeleafController.populateFormats(Model model) { + model.addAttribute("application_locale", LocaleContextHolder.getLocale().getLanguage()); + } + + /** + * TODO Auto-generated method documentation + * + * @param model + */ + public void BooksCollectionThymeleafController.populateForm(Model model) { + populateFormats(model); + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @param result + * @param model + * @return ModelAndView + */ + @PostMapping(name = "create") + public ModelAndView BooksCollectionThymeleafController.create(@Valid @ModelAttribute Book book, BindingResult result, Model model) { + if (result.hasErrors()) { + populateForm(model); + + return new ModelAndView("/books/create"); + } + Book newBook = getBookService().save(book); + UriComponents showURI = getItemLink().to(BooksItemThymeleafLinkFactory.SHOW).with("book", newBook.getId()).toUri(); + return new ModelAndView("redirect:" + showURI.toUriString()); + } + + /** + * TODO Auto-generated method documentation + * + * @param model + * @return ModelAndView + */ + @GetMapping(value = "/create-form", name = "createForm") + public ModelAndView BooksCollectionThymeleafController.createForm(Model model) { + populateForm(model); + + model.addAttribute("book", new Book()); + return new ModelAndView("books/create"); + } + + /** + * TODO Auto-generated method documentation + * + * @param ids + * @return ResponseEntity + */ + @DeleteMapping(value = "/batch/{ids}", name = "deleteBatch") + @ResponseBody + public ResponseEntity BooksCollectionThymeleafController.deleteBatch(@PathVariable("ids") Collection ids) { + + getBookService().delete(ids); + + return ResponseEntity.ok().build(); + } + + /** + * Method that obtains the filtered and ordered records using the Datatables information and + * export them to a new report file. (It ignores the current pagination). + * + * To generate the report file it uses the `DynamicJasper` library + * (http://dynamicjasper.com). This library allows developers to generate reports dynamically + * without use an specific template to each entity. + * + * To customize the appearance of ALL generated reports, you could customize the + * "export_default.jrxml" template located in "src/main/resources/templates/reports/". However, + * if you want to customize the appearance of this specific report, you could create a new + * ".jrxml" file and provide it to the library replacing the `builder.setTemplateFile();` + * operation used in this implementation. + * + * @param search GlobalSearch that contains the filter provided by the Datatables component. + * @param pageable Pageable that contains the Sort info provided by the Datatabes component. + * @param datatablesColumns Columns displayed in the Datatables component. + * @param response The HttpServletResponse. + * @param exporter An specific JasperReportsExporter to be used during export process. + * @param fileName The final filename to use. + * @param locale The current Locale in the view context. + */ + public void BooksCollectionThymeleafController.export(GlobalSearch search, @PageableDefault(size = 2147483647) Pageable pageable, String[] datatablesColumns, HttpServletResponse response, JasperReportsExporter exporter, String fileName, Locale locale) { + // Obtain the filtered and ordered elements + Page books = getBookService().findAll(search, pageable); + + // Prevent generation of reports with empty data + if (books == null || books.getContent().isEmpty()) { + return; + } + + // Creates a new ReportBuilder using DynamicJasper library + FastReportBuilder builder = new FastReportBuilder(); + + // IMPORTANT: By default, this application uses "export_default.jrxml" + // to generate all reports. If you want to customize this specific report, + // create a new ".jrxml" template and customize it. (Take in account the + // DynamicJasper restrictions: + // http://dynamicjasper.com/2010/10/06/how-to-use-custom-jrxml-templates/) + builder.setTemplateFile("templates/reports/export_default.jrxml"); + + // The generated report will display the same columns as the Datatables component. + // However, this is not mandatory. You could edit this code if you want to ignore + // the provided datatablesColumns + if (datatablesColumns != null) { + for (String column : datatablesColumns) { + // Delegates in addColumnToReportBuilder to include each datatables column + // to the report builder + addColumnToReportBuilder(column, builder, locale, fileName); + } + } + + // This property resizes the columns to use full width page. + // Set false value if you want to use the specific width of each column. + builder.setUseFullPageWidth(true); + + // Creates a new Jasper Reports Datasource using the obtained elements + JRDataSource ds = new JRBeanCollectionDataSource(books.getContent()); + + // Generates the JasperReport + JasperPrint jp; + try { + jp = DynamicJasperHelper.generateJasperPrint(builder.build(), new ClassicLayoutManager(), ds); + } + catch (JRException e) { + String errorMessage = getMessageSource().getMessage("error_exportingErrorException", + new Object[] {StringUtils.substringAfterLast(fileName, ".").toUpperCase()}, + String.format("Error while exporting data to StringUtils file", StringUtils. + substringAfterLast(fileName, ".").toUpperCase()), locale); + throw new ExportingErrorException(errorMessage); + } + + // Converts the JaspertReport element to a ByteArrayOutputStream and + // write it into the response stream using the provided JasperReportExporter + try { + exporter.export(jp, fileName, response); + } + catch (JRException e) { + String errorMessage = getMessageSource().getMessage("error_exportingErrorException", + new Object[] {StringUtils.substringAfterLast(fileName, ".").toUpperCase()}, + String.format("Error while exporting data to StringUtils file", StringUtils. + substringAfterLast(fileName, ".").toUpperCase()), locale); + throw new ExportingErrorException(errorMessage); + } + catch (IOException e) { + String errorMessage = getMessageSource().getMessage("error_exportingErrorException", + new Object[] {StringUtils.substringAfterLast(fileName, ".").toUpperCase()}, + String.format("Error while exporting data to StringUtils file", StringUtils. + substringAfterLast(fileName, ".").toUpperCase()), locale); + throw new ExportingErrorException(errorMessage); + } + } + + /** + * It delegates in the `export` method providing the necessary information + * to generate a CSV report. + * + * @param search The GlobalSearch that contains the filter provided by the Datatables component + * @param pageable The Pageable that contains the Sort info provided by the Datatabes component + * @param datatablesColumns The Columns displayed in the Datatables component + * @param response The HttpServletResponse + * @return ResponseEntity + */ + @GetMapping(name = "exportCsv", value = "/export/csv") + @ResponseBody + public ResponseEntity BooksCollectionThymeleafController.exportCsv(GlobalSearch search, @PageableDefault(size = 2147483647) Pageable pageable, @RequestParam("datatablesColumns") String[] datatablesColumns, HttpServletResponse response, Locale locale) { + export(search, pageable, datatablesColumns, response, new JasperReportsCsvExporter(), "books_report.csv", locale); + return ResponseEntity.ok().build(); + } + + /** + * It delegates in the `export` method providing the necessary information + * to generate a PDF report. + * + * @param search The GlobalSearch that contains the filter provided by the Datatables component + * @param pageable The Pageable that contains the Sort info provided by the Datatabes component + * @param datatablesColumns The Columns displayed in the Datatables component + * @param response The HttpServletResponse + * @return ResponseEntity + */ + @GetMapping(name = "exportPdf", value = "/export/pdf") + @ResponseBody + public ResponseEntity BooksCollectionThymeleafController.exportPdf(GlobalSearch search, @PageableDefault(size = 2147483647) Pageable pageable, @RequestParam("datatablesColumns") String[] datatablesColumns, HttpServletResponse response, Locale locale) { + export(search, pageable, datatablesColumns, response, new JasperReportsPdfExporter(), "books_report.pdf", locale); + return ResponseEntity.ok().build(); + } + + /** + * It delegates in the `export` method providing the necessary information + * to generate a XLS report. + * + * @param search The GlobalSearch that contains the filter provided by the Datatables component + * @param pageable The Pageable that contains the Sort info provided by the Datatabes component + * @param datatablesColumns The Columns displayed in the Datatables component + * @param response The HttpServletResponse + * @return ResponseEntity + */ + @GetMapping(name = "exportXls", value = "/export/xls") + @ResponseBody + public ResponseEntity BooksCollectionThymeleafController.exportXls(GlobalSearch search, @PageableDefault(size = 2147483647) Pageable pageable, @RequestParam("datatablesColumns") String[] datatablesColumns, HttpServletResponse response, Locale locale) { + export(search, pageable, datatablesColumns, response, new JasperReportsXlsExporter(), "books_report.xls", locale); + return ResponseEntity.ok().build(); + } + + /** + * This method contains all the entity fields that are able to be displayed in a + * report. The developer could add a new column to the report builder providing the + * field name and the builder where the new field will be added as column. + * + * @param columnName the field name to show as column + * @param builder The builder where the new field will be added as column. + */ + public void BooksCollectionThymeleafController.addColumnToReportBuilder(String columnName, FastReportBuilder builder, Locale locale, String fileName) { + try { + if (columnName.equals("id")) { + builder.addColumn(getMessageSource().getMessage("label_book_id", null, "Id", locale), "id", Long.class.getName(), 50); + } + else if (columnName.equals("version")) { + builder.addColumn(getMessageSource().getMessage("label_book_version", null, "Version", locale), "version", Integer.class.getName(), 100); + } + else if (columnName.equals("title")) { + builder.addColumn(getMessageSource().getMessage("label_book_title", null, "Title", locale), "title", String.class.getName(), 100); + } + else if (columnName.equals("author")) { + builder.addColumn(getMessageSource().getMessage("label_book_author", null, "Author", locale), "author", String.class.getName(), 100); + } + else if (columnName.equals("isbn")) { + builder.addColumn(getMessageSource().getMessage("label_book_isbn", null, "Isbn", locale), "isbn", String.class.getName(), 100); + } + } + catch (ColumnBuilderException e) { + String errorMessage = getMessageSource().getMessage("error_exportingErrorException", + new Object[] {StringUtils.substringAfterLast(fileName, ".").toUpperCase()}, + String.format("Error while exporting data to StringUtils file", StringUtils. + substringAfterLast(fileName, ".").toUpperCase()), locale); + throw new ExportingErrorException(errorMessage); + } + catch (ClassNotFoundException e) { + String errorMessage = getMessageSource().getMessage("error_exportingErrorException", + new Object[] {StringUtils.substringAfterLast(fileName, ".").toUpperCase()}, + String.format("Error while exporting data to StringUtils file", StringUtils. + substringAfterLast(fileName, ".").toUpperCase()), locale); + throw new ExportingErrorException(errorMessage); + } + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java new file mode 100644 index 0000000000..413a5e64a0 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java @@ -0,0 +1,11 @@ +package com.baeldung.web; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooLinkFactory; + +/** + * = BooksCollectionThymeleafLinkFactory + TODO Auto-generated class documentation + * + */ +@RooLinkFactory(controller = BooksCollectionThymeleafController.class) +public class BooksCollectionThymeleafLinkFactory { +} diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj new file mode 100644 index 0000000000..e6df3efcb7 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj @@ -0,0 +1,122 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.web.BooksCollectionThymeleafController; +import com.baeldung.web.BooksCollectionThymeleafLinkFactory; +import io.springlets.web.mvc.util.MethodLinkFactory; +import io.springlets.web.mvc.util.SpringletsMvcUriComponentsBuilder; +import java.util.Map; +import org.springframework.stereotype.Component; +import org.springframework.web.util.UriComponents; + +privileged aspect BooksCollectionThymeleafLinkFactory_Roo_LinkFactory { + + declare parents: BooksCollectionThymeleafLinkFactory implements MethodLinkFactory; + + declare @type: BooksCollectionThymeleafLinkFactory: @Component; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.LIST = "list"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.DATATABLES = "datatables"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.SELECT2 = "select2"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.CREATE = "create"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.CREATEFORM = "createForm"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.DELETEBATCH = "deleteBatch"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.EXPORTCSV = "exportCsv"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.EXPORTPDF = "exportPdf"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksCollectionThymeleafLinkFactory.EXPORTXLS = "exportXls"; + + /** + * TODO Auto-generated method documentation + * + * @return Class + */ + public Class BooksCollectionThymeleafLinkFactory.getControllerClass() { + return BooksCollectionThymeleafController.class; + } + + /** + * TODO Auto-generated method documentation + * + * @param methodName + * @param parameters + * @param pathVariables + * @return UriComponents + */ + public UriComponents BooksCollectionThymeleafLinkFactory.toUri(String methodName, Object[] parameters, Map pathVariables) { + if (methodName.equals(LIST)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).list(null)).buildAndExpand(pathVariables); + } + if (methodName.equals(DATATABLES)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).datatables(null, null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(SELECT2)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).select2(null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(CREATE)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).create(null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(CREATEFORM)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).createForm(null)).buildAndExpand(pathVariables); + } + if (methodName.equals(DELETEBATCH)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).deleteBatch(null)).buildAndExpand(pathVariables); + } + if (methodName.equals(EXPORTCSV)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).exportCsv(null, null, null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(EXPORTPDF)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).exportPdf(null, null, null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(EXPORTXLS)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).exportXls(null, null, null, null, null)).buildAndExpand(pathVariables); + } + throw new IllegalArgumentException("Invalid method name: " + methodName); + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java new file mode 100644 index 0000000000..f16cb7be2d --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java @@ -0,0 +1,15 @@ +package com.baeldung.web; +import com.baeldung.domain.Book; +import org.springframework.roo.addon.web.mvc.controller.annotations.ControllerType; +import org.springframework.roo.addon.web.mvc.controller.annotations.RooController; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooThymeleaf; + +/** + * = BooksItemThymeleafController + TODO Auto-generated class documentation + * + */ +@RooController(entity = Book.class, type = ControllerType.ITEM) +@RooThymeleaf +public class BooksItemThymeleafController { +} diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj new file mode 100644 index 0000000000..c0a4ed46df --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj @@ -0,0 +1,35 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.service.api.BookService; +import com.baeldung.web.BooksItemThymeleafController; + +privileged aspect BooksItemThymeleafController_Roo_Controller { + + /** + * TODO Auto-generated attribute documentation + * + */ + private BookService BooksItemThymeleafController.bookService; + + /** + * TODO Auto-generated method documentation + * + * @return BookService + */ + public BookService BooksItemThymeleafController.getBookService() { + return bookService; + } + + /** + * TODO Auto-generated method documentation + * + * @param bookService + */ + public void BooksItemThymeleafController.setBookService(BookService bookService) { + this.bookService = bookService; + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj new file mode 100644 index 0000000000..502c30a81e --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj @@ -0,0 +1,251 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.domain.Book; +import com.baeldung.service.api.BookService; +import com.baeldung.web.BooksItemThymeleafController; +import com.baeldung.web.BooksItemThymeleafLinkFactory; +import io.springlets.web.NotFoundException; +import io.springlets.web.mvc.util.ControllerMethodLinkBuilderFactory; +import io.springlets.web.mvc.util.MethodLinkBuilderFactory; +import java.util.Locale; +import javax.validation.Valid; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.util.UriComponents; + +privileged aspect BooksItemThymeleafController_Roo_Thymeleaf { + + declare @type: BooksItemThymeleafController: @Controller; + + declare @type: BooksItemThymeleafController: @RequestMapping(value = "/books/{book}", name = "BooksItemThymeleafController", produces = MediaType.TEXT_HTML_VALUE); + + /** + * TODO Auto-generated attribute documentation + * + */ + private MessageSource BooksItemThymeleafController.messageSource; + + /** + * TODO Auto-generated attribute documentation + * + */ + private MethodLinkBuilderFactory BooksItemThymeleafController.itemLink; + + /** + * TODO Auto-generated constructor documentation + * + * @param bookService + * @param messageSource + * @param linkBuilder + */ + @Autowired + public BooksItemThymeleafController.new(BookService bookService, MessageSource messageSource, ControllerMethodLinkBuilderFactory linkBuilder) { + setBookService(bookService); + setMessageSource(messageSource); + setItemLink(linkBuilder.of(BooksItemThymeleafController.class)); + } + + /** + * TODO Auto-generated method documentation + * + * @return MessageSource + */ + public MessageSource BooksItemThymeleafController.getMessageSource() { + return messageSource; + } + + /** + * TODO Auto-generated method documentation + * + * @param messageSource + */ + public void BooksItemThymeleafController.setMessageSource(MessageSource messageSource) { + this.messageSource = messageSource; + } + + /** + * TODO Auto-generated method documentation + * + * @return MethodLinkBuilderFactory + */ + public MethodLinkBuilderFactory BooksItemThymeleafController.getItemLink() { + return itemLink; + } + + /** + * TODO Auto-generated method documentation + * + * @param itemLink + */ + public void BooksItemThymeleafController.setItemLink(MethodLinkBuilderFactory itemLink) { + this.itemLink = itemLink; + } + + /** + * TODO Auto-generated method documentation + * + * @param id + * @param locale + * @param method + * @return Book + */ + @ModelAttribute + public Book BooksItemThymeleafController.getBook(@PathVariable("book") Long id, Locale locale, HttpMethod method) { + Book book = null; + if (HttpMethod.PUT.equals(method)) { + book = bookService.findOneForUpdate(id); + } else { + book = bookService.findOne(id); + } + + if (book == null) { + String message = messageSource.getMessage("error_NotFound", new Object[] {"Book", id}, "The record couldn't be found", locale); + throw new NotFoundException(message); + } + return book; + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @param model + * @return ModelAndView + */ + @GetMapping(name = "show") + public ModelAndView BooksItemThymeleafController.show(@ModelAttribute Book book, Model model) { + model.addAttribute("book", book); + return new ModelAndView("books/show"); + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @param model + * @return ModelAndView + */ + @GetMapping(value = "/inline", name = "showInline") + public ModelAndView BooksItemThymeleafController.showInline(@ModelAttribute Book book, Model model) { + model.addAttribute("book", book); + return new ModelAndView("books/showInline :: inline-content"); + } + + /** + * TODO Auto-generated method documentation + * + * @param dataBinder + */ + @InitBinder("book") + public void BooksItemThymeleafController.initBookBinder(WebDataBinder dataBinder) { + dataBinder.setDisallowedFields("id"); + } + + /** + * TODO Auto-generated method documentation + * + * @param model + */ + public void BooksItemThymeleafController.populateFormats(Model model) { + model.addAttribute("application_locale", LocaleContextHolder.getLocale().getLanguage()); + } + + /** + * TODO Auto-generated method documentation + * + * @param model + */ + public void BooksItemThymeleafController.populateForm(Model model) { + populateFormats(model); + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @param model + * @return ModelAndView + */ + @GetMapping(value = "/edit-form", name = "editForm") + public ModelAndView BooksItemThymeleafController.editForm(@ModelAttribute Book book, Model model) { + populateForm(model); + + model.addAttribute("book", book); + return new ModelAndView("books/edit"); + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @param version + * @param concurrencyControl + * @param result + * @param model + * @return ModelAndView + */ + @PutMapping(name = "update") + public ModelAndView BooksItemThymeleafController.update(@Valid @ModelAttribute Book book, @RequestParam("version") Integer version, @RequestParam(value = "concurrency", required = false, defaultValue = "") String concurrencyControl, BindingResult result, Model model) { + // Check if provided form contain errors + if (result.hasErrors()) { + populateForm(model); + + return new ModelAndView("books/edit"); + } + // Concurrency control + Book existingBook = getBookService().findOne(book.getId()); + if(book.getVersion() != existingBook.getVersion() && StringUtils.isEmpty(concurrencyControl)){ + populateForm(model); + model.addAttribute("book", book); + model.addAttribute("concurrency", true); + return new ModelAndView("books/edit"); + } else if(book.getVersion() != existingBook.getVersion() && "discard".equals(concurrencyControl)){ + populateForm(model); + model.addAttribute("book", existingBook); + model.addAttribute("concurrency", false); + return new ModelAndView("books/edit"); + } else if(book.getVersion() != existingBook.getVersion() && "apply".equals(concurrencyControl)){ + // Update the version field to be able to override the existing values + book.setVersion(existingBook.getVersion()); + } + Book savedBook = getBookService().save(book); + UriComponents showURI = getItemLink().to(BooksItemThymeleafLinkFactory.SHOW).with("book", savedBook.getId()).toUri(); + return new ModelAndView("redirect:" + showURI.toUriString()); + } + + /** + * TODO Auto-generated method documentation + * + * @param book + * @return ResponseEntity + */ + @ResponseBody + @DeleteMapping(name = "delete") + public ResponseEntity BooksItemThymeleafController.delete(@ModelAttribute Book book) { + getBookService().delete(book); + return ResponseEntity.ok().build(); + } + +} diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java new file mode 100644 index 0000000000..5b69306868 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java @@ -0,0 +1,11 @@ +package com.baeldung.web; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooLinkFactory; + +/** + * = BooksItemThymeleafLinkFactory + TODO Auto-generated class documentation + * + */ +@RooLinkFactory(controller = BooksItemThymeleafController.class) +public class BooksItemThymeleafLinkFactory { +} diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj new file mode 100644 index 0000000000..fd68866587 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj @@ -0,0 +1,86 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.web.BooksItemThymeleafController; +import com.baeldung.web.BooksItemThymeleafLinkFactory; +import io.springlets.web.mvc.util.MethodLinkFactory; +import io.springlets.web.mvc.util.SpringletsMvcUriComponentsBuilder; +import java.util.Map; +import org.springframework.stereotype.Component; +import org.springframework.web.util.UriComponents; + +privileged aspect BooksItemThymeleafLinkFactory_Roo_LinkFactory { + + declare parents: BooksItemThymeleafLinkFactory implements MethodLinkFactory; + + declare @type: BooksItemThymeleafLinkFactory: @Component; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksItemThymeleafLinkFactory.SHOW = "show"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksItemThymeleafLinkFactory.SHOWINLINE = "showInline"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksItemThymeleafLinkFactory.EDITFORM = "editForm"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksItemThymeleafLinkFactory.UPDATE = "update"; + + /** + * TODO Auto-generated attribute documentation + * + */ + public static final String BooksItemThymeleafLinkFactory.DELETE = "delete"; + + /** + * TODO Auto-generated method documentation + * + * @return Class + */ + public Class BooksItemThymeleafLinkFactory.getControllerClass() { + return BooksItemThymeleafController.class; + } + + /** + * TODO Auto-generated method documentation + * + * @param methodName + * @param parameters + * @param pathVariables + * @return UriComponents + */ + public UriComponents BooksItemThymeleafLinkFactory.toUri(String methodName, Object[] parameters, Map pathVariables) { + if (methodName.equals(SHOW)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).show(null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(SHOWINLINE)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).showInline(null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(EDITFORM)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).editForm(null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(UPDATE)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).update(null, null, null, null, null)).buildAndExpand(pathVariables); + } + if (methodName.equals(DELETE)) { + return SpringletsMvcUriComponentsBuilder.fromMethodCall(SpringletsMvcUriComponentsBuilder.on(getControllerClass()).delete(null)).buildAndExpand(pathVariables); + } + throw new IllegalArgumentException("Invalid method name: " + methodName); + } + +} diff --git a/roo/src/main/java/com/baeldung/web/MainController.java b/roo/src/main/java/com/baeldung/web/MainController.java new file mode 100644 index 0000000000..bf2038b4a1 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/MainController.java @@ -0,0 +1,11 @@ +package com.baeldung.web; +import org.springframework.roo.addon.web.mvc.thymeleaf.annotations.RooThymeleafMainController; + +/** + * = MainController + TODO Auto-generated class documentation + * + */ +@RooThymeleafMainController +public class MainController { +} diff --git a/roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj b/roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj new file mode 100644 index 0000000000..58f0466ed9 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj @@ -0,0 +1,59 @@ +// WARNING: DO NOT EDIT THIS FILE. THIS FILE IS MANAGED BY SPRING ROO. +// You may push code into the target .java compilation unit if you wish to edit any member(s). + +package com.baeldung.web; + +import com.baeldung.web.MainController; +import io.springlets.web.NotFoundException; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +privileged aspect MainController_Roo_Thymeleaf_MainController { + + declare @type: MainController: @Controller; + + /** + * TODO Auto-generated method documentation + * + * @param model + * @return String + */ + @GetMapping("/") + public String MainController.index(Model model) { + model.addAttribute("application_locale", LocaleContextHolder.getLocale().getLanguage()); + return "index"; + } + + /** + * TODO Auto-generated method documentation + * + * @param model + * @return String + */ + @GetMapping("/accessibility") + public String MainController.accessibility(Model model) { + model.addAttribute("application_locale", LocaleContextHolder.getLocale().getLanguage()); + return "accessibility"; + } + + /** + * TODO Auto-generated method documentation + * + * @param template + * @return String + */ + @RequestMapping(value = "/js/{template}.js", method = RequestMethod.GET) + public String MainController.javascriptTemplates(@PathVariable("template") String template) { + if (StringUtils.hasLength(template)) { + return template.concat(".js"); + } + throw new NotFoundException("File not found"); + } + +} diff --git a/roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java b/roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java new file mode 100644 index 0000000000..a8c2eca5cc --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java @@ -0,0 +1,19 @@ +package com.baeldung.web.reports; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) +public class ExportingErrorException extends RuntimeException { + + private static final long serialVersionUID = 4075788919321977605L; + + public ExportingErrorException() { + super("Error while trying to export data to file."); + } + + public ExportingErrorException(String message) { + super(message); + } + +} diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java b/roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java new file mode 100644 index 0000000000..5ea23e16cc --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java @@ -0,0 +1,71 @@ +package com.baeldung.web.reports; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JRExporterParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.export.JRCsvExporter; + +/** + * = JasperReportsCsvExporter + * + * A JasperReports exporter to export the report in CSV formats. This class + * implements the interface {@link JasperReportsExporter} + */ +public class JasperReportsCsvExporter implements JasperReportsExporter { + + /** + * Generates a ByteArrayOutputStream from the provided JasperReport using + * the {@link JRCsvExporter}. After that, the generated bytes array is + * written in the {@link HttpServletResponse} + * + * @param jp + * The generated JasperReport. + * @param fileName + * The fileName of the exported JasperReport + * @param response + * The HttpServletResponse where generated report has been + * written + * @throws JRException + * during JasperReport export. + * @throws IOException + * when writes the ByteArrayOutputStream into the + * HttpServletResponse + */ + @Override + public void export(JasperPrint jp, String fileName, HttpServletResponse response) throws JRException, IOException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + // Create a JRCsvExporter instance + JRCsvExporter exporter = new JRCsvExporter(); + + // Here we assign the parameters jp and baos to the exporter + exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp); + exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); + + // Retrieve the exported report in PDF format + exporter.exportReport(); + + // Specifies the response header + response.setHeader("Content-Disposition", "inline; filename=" + fileName); + + // Make sure to set the correct content type + // Each format has its own content type + response.setContentType("text/csv"); + response.setContentLength(baos.size()); + + // Retrieve the output stream + ServletOutputStream outputStream = response.getOutputStream(); + // Write to the output stream + baos.writeTo(outputStream); + // Flush the stream + outputStream.flush(); + + } +} \ No newline at end of file diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java b/roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java new file mode 100644 index 0000000000..32892df447 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java @@ -0,0 +1,41 @@ +package com.baeldung.web.reports; + +import java.io.IOException; + +import javax.servlet.http.HttpServletResponse; + +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.export.Exporter; + +/** + * = JasperReportsExporter + * + * This interface defines the operations for a JasperReport exporter. + * + * JasperReports library already provides an Exporter interface called + * {@link Exporter}. However, it doesn't provides an operation that writes the + * exported JasperReport into the {@link HttpServletResponse}. + */ +public interface JasperReportsExporter { + + /** + * This operation must be implemented by every JasperReport exporter to be + * able to write a generated report into a the {@link HttpServletResponse}}. + * + * @param jp + * The generated JasperReport. + * @param fileName + * The fileName of the exported JasperReport + * @param response + * The HttpServletResponse where generated report has been + * written + * @throws JRException + * during JasperReport export. + * @throws IOException + * when writes the ByteArrayOutputStream into the + * HttpServletResponse + */ + public void export(JasperPrint jp, String fileName, HttpServletResponse response) throws JRException, IOException; + +} \ No newline at end of file diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java b/roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java new file mode 100644 index 0000000000..ae1e2d8ee0 --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java @@ -0,0 +1,71 @@ +package com.baeldung.web.reports; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JRExporterParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.export.JRPdfExporter; + +/** + * = JasperReportsPdfExporter + * + * A JasperReports exporter to export the report in PDF formats. This class + * implements the interface {@link JasperReportsExporter} + */ +public class JasperReportsPdfExporter implements JasperReportsExporter { + + /** + * Generates a ByteArrayOutputStream from the provided JasperReport using + * the {@link JRPdfExporter}. After that, the generated bytes array is + * written in the {@link HttpServletResponse} + * + * @param jp + * The generated JasperReport. + * @param fileName + * The fileName of the exported JasperReport + * @param response + * The HttpServletResponse where generated report has been + * written + * @throws JRException + * during JasperReport export. + * @throws IOException + * when writes the ByteArrayOutputStream into the + * HttpServletResponse + */ + @Override + public void export(JasperPrint jp, String fileName, HttpServletResponse response) throws JRException, IOException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + // Create a JRPdfExporter instance + JRPdfExporter exporter = new JRPdfExporter(); + + // Here we assign the parameters jp and baos to the exporter + exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp); + exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); + + // Retrieve the exported report in PDF format + exporter.exportReport(); + + // Specifies the response header + response.setHeader("Content-Disposition", "inline; filename=" + fileName); + + // Make sure to set the correct content type + // Each format has its own content type + response.setContentType("application/pdf"); + response.setContentLength(baos.size()); + + // Retrieve the output stream + ServletOutputStream outputStream = response.getOutputStream(); + // Write to the output stream + baos.writeTo(outputStream); + // Flush the stream + outputStream.flush(); + + } +} \ No newline at end of file diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java b/roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java new file mode 100644 index 0000000000..1855d1c93c --- /dev/null +++ b/roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java @@ -0,0 +1,77 @@ +package com.baeldung.web.reports; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; + +import net.sf.jasperreports.engine.JRException; +import net.sf.jasperreports.engine.JRExporterParameter; +import net.sf.jasperreports.engine.JasperPrint; +import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter; +import net.sf.jasperreports.engine.export.JRXlsExporter; + +/** + * = JasperReportsXlsExporter + * + * A JasperReports exporter to export the report in XLS formats. This class + * implements the interface {@link JasperReportsExporter} + */ +public class JasperReportsXlsExporter implements JasperReportsExporter { + + /** + * Generates a ByteArrayOutputStream from the provided JasperReport using + * the {@link JRXlsExporter}. After that, the generated bytes array is + * written in the {@link HttpServletResponse} + * + * @param jp + * The generated JasperReport. + * @param fileName + * The fileName of the exported JasperReport + * @param response + * The HttpServletResponse where generated report has been + * written + * @throws JRException + * during JasperReport export. + * @throws IOException + * when writes the ByteArrayOutputStream into the + * HttpServletResponse + */ + @Override + public void export(JasperPrint jp, String fileName, HttpServletResponse response) throws JRException, IOException { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + // Create a JRXlsExporter instance + JRXlsExporter exporter = new JRXlsExporter(); + + // Here we assign the parameters jp and baos to the exporter + exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp); + exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos); + + // Excel specific parameters + exporter.setParameter(JRXlsAbstractExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); + exporter.setParameter(JRXlsAbstractExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); + exporter.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); + + // Retrieve the exported report in PDF format + exporter.exportReport(); + + // Specifies the response header + response.setHeader("Content-Disposition", "inline; filename=" + fileName); + + // Make sure to set the correct content type + // Each format has its own content type + response.setContentType("application/vnd.ms-excel"); + response.setContentLength(baos.size()); + + // Retrieve the output stream + ServletOutputStream outputStream = response.getOutputStream(); + // Write to the output stream + baos.writeTo(outputStream); + // Flush the stream + outputStream.flush(); + + } +} \ No newline at end of file diff --git a/roo/src/main/resources/application-dev.properties b/roo/src/main/resources/application-dev.properties new file mode 100644 index 0000000000..6723cabefa --- /dev/null +++ b/roo/src/main/resources/application-dev.properties @@ -0,0 +1,13 @@ +#Updated at Tue Apr 04 15:03:52 BST 2017 +#Tue Apr 04 15:03:52 BST 2017 +logging.file= +logging.level.com.baeldung=DEBUG +logging.level.com.querydsl.jpa.impl.JPAQuery=DEBUG +logging.level.org.hibernate.stat=DEBUG +logging.pattern.level=%5p - QP\:%X{querydsl.parameters} - +spring.jackson.serialization.indent-output=true +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.properties.hibernate.generate_statistics=true +spring.jpa.show-sql=true +spring.messages.cache-seconds=0 +spring.thymeleaf.mode=html diff --git a/roo/src/main/resources/application.properties b/roo/src/main/resources/application.properties new file mode 100644 index 0000000000..77eaa5f3fc --- /dev/null +++ b/roo/src/main/resources/application.properties @@ -0,0 +1,8 @@ +#Updated at Tue Apr 04 15:03:53 BST 2017 +#Tue Apr 04 15:03:53 BST 2017 +spring.datasource.driver-class-name=org.hsqldb.jdbcDriver +spring.datasource.url=jdbc\:hsqldb\:mem\:roo +spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy +spring.messages.encoding=ISO-8859-1 +spring.messages.fallback-to-system-locale=false +spring.thymeleaf.mode=html diff --git a/roo/src/main/resources/banner.txt b/roo/src/main/resources/banner.txt new file mode 100644 index 0000000000..dd2932f7aa --- /dev/null +++ b/roo/src/main/resources/banner.txt @@ -0,0 +1,9 @@ +${AnsiColor.GREEN} _ + ___ _ __ _ __(_)_ __ __ _ _ __ ___ ___ +/ __| '_ \| '__| | '_ \ / _` | | '__/ _ \ / _ \ +\__ \ |_) | | | | | | | (_| | | | | (_) | (_) | +|___/ .__/|_| |_|_| |_|\__, | |_| \___/ \___/ + |_| |___/ + +${AnsiColor.BRIGHT_RED}Spring application made with Spring Roo 2.0 +Doubts? http://projects.spring.io/spring-roo/${AnsiColor.DEFAULT} diff --git a/roo/src/main/resources/messages.properties b/roo/src/main/resources/messages.properties new file mode 100644 index 0000000000..e61a266500 --- /dev/null +++ b/roo/src/main/resources/messages.properties @@ -0,0 +1,146 @@ +#Updated at Tue Apr 04 15:04:02 BST 2017 +#Tue Apr 04 15:04:02 BST 2017 +error_NotFound={0} with identifier ''{1}'' not found. +error_NotNull=Required. +error_Size=The field must be between {2} and {1} characters long. +error_datatables_loading=An error happened while loading list data +error_deleting_item=Error deleting selected item. +error_deleting_item_with_relationships=To delete the selected item, must delete its related elements before. +error_expired_session=Your session has been expired +error_export_empty=No data available to generate a report +error_invalid_date=Please enter a correct date/time +error_invalid_maskValue=Please enter a valid value +error_login=Invalid user and password +help_login=Enter your login and password +info_author=Spring Roo development team +info_closed_session=Log out correctly +info_delete_batch_confirm=Are you sure want to delete the selected items? +info_delete_item_confirm=Are you sure want to delete this item? +info_deleted_item_problem=Error deleting item +info_deleted_items_batch=Deleted items +info_deleted_items_number=Deleted items {0} +info_description=Spring Roo, a next-generation rapid application development tool for Java developers. With Roo you can easily build full Java applications in minutes. +info_error=An unexpected error has occurred +info_homepage_header=With Roo you can easily build full Java applications in minutes. +info_homepage_paragraph=Spring Roo is a next-generation rapid application development tool for Java developers.\nIt focuses on higher productivity, stock-standard Java APIs, high usability, avoiding engineering trade-offs and \nfacilitating easy Roo removal. +info_homepage_project=Hello, this is your home page. +info_homepage_thanks=Thanks for your interest in Spring Roo\! +info_no_deleted_item=No deleted item. +info_no_exist_item=Item doesn't exist. +info_security_login=You tried to access a restricted area of our application. By default, you can log in with +info_select_an_option=Select an option +info_spring_code=Known, modify and redistribute the source code. +info_spring_documentation=If you are looking for Reference Documentation you can get it here. +info_spring_site=All the info about Spring Roo development. +info_spring_support=If you have any question about the project, \nyou can check it. +info_twitter=As always, you can find us also on +label_accessibility=Accessibility +label_accessibility_alt=Level Double-A conformance, W3C WAI Web Content Accessibility Guidelines 2.0 +label_accessibility_lead=Accessibility policy application +label_accessibility_text=

Spring Roo Application is committed to ensuring the accessibility of its web content to people with disabilities. All of the content on our website will meet W3C WAI's Web Content Accessibility Guidelines 2.0, Level AA conformance. Any issues should be reported to springroo@disid.com.

The technologies that is depended to access the accessible content are HTML, CSS and Javascript.

+label_accessibility_title=Explanation of WCAG 2.0 Level Double-A Conformance +label_actions=Actions +label_add_entity=Add {0} +label_back=Back +label_book=Book +label_book_author=Author +label_book_id=Id +label_book_isbn=Isbn +label_book_iterable_to_add_cant_be_null_message=I T E R A B L E_ T O_ A D D_ C A N T_ B E_ N U L L_ M E S S A G E +label_book_iterable_to_remove_cant_be_null_message=I T E R A B L E_ T O_ R E M O V E_ C A N T_ B E_ N U L L_ M E S S A G E +label_book_plural=Books +label_book_title=Title +label_book_version=Version +label_change_password=Change password +label_close=Close +label_code=Code +label_concurrency_apply=Apply my changes anyway +label_concurrency_apply_info=(discard all the changes applied by the other users). +label_concurrency_discard=Discard all my changes and reload this record. +label_concurrency_title=Warning\! This record has been updated by another user. +label_contact=Contact +label_create=Create +label_create_entity=Create {0} +label_data_entity={0} data +label_datatables_add=Add +label_datatables_columns=Columns +label_datatables_decimal=. +label_datatables_delete=Delete +label_datatables_emptyTable=No data available in table +label_datatables_first=First +label_datatables_info=Showing _START_ to _END_ of _TOTAL_ entries +label_datatables_infoEmpty=Showing 0 to 0 of 0 entries +label_datatables_infoFiltered=(filtered from _MAX_ total entries) +label_datatables_infoPostFix= +label_datatables_last=Last +label_datatables_lengthMenu=Show _MENU_ entries +label_datatables_loadingRecords=Loading... +label_datatables_loading_error=An error happened while loading list data +label_datatables_next=Next +label_datatables_previous=Previous +label_datatables_processing=Processing... +label_datatables_search=Search\: +label_datatables_selectedRow=1 selected row +label_datatables_selectedRows=%d selected rows +label_datatables_showRows=Show %d rows +label_datatables_sortAscending=\: activate to sort column ascending +label_datatables_sortDescending=\: activate to sort column descending +label_datatables_thousands= +label_datatables_zeroRecords=No matching records found +label_delete=Delete +label_delete_entity=Delete {0} +label_documentation=Doc +label_edit=Edit +label_edit_entity=Edit {0} +label_edit_search=Edit search +label_entities_found={0} found +label_error=Error +label_errorpage=Error page +label_errorpage_header=\u00C2\u00A1Error\! +label_exit=Exit +label_export_empty_error=Empty report +label_filtered_by=Filtered By +label_goBack=Go Back +label_goEdit=Go to the editing page +label_goHome=Go to homepage +label_gotoGithub=Go to Spring Roo page in GitHub +label_gotoLanguage=Display website in +label_gotowebsite=Go to Spring Roo website +label_help=Help +label_inputmask_groupSeparator=, +label_inputmask_prefix=$ +label_inputmask_radixPoint=. +label_inputmask_suffix= +label_last_access=Last Access {0} +label_list_entity=List {0} +label_list_of_entity=List of {0} +label_login=Login +label_login_password=Password +label_login_username=User +label_logout=Log out +label_menu_entry={0} +label_message=Message +label_not_filtered=Not Filtered +label_owasp_alt=Application developed and tested with OWASP +label_owasp_title=Application developed and tested with OWASP - Web Application Security Project +label_profile=Admin Profile +label_projectpage=Project Page +label_requiredfield=Required field +label_reset=Cancel +label_save=Save +label_search=Search +label_search_entity={0} searcher +label_show=Show +label_show_entity={0} card +label_spring_documentation=Spring Roo reference documentation +label_spring_site=Spring Roo project site +label_spring_sourcecode=Spring Roo source code +label_spring_support=Spring Roo Stackoverflow support +label_submit=Accept +label_support=Support +label_tools=Tools +label_user=User +language_label=Languages +language_label_en=English +language_label_es=Spanish +welcome_label=Welcome diff --git a/roo/src/main/resources/static/public/css/springroo.css b/roo/src/main/resources/static/public/css/springroo.css new file mode 100644 index 0000000000..2db8914ff1 --- /dev/null +++ b/roo/src/main/resources/static/public/css/springroo.css @@ -0,0 +1,475 @@ +/* CSS Theme Roo */ + +body { + background-color: #f1f1f1; + color: rgba(13,13,13,.65); + line-height: 1.8; + letter-spacing: .01em; +} +img {border: 0; max-width: 100%; outline: none;} +a{ + color: #6db33f; + transition: color 150ms ease; + } +a:focus, a:hover{ + outline: none; + color: #3f6824; + } +.content a:hover {text-decoration: underline} +.content a.btn-action:hover, +.content .paginate_button a:hover, +.content a.btn:hover {text-decoration: none;} + +.clearfix {clear: both;} + +/*--NAVBAR-------------*/ + +.navbar-header .organization-logo {vertical-align: middle; padding: 0.2em 1em;} +.navbar-header .application-name { color: #34302d;} +.navbar-header .application-name strong {} +.navbar-default .navbar-header .application-name a {text-decoration: none;} +.navbar-inverse .navbar-header .application-name a {color: #fff; text-decoration: none;} +.navbar-header .application-name small {} + +.dropdown-menu > li button.btn-link { + display: block; + padding: 3px 20px; + white-space: nowrap; + color: #333; + width: 100%; + text-align: left; +} +.dropdown-menu > li button.btn-link:hover, +.dropdown-menu > li button.btn-link:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active button.btn-link, +.dropdown-menu > .active button.btn-link:hover, +.dropdown-menu > .active button.btn-link:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} + +/*--FOOTER-------------*/ + +footer { padding: 1em 0 3em; text-align: center;} +footer p{font-size: 0.875em;} +footer a:hover, footer a:focus{text-decoration: none;} + + + +/*--HEADINGS-------------*/ + +.content h4,h5,h6 {color: #34302d;} + +/*--CONTENT-------------*/ + +/* second container */ +.content { + clear: both; + min-height: 26.3em; + display: block; + padding: 1em; + background: #fff; + box-shadow: 0 0 0 0,0 6px 12px rgba(34,34,34,.1); +} +.content > .panel{ +/* margin: 1em; */ +} + +/*--SHOW-------------*/ + +.content ul.list-unstyled li{ + margin: 0.25em 0; +} +.content ul.list-unstyled li{ + padding: 0.25em 0; +} +.content ul.list-unstyled li strong{ + min-width: 15%; + display: inline-block; + } +.content ul.list-unstyled li span{ + display: inline-block; + padding-left: 1em; +} +.content [id$="FieldSet"] h2{ + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: inherit; + border-bottom: 1px solid #f1f1f1; +} +dd, dt { + margin: 0px 5px 5px 0px; +} + +/*--ALERTS-------------*/ + +.alert blockquote{ + margin: 0; + font-size: inherit; +} +.alert-info blockquote { + border-left-color: #31708f; +} +/*--FORMS-------------*/ + +legend{ + border-bottom: 1px solid #f1f1f1; +} +.form-horizontal .form-group input[type="radio"], +.form-horizontal .form-group input[type="checkbox"] { + margin-left: 0; +} + +/*--TABLES-------------*/ + +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc { + background-image: none; +} + +/** toolbars datatables **/ +div.dataTables_wrapper div.dataTables_paginate, +div.dataTables_wrapper div.dataTables_info{ + padding: 0; +} + +div.dataTables_wrapper div.dataTables_filter, +div.dataTables_wrapper div.dt-buttons.btn-group{ + padding: 1em 0; +} +.pagination{ + text-transform: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button{ + padding: 0; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + background: none; +} +/** btn datatables **/ +table a.btn-action { + text-decoration: none; + color: #3e3f3a; +} +table .btn-action + .btn-action { + margin: 0 0 0 0.35em; +} +table a.btn-action:hover, +table a.btn-action:focus, +table a.btn-action:active { + color: #79a736; +} +table.dataTable.no-footer { + border-bottom: 1px solid #dfd7ca; +} + +div.dataTables_wrapper div.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 200px; + margin-left: -100px; + margin-top: 16px; + padding: 0.5em 0; + height: 30px; + overflow: hidden; + border-radius: 4px; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + 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); + background-size: 40px 40px; + font-size: 12px; + color: #ffffff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} +/*--BTN-------------*/ + +.btn-action:before { + font-family: 'FontAwesome'; + padding: 0 0.3em 0 0; +} +.btn-action.delete:before { + content:"\f014"; + } +.btn-action.edit:before, +.btn-action.modify:before { + content:"\f040"; + } +.btn-action.accept:before { + content:"\f00c"; + } +.btn-action.add:before { + content:"\f067"; + } +.btn-action.showInfo:before { + content:"\f06e"; +} +.alert a.btn{ + color: #555555; + text-decoration: none; +} + +/*-------------------INDEX-------------------*/ + +body.home .content{ + background: none; + padding: 0; + box-shadow: none; +} +body.home .box-center{ + padding: 1em 2em; + background: #fff; + box-shadow: 0 0 0 0,0 6px 12px rgba(34,34,34,.1); +} +body.home .navbar { margin-bottom: 0px;} + +/*--HEADER-------------*/ +.jumbotron { + min-height: 6.5em; + text-align: center; + vertical-align: middle; + margin-bottom: 2em; + background-color: #316128; + background-image: linear-gradient(120deg, #316128, #254211); + border-bottom: 1px solid #969595; + border: none; +} +.jumbotron.bg-banner { + min-height: 20em; + color: #fff; + text-align: center; + padding: 3em; + background-image: url(../img/geo.png); + background-repeat: no-repeat; + background-position: 50% 20%; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} +.jumbotron .project-name{ + color: #fff; + text-align: center; + font-size: 4em; +} +.jumbotron .project-tagline { + color: #fff; + margin-bottom: 2rem; + font-weight: normal; + opacity: 0.7; +} + +/*--SOCIAL LINKS-------------*/ + +.social-links a{ + color: #999; + text-decoration: none; + font-size: 1.5em; + margin: 0 0.15em; +} + +/*--BLOCKS----------------*/ + +.blocks { margin-top: 2em;} +.block-item { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); + position: relative; + margin-bottom: 30px; +} +.block-item .doc { + padding: 15px; + float: left; + font-size: 4em; +} +.block-item a{ + color: #fff; + cursor: pointer; +} +.block-item .text { + overflow: hidden; + color: rgba(255, 255, 255, 0.9); + padding: 16px 12px; +} +.block-item .text > h2 { + margin: 0; + line-height: 100%; + font-size: 22px; + font-weight: 300; + color: #fff; +} +.block-item .text > small { + margin-bottom: 2px; + display: block; +} +.block-item .text > p, +.block-item .text > h2 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.block-item > .clearfix, +.block-item > .dl-horizontal dd, +.block-item > .container, +.block-item > .container-fluid, +.block-item > .row, +.block-item > .form-horizontal .form-group, +.block-item > .btn-toolbar, +.block-item > .btn-group-vertical > .btn-group, +.block-item > .nav, +.block-item > .navbar, +.block-item > .navbar-header, +.block-item > .navbar-collapse, +.block-item > .pager, +.block-item > .panel-body, +.block-item > .modal-header, +.block-item > .modal-footer { + position: relative; + z-index: 1; +} +.block-item:before { + -webkit-transition: width; + -o-transition: width; + transition: width; + -webkit-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + content: ""; + width: 83px; + height: 100%; + background: rgba(0, 0, 0, 0.1); + position: absolute; + left: 0; + top: 0; +} +.block-item:hover .text {color: #fff !important;} +.block-item:hover:before { width: 100%;} + +/* + * Material Background Colors + */ + +.bgm-teal { background-color: #009688 !important;} +.bgm-red { background-color: #f44336 !important;} +.bgm-amber { background-color: #ffc107 !important;} +.bgm-bluegray {background-color: #607d8b !important;} + + +/* SANDSTONE THEME CUSTOM +-----------------------------------------------------------------------------*/ + +/*-- NAVBAR -------------*/ + +.navbar-default .navbar-header .application-name a {color: #fff; text-decoration: none;} + +.dropdown-menu > li button.btn-link { + clear: both; + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; + color: #98978b; +} +.dropdown-menu > li button.btn-link:hover, +.dropdown-menu > li button.btn-link:focus { + color: #98978b; + background-color: #f8f5f0; +} +.dropdown-menu > .active button.btn-link, +.dropdown-menu > .active button.btn-link:hover, +.dropdown-menu > .active button.btn-link:focus { + color: #98978b; + background-color: #f8f5f0; +} + +/*-- SELECT2 -------------*/ + +.select2-container--bootstrap .select2-selection{ + height: 46px; + padding: 12px 16px; + font-size: 14px; + line-height: 1.42857143; + color: #3e3f3a; + background-color: #ffffff; + background-image: none; + border: 1px solid #dfd7ca; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.select2-container--bootstrap .select2-selection--multiple { + padding: 6px; +} +.select2-container--bootstrap .select2-selection--multiple .select2-selection__arrow, +.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder, +.select2-container--bootstrap .select2-selection--single .select2-selection__arrow, +.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder{ + color: #dfd7ca; + padding: 0; +} +.select2-container--bootstrap .select2-selection--multiple .select2-selection__arrow b, +.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { + border-color: #dfd7ca transparent transparent transparent; +} +/* align options in left */ +.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered{ + padding-right: 0.5em !important; +} +.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { + margin-right: 0 !important; +} + +/* MEDIA QUERIES +-------------------------------------------------------------------------------*/ + +@media print { + body {background: #fff;} + .content .main {width: 98%;} +} + +@media (max-width: 768px) { + .jumbotron .project-name{font-size: 3em;} + /* navbar fixes */ + .navbar-nav#entitiesMenuEntries { + max-width: 410px; + } +} + +@media (max-width: 992px){ + .navbar-nav.upper-nav > li > a {padding: 15px 5px} +} + +@media (min-width: 1020px){ + /* navbar fixes */ + .navbar-nav#entitiesMenuEntries { + max-width: 370px; + } +} + +@media (min-width: 1100px){ + /* navbar fixes */ + .navbar-nav#entitiesMenuEntries { + max-width: 50%; + } +} diff --git a/roo/src/main/resources/static/public/css/theme.css b/roo/src/main/resources/static/public/css/theme.css new file mode 100644 index 0000000000..02722dd20c --- /dev/null +++ b/roo/src/main/resources/static/public/css/theme.css @@ -0,0 +1,6914 @@ +@import url("https://fonts.googleapis.com/css?family=Roboto:400,500"); +/*! + * bootswatch v3.3.6 + * Homepage: http://bootswatch.com + * Copyright 2012-2015 Thomas Park + * Licensed under MIT + * Based on Bootstrap + * Sandstone theme +*/ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/*mark { + background: #ff0; + color: #000; +}*/ +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} +legend { + border: 0; + padding: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +/* @font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} */ +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #3e3f3a; + background-color: #ffffff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #93c54b; + text-decoration: none; +} +a:hover, +a:focus { + color: #79a736; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #f8f5f0; + border: 1px solid #dfd7ca; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #f8f5f0; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 400; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #98978b; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +/*mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +}*/ +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #98978b; +} +.text-primary { + color: #325d88; +} +a.text-primary:hover, +a.text-primary:focus { + color: #244363; +} +.text-success { + color: #93c54b; +} +a.text-success:hover, +a.text-success:focus { + color: #79a736; +} +.text-info { + color: #29abe0; +} +a.text-info:hover, +a.text-info:focus { + color: #1b8dbb; +} +.text-warning { + color: #f47c3c; +} +a.text-warning:hover, +a.text-warning:focus { + color: #ef5c0e; +} +.text-danger { + color: #d9534f; +} +a.text-danger:hover, +a.text-danger:focus { + color: #c9302c; +} +.bg-primary { + color: #fff; + background-color: #325d88; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #244363; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #f8f5f0; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px; +} +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #98978b; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #dfd7ca; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #3e3f3a; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #dfd7ca; + border-left: 0; + text-align: right; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #ffffff; + background-color: #333333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #8e8c84; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +.row { + margin-left: -15px; + margin-right: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #98978b; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #dfd7ca; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dfd7ca; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #dfd7ca; +} +.table .table { + background-color: #ffffff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #dfd7ca; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dfd7ca; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f8f5f0; +} +.table-hover > tbody > tr:hover { + background-color: #f8f5f0; +} +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f8f5f0; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #f0e9df; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #dfd7ca; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: inherit; + border: 0; + border-bottom: 1px solid transparent; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 13px; + font-size: 14px; + line-height: 1.42857143; + color: #3e3f3a; +} +.form-control { + display: block; + width: 100%; + height: 46px; + padding: 12px 16px; + font-size: 14px; + line-height: 1.42857143; + color: #3e3f3a; + background-color: #ffffff; + background-image: none; + border: 1px solid #dfd7ca; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +/* .form-control:focus { + border-color: transparent; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 0, 0, 0.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(0, 0, 0, 0.6); +} */ +.form-control::-moz-placeholder { + color: #dfd7ca; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #dfd7ca; +} +.form-control::-webkit-input-placeholder { + color: #dfd7ca; +} +.form-control::-ms-expand { + border: 0; + background-color: transparent; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #f8f5f0; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 46px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 66px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 13px; + padding-bottom: 13px; + margin-bottom: 0; + min-height: 34px; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-left: 0; + padding-right: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 66px; + padding: 20px 30px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 66px; + line-height: 66px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 66px; + padding: 20px 30px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 66px; + line-height: 66px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 66px; + min-height: 38px; + padding: 21px 30px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 57.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 46px; + height: 46px; + line-height: 46px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 66px; + height: 66px; + line-height: 66px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #93c54b; +} +.has-success .form-control { + border-color: #93c54b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #79a736; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c1de98; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c1de98; +} +.has-success .input-group-addon { + color: #93c54b; + border-color: #93c54b; + background-color: #dff0d8; +} +.has-success .form-control-feedback { + color: #93c54b; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #f47c3c; +} +.has-warning .form-control { + border-color: #f47c3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #ef5c0e; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f9bd9d; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #f9bd9d; +} +.has-warning .input-group-addon { + color: #f47c3c; + border-color: #f47c3c; + background-color: #fcf8e3; +} +.has-warning .form-control-feedback { + color: #f47c3c; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #d9534f; +} +.has-error .form-control { + border-color: #d9534f; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #c9302c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #eba5a3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #eba5a3; +} +.has-error .input-group-addon { + color: #d9534f; + border-color: #d9534f; + background-color: #f2dede; +} +.has-error .form-control-feedback { + color: #d9534f; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #7f8177; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 13px; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 33px; +} +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 13px; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 21px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 12px 16px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #ffffff; + text-decoration: none; +} +.btn:active, +.btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #ffffff; + background-color: #3e3f3a; + border-color: transparent; +} +.btn-default:focus, +.btn-default.focus { + color: #ffffff; + background-color: #242422; + border-color: rgba(0, 0, 0, 0); +} +.btn-default:hover { + color: #ffffff; + background-color: #242422; + border-color: rgba(0, 0, 0, 0); +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #ffffff; + background-color: #242422; + border-color: rgba(0, 0, 0, 0); +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #ffffff; + background-color: #121210; + border-color: rgba(0, 0, 0, 0); +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #3e3f3a; + border-color: transparent; +} +.btn-default .badge { + color: #3e3f3a; + background-color: #ffffff; +} +.btn-primary { + color: #ffffff; + background-color: #325d88; + border-color: transparent; +} +.btn-primary:focus, +.btn-primary.focus { + color: #ffffff; + background-color: #244363; + border-color: rgba(0, 0, 0, 0); +} +.btn-primary:hover { + color: #ffffff; + background-color: #244363; + border-color: rgba(0, 0, 0, 0); +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #244363; + border-color: rgba(0, 0, 0, 0); +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #ffffff; + background-color: #1b3249; + border-color: rgba(0, 0, 0, 0); +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #325d88; + border-color: transparent; +} +.btn-primary .badge { + color: #325d88; + background-color: #ffffff; +} +.btn-success { + color: #ffffff; + background-color: #93c54b; + border-color: transparent; +} +.btn-success:focus, +.btn-success.focus { + color: #ffffff; + background-color: #79a736; + border-color: rgba(0, 0, 0, 0); +} +.btn-success:hover { + color: #ffffff; + background-color: #79a736; + border-color: rgba(0, 0, 0, 0); +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #79a736; + border-color: rgba(0, 0, 0, 0); +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #ffffff; + background-color: #658c2d; + border-color: rgba(0, 0, 0, 0); +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #93c54b; + border-color: transparent; +} +.btn-success .badge { + color: #93c54b; + background-color: #ffffff; +} +.btn-info { + color: #ffffff; + background-color: #29abe0; + border-color: transparent; +} +.btn-info:focus, +.btn-info.focus { + color: #ffffff; + background-color: #1b8dbb; + border-color: rgba(0, 0, 0, 0); +} +.btn-info:hover { + color: #ffffff; + background-color: #1b8dbb; + border-color: rgba(0, 0, 0, 0); +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #1b8dbb; + border-color: rgba(0, 0, 0, 0); +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #ffffff; + background-color: #17759c; + border-color: rgba(0, 0, 0, 0); +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #29abe0; + border-color: transparent; +} +.btn-info .badge { + color: #29abe0; + background-color: #ffffff; +} +.btn-warning { + color: #ffffff; + background-color: #f47c3c; + border-color: transparent; +} +.btn-warning:focus, +.btn-warning.focus { + color: #ffffff; + background-color: #ef5c0e; + border-color: rgba(0, 0, 0, 0); +} +.btn-warning:hover { + color: #ffffff; + background-color: #ef5c0e; + border-color: rgba(0, 0, 0, 0); +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ef5c0e; + border-color: rgba(0, 0, 0, 0); +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #ffffff; + background-color: #ce4f0c; + border-color: rgba(0, 0, 0, 0); +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f47c3c; + border-color: transparent; +} +.btn-warning .badge { + color: #f47c3c; + background-color: #ffffff; +} +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: transparent; +} +.btn-danger:focus, +.btn-danger.focus { + color: #ffffff; + background-color: #c9302c; + border-color: rgba(0, 0, 0, 0); +} +.btn-danger:hover { + color: #ffffff; + background-color: #c9302c; + border-color: rgba(0, 0, 0, 0); +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #c9302c; + border-color: rgba(0, 0, 0, 0); +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #ffffff; + background-color: #ac2925; + border-color: rgba(0, 0, 0, 0); +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: transparent; +} +.btn-danger .badge { + color: #d9534f; + background-color: #ffffff; +} +.btn-link { + color: #93c54b; + font-weight: normal; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #79a736; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #dfd7ca; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 20px 30px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #ffffff; + border: 1px solid #dfd7ca; + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #f8f5f0; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #98978b; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + text-decoration: none; + color: #98978b; + background-color: #f8f5f0; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #98978b; + text-decoration: none; + outline: 0; + background-color: #f8f5f0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #dfd7ca; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + left: auto; + right: 0; +} +.dropdown-menu-left { + left: 0; + right: auto; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #dfd7ca; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0; + } + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 66px; + padding: 20px 30px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 66px; + line-height: 66px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 12px 16px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #3e3f3a; + text-align: center; + background-color: #f8f5f0; + border: 1px solid #dfd7ca; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 20px 30px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #f8f5f0; +} +.nav > li.disabled > a { + color: #dfd7ca; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #dfd7ca; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #f8f5f0; + border-color: #93c54b; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #dfd7ca; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #dfd7ca #dfd7ca #dfd7ca; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #98978b; + background-color: #ffffff; + border: 1px solid #dfd7ca; + border-bottom-color: transparent; + cursor: default; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #dfd7ca; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #dfd7ca; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #98978b; + background-color: #f8f5f0; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #dfd7ca; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #dfd7ca; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #ffffff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar { + position: relative; + min-height: 60px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + padding: 20px 15px; + font-size: 18px; + line-height: 20px; + height: 60px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 13px; + margin-bottom: 13px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 10px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 20px; + padding-bottom: 20px; + } +} +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 7px; + margin-bottom: 7px; +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 7px; + margin-bottom: 7px; +} +.navbar-btn.btn-sm { + margin-top: 15px; + margin-bottom: 15px; +} +.navbar-btn.btn-xs { + margin-top: 19px; + margin-bottom: 19px; +} +.navbar-text { + margin-top: 20px; + margin-bottom: 20px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #3e3f3a; + border-color: #3e3f3a; +} +.navbar-default .navbar-brand { + color: #ffffff; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #8e8c84; +} +.navbar-default .navbar-nav > li > a { + color: #98978b; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #393a35; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: transparent; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #393a35; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #98978b; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #3e3f3a; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + background-color: #393a35; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #98978b; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #393a35; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #98978b; +} +.navbar-default .navbar-link:hover { + color: #ffffff; +} +.navbar-default .btn-link { + color: #98978b; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #ffffff; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #cccccc; +} +.navbar-inverse { + background-color: #93c54b; + border-color: #93c54b; +} +.navbar-inverse .navbar-brand { + color: #ffffff; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #dfd7ca; +} +.navbar-inverse .navbar-nav > li > a { + color: #6b9430; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #89be3d; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: transparent; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #89be3d; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #6b9430; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #81b33a; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + background-color: #89be3d; + color: #ffffff; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #93c54b; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #93c54b; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #6b9430; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: #89be3d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #6b9430; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .btn-link { + color: #6b9430; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #ffffff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f8f5f0; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #dfd7ca; +} +.breadcrumb > .active { + color: #98978b; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 12px 16px; + line-height: 1.42857143; + text-decoration: none; + color: #98978b; + background-color: #f8f5f0; + border: 1px solid #dfd7ca; + margin-left: -1px; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #8e8c84; + background-color: #dfd7ca; + border-color: #dfd7ca; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #8e8c84; + background-color: #dfd7ca; + border-color: #dfd7ca; + cursor: default; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #dfd7ca; + background-color: #f8f5f0; + border-color: #dfd7ca; + cursor: not-allowed; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 20px 30px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #f8f5f0; + border: 1px solid #dfd7ca; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #dfd7ca; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #dfd7ca; + background-color: #f8f5f0; + cursor: not-allowed; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #3e3f3a; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #242422; +} +.label-primary { + background-color: #325d88; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #244363; +} +.label-success { + background-color: #93c54b; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #79a736; +} +.label-info { + background-color: #29abe0; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #1b8dbb; +} +.label-warning { + background-color: #f47c3c; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ef5c0e; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: normal; + color: #ffffff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #93c54b; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #ffffff; + background-color: #93c54b; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #f8f5f0; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #e8decd; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; + padding-left: 15px; + padding-right: 15px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #f8f5f0; + border: 1px solid #dfd7ca; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-left: auto; + margin-right: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #93c54b; +} +.thumbnail .caption { + padding: 9px; + color: #3e3f3a; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + background-color: #93c54b; + border-color: transparent; + color: #ffffff; +} +.alert-success hr { + border-top-color: rgba(0, 0, 0, 0); +} +.alert-success .alert-link { + color: #e6e6e6; +} +.alert-info { + background-color: #29abe0; + border-color: transparent; + color: #ffffff; +} +.alert-info hr { + border-top-color: rgba(0, 0, 0, 0); +} +.alert-info .alert-link { + color: #e6e6e6; +} +.alert-warning { + background-color: #f47c3c; + border-color: transparent; + color: #ffffff; +} +.alert-warning hr { + border-top-color: rgba(0, 0, 0, 0); +} +.alert-warning .alert-link { + color: #e6e6e6; +} +.alert-danger { + background-color: #d9534f; + border-color: transparent; + color: #ffffff; +} +.alert-danger hr { + border-top-color: rgba(0, 0, 0, 0); +} +.alert-danger .alert-link { + color: #e6e6e6; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #ffffff; + text-align: center; + background-color: #325d88; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #93c54b; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #29abe0; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f47c3c; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + zoom: 1; + overflow: hidden; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + margin-bottom: 20px; + padding-left: 0; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dfd7ca; +} +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #3e3f3a; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: inherit; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + text-decoration: none; + color: #3e3f3a; + background-color: #f8f5f0; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + background-color: #f8f5f0; + color: #dfd7ca; + cursor: not-allowed; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #dfd7ca; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #3e3f3a; + background-color: #f8f5f0; + border-color: #dfd7ca; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #3e3f3a; +} +.list-group-item-success { + color: #93c54b; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #93c54b; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #93c54b; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #93c54b; + border-color: #93c54b; +} +.list-group-item-info { + color: #29abe0; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #29abe0; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #29abe0; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #29abe0; + border-color: #29abe0; +} +.list-group-item-warning { + color: #f47c3c; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #f47c3c; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #f47c3c; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #f47c3c; + border-color: #f47c3c; +} +.list-group-item-danger { + color: #d9534f; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #d9534f; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #d9534f; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f8f5f0; + border-top: 1px solid #dfd7ca; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #dfd7ca; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #dfd7ca; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dfd7ca; +} +.panel-default { + border-color: #dfd7ca; +} +.panel-default > .panel-heading { + color: #3e3f3a; + background-color: #f8f5f0; + border-color: #dfd7ca; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #dfd7ca; +} +.panel-default > .panel-heading .badge { + color: #f8f5f0; + background-color: #3e3f3a; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #dfd7ca; +} +.panel-primary { + border-color: #325d88; +} +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #325d88; + border-color: #325d88; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #325d88; +} +.panel-primary > .panel-heading .badge { + color: #325d88; + background-color: #ffffff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #325d88; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #93c54b; + background-color: #93c54b; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #93c54b; + background-color: #93c54b; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #29abe0; + background-color: #29abe0; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #29abe0; + background-color: #29abe0; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #f47c3c; + background-color: #f47c3c; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #f47c3c; + background-color: #f47c3c; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #d9534f; + background-color: #d9534f; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #d9534f; + background-color: #d9534f; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f8f5f0; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 0 0 transparent; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.modal-open { + overflow: hidden; +} +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #f8f5f0; + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #f8f5f0; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #f8f5f0; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 1; + filter: alpha(opacity=100); +} +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + background-color: #3e3f3a; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #3e3f3a; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #3e3f3a; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #3e3f3a; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #3e3f3a; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #3e3f3a; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #3e3f3a; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #3e3f3a; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #3e3f3a; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 14px; + background-color: #ffffff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #dfd7ca; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f8f5f0; + border-bottom: 1px solid #f0e9df; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + border-width: 10px; + content: ""; +} +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #b9a78a; + border-top-color: #dfd7ca; + bottom: -11px; +} +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #b9a78a; + border-right-color: #dfd7ca; +} +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #b9a78a; + border-bottom-color: #dfd7ca; + top: -11px; +} +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #b9a78a; + border-left-color: #dfd7ca; +} +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0; + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0; + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0; + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + background-color: rgba(0, 0, 0, 0); +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +.carousel-control:hover, +.carousel-control:focus { + outline: 0; + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #ffffff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); +} +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #ffffff; +} +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +.sandstone { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.navbar .nav > li > a { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.navbar-form input, +.navbar-form .form-control { + border: none; +} +.btn { + border: none; + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.btn:hover { + border-color: transparent; +} +.btn-lg { + line-height: 26px; +} +.btn-default:hover { + background-color: #393a35; +} +input, +.form-control { + -webkit-box-shadow: none; + box-shadow: none; +} +/* input:focus, +.form-control:focus { + border-color: #dfd7ca; + -webkit-box-shadow: none; + box-shadow: none; +} */ +.nav { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + border-color: #dfd7ca; +} +.nav-tabs > li > a { + background-color: #f8f5f0; + border-color: #dfd7ca; + color: #98978b; +} +.nav-tabs > li.disabled > a:hover { + background-color: #f8f5f0; +} +.nav-pills a { + color: #98978b; +} +.nav-pills li > a { + border: 1px solid transparent; +} +.nav-pills li.active > a, +.nav-pills li > a:hover { + border-color: #dfd7ca; +} +.nav-pills li.disabled > a { + border-color: transparent; +} +.breadcrumb { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; + border: 1px solid #dfd7ca; +} +.breadcrumb a { + color: #98978b; +} +.pagination { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.pager { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.pager li > a { + color: #98978b; +} +.dropdown-menu > li > a { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.alert a, +.alert .alert-link { + color: #fff; +} +.tooltip { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.progress { + border-radius: 10px; + background-color: #dfd7ca; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar { + -webkit-box-shadow: none; + box-shadow: none; +} +.list-group-item { + padding: 16px 24px; +} +.well { + -webkit-box-shadow: none; + box-shadow: none; +} +.panel { + -webkit-box-shadow: none; + box-shadow: none; +} +.panel .panel-heading, +.panel .panel-title { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; + color: #fff; +} +.panel .panel-footer { + font-size: 11px; + line-height: 22px; + font-weight: 500; + text-transform: uppercase; +} +.panel-default .panel-heading, +.panel-default .panel-title, +.panel-default .panel-footer { + color: #98978b; +} diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot b/roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..99e847f985b54ecc5e8dd5003d4775cd387b799c GIT binary patch literal 75220 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf b/roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f471fde429ccdfbf6c62b9746d0c75faaade7f2f GIT binary patch literal 150920 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

jH0rRyLL+1|R$y$3@bdgc?;t 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ℨ{dsBK*`T4-6b-D1rq7 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

cl(Ou6^Utmxy^`$=v=$va*K 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 Ucf|P*8a#-I?padb-XkLVUsriYi2wiq literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 b/roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..aaed3de59c52ca76abc62d509676652b40d55ae4 GIT binary patch literal 70728 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
j0s;6+k3VBhH195iM@+jSx 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 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg b/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000..94fb5490a2 --- /dev/null +++ b/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf b/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..06e2a16b443c2d296f7fdf95eea5c7c20e81a6a7 GIT binary patch literal 45404 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 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff b/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..dda02ad5372b7771616f56ddc04bf58f8ab9bbaa GIT binary patch literal 23424 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⋘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 r*WvQ}vj00xp)KfYD-wz$vNU#5o&H6t8)Z(KX literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 b/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ad69b8d4c10507b7b80d8894bf97822aa81bccfc GIT binary patch literal 18028 zcmZ5nLvSGMvW;zXl8J5Wi#f4v+eXEzRK={=ww+9DOl;fM`|tMk=5%j***d4am8Cf# zAR+!UX$J`O|6zl{e?B4vB$VR+qW^C|T3SPqgoqr@1R~xI0R|HRDYSwL99cs0Kv6+Q zdLW0hLBNp1Mp3}0sse9IGb=b^%Xsd~3=r}lnm-7>dl8V236;|G#Q zS2vkB8PPdhQ75JGYIT)~FJWjz8qONb795MYfnLI~ELB6LZY*I=kN>4CqMbz~@^TEy zXCw7X$68siFGU#)^vm-KBM|L~H|(jh%=_?vU-<9>`AX(-^k`j9Z^`2z2%Lgqn|p|# zT;mfOTe6XfG17SeJ5U@4Iz>K@j1)h+}) z-7Tk-x9zStEPiM{O~nuL*^EZBgUu?NBGJO?`a-0|k?yM7-A!Y4laq(-w&9kqr(0@s zckM^!HMW+HyB%6VVeXN&q7z}|Vx}z6POTVPLLhhJcoebKFwx>|pH`!5C?B6C+Wle7 zcjkGZHUB#%UJs7pF1SwG{>^l31xJO&9rR_@Y9Jb#>Z@7^aeBM*F(pJ?yJ^Vb74Yq0 zktDE*NVS7E2C4Fs^wLzy*>_%AaJlsrsg8((>}>uq(RO7V$4f)WFwaQe)098Q$Ylyy zFUHeq9)IH7uvQdlMQ27ReRh2KbJk2H=ufUIHpK3w!t5dQ`V+s`-+((!@ll_;0Vy$P z#Z0ap`cey(wUjyIsqn8}0pWnM<_hhw`X7Trq|nAE3_0EW&c)Kp%8%Z+$yyc4QHy>$ z^|>yrMr^e|b=`O@RdfwTzPrEk%@tt|{(W>9!E)D)mj{K*ZVs2p*!fOH>}+wMGm6PU z(-zJxZ8_!q?!}_$Ufa z69?2J66iE-$|cZaL?FrtnBdJj#_gRefS59|3$BxAOWBg&Lz))1dwwUJ?y0r?n{GS@KNl2A=|);`8p`vtF2b{_|#t(_A)EC<*$DThk~ zC&~D+p^?@)t;mMspE*10Y=1qAqZkA~UVx0l{j>8M#>a7x+j&qQo}{PG^X7x5t&V*? zR2D8BteUkSn70Wq9b#qgs^Tb3Qu$w zX=cCu&!1CXn?`5Rz=p~uT`i7GtYK^4?8sr=q4FU(Y&%>zOh1HkW9~>Y_#-`zz@N@U zQPJ<}eBuB}Wm8{T|rg3jmgZ zCO4j|aLt;>yx&q1S|p7gaI!0;K66xTrU>kg`R8H3ElJ$zZBxiB{Nq?i+9QsAb@s%| zbN5&qMkBD$HSX#`f&7nMAQ`v%VlK71!c*{(LczFzRo>#CIa``T;}Z!RY2#m7BWOJF z);B&aiPmL5>w37xo@#VBeR9ExcZ*A;HQj&sX2D}&o}_3|-Tx)X5zS=?goN{r2|!_~ zsHT+=!8WiKCcfw2)w=i#>LA z6i5EPgefSw)o;Q^stMn5)|IrWAz1dmoM#GT7qS90P&_up1d+4=1jA31Xi{pGBWz>V zbdwd7NPS2KQ)mp7Y*);|6^cpnhy7TJcL-F#!{H87qeCg@43IC(!C>EoMy*O?dB!@C zGMuNj%F$xn#kO=teU>pFfQ*jnEBSVqrc25p(qAc0@aBoCh5$= zqpSBE%1mP_Vub~=A*zy%AI^Fj zLC2xJkFdsKJvf*b$EVIK_~lGaCh>IM>6FSFw9Kz4$W7y@^UPIkGw#@hpuclco4ai zD%TCW#5=~jT-u@f?cixp>N|&~9fzSrf58{CS?{HL&EVPW2$fRM(08_9u@BSfNQY4a0||#1POqE4LKTO+Hr`cH}&wmuZ|D zY}6&#eduR185E;SnIn2~kuryH+3LwJAe5yEb9ko61s;qnR;!P&Tb_NaB@eG=gEti2 zfnPsfU3^3c77Yds;sy8)1?nH)YV>dm*o%=TZ*^(4A;|tvaHpSe!hl83cUo}Cp0EulniBr6hVq7s{Ie{i*Bi2R^cXV*QY(dQ$qfJq&xS*n- zH49a)XNC^GVtbieGfmPECGeg!6W;8Kk19RtlCNCkVNZt~vJu`UmBQgy%S_0=9SLBe zj@}3%kd+-}MwZJe-D;;~Pa>6o1%_} zc+OPj`r)-ALhT8HAowLFZ=ox_JQy;;lD6&qH1zFDk2u2TFoN95!I5AYn?qK*z%EN% zpbzO0Q!n~^ECPkYAVjnsfg5gkEqQ`kZ{_-P!+tvn0nYRZ)NYEtvzR!Qb51Br#}{I# z(LF?zw7&fG=t0{5v4@o=zmnCq(;NQu-c4G9Pcf>nBqqC+I-Y6F++hD?`4@-6{EZ$6fb<6`AYBn5Tc(b243 z>s{)_UoeM{DRW-;E1SL``>m1I*ek&8JbY4T6Ylj|_DppGw!Q@yb~ssFR2X?nr+VkT zS{$2zf0C;yqiRT_VpTjwyuv)cW`LkdHc_Q$hB5R$1{fzNFYC&#QC3q`PEMHQUrN6g z-H8hxvcI7g*(9oviKHLm} zDLeW(Bx_%nYe>=j8?_)d?e{IJ$@AmHqAjEI)jt4xDtoD>(2uu4M1w%BBT3j7UY<8HU-2TgNeOu&Q= z0ge7zCE$~eWA2cmVHJsG#h;h?%VK)&XB4~58n*NuNS}k*h@JF6o9t7ONTn<+1UWkB zms#w5Shgp|uSm8EXh`pat_w0dI0@ZaU^%Vxa!P6Y_!f!`>X};=CH=-uF*9E6JEyrL z-x`|5khTWDDrNX94g=VkSAUa_^6`FP=;s7K7Be}jU3&(Ua`Vg&T_b5z87u@wQb;r=F60r)GxJ*i#Vy(G&^16ghDdKhmMw z2(7#bh0@5P?yEwUuSDnzud%RE7$!@3XjMsWR2cZBA#Exa#VIQrDWUHsXqw&MY5~=j zi62Fj%FQ)4g%XqQ@F(0J+D-?7>h}|0La7Z*Gu;WCxQG&s~Zq#{>lV%;ivMh8jTBCiB zm2_9Fx)b`gH(I5UJVQ6g>K9j69-G23k(iwPy4C&xDQ(>qX-~iv>NwS zElrxl3U~~d&a}-XBL6ChY@A+gdN0HSwW!^4y0RR=!l~YQ z38LK-NfQBP%G}!MQH&6Pn+pnn6S0omvK0^*F-F zG%pS}3gZxZYm&D7#4_yHquFyg3=U4L1M~7GgU;5U6KaOPod|^OED`ImV+OIJE^1U7 zM+^%82&Q3s5ZY~AqWYu9P6tAF4oV&02Z$5*nOT#a)z>)_b_S)u?(B?*b8tI+Zs5sW zt5%fr6TGE7vWZY8)$^Li)hbrc&LzC$XALl*VlQ$K(r_kE!jtE=*HP%g?>(Y~Vm5DSJ zMtD!}s~JlL(L90@>;l3Y(JC>AojA)T6YDuZOY0|@bV&+~a8oqfC|Bw12H_A_ZLcbE z8gnlK!%jcu@0!CT3GKx#kEIe2x)|L&M=)u*X;^R2no`k6s#Qmbofh|FzC=mts6S%w zxt(5PJkdZ=G5+ihWSfE?g#vwU8lWN^+02f7AY~U_&Bzi>IX$dS6g4*HXBiCTx(G;+ zaJK_j=t$msbC?uU!a)cxKBAta>0gkN#UL=xL9N@xHUOVE_k z?>;h7DAtDp?t!V?BGg*Kw$CKdJSiJbU;q+!Y+tTXP$v5Vf*(@cf-+*HHyC+Pm+w6LMM$s_#_As{E{@Iq);y^@PABFd6V_*Q39;k7yfQM zu!7#2t=PwN_gL=#RPg6=lZA>;bozI7_uZFjv0-iG2drSoK^%;oKNOV~s@PcZQ zEp#j~ea6#Nw_1G8TGhuBd>|z-s1TPzF==8iUm=t|J5qQkjPT}_%Nt&@uf*NfVp4yf z-74=9hqY#4*TFL#K@E*InalggP(q7df|073y2jNYuurVRhKS6Hk^LI1t0m=#m*HUNXsc&2x{xpK|n-%jxzcMn$ZIlNHp8^+?%dQ5lFZx>B5{ z!fW#)%WGC7U70&r77<#_cZ-Sot4T%VRosK{myFUJ4sJr>t>YnNsL!J)utSVUY!C47 zcjw0<-0c!Z|Mpf}W38!jmXvqr#`6=1yFNH5ed2RJL8Jsusjl)nf+EBaMNAuA0s3 z?zLj!K=E8{ukA`r%iANHEc~!_2pQ7YWN8o)lXxr$L^;$;Rv~jjL?^AtVZR3_Kb@xc zIp!!q!tt+;J8Y{hT>-;BdEX-hSwo_lROYq}nU#2NYcJXYc$ocw=wUX?JES3F-ssx} zQ02sE^=oIXeScS1sOp4n8mSUIUnXHxB>LXJ6;OLSRx{e6h0)ObJ}op)HY)I>1!kW# zcQ$#BJQy&8#aS~S9Sj^OfTUS$RF0&ob)=D78cw@+HB*0oBnPfs{7KXAMs7wbCHZ%f zqd?rkM~;upl4bhVXsuJXUw|Ps3IL9nYi7QA(bYBwOvi+!Ptyzl|?Vd*n`c%3aCnlaLkb(@pKwMH+i^GAzDTuZK24|;5 z?*rnNcg_Tzkv%#2%^fq4W*YN&;c!kfNtkw?P#wMf#E9_LqK7ZEFs`Z>DG5$KES@}O zTADOVDA|S`f*UuLxW6TgQNr=ykP&hL_XxwbUkB-U=Z9m6nyP1FrE6%?E?#Ma%ICTs zTUcwL<6U>b6x_s&}e{5u5{li$2qj7jFHk92O2+ozl~W6~zxo2Uf-> z7zPwnr2c!bIf-5v1-tiQ4>|o~tnG03t%9a2cq9VqmZi3w8iz8I7z`IPUtxyrBL%Ee zHaPtpq!OGQRDFw(XpeoL?16pplEu?XI^(b39+yCR7F-26F{#+`qqAJ6iL4ZTmQVX5 z@qY!6ODQpX1#sF#;@l@n{GDr;N=c0(*U{MBpA=L{qZ$$h^8c98x0bE9Qor78t^I;r z)9J*{gamA`*&FzqIQNt;r+S`LW8w}*110{f1_SN4owC7|gw3EZEaE*>taY=@5{gI= zH61X@(vii@!qMfN_Az``63}D*76;DYX9rjYQ zX>9t`)cOkxJ}^&K;UlsG5KT5MUti?Rwm{!W@Ip}9( zNu@T}-(ByLI8$#?A!RrhTiicMa?0bCCZ=b}FKO|Gz6D>?+4PNDwUiSij-^Mt1@$E) z_9B%+KCZn<8)D{Dbqbxryn8s(Wd)*q49zNvi$>+@=g9b6BFsoH!rEZ)L1a?~Mn5tY zQTAteB7glc^`qNXwQ1m@Ui5)?-c4QZV3EQsKk#BVP0Hm$Gp1$LFSls$m-Z=_ zo8acpjYkQSe8LnuzoY?tTG3Ju($?c+Ysjau8I(_QiHCWBL%nhO`o|a!{h-27)m02T z%PD%^_*Rwh1RhJoY&(O?x`42}2D^c|7LttyUW(GZbkmlv57A4Fb(!mjz%4iS0wGI< zH?>Fs+Fe;2wnd3^8T|5+GB9(E4E|8v;U>TWdL8RMTE5)yh5)~td#8R{X+~Y6p3L9HIt=eZj)w^c9+8!K7d}&t`aow-OEURfj9XEfV`mBB~cNz z5!vD5oF!DHQJeP(u3)WbjD?8xQ9FlHQ2WV(Ax*$fP>Lh6Jn#DX;N7kO{*@owcYIT9 zR2``EoqG1ixBfR@Sn2Y0Ig%^P*PUK2g)g`xY5boaJHfn`GCx4VEld5=Gb*p`&s1+}c z?A9mqN9v(6=MDVYw!n&fsm+S+lgQ4xdl)rgdN%bK5XQ!dvIky;S6q}TsHer^Q+Nmk zS*s=Otory*aPBNZrnqdDBmSV7CZW*l8{@vfGzgN^5)xtVfiLcq-s-S{1b@Q`#}_W? z9LnlYT!rM%o9A7VoNuEnfw1~3$MZaC$^wP{&=}p?V7Id9l^=s#d#C8%XSVdiO3I9b z&0Qvt^ss*#YsHo5n70iAX^J^@+8201lH!)%4eP99q{@=sAstXWwGrK>q- z1nKJCFTu2iitN28KmnxPz4=4+8yfjuNr zC?3dNx1XLUG*Zn0bN6K~`)W)r?P~v|_n2GC8uSeAokX?)@vVc)QIk#Z!{(VaPr;%( zF+x_IZ6V&A!B&()`jjD&JLmTF%kb)Em-4Dpl^?;uHD?z}$>{N46R10Tvr(llr$ z?`G%8LJB%N#Z4yJOHogBiqg1;aVShQ_|}kJXk5=`UKrc@X?lGkG3`y;nP;}As2nMC@)7-57fplw(@7Y|o zp8+!K_ZyA3KQp#Mw0XSG=%t_^b^+l;hrOeJR^sL#l4(ib*|ig!bB7!IJWA#-d{)hx zk{AH{ggoO6Skb{*>V9UO>D!`lwF~Y!kp0(yD)V&NoL@S~m$y{}IHhCQZs9XR)=a2} zUS<=A7li(GU&S+JWU#?Y7+oU0mZ<^G!_ zlFLKVlLx#P{Lyo?&WgiWXt0Z(=_1jbJ1Q8SoP^3&o%rDj;0EN=kSI)};46^lQV^!M z7z-kiO($5pzB)T^1$q4>SM_GvF#T6NfFh!zOL`Ha?P`{Nw~~r?^lIXC=dG-X2I?~v z2Pbh_q}8v*=l;2Mwk$ugkukxVg3{a*id)0@`^r#;1l`8sGYqCf)dFp>O1z8q*zTZy z)-v)}Il)bviW|;Qp+IY`OMD+MVlyj3uALy3zNe_1%Ee!Mzivljp(vos^FPmn?C>B*!HHv-RJ-6Z5gZ-y=)bb(w*QAndx4h171+?hG79mx+7z)fb(dL_T zH4Gen)aQP5)}AT?0~%i4K*t#Cg;?IM91=gCc4oylPvOx1Gp46+B~E37PM-K7Q%SLe zuI<{}KNd!A7vrofwIUz+$EQe2ZI)NF2x_+2A6%uq%fC6*-U>T$0R`YHjUKyu&vME% z+jAUe_SM%ZE&Z9jW1$#%B>bK7x~ZyAcO+#1uLLeyxU84+SHLT5Szl?`O@paYsY@uT zh&?_3zyMpcIM6$v5_d;>F7b^ebW6yxbgQEGsw=FOe7Nv9b@KuSA6{?zHJ>66ZY}bT zIRGjR$u#G_s%5G>JIHej|NMOUKN`8kO;InWKEwP9W1leq&^Sn|jD);Jy7U>_ zh?Bo1ra#6~Q0xZqY#uaFUDN=h;N;JP0VacNockZw?c)p0tPZQReF0Yo=HaMflsg8V z-w`$^jFZ(c5dJo8G0)88cGeB{0$ATo-jHk^W{v9qQ0AAtkltGr zGvBQUGD`?z8*gsEF}(SUN-0V>I}e2#7w3!&J@MlAYCIpfx%zENw@~A+)CFW_X$t8T zZ#oZP>uZP!CxpYy(Mqbw8#W6vY4Q`+wM?jHH!Qlu=Gw#EaRr5tp6|g8?86zu0*Oka zOjoJGzqKI83>B!$xUawNTm|b!01l-zF|^tR&#PK8>f2j&$?#C}6&pK5q#s{FeyW{j zIkEC(n?o2WWiW*qzSlSzh*XYe9n(}Dfs@Y4NdC4QmVCnv9b;X7>|4FO);taxPY6x%<`E=M7&K}XSXcNzzee7}?x z9^4of&~vvKP$R=g`?0xfY>Be(1RkkAQUyr`Qof3#K-7sZa7JivpFOXqtLMZ3#KhHBXt4MWLqc&+X8uJ;4Ui z0auw)j)LR!_S>8V;2z&f7Mx(q)V%@gpO%5{dXFK*QI#T6BUPI2MmSqJUjF&P7cj-8 zR;oh7pddy|<@07}LIcfey7U^9fG5XQmo*gzh%p+-(w8~aD4CcyfAbt@`I|c_6#`2R z`UD@99yVApxcQxF$PdNwNQ#vr z2mw4%cC_PzTkVcmlxuxVU-}t&(HG|iGisCAI& z6Ok!k#byohBg@I-a>}zeB^mGmqnLe&viFR^r34DEg(=$73wbe*01!A)q*zC zk;rkAgSoIw55?RKZ;KTF;C z#e-O8N(*^Q`nrboS-r|-?iBD!)pd+kU|><9O(@jX(ZMtx8624wk#?6ggD@3tMF&)L(dxZ~RZ)W^b%Gh-yLZsH_+C$YE8Lk82N7T=%WG#s zV7a-WP-;+h3e`#+$Wwl3$_c`yB%Azqn`oKNd?h3_Q-eQyI^0iY&XF z{%*9#B@L>$FP@S)d~o7sf;Ua&3jNQG>ruU~adpn4esG-!7)~#lGAbi?1ctKp$i90= zmj1+KS4S?xssr$dOFPwae82$zbRW+kTK-B1$c7t&e5{?EIT|_$_wb_knUNym$(yvB zaAK=^v`8QX4_)+*VE6&R4hkozqN?J_6G~}Obqh69<)eAPaknH+9hWkzTUW(lYWp?{ z5N~X`IVsGz(Xy!4Vs53|G&~?@xjCIo;3LCgb+yqdAa+u#eW+C(lZ;__)1+fyw>e?Q z88TS~s(-Nj;Uj>i9Wt^B{_X-rmh&%8h|R9!Os#S#2iS-f0TRUdtMkFtepEYC7-`d8 zj9jUj)~Q^*=s0WkhBm*?`YDco`O5+@(_)@$dU94gX+8Vp>h#hT7~bn4vou zqQVkI@oX<|lWubTVnE9ho2bHk(^Fznu?Udspv5jBq>T9k8XI%H-L*p=bwRlmqbvXBXW z9ymE}z1J*W{_sfj=GS~y-k8XkA^m6Z(|On*U!bMAzO zk5y)fzFa!@eQ2EZaawvBVUf0Ji^f*sex{@)lv?sSr2T^bEq=h%?;d)1%)U9jLzQ(% zd|$VrS9UvL`DN>6F{OED=i{S49fkVhOm8shB{LK zT8P{35qcKCTpN0i_-qFJTy^9#E#%;(mkfkh>kOtSnD&6d=%2DtT~@M-q#+1_J<<@K zf%fqbF7SJB#!Gc&-ahM$U+Vxi+n1t5NtZR-R4dlTRzGhOjaoWl9cc}7s|3%o ziQx41lB)vTlNRpE$p5ryvNduxD?~?cG;drBK+a)NiZ^iIee7)5QQv&5_Y$%&JOEf2 zAr@Y~P-}XfL9(NlO2Q{MiX^j~YE&-}^D>+XdxYt=8GHG<@$;tPgNiBuu>1?%x4gDemJmD0lu&{(XRqbAbVYCI+qd%Vk55n8zwEP^>7cWy_UgDmwfmsyni{nbK+REP%u`zkv0XKg&o%{T#cr8BZAdC?5r!?^3Bq##0|kQjK;$ zf6)c`qE;4BZ0s{~oyiK8UEfzNUKZ%nxKBw*Obii{!z}7iTx!s!rLM6erfE0uJ=D9f zu!o#(K7CVz@twEx&Nzm}4Sb893z^-~=NrUd0#K1%MWbfoSL7A67PO9^&L3E`LICqM zKx%1Xn*01o0Jo`QJ=kd%{ zsjPAfg~b|%k^Dv-evs&*8&&oFtqt^Epd+G!Jq0LJaRkWT_>Em)d=> z2}?kP9(nXDR8Zdfs%SQNrG{TkP}%ybknHc5tsL)rVER6vLP1gv*#>}dEwuw3^Omd0 zMT~3dv`%-kZT6gT12tXnpO*jKs-Zt%b1%^%*c!6#>vps#E3QUdN)*NX%#2hLUbJRC zi#LL{**!bc7m`!Ge>sgI8fCM{$)y*>8k3Ant$SH$*N#1dhZ%iUrs?fd#y{vVy=I|! zSH0sCdmS|outh$%BbYu=m7Rr8RO#%^P{K~~qSoBXpQ8X33G1J?s+ zvu;yyARM({a8H%kE%Ej3^or3R)XL6$SH7g!1XAVG64jjd&x)lYT#nQp%Q zEBU3^G_$(WMSz8;%5Lz-LR!>7tCp*DJlKCx&Gzz}5IK69@2qaT63)r*`e`ZvpYGO{9}1abjpwj4a49ZGTOoWS4<^w@x57Sl z;u*gfJKbRSW5pp^%@IAJtC?m2wUhL?^ltT@t@mcY?8DG{0z0Lpmtyc_J4DjxtMRyZ zJHFiRrvX=>d5h1F36E^I@^J`;XeOmXC+B@;Or#v@9%5X&Wcv56EtCe=DGozeu}(oYCmZ zxz0#x_khnG&>sP-6XbLb)5l{-yc*R!SRY8D;9~qX+o&@dL?tN^3L_=cL(@D#tJt+E zenTZG8bl8Qqxyb{KSX}C`<4-WdTMv@?le5xP>sCC5M-Z2MdrTpxryvVsKei)8hZ6W z9YT`h1BoaqU`gd^X;OJH{>;Fll1S}l`}Tv^Pj>k=?7D&9b_^OKPL;ByuQk-qt?9v> z<(}&~QszqyU~|okx%!me_6l(X=_J{-yf`835grikRy38v{pE-@^%SpBl9-2J%r3M~ z*Lh$=n@1(UHnrn+f)?41DSv9jvgCY*$Mo7R!(V(n6Dkn_^~Q~PARm4M#Zy)w9|q{C zfgkE1{ymuAT+g4*^XT*4rKcoN5S$U6`zd^&HI#gYj2+T~i1KD>{*xpvON=HiJltRG zw=EBHT>RB0tBxtiD16JD^4?p=IuResh_n?CVhs{v!)n^^WKB9Tf_`F{GD{hX@IYXFg?w7b0!_ zMTr0H&GI*qiwRY$i;Jp1&(mZ4HRrWx#CCv*#l(xp z4ROEdK0yVwj;P04S{#fgj3Rju-w&Ovqe?(>_6TO6kiifzb^o_ICm$c=_yiy#u_`<$ zx>T^M8}}yauvoolfyzkAZcUM~q_L-HO7Z7A!xmIATvCuIr{&x~H5WPC(w~Tf+xID> zp~ddx##l6?tTU*dN{t+s4Kvu(nrT(0tf#+W{KcR1ftjdMvs3>j|0Wz6Oy2HWVaa+`sohQ3)Z8i(yuh^hTwO1x!o;Acm3kW9xC7lTvI{xS|*~IFnH+LqNc_(-` zUs>L1t4gi;tY37ZfW6aXe+;AbNT~#$8=Ed*`_%BXcO<+WgT(&G{kGW0VvxC&c=0_DNp>q=cV&fVrVuI*A8 zMZ&*2Pxi67RN2YedC|VMPP9LJrji|oQhC5$SszXfmaLTVR8jt$tM5%fw!azJ+n*$2jie}MM$5dL*u3N2k7XNeD7ruBj*Oc zLKm$)LlF15cadrhO~qAhmucpXGhjCD#oMH-S11TeTTZ%rlY8o(IZyAb)j6qF;Wr5@ z5lac^FVF?!dl(*}+OGthh$gP}dFmPP``ds9;Dr%P5Q4M5nYtLsvR?4+ZW_~1o%X~(Hw2jrLE;JOdV&=idBc{#8rZH_JZ*DF`1KscVAMPTxW1s-| zhXQ31VhN`zZSeV~1V3o|eckJ9NT)Lw{*mYZ^2hHo<8e)}?{@Xhy5lBb6r6|<9P$S_ zaJe6A`M%X;n#8VX?qoB)<$d3+{G~LW@N9l#l(alQzslS_Q(XHj41%_4a;>~*j7n;w z)P0{gzVrK}65K%Hp04AkYMCVWYa|u6fSPMzPqmyR@QhI1DEHDM4V;S3 zPadOr>u2iVC(23VAvw6q~x$DUTX2?XX=vS4;g*3_Waat$S= zT9$j4#+_SwS*nkVD(#z{ATVSKXU|V;qEvSM}3V8hrSySXW%f*2lE#rMY0AkM<*wB2Ho- znjzePzlTy6kcs$FB^*C5@tW(qCkIea1$H6&I!@u;EcaLWsrry}w^1MEJHH(zQ`tq@ z&&{}C(ck&>41X{SbVkl)1OSlXeDG>j7G*8%)}On>flCyto;a%a5)Xyx8t5ARADtHA z970OQX2bYrMiES0`;STVJRm94TyEY z3Qw-BC0=h|Cyq{$SZ*&w`O2xdh-^(}dg(`9e=|DMm|NT6?X&6T&h-3nknAt=S#N74 zOTUBuLo3+|cNy5TH9YmoM1&TMU(blbs|)M3%lBy)|tQf=;O$>Z65qZCmELnvYO52S*#mRPzKpz z8jw#ZAye6%PFQ|XB#S~phT)ZopMzj#!ch9--2Et&*VsB=zC=!n&3~u7{NN6u^ue45AKcvPf!uFwTk@=& zS;2ozt+v$vU7IHI4v^!9(T~2?+uJEd6_NO?{lXsE3}o%Ymf-Z71cq&nplXPNGNDDW zD;Y^2DXWygIm$mPyWSH5-)6mH>-YM7x#5n09N~#T7)XPjrP3Jv*L(1?O#f2N9=+Cx$jf(?-AlCf&tEu;4N*PHOQs!29!l#< zw#|Q5S$)3gt2zA~gRa}Va#WZQJCTchDkcO#TsjP?2p3j3CZ+{`{~x@@UPMppF5NzQ z4vmI7Mjl|jSp{MO|Jr_4cg^K$mC?PvhCU3Vpgl<>E^Gc|RM5y0{LF}87Hg8A|XOPjD{uM~ess`0rSj3s$0t}kI2 z&u=Cs)d|c-gurgul(m)oqJT_>;;rql zl;xD1XJxIIykU^z*xJsjs_Y*H`^&Bg8?#(7kw6wYo77E;(1!y}!$N+!D;wi$tvb=D zY#BWaHVLFn7hG&J)CXdLgUmlDoS?u%iJ?*nrH7+$@pm_8JV2E&C1^_bbz(`K*cy)u z*4{UnYT67WXiya=o{|8SL$>4t1$+z$P(wHV+`KUzm$1r|rW%Elq~bk!p*@;c&fm6W zY$vD>#*?@6Z$?NGHg1}ML2hGz2+7&+{eDDPSe}JRsPSY5va)63i;yoqoyjvn6beDS z)R||ZN)xP#`)bB^`{@H;%`NmN?6*pJo+pjq@dQKs#anoyF8RIdS|hKyDn_SDI$*hdWqSfuN_L=MH{g?nX%Mn7)3&5T&!qrP-xys z2ZBfqA5Z5U<&1B``r(oO&8hjl`b~Jr+TZFlkaB-dS)(qWBBS?F>r3e6g|)S#{x%PY zj$?pJySJ%ER_^T6Ush};G8`m+T6udfYHF6qAm@AisfRrB(}J>3k{s+owFYs!!aViU zu@D9-+Sk(vfKcHwRHk0y34y%JcmmH)U{HN!Y{htV|M|xEgyCtx)H;C!7CnxSZe4Qc z!Q3zV)mm(MHk$`JLjontaMdxdhbC>ZYA`y*`+$aN|icU4zbLybl01!W* zaI=eD3$qRJOSPCIQyjs*S6|4vgjpXI6T&?xkK~%I4j5|W)DLkCOdr6J4>gY9mAtbu%4Q6AsO6_}w650t+gRd2_L5dzBRQ4#;%GvJ{0M z#*ph8Df1HKjX}sw_+5R~+_&9_$F~pL_jEid3nDF&p(h_TKEkX+@j34GDZF7*d|`n? zprD%33ZPFGNeuGqMMt!{j06?jrV!H=3H(1_u%9Ao0|EL zfpc$_YR`Q4z)FeA=LFRmWF)cfgqO>1tq4G8`5_A#Vo@juk`cIadKn{%+>FSB-C3zYs+Sz_TfDt(5h0M>N0w zpccPhA6jzCM%9`-kBT_p8M3u>!JF)D?h=c{Vow>`sR%Uf7>`A zybt>l#7K~KrR~;#+WFeW@vdn2G^yY)Wg-d&AzIdU&Zvl6bh$G^2_n(ar1vrZL~uKe zUN)}Yv!|tqK%uxkbaE6Gu~hLSLtCbwAzhg1RiEh<|ui9BH+DfbOu2xeImAaI^+R-4Z zZltb6H4(nTCy09uU=U^xy=O>x!z1hZYEv)Md9Dum)wXJMe!u8V??9F|^v_Ba$R51M z)8XiAfGLtr*mY>%RUL!rkZ-k+Z;P(lVn_K7i}75 zpX3-%&tWC`~|I>0ND$n*`=w<~?4u4dkcot)(HLvbt=A^hiQ9 zb4&|qIep$8GNNAB{Y%g_1jSE6`YGt`PYtc-c3ys}66&@6@7;iSrjv4QTpml>CP!Y- z2Q@!K=g<&L8@zocM!NEpz{}#OLS0LS6rpZ2hK792b4O}<8t@it{!g#97TRLvbKJe= zVOKv=Ht-Umx3a!UKf=dmXye*42@J%_Y(i5Ur(8XvYSq z1cb}FUK&Ly2i52*lmlG7p9G)^1Hu%7a@2AtVWJ&C_yraSgf?!}j1;3krG46DOt7gJ z9;QDQnrEU8NgZ}^*iK{6$6-H_#;$9O&G&6gjP`$H!9gLUv1nwtqp?=&@U^+l@^@nc zJ))-OhL+*x7M9g>U(z~?|I(M0qH|0i%k86QK9QW4G2ALNEhX?1Cd>6O5eQXc7K158 z+^j!_Dj8z9)Yb+yF_*;egy#w5E9fgbn2tP!tA>(bA#t!~%^J>4`6|XNTQ5gTD-#EM z7X-r+m##l7K11S66F-a_0rNjnB_(5wv%<#1evy(VMMpn|L5Z$My23q&Xu=ZYpOlWU zI2<}jMC?uiDaBXJyWv4bDRpCaCvj-aSRccvvP?i>guZ@^Hq20CGECzlr9lXVGGgq= zRSB8ECX5q+i~kI-Irc##(@{)M2L!A-KSdOPIcuk>l99$5X5LFim0~$Fbh=C=V~NYG zaQ{qt|DeA$)MOIca0sIQ@cG-YJ|tkAF8A-N9e!Bz2R*hI0HNbQgrFEsKNQWd94`=x z#1g4Yu28Df8m&%mFq+I3tIh6ky4)VG&krDiVmLukG{bVdAWE{LYQKH>pU@4{vK`m+ zgD{GdG|P*!s++d!hjE&hb=yDlx}W#^K?p`r3@1p6W>}6FL`hauO*c%-c3jU7!YEGC zEHBEcZrZLN#%W&GZ9mTIe%|l*hY=LR36i22mg5Cck`-0c4b!q6*Ykrgijy?Ui?XVl zw(Ey+nwNFkKl8eu_xJw*VkDfabXF#3uFsb3f5CD-zdYG_^W{H3k{OejKl^6>dq3y2 zw?Cr*iM0`%o+a+J@5ju3-&*_rVa0k^zQ4Tp-1XfupB=Sxc0cdH%<>&Snb~Dm9jgF| zwUOWg00000Ktx1DL?j|2A|hgDW@cvAeFHyO8wn26PXUB5#u#HnL_|bHthLr!n>JVS zFgQZi=MYI7r4IlA00000002J|0001kE&)iaKLl3@00000000W2--r{(&^e$0iFJf3 zrIb=CN?v_{9u&knO_a1GNs=T<(hf#~iPx#AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`MF0Q)|Ns99Sohoj000SaNLh0L002k;002k;M#*bF000rn zNkl2(p<<+Zo zFX|FiwDeXKrB$URVu}o?o*-&WLI@#|>5O~7e%npabp*RL{SIo@^W+9y7K#y=Lg3z2WKrs`-7&6j=6BR)`Ir zV^IL{L}LUBsy02)QJ?IokB5iPoEaXDyQ>4K=C>*P6y2Ciu066Iu%q%DbZfr@2X0eV zdf6O0;nny5TpdU?zfGwE8;y~XEn1+#h7P4)TFLIw|6WTQh7bAVfBucJl_}B?+`fA7 z^#`N$Blvw~f^t=gLyrc1?{1~m6A19xfj~jO#cFJ8iZmG7&omlMCW8UBs{{PAQ@X$> z89@DzY@C2K_)wXabbzSa4-E=z>&{s`@$Iv~XpD?B80hKhK>w_iF7Q8TkF`f^@rKxQ zZ)SbE5J)~(H||4H)Ho+ccf1}M5T35y=<0y~Y?Ll=KJM7MO?)u(y0ysIQO#{Fo>5*D zkAJtoIM6iC(7W;Ht`7Xqg1B>s@g37zLvOX7y&U7r=?nn0jcQkHw}pPFxqd^ zveryF=n?gy`D)HtS10H{ox26@XqsqfF=#CUFO>C7OLn)pv!3T@U4JDE^8aDoB92#> zKNoQzP%fQAkBr-w3sGam_PJ4sq8swje;(`{)z55p#=AOk|0&!paBtHjL&)r_Up`==Baa{J=)^m^1dk#}v!f)%&;^IXS=?4zfZ z?O5_;jLdk?s2|Kr$Z@q0 zmBlTAOKxZM*c1h}n9u_Bn^sywNskpFtBjH4KYAPD^*mfjRm!o)nS;WiCS27ZP z;`>H5PPr)m=xT>=a{CB=)Rb&c)p!LvTWFdV0637mXO!BqHl8TZFRaBDdjqJyyvD2Y zi}0CzAVk{-9L?n)#AB`wuc~n77mpqG>>->Y)HBSaDmt8Td*kD0&o-Oc>?+T0-v?*1 zkqF-*fCI^WN|`OQ$wxq}<>YJX0H}Atdz<_u^gj{tjr|~qF!9ZQ@0IONRGz3&5Z(Ha zf*$A29auy@ZYw;D4NUJCJZpaBD$i~U9LyDJ`n^}Yp(*!_Q+|^5q)3482bx!DQoy)5 zaE)^Y^ls98g1rxj<>Cg{Tos-RPy?v8qsNP)5o>9LhJXWEMuW*@c&f=$Rqf7gfphWW zO6{B5&)ut`Niyj6_=f;T#5=+vpIO8 zaQ3HJ#)nO_3@yW>tE%(c0t-NRExTVs$^^xSy09Vo@OPT$;Nmm68R9GG)ID&uvmd-N zyVI|>7^ro`{k-yLI-+kQQ2bjVW5>S9YV2$pVhE@gQQ4i|7T6sbhc4tn4Hh-C?-EPk zv&#p3b+15HR-Rgnf#5}c>GCpoqg{_wOAHwI2aa^S0BS{gLD^f`VgA98LdH@^6TG8y zI<7bEF$mSOmDbg*UrxX&{#H?jb90J9L;*xUyzhkWE6A|sED_1zHcPXZmtf%HRwwN% zVZy%dxzn0M@N**Gbmyqo9H@tU1fFjuSc*BFYAzs?jU!5 zQK86#=(_v%>lT6ewTro`0w5GWoKSCn4XrX7hNQL`Wgi8TEKl^e4ue6TwXSC~L36MA z(atX5rPr@l8Ub_YPhMrEqsmFcjwhF9K4E;>)YH&S^K?ab@Gmo2CX>O?H@kT2JDC!KX(kj3CfY8DuOWAGQM&MktUh_+(lE%}of{&yg7rtoVKJ$~(lU)AB$OxP;(w0% zi#cU$gZ&_$hgy0OnY4UbpGh?t+cJKF& zv$-;ews78%Jzmnm&owhfs2anOZ5JX`UQjgDHbShv55smeh|hH@y{*7*d&#+P-@JLL zsW>0h-`fKBFuiSv@NZ5bZpf#47w^^0ud2jJwM7@sLc~uE_d0T*XL#5)#}@FLy)oL2ljS2eN}A%TcTsQc(oh`1PaQzbe>|PGB2bkeoEA_ zlqa1{%hB@p^Lq1#vW%~lU6(f@Bco)us_F#E*-9LNaHLg+tZoepChVN1GeFFRLwd~z za5*?{u9yqNa{M0N$EY$q-qmj4G3Y&}`CP{k7@OIpxitjpCVP#L$Ckr@1c>@WIm;tr zMxFO6%CB3g628h8qO1K0yigFoyzA>)=Dm~X0Nb39((1XK9yG=dzLP!O%Y(yj5&mcm@ zS7hB;OYYbtuI_f{`|5Aw;*yhtgL{pM+mXC4xMo1W{rYvcz@9`i<7fg7)X3)i%1B0K zB2Q2vX$I%Lubq-?uw}y0VVVZ;p?=43T@0)lp75}?E~Ni(JyE&<93{PY(&52ye@q+9 zP`GiW=xdPySK{+mhyi!k3tL+69eEJ=AFVl9?tSOKg)+{{}g>r(01P0n~R6n+l85UIKWiwk$R z&;jdv9?sXy1KUhT3r0Oa2cq~g*6_nx;c{CzJSqLMssqR|$|@S&t|oa3BWcj}c<4pP zMPL?vu>e+_a9r8`$cZ;JQ`2fvpITVQ9Rs`&;vMp_AbmM8ZhP|1V6Vn~%j;I@<52}C z>eUKrBs3Y7em`8*$On|~34w(FId?)m1y)}__=C0`IOoU~9=?COq66Ew2KoV-MCL$R z=Cy&+Z#)ca7}ubNQxCzzd=1WnIM852`i2B4D%)&E)g`QL(CPHe^Ksxo_aHkm0(HV3 zEa>t5A~Wuv$sYy9xs~}sLa72P3R)rOhvC3Uy%{ABz45=U7N)W|8IpBUH31I#oQqej zd~ka;Ch3z z(4)oUi8vSOQ0dek>n+J+;EfhNc3D?~$Ya6%Jg^Y&cdmzO1LV#sye!nvYi#or$L}ro z3qY~##f}5#_K)#IjXG&93RiHtAH#|ts?l#3SFTxdMs@n)hMvNgCo6?m6t^#8x^`{b z_RJX)|J7`{Fm^L7G<5bqMjlyY@4JEq1y!Rit`?-C(I%fVY)0(XDyB?jMv z0V@uGm{$%R(#(JW_gZ?n9vGJeMmWb*g2Mv9=0ML?u0@>a(!Oo4)7MjPePW~Bb3*a4 zQLmf#W;91dnvyiAc$!_gHlb3o>_X&5N*WEo(N|6sZSTE((f``tVkM+*&6=lL3_rm=@&N1$BY4JdFv5E&5Zg~eZ3$or(E{_Vve1wea)BK)ZxDdJ)ebq*e= zzO~+V&y#-f2~n$3JdzHgMIz_PL_mk-Qf!qeP|0Yc)#q6PZr^F@EAQMx!^`9&!9MTP z!_)_%Q9!L&*#rFCy@n}EffreguF!%5f#cwA1U96P7GS}N+cUK}Lrv;5NnsiRWCjG# zl=(Cb^iuM8h=q;Yk;+BtG%kL4Pu=YY6bf<7O+-gNIp#}%1?9QVkd&1q^=fw0t^0mK zTd}Goi(7nx$aNIyYjti%O>D3x3D8s2v7M`hx?dh@?K4Qe44Us%JJu)Q zZvCnYYz5#;w%(kDy*U`z-Jzr;ZhcaE&`Q%0{Dob-Uw0zDsA+O73V<}+Dr^eUm@@60 zp|)l>W5r)-H1QY~YGIpl27!X`nOC(k-8&*!Y$O+6efE(e>tqP^@r#i^F1ua!u7WM1 z2Yjm9e_cBjp6(Gb#J&r3Z>n=x4eNIvZmfw+d~37ES&L?~mRuY33a zdmUgp{V6QHzICMIBj&)Wt?~Z4Zjh5vWD<2C?uAn))IN|n{@hgcr{G*JTSW)Jj{>gi z4^(wrH*wi2QOCto6T$=V5-Mp4iK@rhK$r-tD|4P~wBhUUM1^0AHt5OcMo>6bYT(hZ z6A})ThR-44K<)PzKo4HSi>6F&boAzfPpX`Qa6Np-;TjD5Oz57^Dge;e7zfcuG2iU2u3 zY}3JmQBlW^akZ-Q{Ks1cEGO;TPn%{i&_LQR)-X;zN=)Y|-qg0iNe$(+ZV_=Hdby1+ zuI;{}q_lIDJiI(7BH`e&*Y?njb+pczH8#KaZ2K2&&FYTRwoy-Ju5TTo;%(dmE=yks znPU%)6|KZJa+|!zbcQ18q@YKQqHAQ|?{xA!(dQavca&;DV$%7o>JPx&I&-*m1RN`z zuZun`;S@62;Wy&1Mtxw;JXT=~`epGSD{xh@YgbB2csP1xNWm{fv8qj~p{h}0MBPQ~ zQR289{w4nqCZtZ!iKp==x94y=5r))$T;{?X%fv!m_Li8V%QRkaYVVc(s^LpV1gKII z!y-nnjfshgiHX7H>iDWDCp(WOJQKW%%dsg*>w{Yaz7gk_{A_To=?8axl9(IZJM-}L zGi&Tk7Z(ibc4*dt@Wf_ET(&7x_EfTe@FuSnyI)Aw1oxPE@r&nwY#AE5 z{U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/img/es.png b/roo/src/main/resources/static/public/img/es.png new file mode 100644 index 0000000000000000000000000000000000000000..c2de2d7111e3cb59cf6511dd2ab045e824bdb43e GIT binary patch literal 469 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 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/img/geo.png b/roo/src/main/resources/static/public/img/geo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4995b6f56d45bad081f089ac6e166c9f7e2a4fc GIT binary patch literal 142350 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 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/img/logo.png b/roo/src/main/resources/static/public/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e23f915763c67d9101f70d4883325da7911e4f5d GIT binary patch literal 1761 zcmV<71|Io|P)n6U0*s&eQdzqQ94?9ln zWq0FC3^qslG`n-t|9o@K|NPI<$T8D0f{oFzO2h^f3*2O$bH4*Nvj|Mf*>wTD4TKw` z;eRG#1I}XF`K>@X@Br}h#TGUXP5S+UX&Lt~Ch+&>{D0N7jNdGH@TO&K1}bx|`+z^2 zma$`@@B9w{k>?&i@R(^C2TjXpSg7F50^ld?d%zjfGX7v%#_ELtUU(r>0sI@d89)k9 z3W`*z9$-JPyQ8f$_DzE~fW5$Sr65w{(mN~|&lLL*C?E-(2lfH)0H1WUb@qPU;O_?B z07{jDhDw*_u*>`1Izr6qy`#VoFbs@%$BV!@pbI$UIX%+R)|r|uc-=eJ0;K>#!0AEB zT{qbbH#!_Vqv6+P{N6He6|-}|yQXFQ1K8Km)|sAh!g`XRc8X?@@YWF@_iaq`omvOm zotLlP0Q>^j4ea$ocgAd^0pTep1$=o~@a`8r9^8_lzG7Yl<`Upepu@C`=uE*&pyDfv zO~QvKbizzR>2 zr>+HF1GWJh^Kz+xlr8w^q)ua{Vr8|<`g)hvW`~N9OUeM zLDGhiq~OA3N#BUz!lWhh>MQDKa)M9nx)fRZ{qnNl^q?emOy~5V#5c8`{K!+a1;J~H*nnz`hF1dj zPuGFVDM44i#^HoUc}P)Prci+EvC)*pq~)D+J%^U~;f4yu#zu#XBS>75xfHrH5gQmP z+QT+R!&P3=2B(`wFJ5aNS!q z2?vhry!NTDptSHw7#x$NovbsruCQrZ=I-UC!|CXzo@YJn^L#8GX(~27*bZE|?vpJE zo#!>qOijiq*GH0&ak5wID;1C2p4t$LM}8fPM_Pd`KppT#EFM{!7ko!s=Lz7K^C4Kq z(t`dGk+-!>+K|kE6l$_Vn}BD%F6{}A^EU!Ji_9wRJ;2j*jsJYfoN@C%>k0-M|U&e-hXli$}ImXj))e>jk(^0*?WK>(XxucyLRa_4Urx-4`NDl`nnl z=Z9-E)Rd_YbjiPfkAP33n|g*Po{z;NRY26Myq^Ql6|E(vW!wq;(Hncr$*M~g54WVK zTB5E3mjZUS``J+MfFN`7qS)}K?Ok8YWyC!>2ljj3J_ID@vg<8P8EQ)ZAJZ8J{`!HR z+A^0Ty^@y?`j36s-cb!dQNOEjIa%o(w(k0>PD%=@^&vB#==qr*hnirOO+D0Es;g=G> z20;WBb!BRGUAf&dp5e#CgsRpEZ@d8EX#nZMXjc(x62$Os0rX00000NkvXXu0mjf DKx9>r literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/img/owasp_logo.png b/roo/src/main/resources/static/public/img/owasp_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8c820aa076ce15ef4908439a9d5c478c7641f2db GIT binary patch literal 4271 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 R_JjZc002ovPDHLkV1m3z8S4N5 literal 0 HcmV?d00001 diff --git a/roo/src/main/resources/static/public/img/springroo-logo.png b/roo/src/main/resources/static/public/img/springroo-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9891fc3469e2d628a95d6553ac51ea36554df2 GIT binary patch literal 25823 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

;ybr>53$$!{CJ|?=Puk;#$PsZ&m>OCeL=_ zUCX@7vQ8uY^2;xmwock`E-}vq)A;~OpxqCA2;hBUelORKHMk6X; z4AA*BkT$GV8$gXd0L@^2UlDk7<$`bmsn6OltUy~s!)%)<*g6S72?0(JIWbTVHV?pY zUm0sR29`9oGSM0VIq=WUE$yk8U8KU9A5K%#!~!{AzJP#o0=pQPhWIf7pMuZ^#!6D? z?dZPIO@l#q86gmG*$;@%CMyalA9r=FPvtC6FN+sLI;F61vJfnypN|PAdfgfVW6zRE zdI~@#6Lx_4PX}!y@6IModuEV7E@{Nue#uKjr}? z#xn*#{wElJAwf@Qt+#DPX53eN3IwJCm;_)F7-I#Ioxxu?F9!A#&^I`%-@rfz*?3*E zH{6*q!_&y+mtQV@IKE>lh$jvFhqJ&q76Upchf*{Y0G|_~m%$xiY*a|vc<=y1>mEtZ zGbR<)R!v2!o%vT;ycp8go#RIL$)bQHDv+Rz005Th00|t7%JM&|&*?TrI*Wyc(KLjM zM%sFN94sT3{lpX*000CyNklByjMVco=^L>8=;ZV7<4>Mz|BJ*WNh2s z6&Y*hmr@H0qsgXv=2^kO10?yGhK0p&pt>l$4?xP65&@tg=x`EnL#*Q@=rPNYTO4g9 z6aZ&oVPRnwB=G%+y{El5O3`Q2X^(}48L*tWg@r}d&=?x;0q9zlCQrwUg14|3j#$pz z!ongeSi0GnORPKvm2@<+_dk$Mn=CBMg5}IDERJGUtQehdR2kD$Gjb1}#6Z;bkPy@T zl~cA3rA1(2G3>FNxrN11NKAs-j{b+9PK55j}-Tq+V{fie5)B`djje){D0FD{- z#y}vtcl0yqw8_H4Ojyp`!r~}I;piU#oCiPvG=f3iQytFN-dQ_kM5b-~D!!28Dk6F` zb_?DwB)&G2S`8K!nZ|PF78XYt4S@+K0;oFj2w#*R-QU=-);T)uM#Z2p=)3}q=b`qj zV)2v8v%5B>&ngQG^I+ z@Gw-KQ4G8-e?I!hX*A8k!n9b<+`{50q|z0s15_P409*yKZS;qncP-uQ%#G7lH;WfT z@&%kXF}Mwci`Ci^;Fk{AuC(^aEi4AGoVkU?Q3w&(`tD!h;+@dB8?mO%4f29^T+dwXx++j>eBH?46NDN*H85dAv<`@T zV87OJEi8s3mNU1UxrGIq0)=NPL@xsZzUEJf)E)x2E3$-Vf$SWmzt+ERFmh z5jg!eSXg8i!+x2a8RQQ+J^^sz5Qn#VT#+&9w#mXGoA9r4&St@P0GJCPFNH&GCh&_) z;t5Y_=Z+MPV_`Au81~K_0DOVMTS4^1S3f7>Ybr~-Udn_`78cn?L%3+9?LhAZOt=`} zY5=F}>{4c6H31D!ls|f=Z&_)CofZ~HBS(cZ2L_5YfH4oiWH34a)Oy^J*D`IFg+;c~ z5Og?g;7TTp2jdI^jbY$4CKM2(0KhQ-7{G2Y?}iXNz`P#71~7+vfu?V`yFSnCzrw;| bc<}!Lw@DCRefresh"; + } + callback(emptyData(data.draw)); + }); + } + + + /** + * Converts the first char of the given string to lower case. + * @param str the string to convert + * @returns the converted string + */ + function toLowerCaseFirst(str) { + if (str.length > 0) { + var value = str.charAt(0).toLowerCase(); + if (str.length > 1) { + value = value.concat(str.slice(1)); + } + return value; + } + } + + /** + * Returns the parent datatables whose id is given through + * the 'data-parent-table' attribute. + */ + function getParentDatatables(datatables) { + var parentTableId = getParentTableId(datatables); + // Validate if parent-table id has been specified and + // if the parent Datatable has been initialized + if (parentTableId && $.fn.dataTable.isDataTable($(parentTableId))) { + return $(parentTableId).DataTable(); + } + } + + /** + * Returns the parent table id when this datatables is a detail. + */ + function getParentTableId(datatables) { + var parentTableId = getDataValue(datatables, 'parent-table'); + if (parentTableId) { + return "#" + parentTableId; + } + } + + /** + * Returns the id of the selected row in the parent table, if any. + * @param datatables child datatables + * @returns the id of the parent datatables selected row + */ + function getParentSelectedRowId(datatables) { + var parentDatatables = getParentDatatables(datatables); + if (parentDatatables) { + var selected = parentDatatables.row({ + selected: true + }); + + if (selected.any()) { + return selected.data().id; + } + } + } + + /** + * Returns if the datatables has a related parent datatables + * @param datatables to find if it has a parent datatables + * @returns if there is a parent datatables + */ + function hasParentTable(datatables) { + var parentTableId = getParentTableId(datatables); + if (parentTableId) { + return true; + } + return false; + } + + /** + * Process the given Url to perform the following actions* + * - If the given datatables is not related to a parent one, it + * returns the given url as is. + * - If the url contains the '_PARENTID_' valuea and there is a related + * parent table, if the parent table has a selected row, its identifier + * is used to replace the '_PARENTID_' value in the given url. + * Otherwise no url is returned because it is considered as an invalid + * url. + * If the processed url is valid, the given id value is used to replace + * the '_ID_' parameter in the url + * @param datatables DataTable on which the calling should act upon + * @param url to process + * @param id (optional) identifier of the datatables row to act upon + * @returns the processed url + */ + function processUrl(datatables, url, id) { + var processedUrl = url; + // If it is a detail table, we have to get the parent id from + // the selected row in the parent table, and replace the + // _PARENTID_ variable in the given URL. + if (url && url.indexOf('_PARENTID_') > -1 && hasParentTable(datatables)) { + var parentRowId = getParentSelectedRowId(datatables); + if (parentRowId !== undefined) { + processedUrl = url.replace('_PARENTID_', parentRowId); + } else { + processedUrl = undefined; + } + } + + if (id !== undefined && processedUrl) { + processedUrl = processedUrl.replace('_ID_', id); + } + + return processedUrl; + } + + /** + * Process the given Url and the Datatables configuration to build + * an URL that contains the Datatables parameters. + * This function is useful when is necessary to make a petition + * to the server side without using AJAX. + * + * @param datatables DataTable on which the calling should act upon + * @param url to process + * @returns the processed url + */ + function getUrlWithDatatablesParams(datatables, url) { + + // Remove existing parameters + url = url.split("?")[0]; + + // Getting data from Datatables + var dtContext = datatables.context[0]; + var data = dtContext.oAjaxData; + + // Getting search value + var searchValue = data.search.value; + + // Getting order + var order = data.order; + + // Getting columns + var columns = data.columns; + + var sortParams = ""; + for (var i = 0; i < order.length; i++) { + if (order[i] !== null && order[i] !== undefined && + order[i].column !== null && order[i].column !== undefined) { + var columnName = columns[order[i].column].data; + var dir = order[i].dir; + + sortParams += "sort=" + columnName + "," + dir + "&"; + + } + } + if (sortParams.length > 0) { + sortParams = sortParams.substr(0, sortParams.length - 1); + } + + var datatablesColumns = ""; + for (i = 0; i < columns.length; i++) { + if (columns[i] !== null && columns[i] !== undefined && + columns[i].data !== null && columns[i].data !== undefined && + datatablesColumns.indexOf(columns[i].data) === -1) { + datatablesColumns += columns[i].data + ","; + } + } + if (datatablesColumns.length > 0) { + datatablesColumns = datatablesColumns.substr(0, datatablesColumns.length - 1); + datatablesColumns = "datatablesColumns=" + datatablesColumns; + } + + + // Build URL parameters + var hasParameters = false; + var params = ""; + if (searchValue != null && searchValue != "" && searchValue != undefined) { + if (hasParameters) { + params += "&"; + } + params += "search[value]=" + searchValue; + hasParameters = true; + } + + if (sortParams != null && sortParams != "" && sortParams != undefined) { + if (hasParameters) { + params += "&"; + } + params += sortParams; + hasParameters = true; + } + + if (datatablesColumns != null && datatablesColumns != "" && datatablesColumns != undefined) { + if (hasParameters) { + params += "&"; + } + params += datatablesColumns; + } + + return url + "?" + params; + + } + + /** + * Deletes the element whose id is the one in the datatables + * row whose _delete_ button has been selected, and the + * the opened modal confirmacion has been accepted + * (see modal-confirm-delete.html) + * @param datatables DataTable on which the calling should act upon + */ + function deleteElement(datatables) { + var $token = $("meta[name='_csrf']"); + var $header = $("meta[name='_csrf_header']"); + + var tableId = getTableId(datatables); + var rowId = $('#' + tableId + 'DeleteRowId').data('row-id'); + var url = getDeleteUrl(datatables, rowId); + + $.ajax({ + url: url, + type: 'DELETE', + beforeSend: function(request) { + if ($token != null && $token.length > 0 && $header != null && $header.length > 0) { + request.setRequestHeader($header.attr("content"), $token.attr("content")); + } + } + }) + .done(function(result) { + var $deleteSuccess = $('#' + tableId + 'DeleteSuccess'); + $deleteSuccess.modal(); + datatables.ajax.reload(); // Refresh Datatables + }) + .fail(function(jqXHR, status) { + var $deleteError = $('#' + tableId + 'DeleteError'); + $deleteError.modal(); + }); + } + + /** + * Returns the URL to load the data for a Datatables. The value + * is defined through a 'data-load-url' attribute in the + * Datatables table tag. + * @param datatables DataTable on which the calling should act upon + */ + function getLoadUrl(datatables) { + var url = getDataValue(datatables, 'load-url'); + return processUrl(datatables, url); + } + + /** + * Returns the URL to create a new element for the Datatables. + * The URL is processed to replace any parameters. + * + * @param datatables DataTable on which the calling should act upon + */ + function getCreateUrl(datatables) { + var url = getDataCreateUrl(datatables); + return processUrl(datatables, url); + } + + /** + * Returns the URL to create a new element for the Datatables + * as defined in the table data attributes. + * The value is defined in the Datatables table tag with a + * 'data-create-url-function' as a function which returns the URL + * or, if it is not defined, the value of the attribute + * 'data-create-url' to be used as the URL. + * + * @param datatables DataTable on which the calling should act upon + */ + function getDataCreateUrl(datatables) { + var urlFunction = getDataValue(datatables, 'create-url-function'); + var url = urlFunction ? $[urlFunction]() : getDataValue(datatables, 'create-url'); + return url; + } + + /** + * Returns the URL to show the details of an element of the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-show-url' as the URL to use. + * The URL contains the text *_ID_* in the place where + * the selected element Id has to be inserted. + * + * @param datatables DataTable on which the calling should act upon + * @param id identifier of the element to edit + */ + function getShowUrl(datatables, id) { + if (id == null || id === "null") { + return null; + } + var url = getDataValue(datatables, 'show-url'); + return processUrl(datatables, url, id); + } + + /** + * Returns the URL to edit an element of the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-edit-url' as the URL to use. + * The URL contains the text *_ID_* in the place where + * the selected element Id has to be inserted. + * + * @param datatables DataTable on which the calling should act upon + * @param id identifier of the element to edit + */ + function getEditUrl(datatables, id) { + var url = getDataValue(datatables, 'edit-url'); + return processUrl(datatables, url, id); + } + + /** + * Returns the URL to remove an element of the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-delete-url' as the URL to use. + * The URL contains the text *_ID_* in the place where + * the selected element Id has to be inserted. + * + * @param datatables DataTable on which the calling should act upon + */ + function getDataDeleteUrl(datatables) { + var url = getDataValue(datatables, 'delete-url'); + return url; + } + + /** + * Returns the URL to remove an element of the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-delete-url' as the URL to use. + * + * The URL contains the text *_ID_* in the place where + * the selected element Id has to be inserted, AND it is + * replaced with the provided id. + * + * @param datatables DataTable on which the calling should act upon + * @param id identifier of the element to remove + */ + function getDeleteUrl(datatables, id) { + var url = getDataDeleteUrl(datatables); + return processUrl(datatables, url, id); + } + + /** + * Returns the URL to remove a list of elements from the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-delete-batch-url' as the URL to use. + * The URL contains the text *_ID_* in the place where + * the selected elements Ids have to be inserted. + * + * @param datatables DataTable on which the calling should act upon + */ + function getDataDeleteBatchUrl(datatables) { + var url = getDataValue(datatables, 'delete-batch-url'); + return url; + } + + /** + * Returns the URL to remove a list of elements from the Datatables. + * The value is defined in the Datatables table tag with a + * 'data-delete-batch-url' as the URL to use. + * The URL contains the text *_ID_* in the place where + * the selected elements Ids have to be inserted, and it is + * replaced with the provided idlist. + * + * @param datatables DataTable on which the calling should act upon + * @param idlist list of identifiers of the elements to remove + */ + function getDeleteBatchUrl(datatables, idlist) { + var url = getDataDeleteBatchUrl(datatables); + return processUrl(datatables, url, idlist); + } + + /** + * Returns the 'data-name' attribute value of a datatables. + * @param datatables DataTable on which the calling should act upon + * @param name the name of the data attribute to return the value of + */ + function getDataValue(datatables, name) { + var $dt = jQueryTable(datatables); + return $dt.data(name); + } + + /** + * Returns all the 'data-*' attributes of a datatables. + * @param datatables DataTable on which the calling should act upon + */ + function getAllDataValues(datatables) { + var $dt = jQueryTable(datatables); + return $dt.data(); + } + + /** + * Returns the jQuery object for the given datatables element. + */ + function jQueryTable(datatables) { + return $(datatables.table().node()); + } + + /** + * Returns the table id attribute for the given datatables element. + */ + function getTableId(datatables) { + var $jQueryTable = jQueryTable(datatables); + return $jQueryTable.attr('id'); + } + + /** + * Generates a JSON object with the necessary data for indicating a + * DataTables object that 0 elements have been found. + * This is used for details related tables, when a parent table + * row is not selected. + * + * @param draw DataTables request counter + * @returns {json} JSON object with empty data + */ + function emptyData(draw) { + return { + 'data': [], + 'draw': draw, + 'error': null, + 'recordsFiltered': '0', + 'recordsTotal': '0' + }; + } + + /** + * This function will be called when DataTables has been fully + * initialised and data loaded. + */ + function onInitComplete(oSettings, json) { + var datatables = this.DataTable(); + // Save the selected row to state + saveSelectedRowToState(datatables, oSettings, json); + // Register checkboxes + registerCheckBoxesEvents(datatables); + } + + /** + * If a row is selected, store it in the persisted table state + * so if the user goes to another page and returns, the current + * selected row is still selected. + * @param datatables the Datatables element + * @param oSettings DataTable object options + * @param json + */ + function saveSelectedRowToState(datatables, oSettings, json) { + var state = datatables.state; + datatables.on('select', function(e, dt, type, indexes) { + if (type === 'row') { + var rowSelectedId = datatables.rows(indexes).ids()[0]; + state.loaded().rowSelectedId = rowSelectedId; + state.save(); + } + }); + datatables.on('deselect', function(e, dt, type, indexes) { + if (type === 'row') { + state.loaded().rowSelectedId = undefined; + state.save(); + } + }); + if (!state.loaded()) { + oSettings.oLoadedState = datatables.state(); + } + } + + /** + * Loads a previously persisted datatables state. + * @param settings DataTable object options + * @param data DataTable object data + */ + function loadFromState(settings, data) { + var datatables = this.DataTable(); + loadSelectedRowFromState(datatables, data); + } + + /** + * Loads a previously selected row id from the persisted state. + * @param settings DataTable object options + * @param data DataTable object data + */ + function loadSelectedRowFromState(datatables, data) { + var state = datatables.state; + if (state.loaded()) { + var rowSelectedId = state.loaded().rowSelectedId; + if (rowSelectedId) { + data.rowSelectedId = rowSelectedId; + } + } + } + + /** + * Registers events for the given datatables + */ + function registerEvents(datatables) { + registerDeleteModalEvents(datatables); + registerAddModalEvents(datatables); + registerToParentEvents(datatables); + registerOnDrawFinishesEvents(datatables); + } + + /** + * This function registers all the necessary actions to execute + * when the provided datatables is completly drawed. + */ + function registerOnDrawFinishesEvents(datatables) { + // When this datatable is re-drawed, the + // following actions will be executed + datatables.on('draw.dt', function() { + // Register events to the new included checkboxes + registerCheckBoxesEvents(datatables); + }); + } + + /** + * Registers events related to the checkboxes of the given + * datatables. + */ + function registerCheckBoxesEvents(datatables) { + // Getting the table id + var tableId = getTableId(datatables); + // Obtain all checkboxes for this table + var checkBoxes = jQuery("#" + tableId + " input:checkbox"); + // Register change event for every checkbox. Every time that some checkbox + // changes, validates if the delete batch button should be enabled or not + jQuery.each(checkBoxes, function(item) { + jQuery(this).change(function() { + var rows_selected = datatables.columns().checkboxes.selected(); + if (rows_selected.join(",") === "") { + datatables.button('delete:name').disable(); + } else { + datatables.button('delete:name').enable(); + } + }); + }); + + // Re-initialize the delete batch button + var rows_selected = datatables.columns().checkboxes.selected(); + if (rows_selected.join(",") === "") { + datatables.button('delete:name').disable(); + } else { + datatables.button('delete:name').enable(); + } + + } + + /** + * Registers the events related to the delete modals, so the + * modal knows the id of the row to delete. + */ + function registerDeleteModalEvents(datatables) { + var tableId = getTableId(datatables); + var $deleteConfirm = $('#' + tableId + 'DeleteConfirm'); + + // When the delete element modal is opened, copy the current + // element id to be deleted to the 'TABLE_ID + DeleteRowId' + // element + $deleteConfirm.on('show.bs.modal', function(e) { + // Get data-row-id attribute of the clicked element + var rowId = jQuery(e.relatedTarget).data('row-id'); + // Populate the row-id data attribute in the modal + $('#' + tableId + 'DeleteRowId').data('row-id', rowId) + }); + + $('#' + tableId + 'DeleteButton').on('click', function() { + deleteElement(datatables); + }); + } + + /** + * When a table is linked to parent table, for a master detail list + * for example, it registers the row selection events in the parent + * table to update the data in the child table. + */ + function registerToParentEvents(datatables) { + var parentDatatables = getParentDatatables(datatables); + + if (parentDatatables) { + // Register to de/select events + parentDatatables.on('select', function() { + datatables.button('add:name').enable(); + datatables.ajax.reload(); + }); + + parentDatatables.on('deselect', function() { + datatables.button('add:name').disable(); + datatables.ajax.reload(); + }); + + // Register to reload finished event, needed when the selected row has + // been deleted in the parent table or any other change + parentDatatables.on('xhr.dt', function() { + datatables.ajax.reload(); + }); + + datatables.button('add:name').disable(); + } + } + + /** + * Registers the events related to the delete modals, so the + * modal knows the id of the row to delete. + */ + function registerAddModalEvents(datatables) { + var parentDatatables = getParentDatatables(datatables); + + // The add modal dialog is only used in child datatables + if (parentDatatables) { + var tableId = getTableId(datatables); + + $('#' + tableId + 'AddButton').on('click', function() { + var url = getCreateUrl(datatables); + $addForm = $('#' + tableId + 'AddForm'); + var params = $addForm.serialize(); + $.ajax({ + type: $addForm.attr('method'), + url: url, + data: params, + success: function(data) { + datatables.ajax.reload(); + } + }); + }); + } + } + + /** + * Renders the tools column, with the buttons to perform operations + * on the table rows. + */ + function renderTools(data, type, full, meta) { + var datatables = new $.fn.dataTable.Api(meta.settings); + var tableId = getTableId(datatables); + var rowId = data; + var buttons = '
'; + + var showUrl = getShowUrl(datatables, rowId); + // Check if the show will be inline + var showInline = getDataValue(datatables, 'show-inline'); + if (showUrl && !showInline) { + buttons = buttons.concat(''); + }else if(showUrl && showInline){ + buttons = buttons.concat(''); + } + + var editUrl = getEditUrl(datatables, rowId); + if (editUrl) { + buttons = buttons.concat(''); + } + + var deleteUrl = getDeleteUrl(datatables, rowId); + if (deleteUrl) { + buttons = buttons.concat(''); + } + + buttons = buttons.concat('
'); + return buttons; + } + + + /** + * This method tries to display the show view of the selected record + * expanding the selected row. + */ + function showInline(showButton, datatables, showUrl){ + var tr = showButton.closest('tr'); + var row = datatables.row( tr ); + if ( row.child.isShown() ) { + // This row is already open - close it + $(showButton).attr("aria-expanded", "false"); + row.child.hide(); + } + else { + $(showButton).attr("aria-expanded", "true"); + $.ajax({ + url: showUrl + "/inline", + dataType: 'html' + }).done(function(data) { + // Open this row + row.child(data).show(); + }).fail(function(data){ + // Show error in new row + row.child("
ERROR: An error occurred while trying to obtain more info.
").show(); + }); + } + } + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables Advanced Extension API + * + * For complete documentation, please refer to the docs/api directory or the + * DataTables site + */ + + // Local variables to improve compression + var apiRegister = DataTable.Api.register; + + apiRegister('advanced()', function() { + return this.iterator('table', function(settings) { + DataTable.advanced.init(settings); + }); + }); + + apiRegister('advanced.getTableId()', getTableId); + apiRegister('advanced.getCreateUrl()', getCreateUrl); + apiRegister('advanced.getEditUrl()', getEditUrl) + apiRegister('advanced.getDeleteUrl()', getDeleteUrl); + apiRegister('advanced.getDeleteBatchUrl()', getDeleteBatchUrl); + apiRegister('advanced.getShowUrl()', getShowUrl); + apiRegister('advanced.getDataValue()', getDataValue); + apiRegister('advanced.processUrl()', processUrl); + + apiRegister('advanced.getCreateButton()', createButton); + apiRegister('advanced.getDeleteBatchButton()', deleteBatchButton); + apiRegister('advanced.getExportCsvButton()', exportCsvButton); + apiRegister('advanced.getExportExcelButton()', exportExcelButton); + apiRegister('advanced.getExportPdfButton()', exportPdfButton); + + apiRegister('advanced.showInline()', showInline); + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Initialization + */ + + // DataTables creation - check if advanced has been defined in the options. + $(document).on('preInit.dt.dtadvanced', function(e, settings) { + if (e.namespace !== 'dt') { + return; + } + + // If the 'advanced' option has been specified, + // initialize the advanced configuration for this + // DataTable. + if (settings.oInit.advanced !== undefined) { + DataTable.advanced.init(settings); + } + + }); + + return DataTable.advanced; +})); diff --git a/roo/src/main/resources/static/public/js/datatables-defaults.js b/roo/src/main/resources/static/public/js/datatables-defaults.js new file mode 100644 index 0000000000..ab247078e4 --- /dev/null +++ b/roo/src/main/resources/static/public/js/datatables-defaults.js @@ -0,0 +1,29 @@ +// IIFE - Immediately Invoked Function Expression +(function(extendDatatables) { + + // The global jQuery object is passed as a parameter + extendDatatables(window.jQuery, window, document); + +}(function($, window, document) { + + // The $ is now locally scoped, it won't collide with other libraries + + // Listen for the jQuery ready event on the document + // READY EVENT BEGIN + $(function() { + // Initialize all datatables in current page + $('table[data-datatables="true"]').each(function(){ + // Use the advanced extension to auto-configure all + // advanced features (ajax, export, add, edit, show, delete, etc.) + $(this).DataTable({ + mark: true, + advanced: true + }); + }); + }); + + // READY EVENT END + //console.log('The DOM may not be ready'); + + // The rest of code goes here! +})); \ No newline at end of file diff --git a/roo/src/main/resources/static/public/js/datetimepicker-defaults.js b/roo/src/main/resources/static/public/js/datetimepicker-defaults.js new file mode 100644 index 0000000000..3d114d93aa --- /dev/null +++ b/roo/src/main/resources/static/public/js/datetimepicker-defaults.js @@ -0,0 +1,107 @@ +(function(jQuery) { + jQuery(document).ready(function() { + + /* + * jQuery Utilities ================================================== + */ + /** + * Select the most switchable time format for time selectod related to + * requiered format + * + * @param format + * @returns time format + */ + function getSelectorTimeFormat(format) { + // + if (format.search(/h{1,2}/) > -1 && format.search(/[aA]/) > -1) { + if (format.search(/[A]/) > -1) { + return "hh:mm A"; + } else { + return "hh:mm a"; + } + } + return "HH:mm"; + } + + // Use the same locale than MomentJs + // (set it before setDateFormater as setLocale override formatter) + jQuery.datetimepicker.setLocale(moment.locale()); + + // Define parse/format date using moment library + jQuery.datetimepicker.setDateFormatter({ + parseDate : function(date, format) { + var d = moment(date, format); + return d.isValid() ? d.toDate() : false; + }, + + formatDate : function(date, format) { + return moment(date).format(format); + } + }); + + jQuery(".datetimepicker").each(function(index) { + var $input = jQuery(this); + var options = { + step : 5 + }; + + var pattern = $input.attr("data-dateformat"); + var value = $input.attr("data-timestep"); + + if (value) { + try { + options.step = parseInt(value); + } catch (e) { + timeStep = 5; + } + } + + // FormatDate YYYY/MM/DD + value = $input.attr("data-startdate"); + if (value) { + options.startDate = value; + } + value = $input.attr("data-mindate"); + if (value) { + options.minDate = value; + } + value = $input.attr("data-maxdate"); + if (value) { + options.maxDate = value; + } + + // FormatTime : "HH:mm" + value = $input.attr("data-mintime"); + if (value) { + options.minTime = value; + } + value = $input.attr("data-maxtime"); + if (value) { + options.maxTime = value; + } + value = $input.attr("data-allowtimes"); + if (value) { + options.allowTimes = value.split(","); + } + + if (isNotEmpty(pattern)) { + var momentPattern = moment.javaToMomentDateFormat(pattern); + jQuery.extend(options, { + format : momentPattern, + datepicker : moment.isDateFormatDate(momentPattern), + timepicker : moment.isDateFormatTime(momentPattern), + formatDate : "YYYY/MM/DD", + formatTime : getSelectorTimeFormat(momentPattern) + }); + } else { + var emptyMomentPattern = moment.javaToMomentDateFormat(); + jQuery.extend(options, { + format : emptyMomentPattern, + formatDate : "YYYY/MM/DD", + formatTime : "HH:mm" + }); + } + $input.datetimepicker(options); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/roo/src/main/resources/static/public/js/inputmask-defaults.js b/roo/src/main/resources/static/public/js/inputmask-defaults.js new file mode 100644 index 0000000000..f3a299bb5d --- /dev/null +++ b/roo/src/main/resources/static/public/js/inputmask-defaults.js @@ -0,0 +1,30 @@ +(function(jQuery) { + jQuery(document).ready(function() { + + /* + Inputmask.extendDefaults({ + 'autoUnmask' : true + }); + */ + + jQuery(".inputmask").each(function(index) { + var $input = jQuery(this); + var options = { + removeMaskOnSubmit : true + }; + + var pattern = $input.attr("data-inputmask-mask"); + if (pattern) { + options.mask = pattern; + } else { + var alias = $input.attr("data-inputmask-alias"); + if (alias) { + options.alias = alias; + } else { + throw "missing input initialization value on (id='"+this.id+"' name='"+this.name+"')"; + } + } + $input.inputmask(options); + }); + }); +})(jQuery); \ No newline at end of file diff --git a/roo/src/main/resources/static/public/js/main.js b/roo/src/main/resources/static/public/js/main.js new file mode 100644 index 0000000000..b704282624 --- /dev/null +++ b/roo/src/main/resources/static/public/js/main.js @@ -0,0 +1,70 @@ +(function(jQuery) { + jQuery(document).ready( + function() { + + //dropdown + jQuery('ul.dropdown-menu [data-toggle=dropdown]').on( + 'click', + function(event) { + event.preventDefault(); + event.stopPropagation(); + jQuery(this).parent().siblings() + .removeClass('open'); + jQuery(this).parent().toggleClass('open'); + }); + + //tooltip + jQuery('[data-toggle="tooltip"]').tooltip(); + + }); +})(jQuery); + +/** + * Checks if an object in JavaScript is undefined, null or empty string + * + * @param obj + * @returns {Boolean} + */ +function isEmpty(obj) { + if (jQuery.isPlainObject(obj)) { + return jQuery.isEmptyObject(obj); + } else if (jQuery.isArray(obj)) { + return 0 === obj.length; + } else if (typeof obj === "string") { + return (isNull(obj) || 0 === obj.length); + } + return isNull(obj); +} + +/** + * Checks if an object in JavaScript is undefined or null + * + * @param obj + * @returns {Boolean} + */ +function isNull(obj) { + if (typeof obj === "undefined" || obj == null) { + return true; + } + return false; +} + +/** + * Checks if an object in JavaScript is defined and not null + * + * @param obj + * @returns {Boolean} + */ +function isNotNull(obj) { + return !isNull(obj); +} + +/** + * Checks if an object in JavaScript is undefined, null or empty string + * + * @param obj + * @returns {Boolean} + */ +function isNotEmpty(obj) { + return !isEmpty(obj); +} diff --git a/roo/src/main/resources/static/public/js/moment-defaults.js b/roo/src/main/resources/static/public/js/moment-defaults.js new file mode 100644 index 0000000000..e8f4cf963a --- /dev/null +++ b/roo/src/main/resources/static/public/js/moment-defaults.js @@ -0,0 +1,88 @@ +(function(jQuery) { + + moment().format(); + + /** + * Convert Java's SimpleDateFormat to momentJS formatDate. Takes a Java + * pattern + * (http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html) + * and turns it into the expected momentJS formatDate + * (http://momentjs.com/docs/#/parsing/string-format/). + * + * @param pattern + * SimpleDateFormat pattern + * @return moment pattern (if 'pattern' is ommited return defautl + * pattern) + */ + moment.javaToMomentDateFormat = function (pattern) { + if (pattern) { + // Year + if (pattern.search(/y{3,}/g) >= 0) { + pattern = pattern.replace(/y{3,}/g, "YYYY"); // yyyy to + // yy + } else if (pattern.search(/y{2}/g) >= 0) { // yy to YY + pattern = pattern.replace(/y{2}/g, "YY"); + } + + // Day + if (pattern.search(/d{2,}/g) >= 0) { // dd to DD + pattern = pattern.replace(/d{2,}/g, "DD"); + } else if (pattern.search(/d{1}/g) >= 0) { // d to D + pattern = pattern.replace(/d{1}/g, "D"); + } else if (pattern.search(/D{1,}/g) >= 0) { // D,DD, DDD to DDD + pattern = pattern.replace(/D{1,}/g, "DDD"); + } + + // Day in week + if (pattern.search(/E{4,}/g) >= 0) { // EEEE to dddd + pattern = pattern.replace(/E{4,}/g, "dddd"); + } else if (pattern.search(/E{2,3}/g) >= 0) { // EEE to ddd + pattern = pattern.replace(/E{2,3}/g, "ddd"); + } + + // Day in week (number) + if (pattern.search(/F{1}/g) >= 0) { // F to e + pattern = pattern.replace(/F{1}/g, "e"); + } + + // week of the year + if (pattern.search(/w{1,}/g) >= 0) { // ww to WW + pattern = pattern.replace(/w{1,}/g, "WW"); + } + } else { + return "YYYY/MM/DD HH:mm"; + } + + return pattern; + } + + /** + * Informs if date format (momentJS) includes date information + * + * @param format + * string + * @returns true if !format or format contains ('YQDMdw') + */ + moment.isDateFormatDate = function (format) { + if (!format) { + return true; + } + return format.search(/[YQDMdw]/) > -1; + } + + /** + * Informs if date format (ISO 8601) includes time information + * + * @param format + * string + * @returns true if !format or format contains ('HmAasSZ') + */ + moment.isDateFormatTime = function (format) { + if (!format) { + return true; + } + return format.search(/[HhmAasSZ]/) > -1; + ; + } + +})(jQuery); diff --git a/roo/src/main/resources/static/public/js/moment-locale-es.js b/roo/src/main/resources/static/public/js/moment-locale-es.js new file mode 100644 index 0000000000..fbf94e406e --- /dev/null +++ b/roo/src/main/resources/static/public/js/moment-locale-es.js @@ -0,0 +1,73 @@ +//! moment.js locale configuration +//! locale : spanish (es) +//! author : Julio Napurí : https://github.com/julionc + +// ROO-3814 Remove var "monthsShortDot" and "if" that assigns it. + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + && typeof require === 'function' ? factory(require('../moment')) : + typeof define === 'function' && define.amd ? define(['moment'], factory) : + factory(global.moment) +}(this, function (moment) { 'use strict'; + + var es = moment.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'), + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + ordinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } + }); + + return es; + +})); \ No newline at end of file diff --git a/roo/src/main/resources/static/public/js/select2-defaults.js b/roo/src/main/resources/static/public/js/select2-defaults.js new file mode 100644 index 0000000000..6e45799dfb --- /dev/null +++ b/roo/src/main/resources/static/public/js/select2-defaults.js @@ -0,0 +1,49 @@ +// IIFE - Immediately Invoked Function Expression +(function(extendSelect2) { + + // The global jQuery object is passed as a parameter + extendSelect2(window.jQuery, window, document); + +}(function($, window, document) { + + // The $ is now locally scoped, it won't collide with other libraries + + // Listen for the jQuery ready event on the document + // READY EVENT BEGIN + $(function() { + + // The DOM is ready! + //console.log('The DOM is ready'); + + // Init select simple + $('.dropdown-select-simple').select2({ + debug : false, + theme : 'bootstrap', + allowClear : true, + }); + + // Init select with AJAX search + $('.dropdown-select-ajax').select2({ + debug : false, + theme : 'bootstrap', + allowClear : true, + ajax : { + data : function(params) { + // set search params names to match with GlobalSearch and + // Pageable arguments + var query = { + 'search[value]' : params.term, + 'page' : params.page - 1, + }; + return query; + } + } + }); + }); + + // READY EVENT END + //console.log('The DOM may not be ready'); + + // The rest of code goes here! +})); + diff --git a/roo/src/main/resources/static/public/js/validation-defaults.js b/roo/src/main/resources/static/public/js/validation-defaults.js new file mode 100644 index 0000000000..a92da83d58 --- /dev/null +++ b/roo/src/main/resources/static/public/js/validation-defaults.js @@ -0,0 +1,233 @@ +(function(jQuery) { + jQuery(document) + .ready( + function() { + + function getLanguage() { + // usamos el locale de momentjs + moment.locale(); + } + + jQuery.validator.setDefaults({ + ignoreTitle : true + }); + + /** + * Initialize jQuery Validator methods + */ + /** + * Date/time validation with format + * + * @name jQuery.validator.methods.number + * @type Boolean + */ + jQuery.validator.addMethod("dateformat", function(value, element, params) { + if (this.optional(element)) { + return true; + } + if (params === "DEFAULT") { + return moment(value, moment.javaToMomentDateFormat()).isValid(); + } else { + return moment(value, params, true).isValid(); + } + }, "Please enter a correct date/time"); + + /** + * Replaces the standard number validation to support number with comma. + * + * @name jQuery.validator.methods.number + * @type Boolean + */ + jQuery.validator.methods.number = function(value, element) { + return this.optional(element) || Inputmask.isValid(value, { + alias : "numeric" + }); + }; + + /** + * Replaces the standar min validation to support number with comma. + * + * @name jQuery.validator.methods.number + * @type Boolean + */ + jQuery.validator.methods.min = function(value, element, params) { + var localizedValue = Inputmask.unmask(value, { + alias : "numeric", + unmaskAsNumber : true + }); + return this.optional(element) || localizedValue >= params; + }; + + /** + * Replaces the standar max validation to support number with comma. + * + * @name jQuery.validator.methods.number + * @type Boolean + */ + jQuery.validator.methods.max = function(value, element, params) { + var localizedValue = Inputmask.unmask(value, { + alias : "numeric", + unmaskAsNumber : true + }); + return this.optional(element) || localizedValue <= params; + }; + + /** + * Replaces the standard range validation to support number with comma. + * + * @name jQuery.validator.methods.number + * @type Boolean + */ + jQuery.validator.methods.range = function(value, element, params) { + var localizedValue = Inputmask.unmask(value, { + alias : "numeric", + unmaskAsNumber : true + }); + return this.optional(element) + || (localizedValue >= params[0] && localizedValue <= params[1]); + }; + + /** + * Return true if the field value matches the given RegExp + * + * The difference between `pattern` method is than this one + * use parameter as expression literally (`pattern` includes + * prefix and suffix). + */ + $.validator.addMethod("regexp", function(value, element, param) { + if (this.optional(element)) { + return true; + } + if (typeof param === "string") { + param = new RegExp(param); + } + return param.test(value); + }, "Invalid format."); + + /** + * jquery.inputmask rule: delegates on inputmask control + */ + jQuery.validator.addMethod("inputmask", function(value, element, params) { + if (this.optional(element)) { + return true; + } + var $inputmask = jQuery(element); + return $inputmask.inputmask && $inputmask.inputmask("isComplete"); + }, "Please enter a valid value."); + + // Form validation init + jQuery("form.validate") + .each( + function(index) { + var $form = $(this); + + // see options at https://jqueryvalidation.org/documentation/ + $form + .validate({ + highlight : function(element) { + var $element = $(element); + // añadir marca error + $element.closest('.form-group').addClass('has-error has-feedback'); + // añadir span con icono + var iconSpan = $element.parent().find('span.form-control-feedback'); + if (!iconSpan.length) { + $element + .after(''); + } + }, + unhighlight : function(element) { + var $element = $(element); + // añadir marca error + $element.closest('.form-group').removeClass('has-error has-feedback'); + // quitar span con icono + $element.parent().find('span.form-control-feedback.glyphicon-remove') + .remove(); + // limpiar errores + if ($element.parent('.input-group').length) { + $element.parent('.input-group').parent().find( + 'span.help-block[id=' + $element.attr('id') + '-error]') + .remove(); + + } else { + $element.parent().find( + 'span.help-block[id=' + $element.attr('id') + '-error]') + .remove(); + } + }, + errorElement : 'span', + errorClass : 'help-block', + errorPlacement : function(error, element) { + var $element = $(element); + + var $previousErrors; + if ($element.parent('.input-group').length) { + $previousErrors = $element.parent('.input-group').parent() + .find('span.help-block[id=' + $element.attr('id') + '-error]'); + } else { + $previousErrors = $element.parent().find( + 'span.help-block[id=' + $element.attr('id') + '-error]'); + } + + if ($previousErrors.length === 1) { + $previousErrors.replaceWith(error); + } else { + if ($previousErrors.length > 1) { + // mas de un error limpiamos + $previousErrors.remove(); + } + // insertar error + if ($element.parent('.input-group').length) { + error.insertAfter($element.parent()); + } else { + $element.parent().append(error); + } + } + + } + }); + + // Iterate form inputs to set validation rules and messages + $form.find("input,textarea,select").each(function(index) { + var $input = $(this); + var data = $input.data(); + + // this input validation rules + var rules = { + required : data.required, + messages : {} + }; + if (isNotNull(data.missing)) { + rules.messages.required = data.missing + } + if (isNotNull(data.invalid)) { + rules.messages.remote = data.invalid + } + + // inputmaks + if ($input.hasClass("inputmask")) { + rules["inputmask"] = true; + if (isNotNull(data.invalid)) { + rules.messages.inputmask = data.invalid + } + } + // datetimepicker + if (isNotEmpty(data.dateformat)) { + rules["dateformat"] = moment.javaToMomentDateFormat(data.dateformat); + if (isNotNull(data.invalid)) { + rules.messages.dateformat = data.invalid + } + // datetimepicker without format + } else if ($input.hasClass("datetimepicker")) { + rules["dateformat"] = "DEFAULT"; + if (isNotNull(data.invalid)) { + rules.messages.dateformat = data.invalid + } + } + + $input.rules("add", rules); + }); + }); + }); +})(jQuery); + + diff --git a/roo/src/main/resources/templates/accessibility.html b/roo/src/main/resources/templates/accessibility.html new file mode 100644 index 0000000000..f486646c65 --- /dev/null +++ b/roo/src/main/resources/templates/accessibility.html @@ -0,0 +1,61 @@ + + + + + Accessibility - Spring Roo application + + + + +
+ +
+ + +
+ + +
+ +
+
+

Accessibility

+

Accessibility policy application

+

+ Spring Roo Application is committed to ensuring the accessibility of + its web content to people with disabilities. All of the content on + our website will meet + W3C WAI's Web Content Accessibility Guidelines 2.0, Level AA + conformance. Any issues should be reported to + springroo@disid.com. + The technologies that is depended to access the accessible content are HTML, CSS and Javascript. +

+
+
+ +
+ +
+ + +
+ +
+ + + + + +
+
+ + + + \ No newline at end of file diff --git a/roo/src/main/resources/templates/books/create.html b/roo/src/main/resources/templates/books/create.html new file mode 100644 index 0000000000..dabe34da10 --- /dev/null +++ b/roo/src/main/resources/templates/books/create.html @@ -0,0 +1,153 @@ + + + + + + Create Book - roo - SpringRoo Application + + + + + + + + +
+ +
+ + +
+ + +
+
+ +

Create Book

+ + +
+ +
+ Book data + +
+ +
+ + + Error message. +
+
+
+ +
+ + + Error message. +
+
+
+ +
+ + + Error message. +
+
+
+ + + +
+
+ + +
+
+ +
+ + +
+ +
+ +
+ + +
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/roo/src/main/resources/templates/books/edit.html b/roo/src/main/resources/templates/books/edit.html new file mode 100644 index 0000000000..e6d39a44be --- /dev/null +++ b/roo/src/main/resources/templates/books/edit.html @@ -0,0 +1,171 @@ + + + + + + Edit Book - Spring Roo application + + + + + + + + + +
+ +
+ + +
+ + +
+ +
+ +

Edit Book

+ + +
+ + + + +
+

Warning! This record has been updated by an other user.

+
+ +
+
+ +
+
+ +
+ + +
+ Book data + +
+ +
+ + + Error message. +
+
+
+ +
+ + + Error message. +
+
+
+ +
+ + + Error message. +
+
+
+ + + +
+
+
+ +
+
+ +
+
+
+ +
+ + +
+ +
+ +
+ + +
+ +
+ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + diff --git a/roo/src/main/resources/templates/books/list.html b/roo/src/main/resources/templates/books/list.html new file mode 100644 index 0000000000..d7e1fe24ca --- /dev/null +++ b/roo/src/main/resources/templates/books/list.html @@ -0,0 +1,98 @@ + + + + + + List Book - roo - SpringRoo Application + + + + + +
+ +
+ + +
+ + +
+
+ +

Books

+ + +
+ + + + + + + + + + + + + + + + + + + + +
Book List
titleauthorisbnTools
titleauthorisbnTools
+ +
+
+
+
+
+
+
+ + + +
+ +
+ +
+ +
+ +
+ + +
+ +
+ + + + + +
+
+ + + + diff --git a/roo/src/main/resources/templates/books/show.html b/roo/src/main/resources/templates/books/show.html new file mode 100644 index 0000000000..92311c36f5 --- /dev/null +++ b/roo/src/main/resources/templates/books/show.html @@ -0,0 +1,86 @@ + + + + + Show Book - Spring Roo application + + + + + +
+ +
+ + +
+ + +
+
+ + +

Show Book

+ +
+

Book data

+
    +
  • + title + titleValue +
  • +
  • + author + authorValue +
  • +
  • + isbn + isbnValue +
  • +
+
+ + +
+
+ Edit +
+
+ + +
+ +
+
+ +
+ +
+ + +
+ +
+ + + + + +
+
+ + + + diff --git a/roo/src/main/resources/templates/books/showInline.html b/roo/src/main/resources/templates/books/showInline.html new file mode 100644 index 0000000000..9fbc62cf26 --- /dev/null +++ b/roo/src/main/resources/templates/books/showInline.html @@ -0,0 +1,67 @@ + + + + + Show Book - Spring Roo application + + + + + +
+ +
+ + +
+ + +
+
+ + +
+
    +
  • + title + titleValue +
  • +
  • + author + authorValue +
  • +
  • + isbn + isbnValue +
  • +
+
+ +
+ +
+ +
+ + +
+ +
+ + + + + +
+
+ + + + diff --git a/roo/src/main/resources/templates/error.html b/roo/src/main/resources/templates/error.html new file mode 100644 index 0000000000..7559baba22 --- /dev/null +++ b/roo/src/main/resources/templates/error.html @@ -0,0 +1,40 @@ + + + + + Error - Spring Roo application + + + + + +
+

Error Page

+ +
+ + +
+ + +
+ +
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/footer.html b/roo/src/main/resources/templates/fragments/footer.html new file mode 100644 index 0000000000..38999c1b75 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/footer.html @@ -0,0 +1,51 @@ + + + + + Footer + + + + + + + diff --git a/roo/src/main/resources/templates/fragments/header.html b/roo/src/main/resources/templates/fragments/header.html new file mode 100644 index 0000000000..8421d6d77f --- /dev/null +++ b/roo/src/main/resources/templates/fragments/header.html @@ -0,0 +1,21 @@ + + + + + Header + + + +
+
+
+

roo

+

Hello, this is your home page.

+
+
+
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/js/datatables-locale.js b/roo/src/main/resources/templates/fragments/js/datatables-locale.js new file mode 100644 index 0000000000..ad1a32955d --- /dev/null +++ b/roo/src/main/resources/templates/fragments/js/datatables-locale.js @@ -0,0 +1,67 @@ +// IIFE - Immediately Invoked Function Expression +(function(translateDatatables) { + + // The global jQuery object is passed as a parameter + translateDatatables(window.jQuery, window, document); + +}(function($, window, document) { + + // The $ is now locally scoped, it won't collide with other libraries + + // Listen for the jQuery ready event on the document + // READY EVENT BEGIN + $(function() { + + // The DOM is ready! + //console.log('The DOM is ready'); + + // Set datatables defaults + $.extend($.fn.dataTable.defaults, { + // multilingual texts definitions, adding some to those already provided + // default by Datatables + 'language': { + 'buttons': { + 'add': /*[[#{label_datatables_add}]]*/ 'Add', + 'delete': /*[[#{label_datatables_delete}]]*/ 'Delete', + 'colvis': /*[[#{label_datatables_columns}]]*/ 'Columns', + 'pageLength': /*[[#{label_datatables_showRows}]]*/ 'Show %d rows' + }, + 'select': { + 'rows': { + _: /*[[#{label_datatables_selectedRows}]]*/ '%d selected rows', + 0: "", + 1: /*[[#{label_datatables_selectedRow}]]*/ '1 selected row' + } + }, + 'decimal': /*[[#{label_datatables_decimal}]]*/ '.', + 'emptyTable': /*[[#{label_datatables_emptyTable}]]*/ 'No data available in table', + 'info': /*[[#{label_datatables_info}]]*/ 'Showing _START_ to _END_ of _TOTAL_ entries', + 'infoEmpty': /*[[#{label_datatables_infoEmpty}]]*/ 'Showing 0 to 0 of 0 entries', + 'infoFiltered': /*[[#{label_datatables_infoFiltered}]]*/ '(filtered from _MAX_ total entries)', + 'infoPostFix': /*[[#{label_datatables_infoPostFix}]]*/ '', + 'thousands': /*[[#{label_datatables_thousands}]]*/ '', + 'lengthMenu': /*[[#{label_datatables_lengthMenu}]]*/ 'Show _MENU_ entries', + 'loadingRecords': /*[[#{label_datatables_loadingRecords}]]*/ 'Loading...', + 'processing': /*[[#{label_datatables_processing}]]*/ 'Processing...', + 'search': /*[[#{label_datatables_search}]]*/ 'Search:', + 'zeroRecords': /*[[#{label_datatables_zeroRecords}]]*/ ' No matching records found', + 'paginate': { + 'first': /*[[#{label_datatables_first}]]*/ 'First', + 'last': /*[[#{label_datatables_last}]]*/ 'Last', + 'next': /*[[#{label_datatables_next}]]*/ 'Next', + 'previous': /*[[#{label_datatables_previous}]]*/ 'Previous' + }, + 'aria': { + 'sortAscending': /*[[#{label_datatables_sortAscending}]]*/ ': activate to sort column ascending', + 'sortDescending': /*[[#{label_datatables_sortDescending}]]*/ ': activate to sort column descending' + } + } + }); + + }); + + // READY EVENT END + //console.log('The DOM may not be ready'); + + // The rest of code goes here! +})); diff --git a/roo/src/main/resources/templates/fragments/js/datatables.html b/roo/src/main/resources/templates/fragments/js/datatables.html new file mode 100644 index 0000000000..5993777eb3 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/js/datatables.html @@ -0,0 +1,78 @@ + + + + + Session info + + + + + +
+ + +
+

Error

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/js/select2.html b/roo/src/main/resources/templates/fragments/js/select2.html new file mode 100644 index 0000000000..ce2c6bd7a4 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/js/select2.html @@ -0,0 +1,16 @@ + + + + +Select2 + + +
+ + + +
+ + diff --git a/roo/src/main/resources/templates/fragments/languages.html b/roo/src/main/resources/templates/fragments/languages.html new file mode 100644 index 0000000000..248f9eaea0 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/languages.html @@ -0,0 +1,33 @@ + + + + + Languages + + + + + + + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/menu.html b/roo/src/main/resources/templates/fragments/menu.html new file mode 100644 index 0000000000..86143276e1 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/menu.html @@ -0,0 +1,107 @@ + + + + + Page menu + + + + + + + + + + diff --git a/roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html b/roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html new file mode 100644 index 0000000000..3ce82279ac --- /dev/null +++ b/roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html @@ -0,0 +1,34 @@ + + + + +Modal + + + +
+
+
+

Going to remove the selected elements

+
+
+ + +
+
+ +
+

Removed selected items

+
+ +
+

Error deleting selected items.

+
+ +
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/modal-confirm-delete.html b/roo/src/main/resources/templates/fragments/modal-confirm-delete.html new file mode 100644 index 0000000000..658c04054f --- /dev/null +++ b/roo/src/main/resources/templates/fragments/modal-confirm-delete.html @@ -0,0 +1,35 @@ + + + + +Modal + + + +
+
+
+

Going to remove the selected + element

+
+
+ + +
+
+ +
+

1 Removed item

+
+ +
+

Error deleting selected item.

+
+ +
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/modal-confirm.html b/roo/src/main/resources/templates/fragments/modal-confirm.html new file mode 100644 index 0000000000..7d0fb8d4f8 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/modal-confirm.html @@ -0,0 +1,32 @@ + + + + +Modal + + + +
+
+
+ +

Going to remove the selected + element

+ +
+
+ 100% Complete +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/modal-export-empty-error.html b/roo/src/main/resources/templates/fragments/modal-export-empty-error.html new file mode 100644 index 0000000000..dd84d8fe9e --- /dev/null +++ b/roo/src/main/resources/templates/fragments/modal-export-empty-error.html @@ -0,0 +1,20 @@ + + + + +Modal + + + +
+ +
+

No records found to generate a report.

+
+ +
+ + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/modal.html b/roo/src/main/resources/templates/fragments/modal.html new file mode 100644 index 0000000000..55e13158a4 --- /dev/null +++ b/roo/src/main/resources/templates/fragments/modal.html @@ -0,0 +1,27 @@ + + + + + Modal + + + + + + \ No newline at end of file diff --git a/roo/src/main/resources/templates/fragments/session-links.html b/roo/src/main/resources/templates/fragments/session-links.html new file mode 100644 index 0000000000..786a7a4aec --- /dev/null +++ b/roo/src/main/resources/templates/fragments/session-links.html @@ -0,0 +1,46 @@ + + + + + Session info + + + + + + + + + \ No newline at end of file diff --git a/roo/src/main/resources/templates/index.html b/roo/src/main/resources/templates/index.html new file mode 100644 index 0000000000..e4aac5e9a7 --- /dev/null +++ b/roo/src/main/resources/templates/index.html @@ -0,0 +1,150 @@ + + + + + Welcome - SpringRoo Application + + + + + +
+ +
+ + +
+ + +
+
+ +
+ +
+ +
+

With Roo you can easily build full Java applications in minutes.

+

Spring Roo is a next-generation rapid application development tool for Java developers. + It focuses on higher productivity, stock-standard Java APIs, high usability, avoiding engineering trade-offs and + facilitating easy Roo removal. +

+

Thanks for your interest in Spring Roo!

+
+
+
+ + +
+ + +
+
+
+
+ +
+
+

Doc

+ If you are looking for Reference Documentation you can get it here. +
+
+
+
+ + +
+
+
+
+ +
+
+

Project Page

+ All the info about Spring Roo development. +
+
+
+
+ + +
+
+
+
+ +
+
+

Support

+ If you have any question about the project, + you can check it. +
+
+
+
+ + +
+
+
+
+ +
+
+

Code

+ Known, modify and redistribute the source code. +
+
+
+
+ +
+ + +
+
+ +
+
+ +
+
+ +
+ + +
+ +
+ + + + + +
+
+ + + + diff --git a/roo/src/main/resources/templates/layouts/default-layout-no-menu.html b/roo/src/main/resources/templates/layouts/default-layout-no-menu.html new file mode 100644 index 0000000000..40d502800f --- /dev/null +++ b/roo/src/main/resources/templates/layouts/default-layout-no-menu.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + Spring Roo application + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +

Sample static body for direct display of the template

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent + scelerisque neque neque, ac elementum quam dignissim interdum. Phasellus et + placerat elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Praesent scelerisque neque neque, ac elementum quam dignissim interdum. + Phasellus et placerat elit.

+
+ +
+ +
+ + © 2016 Spring Roo (footer for example for direct display of the template) +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/roo/src/main/resources/templates/layouts/default-layout.html b/roo/src/main/resources/templates/layouts/default-layout.html new file mode 100644 index 0000000000..ba597630d4 --- /dev/null +++ b/roo/src/main/resources/templates/layouts/default-layout.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + Spring Roo application + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +

Sample static body for direct display of the template

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent + scelerisque neque neque, ac elementum quam dignissim interdum. Phasellus et + placerat elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Praesent scelerisque neque neque, ac elementum quam dignissim interdum. + Phasellus et placerat elit.

+
+ +
+ +
+ + © 2016 Spring Roo (footer for example for direct display of the template) +
+ + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + + + + diff --git a/roo/src/main/resources/templates/layouts/default-list-layout.html b/roo/src/main/resources/templates/layouts/default-list-layout.html new file mode 100644 index 0000000000..23f5002241 --- /dev/null +++ b/roo/src/main/resources/templates/layouts/default-list-layout.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + Spring Roo application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +

Sample static body for direct display of the template

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent + scelerisque neque neque, ac elementum quam dignissim interdum. Phasellus et + placerat elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Praesent scelerisque neque neque, ac elementum quam dignissim interdum. + Phasellus et placerat elit.

+
+ +
+ +
+ + © 2016 Spring Roo (footer for example for direct display of the template) +
+ + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + + + + diff --git a/roo/src/main/resources/templates/layouts/home-layout.html b/roo/src/main/resources/templates/layouts/home-layout.html new file mode 100644 index 0000000000..7c1d2f7c5c --- /dev/null +++ b/roo/src/main/resources/templates/layouts/home-layout.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + Spring Roo application + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +

Sample page header for direct display of the template

+
+
+ +
+ +
+ +

Sample static body for direct display of the template

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent + scelerisque neque neque, ac elementum quam dignissim interdum. Phasellus et + placerat elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Praesent scelerisque neque neque, ac elementum quam dignissim interdum. + Phasellus et placerat elit.

+
+ +
+ +
+ + © 2016 Spring Roo (footer for example for direct display of the template) +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + diff --git a/roo/src/main/resources/templates/login.html b/roo/src/main/resources/templates/login.html new file mode 100644 index 0000000000..627b165049 --- /dev/null +++ b/roo/src/main/resources/templates/login.html @@ -0,0 +1,108 @@ + + + + + Login- Spring Roo application + + + + + +
+ +
+ + +
+ + +
+
+ +
+
+

Login

+
+
+
+
+ Enter your login and password + + + + + + +
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+ +
+ + +
+ +
+ + + + + +
+
+ + + + diff --git a/roo/src/main/resources/templates/reports/export_default.jrxml b/roo/src/main/resources/templates/reports/export_default.jrxml new file mode 100644 index 0000000000..3540f690de --- /dev/null +++ b/roo/src/main/resources/templates/reports/export_default.jrxml @@ -0,0 +1,59 @@ + + + + + + + + + + <band height="94"> + <frame> + <reportElement mode="Opaque" x="-20" y="-20" width="595" height="92" backcolor="#054571" uuid="96670a12-0a0b-4503-8309-d43c1bd41fa5"/> + <staticText> + <reportElement x="20" y="20" width="234" height="43" forecolor="#FFFFFF" uuid="887580cd-50ec-499d-ba19-3971bf3a5552"/> + <textElement> + <font size="34" isBold="true"/> + </textElement> + <text><![CDATA[Export]]></text> + </staticText> + </frame> + <staticText> + <reportElement x="206" y="74" width="100" height="20" uuid="6efdf519-1cda-447d-bb04-5dfca2ae8aed"/> + <text><![CDATA[]]></text> + </staticText> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 18903e239dd1962d1db3f1abb5adbc2ae76cc235 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 18 Apr 2017 11:21:57 +0100 Subject: [PATCH 004/313] Moved project from roo to spring-roo folder. --- {roo => spring-roo}/pom.xml | 0 .../src/main/java/com/baeldung/RooApplication.java | 0 ...ingDataJpaDetachableRepositoryConfiguration.java | 0 ...onfiguration_Roo_Jpa_Repository_Configuration.aj | 0 .../com/baeldung/config/WebMvcConfiguration.java | 0 ...MvcConfiguration_Roo_ThymeleafUIConfiguration.aj | 0 .../WebMvcConfiguration_Roo_WebMvcConfiguration.aj | 0 .../baeldung/config/jackson/DomainModelModule.java | 0 .../DomainModelModule_Roo_DomainModelModule.aj | 0 .../src/main/java/com/baeldung/domain/Book.java | 0 .../java/com/baeldung/domain/Book_Roo_Equals.aj | 0 .../java/com/baeldung/domain/Book_Roo_JavaBean.aj | 0 .../java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj | 0 .../java/com/baeldung/domain/Book_Roo_ToString.aj | 0 .../com/baeldung/repository/BookRepository.java | 0 .../baeldung/repository/BookRepositoryCustom.java | 0 ...ookRepositoryCustom_Roo_Jpa_Repository_Custom.aj | 0 .../com/baeldung/repository/BookRepositoryImpl.java | 0 .../BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj | 0 .../repository/BookRepository_Roo_Jpa_Repository.aj | 0 .../java/com/baeldung/service/api/BookService.java | 0 .../baeldung/service/api/BookService_Roo_Service.aj | 0 .../com/baeldung/service/impl/BookServiceImpl.java | 0 .../impl/BookServiceImpl_Roo_Service_Impl.aj | 0 .../java/com/baeldung/web/BookDeserializer.java | 0 .../web/BookDeserializer_Roo_EntityDeserializer.aj | 0 .../main/java/com/baeldung/web/BookJsonMixin.java | 0 .../web/BooksCollectionThymeleafController.java | 0 ...sCollectionThymeleafController_Roo_Controller.aj | 0 ...ksCollectionThymeleafController_Roo_Thymeleaf.aj | 0 .../web/BooksCollectionThymeleafLinkFactory.java | 0 ...ollectionThymeleafLinkFactory_Roo_LinkFactory.aj | 0 .../baeldung/web/BooksItemThymeleafController.java | 0 .../BooksItemThymeleafController_Roo_Controller.aj | 0 .../BooksItemThymeleafController_Roo_Thymeleaf.aj | 0 .../baeldung/web/BooksItemThymeleafLinkFactory.java | 0 ...BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj | 0 .../main/java/com/baeldung/web/MainController.java | 0 .../MainController_Roo_Thymeleaf_MainController.aj | 0 .../web/reports/ExportingErrorException.java | 0 .../web/reports/JasperReportsCsvExporter.java | 0 .../baeldung/web/reports/JasperReportsExporter.java | 0 .../web/reports/JasperReportsPdfExporter.java | 0 .../web/reports/JasperReportsXlsExporter.java | 0 .../src/main/resources/application-dev.properties | 0 .../src/main/resources/application.properties | 0 {roo => spring-roo}/src/main/resources/banner.txt | 0 .../src/main/resources/messages.properties | 0 .../main/resources/static/public/css/springroo.css | 0 .../src/main/resources/static/public/css/theme.css | 0 .../static/public/fonts/fontawesome-webfont.eot | Bin .../static/public/fonts/fontawesome-webfont.svg | 0 .../static/public/fonts/fontawesome-webfont.ttf | Bin .../static/public/fonts/fontawesome-webfont.woff | Bin .../static/public/fonts/fontawesome-webfont.woff2 | Bin .../public/fonts/glyphicons-halflings-regular.eot | Bin .../public/fonts/glyphicons-halflings-regular.svg | 0 .../public/fonts/glyphicons-halflings-regular.ttf | Bin .../public/fonts/glyphicons-halflings-regular.woff | Bin .../public/fonts/glyphicons-halflings-regular.woff2 | Bin .../static/public/img/apple-touch-icon.png | Bin .../src/main/resources/static/public/img/en.png | Bin .../src/main/resources/static/public/img/es.png | Bin .../main/resources/static/public/img/favicon.ico | Bin .../src/main/resources/static/public/img/geo.png | Bin .../src/main/resources/static/public/img/logo.png | Bin .../main/resources/static/public/img/owasp_logo.png | Bin .../resources/static/public/img/springroo-logo.png | Bin .../static/public/js/dataTables.advanced.js | 0 .../static/public/js/datatables-defaults.js | 0 .../static/public/js/datetimepicker-defaults.js | 0 .../static/public/js/inputmask-defaults.js | 0 .../src/main/resources/static/public/js/main.js | 0 .../resources/static/public/js/moment-defaults.js | 0 .../resources/static/public/js/moment-locale-es.js | 0 .../resources/static/public/js/select2-defaults.js | 0 .../static/public/js/validation-defaults.js | 0 .../src/main/resources/templates/accessibility.html | 0 .../src/main/resources/templates/books/create.html | 0 .../src/main/resources/templates/books/edit.html | 0 .../src/main/resources/templates/books/list.html | 0 .../src/main/resources/templates/books/show.html | 0 .../main/resources/templates/books/showInline.html | 0 .../src/main/resources/templates/error.html | 0 .../main/resources/templates/fragments/footer.html | 0 .../main/resources/templates/fragments/header.html | 0 .../templates/fragments/js/datatables-locale.js | 0 .../templates/fragments/js/datatables.html | 0 .../resources/templates/fragments/js/select2.html | 0 .../resources/templates/fragments/languages.html | 0 .../main/resources/templates/fragments/menu.html | 0 .../fragments/modal-confirm-delete-batch.html | 0 .../templates/fragments/modal-confirm-delete.html | 0 .../templates/fragments/modal-confirm.html | 0 .../fragments/modal-export-empty-error.html | 0 .../main/resources/templates/fragments/modal.html | 0 .../templates/fragments/session-links.html | 0 .../src/main/resources/templates/index.html | 0 .../templates/layouts/default-layout-no-menu.html | 0 .../resources/templates/layouts/default-layout.html | 0 .../templates/layouts/default-list-layout.html | 0 .../resources/templates/layouts/home-layout.html | 0 .../src/main/resources/templates/login.html | 0 .../templates/reports/export_default.jrxml | 0 104 files changed, 0 insertions(+), 0 deletions(-) rename {roo => spring-roo}/pom.xml (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/RooApplication.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/WebMvcConfiguration.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/jackson/DomainModelModule.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/domain/Book.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepository.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepositoryCustom.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepositoryImpl.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/service/api/BookService.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/service/impl/BookServiceImpl.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BookDeserializer.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BookJsonMixin.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksItemThymeleafController.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/MainController.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/reports/ExportingErrorException.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java (100%) rename {roo => spring-roo}/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java (100%) rename {roo => spring-roo}/src/main/resources/application-dev.properties (100%) rename {roo => spring-roo}/src/main/resources/application.properties (100%) rename {roo => spring-roo}/src/main/resources/banner.txt (100%) rename {roo => spring-roo}/src/main/resources/messages.properties (100%) rename {roo => spring-roo}/src/main/resources/static/public/css/springroo.css (100%) rename {roo => spring-roo}/src/main/resources/static/public/css/theme.css (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/fontawesome-webfont.eot (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/fontawesome-webfont.svg (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/fontawesome-webfont.ttf (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/fontawesome-webfont.woff (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff (100%) rename {roo => spring-roo}/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/apple-touch-icon.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/en.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/es.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/favicon.ico (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/geo.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/logo.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/owasp_logo.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/img/springroo-logo.png (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/dataTables.advanced.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/datatables-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/datetimepicker-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/inputmask-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/main.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/moment-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/moment-locale-es.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/select2-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/static/public/js/validation-defaults.js (100%) rename {roo => spring-roo}/src/main/resources/templates/accessibility.html (100%) rename {roo => spring-roo}/src/main/resources/templates/books/create.html (100%) rename {roo => spring-roo}/src/main/resources/templates/books/edit.html (100%) rename {roo => spring-roo}/src/main/resources/templates/books/list.html (100%) rename {roo => spring-roo}/src/main/resources/templates/books/show.html (100%) rename {roo => spring-roo}/src/main/resources/templates/books/showInline.html (100%) rename {roo => spring-roo}/src/main/resources/templates/error.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/footer.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/header.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/js/datatables-locale.js (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/js/datatables.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/js/select2.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/languages.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/menu.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/modal-confirm-delete-batch.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/modal-confirm-delete.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/modal-confirm.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/modal-export-empty-error.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/modal.html (100%) rename {roo => spring-roo}/src/main/resources/templates/fragments/session-links.html (100%) rename {roo => spring-roo}/src/main/resources/templates/index.html (100%) rename {roo => spring-roo}/src/main/resources/templates/layouts/default-layout-no-menu.html (100%) rename {roo => spring-roo}/src/main/resources/templates/layouts/default-layout.html (100%) rename {roo => spring-roo}/src/main/resources/templates/layouts/default-list-layout.html (100%) rename {roo => spring-roo}/src/main/resources/templates/layouts/home-layout.html (100%) rename {roo => spring-roo}/src/main/resources/templates/login.html (100%) rename {roo => spring-roo}/src/main/resources/templates/reports/export_default.jrxml (100%) diff --git a/roo/pom.xml b/spring-roo/pom.xml similarity index 100% rename from roo/pom.xml rename to spring-roo/pom.xml diff --git a/roo/src/main/java/com/baeldung/RooApplication.java b/spring-roo/src/main/java/com/baeldung/RooApplication.java similarity index 100% rename from roo/src/main/java/com/baeldung/RooApplication.java rename to spring-roo/src/main/java/com/baeldung/RooApplication.java diff --git a/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java b/spring-roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java similarity index 100% rename from roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java rename to spring-roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration.java diff --git a/roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj b/spring-roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj similarity index 100% rename from roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj rename to spring-roo/src/main/java/com/baeldung/config/SpringDataJpaDetachableRepositoryConfiguration_Roo_Jpa_Repository_Configuration.aj diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java b/spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java similarity index 100% rename from roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java rename to spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration.java diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj b/spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj similarity index 100% rename from roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj rename to spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_ThymeleafUIConfiguration.aj diff --git a/roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj b/spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj similarity index 100% rename from roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj rename to spring-roo/src/main/java/com/baeldung/config/WebMvcConfiguration_Roo_WebMvcConfiguration.aj diff --git a/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java b/spring-roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java similarity index 100% rename from roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java rename to spring-roo/src/main/java/com/baeldung/config/jackson/DomainModelModule.java diff --git a/roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj b/spring-roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj similarity index 100% rename from roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj rename to spring-roo/src/main/java/com/baeldung/config/jackson/DomainModelModule_Roo_DomainModelModule.aj diff --git a/roo/src/main/java/com/baeldung/domain/Book.java b/spring-roo/src/main/java/com/baeldung/domain/Book.java similarity index 100% rename from roo/src/main/java/com/baeldung/domain/Book.java rename to spring-roo/src/main/java/com/baeldung/domain/Book.java diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj b/spring-roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj similarity index 100% rename from roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj rename to spring-roo/src/main/java/com/baeldung/domain/Book_Roo_Equals.aj diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj b/spring-roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj similarity index 100% rename from roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj rename to spring-roo/src/main/java/com/baeldung/domain/Book_Roo_JavaBean.aj diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj b/spring-roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj similarity index 100% rename from roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj rename to spring-roo/src/main/java/com/baeldung/domain/Book_Roo_Jpa_Entity.aj diff --git a/roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj b/spring-roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj similarity index 100% rename from roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj rename to spring-roo/src/main/java/com/baeldung/domain/Book_Roo_ToString.aj diff --git a/roo/src/main/java/com/baeldung/repository/BookRepository.java b/spring-roo/src/main/java/com/baeldung/repository/BookRepository.java similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepository.java rename to spring-roo/src/main/java/com/baeldung/repository/BookRepository.java diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java b/spring-roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java rename to spring-roo/src/main/java/com/baeldung/repository/BookRepositoryCustom.java diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj b/spring-roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj rename to spring-roo/src/main/java/com/baeldung/repository/BookRepositoryCustom_Roo_Jpa_Repository_Custom.aj diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java b/spring-roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java rename to spring-roo/src/main/java/com/baeldung/repository/BookRepositoryImpl.java diff --git a/roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj b/spring-roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj rename to spring-roo/src/main/java/com/baeldung/repository/BookRepositoryImpl_Roo_Jpa_Repository_Impl.aj diff --git a/roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj b/spring-roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj similarity index 100% rename from roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj rename to spring-roo/src/main/java/com/baeldung/repository/BookRepository_Roo_Jpa_Repository.aj diff --git a/roo/src/main/java/com/baeldung/service/api/BookService.java b/spring-roo/src/main/java/com/baeldung/service/api/BookService.java similarity index 100% rename from roo/src/main/java/com/baeldung/service/api/BookService.java rename to spring-roo/src/main/java/com/baeldung/service/api/BookService.java diff --git a/roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj b/spring-roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj similarity index 100% rename from roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj rename to spring-roo/src/main/java/com/baeldung/service/api/BookService_Roo_Service.aj diff --git a/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java b/spring-roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java similarity index 100% rename from roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java rename to spring-roo/src/main/java/com/baeldung/service/impl/BookServiceImpl.java diff --git a/roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj b/spring-roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj similarity index 100% rename from roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj rename to spring-roo/src/main/java/com/baeldung/service/impl/BookServiceImpl_Roo_Service_Impl.aj diff --git a/roo/src/main/java/com/baeldung/web/BookDeserializer.java b/spring-roo/src/main/java/com/baeldung/web/BookDeserializer.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BookDeserializer.java rename to spring-roo/src/main/java/com/baeldung/web/BookDeserializer.java diff --git a/roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj b/spring-roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj rename to spring-roo/src/main/java/com/baeldung/web/BookDeserializer_Roo_EntityDeserializer.aj diff --git a/roo/src/main/java/com/baeldung/web/BookJsonMixin.java b/spring-roo/src/main/java/com/baeldung/web/BookJsonMixin.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BookJsonMixin.java rename to spring-roo/src/main/java/com/baeldung/web/BookJsonMixin.java diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java b/spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java rename to spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController.java diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj b/spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Controller.aj diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj b/spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafController_Roo_Thymeleaf.aj diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java b/spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java rename to spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory.java diff --git a/roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj b/spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksCollectionThymeleafLinkFactory_Roo_LinkFactory.aj diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java b/spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java rename to spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController.java diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj b/spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Controller.aj diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj b/spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafController_Roo_Thymeleaf.aj diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java b/spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java rename to spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory.java diff --git a/roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj b/spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj rename to spring-roo/src/main/java/com/baeldung/web/BooksItemThymeleafLinkFactory_Roo_LinkFactory.aj diff --git a/roo/src/main/java/com/baeldung/web/MainController.java b/spring-roo/src/main/java/com/baeldung/web/MainController.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/MainController.java rename to spring-roo/src/main/java/com/baeldung/web/MainController.java diff --git a/roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj b/spring-roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj similarity index 100% rename from roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj rename to spring-roo/src/main/java/com/baeldung/web/MainController_Roo_Thymeleaf_MainController.aj diff --git a/roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java b/spring-roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java rename to spring-roo/src/main/java/com/baeldung/web/reports/ExportingErrorException.java diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java b/spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java rename to spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsCsvExporter.java diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java b/spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java rename to spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsExporter.java diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java b/spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java rename to spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsPdfExporter.java diff --git a/roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java b/spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java similarity index 100% rename from roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java rename to spring-roo/src/main/java/com/baeldung/web/reports/JasperReportsXlsExporter.java diff --git a/roo/src/main/resources/application-dev.properties b/spring-roo/src/main/resources/application-dev.properties similarity index 100% rename from roo/src/main/resources/application-dev.properties rename to spring-roo/src/main/resources/application-dev.properties diff --git a/roo/src/main/resources/application.properties b/spring-roo/src/main/resources/application.properties similarity index 100% rename from roo/src/main/resources/application.properties rename to spring-roo/src/main/resources/application.properties diff --git a/roo/src/main/resources/banner.txt b/spring-roo/src/main/resources/banner.txt similarity index 100% rename from roo/src/main/resources/banner.txt rename to spring-roo/src/main/resources/banner.txt diff --git a/roo/src/main/resources/messages.properties b/spring-roo/src/main/resources/messages.properties similarity index 100% rename from roo/src/main/resources/messages.properties rename to spring-roo/src/main/resources/messages.properties diff --git a/roo/src/main/resources/static/public/css/springroo.css b/spring-roo/src/main/resources/static/public/css/springroo.css similarity index 100% rename from roo/src/main/resources/static/public/css/springroo.css rename to spring-roo/src/main/resources/static/public/css/springroo.css diff --git a/roo/src/main/resources/static/public/css/theme.css b/spring-roo/src/main/resources/static/public/css/theme.css similarity index 100% rename from roo/src/main/resources/static/public/css/theme.css rename to spring-roo/src/main/resources/static/public/css/theme.css diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot b/spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot similarity index 100% rename from roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot rename to spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.eot diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.svg b/spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.svg similarity index 100% rename from roo/src/main/resources/static/public/fonts/fontawesome-webfont.svg rename to spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.svg diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf b/spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf similarity index 100% rename from roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf rename to spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.ttf diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff b/spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff similarity index 100% rename from roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff rename to spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff diff --git a/roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 b/spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 similarity index 100% rename from roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 rename to spring-roo/src/main/resources/static/public/fonts/fontawesome-webfont.woff2 diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot b/spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot rename to spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.eot diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg b/spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg rename to spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.svg diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf b/spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf rename to spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.ttf diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff b/spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff rename to spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff diff --git a/roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 b/spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 rename to spring-roo/src/main/resources/static/public/fonts/glyphicons-halflings-regular.woff2 diff --git a/roo/src/main/resources/static/public/img/apple-touch-icon.png b/spring-roo/src/main/resources/static/public/img/apple-touch-icon.png similarity index 100% rename from roo/src/main/resources/static/public/img/apple-touch-icon.png rename to spring-roo/src/main/resources/static/public/img/apple-touch-icon.png diff --git a/roo/src/main/resources/static/public/img/en.png b/spring-roo/src/main/resources/static/public/img/en.png similarity index 100% rename from roo/src/main/resources/static/public/img/en.png rename to spring-roo/src/main/resources/static/public/img/en.png diff --git a/roo/src/main/resources/static/public/img/es.png b/spring-roo/src/main/resources/static/public/img/es.png similarity index 100% rename from roo/src/main/resources/static/public/img/es.png rename to spring-roo/src/main/resources/static/public/img/es.png diff --git a/roo/src/main/resources/static/public/img/favicon.ico b/spring-roo/src/main/resources/static/public/img/favicon.ico similarity index 100% rename from roo/src/main/resources/static/public/img/favicon.ico rename to spring-roo/src/main/resources/static/public/img/favicon.ico diff --git a/roo/src/main/resources/static/public/img/geo.png b/spring-roo/src/main/resources/static/public/img/geo.png similarity index 100% rename from roo/src/main/resources/static/public/img/geo.png rename to spring-roo/src/main/resources/static/public/img/geo.png diff --git a/roo/src/main/resources/static/public/img/logo.png b/spring-roo/src/main/resources/static/public/img/logo.png similarity index 100% rename from roo/src/main/resources/static/public/img/logo.png rename to spring-roo/src/main/resources/static/public/img/logo.png diff --git a/roo/src/main/resources/static/public/img/owasp_logo.png b/spring-roo/src/main/resources/static/public/img/owasp_logo.png similarity index 100% rename from roo/src/main/resources/static/public/img/owasp_logo.png rename to spring-roo/src/main/resources/static/public/img/owasp_logo.png diff --git a/roo/src/main/resources/static/public/img/springroo-logo.png b/spring-roo/src/main/resources/static/public/img/springroo-logo.png similarity index 100% rename from roo/src/main/resources/static/public/img/springroo-logo.png rename to spring-roo/src/main/resources/static/public/img/springroo-logo.png diff --git a/roo/src/main/resources/static/public/js/dataTables.advanced.js b/spring-roo/src/main/resources/static/public/js/dataTables.advanced.js similarity index 100% rename from roo/src/main/resources/static/public/js/dataTables.advanced.js rename to spring-roo/src/main/resources/static/public/js/dataTables.advanced.js diff --git a/roo/src/main/resources/static/public/js/datatables-defaults.js b/spring-roo/src/main/resources/static/public/js/datatables-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/datatables-defaults.js rename to spring-roo/src/main/resources/static/public/js/datatables-defaults.js diff --git a/roo/src/main/resources/static/public/js/datetimepicker-defaults.js b/spring-roo/src/main/resources/static/public/js/datetimepicker-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/datetimepicker-defaults.js rename to spring-roo/src/main/resources/static/public/js/datetimepicker-defaults.js diff --git a/roo/src/main/resources/static/public/js/inputmask-defaults.js b/spring-roo/src/main/resources/static/public/js/inputmask-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/inputmask-defaults.js rename to spring-roo/src/main/resources/static/public/js/inputmask-defaults.js diff --git a/roo/src/main/resources/static/public/js/main.js b/spring-roo/src/main/resources/static/public/js/main.js similarity index 100% rename from roo/src/main/resources/static/public/js/main.js rename to spring-roo/src/main/resources/static/public/js/main.js diff --git a/roo/src/main/resources/static/public/js/moment-defaults.js b/spring-roo/src/main/resources/static/public/js/moment-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/moment-defaults.js rename to spring-roo/src/main/resources/static/public/js/moment-defaults.js diff --git a/roo/src/main/resources/static/public/js/moment-locale-es.js b/spring-roo/src/main/resources/static/public/js/moment-locale-es.js similarity index 100% rename from roo/src/main/resources/static/public/js/moment-locale-es.js rename to spring-roo/src/main/resources/static/public/js/moment-locale-es.js diff --git a/roo/src/main/resources/static/public/js/select2-defaults.js b/spring-roo/src/main/resources/static/public/js/select2-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/select2-defaults.js rename to spring-roo/src/main/resources/static/public/js/select2-defaults.js diff --git a/roo/src/main/resources/static/public/js/validation-defaults.js b/spring-roo/src/main/resources/static/public/js/validation-defaults.js similarity index 100% rename from roo/src/main/resources/static/public/js/validation-defaults.js rename to spring-roo/src/main/resources/static/public/js/validation-defaults.js diff --git a/roo/src/main/resources/templates/accessibility.html b/spring-roo/src/main/resources/templates/accessibility.html similarity index 100% rename from roo/src/main/resources/templates/accessibility.html rename to spring-roo/src/main/resources/templates/accessibility.html diff --git a/roo/src/main/resources/templates/books/create.html b/spring-roo/src/main/resources/templates/books/create.html similarity index 100% rename from roo/src/main/resources/templates/books/create.html rename to spring-roo/src/main/resources/templates/books/create.html diff --git a/roo/src/main/resources/templates/books/edit.html b/spring-roo/src/main/resources/templates/books/edit.html similarity index 100% rename from roo/src/main/resources/templates/books/edit.html rename to spring-roo/src/main/resources/templates/books/edit.html diff --git a/roo/src/main/resources/templates/books/list.html b/spring-roo/src/main/resources/templates/books/list.html similarity index 100% rename from roo/src/main/resources/templates/books/list.html rename to spring-roo/src/main/resources/templates/books/list.html diff --git a/roo/src/main/resources/templates/books/show.html b/spring-roo/src/main/resources/templates/books/show.html similarity index 100% rename from roo/src/main/resources/templates/books/show.html rename to spring-roo/src/main/resources/templates/books/show.html diff --git a/roo/src/main/resources/templates/books/showInline.html b/spring-roo/src/main/resources/templates/books/showInline.html similarity index 100% rename from roo/src/main/resources/templates/books/showInline.html rename to spring-roo/src/main/resources/templates/books/showInline.html diff --git a/roo/src/main/resources/templates/error.html b/spring-roo/src/main/resources/templates/error.html similarity index 100% rename from roo/src/main/resources/templates/error.html rename to spring-roo/src/main/resources/templates/error.html diff --git a/roo/src/main/resources/templates/fragments/footer.html b/spring-roo/src/main/resources/templates/fragments/footer.html similarity index 100% rename from roo/src/main/resources/templates/fragments/footer.html rename to spring-roo/src/main/resources/templates/fragments/footer.html diff --git a/roo/src/main/resources/templates/fragments/header.html b/spring-roo/src/main/resources/templates/fragments/header.html similarity index 100% rename from roo/src/main/resources/templates/fragments/header.html rename to spring-roo/src/main/resources/templates/fragments/header.html diff --git a/roo/src/main/resources/templates/fragments/js/datatables-locale.js b/spring-roo/src/main/resources/templates/fragments/js/datatables-locale.js similarity index 100% rename from roo/src/main/resources/templates/fragments/js/datatables-locale.js rename to spring-roo/src/main/resources/templates/fragments/js/datatables-locale.js diff --git a/roo/src/main/resources/templates/fragments/js/datatables.html b/spring-roo/src/main/resources/templates/fragments/js/datatables.html similarity index 100% rename from roo/src/main/resources/templates/fragments/js/datatables.html rename to spring-roo/src/main/resources/templates/fragments/js/datatables.html diff --git a/roo/src/main/resources/templates/fragments/js/select2.html b/spring-roo/src/main/resources/templates/fragments/js/select2.html similarity index 100% rename from roo/src/main/resources/templates/fragments/js/select2.html rename to spring-roo/src/main/resources/templates/fragments/js/select2.html diff --git a/roo/src/main/resources/templates/fragments/languages.html b/spring-roo/src/main/resources/templates/fragments/languages.html similarity index 100% rename from roo/src/main/resources/templates/fragments/languages.html rename to spring-roo/src/main/resources/templates/fragments/languages.html diff --git a/roo/src/main/resources/templates/fragments/menu.html b/spring-roo/src/main/resources/templates/fragments/menu.html similarity index 100% rename from roo/src/main/resources/templates/fragments/menu.html rename to spring-roo/src/main/resources/templates/fragments/menu.html diff --git a/roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html b/spring-roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html similarity index 100% rename from roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html rename to spring-roo/src/main/resources/templates/fragments/modal-confirm-delete-batch.html diff --git a/roo/src/main/resources/templates/fragments/modal-confirm-delete.html b/spring-roo/src/main/resources/templates/fragments/modal-confirm-delete.html similarity index 100% rename from roo/src/main/resources/templates/fragments/modal-confirm-delete.html rename to spring-roo/src/main/resources/templates/fragments/modal-confirm-delete.html diff --git a/roo/src/main/resources/templates/fragments/modal-confirm.html b/spring-roo/src/main/resources/templates/fragments/modal-confirm.html similarity index 100% rename from roo/src/main/resources/templates/fragments/modal-confirm.html rename to spring-roo/src/main/resources/templates/fragments/modal-confirm.html diff --git a/roo/src/main/resources/templates/fragments/modal-export-empty-error.html b/spring-roo/src/main/resources/templates/fragments/modal-export-empty-error.html similarity index 100% rename from roo/src/main/resources/templates/fragments/modal-export-empty-error.html rename to spring-roo/src/main/resources/templates/fragments/modal-export-empty-error.html diff --git a/roo/src/main/resources/templates/fragments/modal.html b/spring-roo/src/main/resources/templates/fragments/modal.html similarity index 100% rename from roo/src/main/resources/templates/fragments/modal.html rename to spring-roo/src/main/resources/templates/fragments/modal.html diff --git a/roo/src/main/resources/templates/fragments/session-links.html b/spring-roo/src/main/resources/templates/fragments/session-links.html similarity index 100% rename from roo/src/main/resources/templates/fragments/session-links.html rename to spring-roo/src/main/resources/templates/fragments/session-links.html diff --git a/roo/src/main/resources/templates/index.html b/spring-roo/src/main/resources/templates/index.html similarity index 100% rename from roo/src/main/resources/templates/index.html rename to spring-roo/src/main/resources/templates/index.html diff --git a/roo/src/main/resources/templates/layouts/default-layout-no-menu.html b/spring-roo/src/main/resources/templates/layouts/default-layout-no-menu.html similarity index 100% rename from roo/src/main/resources/templates/layouts/default-layout-no-menu.html rename to spring-roo/src/main/resources/templates/layouts/default-layout-no-menu.html diff --git a/roo/src/main/resources/templates/layouts/default-layout.html b/spring-roo/src/main/resources/templates/layouts/default-layout.html similarity index 100% rename from roo/src/main/resources/templates/layouts/default-layout.html rename to spring-roo/src/main/resources/templates/layouts/default-layout.html diff --git a/roo/src/main/resources/templates/layouts/default-list-layout.html b/spring-roo/src/main/resources/templates/layouts/default-list-layout.html similarity index 100% rename from roo/src/main/resources/templates/layouts/default-list-layout.html rename to spring-roo/src/main/resources/templates/layouts/default-list-layout.html diff --git a/roo/src/main/resources/templates/layouts/home-layout.html b/spring-roo/src/main/resources/templates/layouts/home-layout.html similarity index 100% rename from roo/src/main/resources/templates/layouts/home-layout.html rename to spring-roo/src/main/resources/templates/layouts/home-layout.html diff --git a/roo/src/main/resources/templates/login.html b/spring-roo/src/main/resources/templates/login.html similarity index 100% rename from roo/src/main/resources/templates/login.html rename to spring-roo/src/main/resources/templates/login.html diff --git a/roo/src/main/resources/templates/reports/export_default.jrxml b/spring-roo/src/main/resources/templates/reports/export_default.jrxml similarity index 100% rename from roo/src/main/resources/templates/reports/export_default.jrxml rename to spring-roo/src/main/resources/templates/reports/export_default.jrxml From d889dba9281d6f4a376b606b8a5e4fb018f0a835 Mon Sep 17 00:00:00 2001 From: iaforek Date: Sun, 7 May 2017 22:53:55 +0100 Subject: [PATCH 005/313] BAEL-838 Initial code showing how to remove last char - helper class and tests. --- .../com/baeldung/string/RemoveLastChar.java | 18 ++++++ .../baeldung/string/RemoveLastCharTest.java | 56 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/string/RemoveLastChar.java create mode 100644 core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java diff --git a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java new file mode 100644 index 0000000000..3816a61f45 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java @@ -0,0 +1,18 @@ +/** + * + */ +package com.baeldung.string; + +/** + * @author iaforek + * + */ +public class RemoveLastChar { + public static String substring (String s) { + if (s == null || s.length() == 0) { + return null; + } else { + return (s.substring(0, s.length() - 1)); + } + } +} diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java new file mode 100644 index 0000000000..80d76e96ac --- /dev/null +++ b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java @@ -0,0 +1,56 @@ +/** + * + */ +package com.baeldung.string; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author iaforek + * + */ +public class RemoveLastCharTest { + + public static final String TEST_STRING = "abcdef"; + public static final String NULL_STRING = null; + public static final String EMPTY_STRING = ""; + public static final String ONE_CHAR_STRING = "a"; + public static final String WHITE_SPACE_AT_THE_END_STRING = "abc "; + + /** + * Test method for {@link com.baeldung.string.RemoveLastChar#substring(java.lang.String)}. + */ + @Test + public void givenTestString_substring_getStingWithoutLastChar() { + Assert.assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); + Assert.assertEquals("abcde", StringUtils.chop(TEST_STRING)); + } + + @Test + public void givenNullString_substring_getNullString() { + Assert.assertEquals(NULL_STRING, RemoveLastChar.substring(NULL_STRING)); + Assert.assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + + } + + @Test + public void givenEmptyString_substring_getEmptyString() { + Assert.assertEquals(NULL_STRING, RemoveLastChar.substring(EMPTY_STRING)); + Assert.assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + } + + @Test + public void givenOneCharString_substring_getEmptyString() { + Assert.assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); + Assert.assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); + } + + @Test + public void givenStringWithWhiteSpaceAtTheEnd_substring_getStringWithoutWhiteSpaceAtTheEnd() { + Assert.assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); + Assert.assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); + } + +} From 124966a0f68f39802efb41a8b886280485d374b1 Mon Sep 17 00:00:00 2001 From: iaforek Date: Sun, 7 May 2017 23:11:03 +0100 Subject: [PATCH 006/313] BAEL-838 Corrected Helper class and associated empty string test case. Added StringUtils.substing tests. --- .../main/java/com/baeldung/string/RemoveLastChar.java | 2 +- .../java/com/baeldung/string/RemoveLastCharTest.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java index 3816a61f45..faf30f7b25 100644 --- a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java +++ b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java @@ -10,7 +10,7 @@ package com.baeldung.string; public class RemoveLastChar { public static String substring (String s) { if (s == null || s.length() == 0) { - return null; + return s; } else { return (s.substring(0, s.length() - 1)); } diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java index 80d76e96ac..a39212ced4 100644 --- a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java +++ b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java @@ -26,6 +26,7 @@ public class RemoveLastCharTest { public void givenTestString_substring_getStingWithoutLastChar() { Assert.assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); Assert.assertEquals("abcde", StringUtils.chop(TEST_STRING)); + Assert.assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); } @Test @@ -37,20 +38,25 @@ public class RemoveLastCharTest { @Test public void givenEmptyString_substring_getEmptyString() { - Assert.assertEquals(NULL_STRING, RemoveLastChar.substring(EMPTY_STRING)); - Assert.assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + Assert.assertEquals(EMPTY_STRING, RemoveLastChar.substring(EMPTY_STRING)); + Assert.assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); + Assert.assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); + } @Test public void givenOneCharString_substring_getEmptyString() { Assert.assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); Assert.assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); + Assert.assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); + } @Test public void givenStringWithWhiteSpaceAtTheEnd_substring_getStringWithoutWhiteSpaceAtTheEnd() { Assert.assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); Assert.assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); + Assert.assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); } } From d9d35f8a4f8b4d9a014c6d5b83fe6cfbffccea7a Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 8 May 2017 19:12:17 +0100 Subject: [PATCH 007/313] BAEL-838 Refromatted code using formatter.xml. Added Assert.assertEquals import. Renamed test to follow convention. Reordered tests. --- .../com/baeldung/string/RemoveLastChar.java | 21 ++--- .../baeldung/string/RemoveLastCharTest.java | 87 ++++++++----------- 2 files changed, 44 insertions(+), 64 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java index faf30f7b25..ee1d5c597d 100644 --- a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java +++ b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java @@ -1,18 +1,11 @@ -/** - * - */ package com.baeldung.string; -/** - * @author iaforek - * - */ public class RemoveLastChar { - public static String substring (String s) { - if (s == null || s.length() == 0) { - return s; - } else { - return (s.substring(0, s.length() - 1)); - } - } + public static String substring(String s) { + if (s == null || s.length() == 0) { + return s; + } else { + return (s.substring(0, s.length() - 1)); + } + } } diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java index a39212ced4..f1212b2ed9 100644 --- a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java +++ b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java @@ -1,62 +1,49 @@ -/** - * - */ package com.baeldung.string; +import static org.junit.Assert.assertEquals; + import org.apache.commons.lang3.StringUtils; -import org.junit.Assert; import org.junit.Test; -/** - * @author iaforek - * - */ public class RemoveLastCharTest { - - public static final String TEST_STRING = "abcdef"; - public static final String NULL_STRING = null; - public static final String EMPTY_STRING = ""; - public static final String ONE_CHAR_STRING = "a"; - public static final String WHITE_SPACE_AT_THE_END_STRING = "abc "; - /** - * Test method for {@link com.baeldung.string.RemoveLastChar#substring(java.lang.String)}. - */ - @Test - public void givenTestString_substring_getStingWithoutLastChar() { - Assert.assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); - Assert.assertEquals("abcde", StringUtils.chop(TEST_STRING)); - Assert.assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); - } - - @Test - public void givenNullString_substring_getNullString() { - Assert.assertEquals(NULL_STRING, RemoveLastChar.substring(NULL_STRING)); - Assert.assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + public static final String TEST_STRING = "abcdef"; + public static final String NULL_STRING = null; + public static final String EMPTY_STRING = ""; + public static final String ONE_CHAR_STRING = "a"; + public static final String WHITE_SPACE_AT_THE_END_STRING = "abc "; - } + @Test + public void givenTestString_whenSubstring_thenGetStingWithoutLastChar() { + assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); + assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); + assertEquals("abcde", StringUtils.chop(TEST_STRING)); + } - @Test - public void givenEmptyString_substring_getEmptyString() { - Assert.assertEquals(EMPTY_STRING, RemoveLastChar.substring(EMPTY_STRING)); - Assert.assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); - Assert.assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); + @Test + public void givenNullString_whenSubstring_thenGetNullString() { + assertEquals(NULL_STRING, RemoveLastChar.substring(NULL_STRING)); + assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + } - } - - @Test - public void givenOneCharString_substring_getEmptyString() { - Assert.assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); - Assert.assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); - Assert.assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); + @Test + public void givenEmptyString_whenSubstring_thenGetEmptyString() { + assertEquals(EMPTY_STRING, RemoveLastChar.substring(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); + assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); + } - } - - @Test - public void givenStringWithWhiteSpaceAtTheEnd_substring_getStringWithoutWhiteSpaceAtTheEnd() { - Assert.assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); - Assert.assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); - Assert.assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); - } - + @Test + public void givenOneCharString_whenSubstring_thenGetEmptyString() { + assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); + assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); + } + + @Test + public void givenStringWithWhiteSpaceAtTheEnd_whenSubstring_thenGetStringWithoutWhiteSpaceAtTheEnd() { + assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); + assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); + } } From 0fb69164c0be88c51211a344d53ae97cf62cb7b2 Mon Sep 17 00:00:00 2001 From: iaforek Date: Wed, 10 May 2017 13:47:45 +0100 Subject: [PATCH 008/313] BAEL-838 - Added regex method and updated tests. --- .../main/java/com/baeldung/string/RemoveLastChar.java | 8 ++++++++ .../java/com/baeldung/string/RemoveLastCharTest.java | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java index ee1d5c597d..c6bb81b133 100644 --- a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java +++ b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java @@ -8,4 +8,12 @@ public class RemoveLastChar { return (s.substring(0, s.length() - 1)); } } + + public static String chop(String s) { + if (s == null) { + return s; + } else { + return s.replaceAll(".$", ""); + } + } } diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java index f1212b2ed9..7d82d1a91b 100644 --- a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java +++ b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java @@ -18,12 +18,15 @@ public class RemoveLastCharTest { assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); assertEquals("abcde", StringUtils.chop(TEST_STRING)); + assertEquals("abcde", TEST_STRING.replaceAll(".$", "")); + assertEquals("abcde", RemoveLastChar.chop(TEST_STRING)); } @Test public void givenNullString_whenSubstring_thenGetNullString() { assertEquals(NULL_STRING, RemoveLastChar.substring(NULL_STRING)); assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + assertEquals(NULL_STRING, RemoveLastChar.chop(NULL_STRING)); } @Test @@ -31,6 +34,8 @@ public class RemoveLastCharTest { assertEquals(EMPTY_STRING, RemoveLastChar.substring(EMPTY_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); + assertEquals(EMPTY_STRING, EMPTY_STRING.replaceAll(".$", "")); + assertEquals(EMPTY_STRING, RemoveLastChar.chop(EMPTY_STRING)); } @Test @@ -38,6 +43,8 @@ public class RemoveLastCharTest { assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, ONE_CHAR_STRING.replaceAll(".$", "")); + assertEquals(EMPTY_STRING, RemoveLastChar.chop(ONE_CHAR_STRING)); } @Test @@ -45,5 +52,7 @@ public class RemoveLastCharTest { assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", WHITE_SPACE_AT_THE_END_STRING.replaceAll(".$", "")); + assertEquals("abc", RemoveLastChar.chop(WHITE_SPACE_AT_THE_END_STRING)); } } From cbed304478e917c24c6b563160539f2892c6cfa1 Mon Sep 17 00:00:00 2001 From: iaforek Date: Wed, 10 May 2017 14:21:33 +0100 Subject: [PATCH 009/313] BAEL-838 Added new line examples. --- .../baeldung/string/RemoveLastCharTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java index 7d82d1a91b..5ada9c66f2 100644 --- a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java +++ b/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java @@ -1,6 +1,7 @@ package com.baeldung.string; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -12,6 +13,8 @@ public class RemoveLastCharTest { public static final String EMPTY_STRING = ""; public static final String ONE_CHAR_STRING = "a"; public static final String WHITE_SPACE_AT_THE_END_STRING = "abc "; + public static final String NEW_LINE_AT_THE_END_STRING = "abc\n"; + public static final String MULTIPLE_LINES_STRING = "abc\ndef"; @Test public void givenTestString_whenSubstring_thenGetStingWithoutLastChar() { @@ -55,4 +58,22 @@ public class RemoveLastCharTest { assertEquals("abc", WHITE_SPACE_AT_THE_END_STRING.replaceAll(".$", "")); assertEquals("abc", RemoveLastChar.chop(WHITE_SPACE_AT_THE_END_STRING)); } + + @Test + public void givenStringWithNewLineAtTheEnd_whenSubstring_thenGetStringWithoutNewLine() { + assertEquals("abc", RemoveLastChar.substring(NEW_LINE_AT_THE_END_STRING)); + assertEquals("abc", StringUtils.substring(NEW_LINE_AT_THE_END_STRING, 0, NEW_LINE_AT_THE_END_STRING.length() - 1)); + assertEquals("abc", StringUtils.chop(NEW_LINE_AT_THE_END_STRING)); + assertNotEquals("abc", NEW_LINE_AT_THE_END_STRING.replaceAll(".$", "")); + assertNotEquals("abc", RemoveLastChar.chop(NEW_LINE_AT_THE_END_STRING)); + } + + @Test + public void givenMultiLineString_whenSubstring_thenGetStringWithoutNewLine() { + assertEquals("abc\nde", RemoveLastChar.substring(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringUtils.substring(MULTIPLE_LINES_STRING, 0, MULTIPLE_LINES_STRING.length() - 1)); + assertEquals("abc\nde", StringUtils.chop(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", MULTIPLE_LINES_STRING.replaceAll(".$", "")); + assertEquals("abc\nde", RemoveLastChar.chop(MULTIPLE_LINES_STRING)); + } } From 1af7196a652db82b2907844731998d1b09987603 Mon Sep 17 00:00:00 2001 From: iaforek Date: Fri, 12 May 2017 13:18:01 +0100 Subject: [PATCH 010/313] BAEL-838 Renamed RemoveLastChar class to StringHelper and added Java8 examples. Refactord code. --- .../com/baeldung/string/RemoveLastChar.java | 19 -------- .../com/baeldung/string/StringHelper.java | 26 +++++++++++ ...astCharTest.java => StringHelperTest.java} | 44 ++++++++++++------- 3 files changed, 55 insertions(+), 34 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/string/RemoveLastChar.java create mode 100644 core-java/src/main/java/com/baeldung/string/StringHelper.java rename core-java/src/test/java/com/baeldung/string/{RemoveLastCharTest.java => StringHelperTest.java} (55%) diff --git a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java b/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java deleted file mode 100644 index 8d15f0d7f5..0000000000 --- a/core-java/src/main/java/com/baeldung/string/RemoveLastChar.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.string; - -public class RemoveLastChar { - public static String substring(String s) { - if (s == null || s.length() == 0) { - return s; - } else { - return (s.substring(0, s.length() - 1)); - } - } - - public static String chop(String s) { - if (s == null) { - return s; - } else { - return s.replaceAll(".$", ""); - } - } -} diff --git a/core-java/src/main/java/com/baeldung/string/StringHelper.java b/core-java/src/main/java/com/baeldung/string/StringHelper.java new file mode 100644 index 0000000000..6b9d5d36d7 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/string/StringHelper.java @@ -0,0 +1,26 @@ +package com.baeldung.string; + +import java.util.Optional; + +public class StringHelper { + public static String withoutLastChar(String s) { + return (s == null || s.length() == 0) ? s : (s.substring(0, s.length() - 1)); + } + + public static String removeLastChar(String s) { + return (s == null) ? s : s.replaceAll(".$", ""); + } + + public static String withoutLastCharacter(String s) { + return Optional.ofNullable(s) + .filter(str -> str.length() != 0) + .map(str -> str.substring(0, str.length() - 1)) + .orElse(s); + } + + public static String removeLastCharacter(String s) { + return Optional.ofNullable(s) + .map(str -> str.replaceAll(".$", "")) + .orElse(null); + } +} diff --git a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java b/core-java/src/test/java/com/baeldung/string/StringHelperTest.java similarity index 55% rename from core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java rename to core-java/src/test/java/com/baeldung/string/StringHelperTest.java index 29cf856da3..ae8aaec71e 100644 --- a/core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringHelperTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertNotEquals; import org.apache.commons.lang3.StringUtils; import org.junit.Test; -public class RemoveLastCharTest { +public class StringHelperTest { public static final String TEST_STRING = "abcdef"; public static final String NULL_STRING = null; @@ -17,62 +17,76 @@ public class RemoveLastCharTest { @Test public void givenTestString_whenSubstring_thenGetStingWithoutLastChar() { - assertEquals("abcde", RemoveLastChar.substring(TEST_STRING)); + assertEquals("abcde", StringHelper.withoutLastChar(TEST_STRING)); assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); assertEquals("abcde", StringUtils.chop(TEST_STRING)); assertEquals("abcde", TEST_STRING.replaceAll(".$", "")); - assertEquals("abcde", RemoveLastChar.chop(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastChar(TEST_STRING)); + assertEquals("abcde", StringHelper.withoutLastCharacter(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastCharacter(TEST_STRING)); } @Test public void givenNullString_whenSubstring_thenGetNullString() { - assertEquals(NULL_STRING, RemoveLastChar.substring(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.withoutLastChar(NULL_STRING)); assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); - assertEquals(NULL_STRING, RemoveLastChar.chop(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.removeLastChar(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.withoutLastCharacter(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.removeLastCharacter(NULL_STRING)); } @Test public void givenEmptyString_whenSubstring_thenGetEmptyString() { - assertEquals(EMPTY_STRING, RemoveLastChar.substring(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.withoutLastChar(EMPTY_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); assertEquals(EMPTY_STRING, EMPTY_STRING.replaceAll(".$", "")); - assertEquals(EMPTY_STRING, RemoveLastChar.chop(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastChar(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.withoutLastCharacter(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharacter(EMPTY_STRING)); } @Test public void givenOneCharString_whenSubstring_thenGetEmptyString() { - assertEquals(EMPTY_STRING, RemoveLastChar.substring(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.withoutLastChar(ONE_CHAR_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); assertEquals(EMPTY_STRING, ONE_CHAR_STRING.replaceAll(".$", "")); - assertEquals(EMPTY_STRING, RemoveLastChar.chop(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastChar(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.withoutLastCharacter(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharacter(ONE_CHAR_STRING)); } @Test public void givenStringWithWhiteSpaceAtTheEnd_whenSubstring_thenGetStringWithoutWhiteSpaceAtTheEnd() { - assertEquals("abc", RemoveLastChar.substring(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.withoutLastChar(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", WHITE_SPACE_AT_THE_END_STRING.replaceAll(".$", "")); - assertEquals("abc", RemoveLastChar.chop(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastChar(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.withoutLastCharacter(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastCharacter(WHITE_SPACE_AT_THE_END_STRING)); } @Test public void givenStringWithNewLineAtTheEnd_whenSubstring_thenGetStringWithoutNewLine() { - assertEquals("abc", RemoveLastChar.substring(NEW_LINE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.withoutLastChar(NEW_LINE_AT_THE_END_STRING)); assertEquals("abc", StringUtils.substring(NEW_LINE_AT_THE_END_STRING, 0, NEW_LINE_AT_THE_END_STRING.length() - 1)); assertEquals("abc", StringUtils.chop(NEW_LINE_AT_THE_END_STRING)); assertNotEquals("abc", NEW_LINE_AT_THE_END_STRING.replaceAll(".$", "")); - assertNotEquals("abc", RemoveLastChar.chop(NEW_LINE_AT_THE_END_STRING)); + assertNotEquals("abc", StringHelper.removeLastChar(NEW_LINE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.withoutLastCharacter(NEW_LINE_AT_THE_END_STRING)); + assertNotEquals("abc", StringHelper.removeLastCharacter(NEW_LINE_AT_THE_END_STRING)); } @Test public void givenMultiLineString_whenSubstring_thenGetStringWithoutNewLine() { - assertEquals("abc\nde", RemoveLastChar.substring(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.withoutLastChar(MULTIPLE_LINES_STRING)); assertEquals("abc\nde", StringUtils.substring(MULTIPLE_LINES_STRING, 0, MULTIPLE_LINES_STRING.length() - 1)); assertEquals("abc\nde", StringUtils.chop(MULTIPLE_LINES_STRING)); assertEquals("abc\nde", MULTIPLE_LINES_STRING.replaceAll(".$", "")); - assertEquals("abc\nde", RemoveLastChar.chop(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastChar(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.withoutLastCharacter(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastCharacter(MULTIPLE_LINES_STRING)); } } From e497266a8205bc436fd95d06bd08cff1c1e0f006 Mon Sep 17 00:00:00 2001 From: Predrag Maric Date: Sun, 14 May 2017 00:13:18 +0200 Subject: [PATCH 011/313] BAEL-838 Changed method names --- .gitignore | 2 - .../com/baeldung/string/StringHelper.java | 8 +-- .../com/baeldung/string/StringHelperTest.java | 56 +++++++++---------- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index 111ff98630..60c38ed8f5 100644 --- a/.gitignore +++ b/.gitignore @@ -33,5 +33,3 @@ spring-openid/src/main/resources/application.properties spring-security-openid/src/main/resources/application.properties spring-all/*.log -core-java/src/main/java/com/baeldung/string/RemoveLastChar.java -core-java/src/test/java/com/baeldung/string/RemoveLastCharTest.java diff --git a/core-java/src/main/java/com/baeldung/string/StringHelper.java b/core-java/src/main/java/com/baeldung/string/StringHelper.java index 6b9d5d36d7..93ce1b684e 100644 --- a/core-java/src/main/java/com/baeldung/string/StringHelper.java +++ b/core-java/src/main/java/com/baeldung/string/StringHelper.java @@ -3,22 +3,22 @@ package com.baeldung.string; import java.util.Optional; public class StringHelper { - public static String withoutLastChar(String s) { + public static String removeLastChar(String s) { return (s == null || s.length() == 0) ? s : (s.substring(0, s.length() - 1)); } - public static String removeLastChar(String s) { + public static String removeLastCharRegex(String s) { return (s == null) ? s : s.replaceAll(".$", ""); } - public static String withoutLastCharacter(String s) { + public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); } - public static String removeLastCharacter(String s) { + public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(null); diff --git a/core-java/src/test/java/com/baeldung/string/StringHelperTest.java b/core-java/src/test/java/com/baeldung/string/StringHelperTest.java index ae8aaec71e..48a9fb9364 100644 --- a/core-java/src/test/java/com/baeldung/string/StringHelperTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringHelperTest.java @@ -17,76 +17,76 @@ public class StringHelperTest { @Test public void givenTestString_whenSubstring_thenGetStingWithoutLastChar() { - assertEquals("abcde", StringHelper.withoutLastChar(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastChar(TEST_STRING)); assertEquals("abcde", StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1)); assertEquals("abcde", StringUtils.chop(TEST_STRING)); assertEquals("abcde", TEST_STRING.replaceAll(".$", "")); - assertEquals("abcde", StringHelper.removeLastChar(TEST_STRING)); - assertEquals("abcde", StringHelper.withoutLastCharacter(TEST_STRING)); - assertEquals("abcde", StringHelper.removeLastCharacter(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastCharRegex(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastCharOptional(TEST_STRING)); + assertEquals("abcde", StringHelper.removeLastCharRegexOptional(TEST_STRING)); } @Test public void givenNullString_whenSubstring_thenGetNullString() { - assertEquals(NULL_STRING, StringHelper.withoutLastChar(NULL_STRING)); - assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); assertEquals(NULL_STRING, StringHelper.removeLastChar(NULL_STRING)); - assertEquals(NULL_STRING, StringHelper.withoutLastCharacter(NULL_STRING)); - assertEquals(NULL_STRING, StringHelper.removeLastCharacter(NULL_STRING)); + assertEquals(NULL_STRING, StringUtils.chop(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.removeLastCharRegex(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.removeLastCharOptional(NULL_STRING)); + assertEquals(NULL_STRING, StringHelper.removeLastCharRegexOptional(NULL_STRING)); } @Test public void givenEmptyString_whenSubstring_thenGetEmptyString() { - assertEquals(EMPTY_STRING, StringHelper.withoutLastChar(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastChar(EMPTY_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(EMPTY_STRING, 0, EMPTY_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(EMPTY_STRING)); assertEquals(EMPTY_STRING, EMPTY_STRING.replaceAll(".$", "")); - assertEquals(EMPTY_STRING, StringHelper.removeLastChar(EMPTY_STRING)); - assertEquals(EMPTY_STRING, StringHelper.withoutLastCharacter(EMPTY_STRING)); - assertEquals(EMPTY_STRING, StringHelper.removeLastCharacter(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharRegex(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharOptional(EMPTY_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharRegexOptional(EMPTY_STRING)); } @Test public void givenOneCharString_whenSubstring_thenGetEmptyString() { - assertEquals(EMPTY_STRING, StringHelper.withoutLastChar(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastChar(ONE_CHAR_STRING)); assertEquals(EMPTY_STRING, StringUtils.substring(ONE_CHAR_STRING, 0, ONE_CHAR_STRING.length() - 1)); assertEquals(EMPTY_STRING, StringUtils.chop(ONE_CHAR_STRING)); assertEquals(EMPTY_STRING, ONE_CHAR_STRING.replaceAll(".$", "")); - assertEquals(EMPTY_STRING, StringHelper.removeLastChar(ONE_CHAR_STRING)); - assertEquals(EMPTY_STRING, StringHelper.withoutLastCharacter(ONE_CHAR_STRING)); - assertEquals(EMPTY_STRING, StringHelper.removeLastCharacter(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharRegex(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharOptional(ONE_CHAR_STRING)); + assertEquals(EMPTY_STRING, StringHelper.removeLastCharRegexOptional(ONE_CHAR_STRING)); } @Test public void givenStringWithWhiteSpaceAtTheEnd_whenSubstring_thenGetStringWithoutWhiteSpaceAtTheEnd() { - assertEquals("abc", StringHelper.withoutLastChar(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastChar(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", StringUtils.substring(WHITE_SPACE_AT_THE_END_STRING, 0, WHITE_SPACE_AT_THE_END_STRING.length() - 1)); assertEquals("abc", StringUtils.chop(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", WHITE_SPACE_AT_THE_END_STRING.replaceAll(".$", "")); - assertEquals("abc", StringHelper.removeLastChar(WHITE_SPACE_AT_THE_END_STRING)); - assertEquals("abc", StringHelper.withoutLastCharacter(WHITE_SPACE_AT_THE_END_STRING)); - assertEquals("abc", StringHelper.removeLastCharacter(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastCharRegex(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastCharOptional(WHITE_SPACE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastCharRegexOptional(WHITE_SPACE_AT_THE_END_STRING)); } @Test public void givenStringWithNewLineAtTheEnd_whenSubstring_thenGetStringWithoutNewLine() { - assertEquals("abc", StringHelper.withoutLastChar(NEW_LINE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastChar(NEW_LINE_AT_THE_END_STRING)); assertEquals("abc", StringUtils.substring(NEW_LINE_AT_THE_END_STRING, 0, NEW_LINE_AT_THE_END_STRING.length() - 1)); assertEquals("abc", StringUtils.chop(NEW_LINE_AT_THE_END_STRING)); assertNotEquals("abc", NEW_LINE_AT_THE_END_STRING.replaceAll(".$", "")); - assertNotEquals("abc", StringHelper.removeLastChar(NEW_LINE_AT_THE_END_STRING)); - assertEquals("abc", StringHelper.withoutLastCharacter(NEW_LINE_AT_THE_END_STRING)); - assertNotEquals("abc", StringHelper.removeLastCharacter(NEW_LINE_AT_THE_END_STRING)); + assertNotEquals("abc", StringHelper.removeLastCharRegex(NEW_LINE_AT_THE_END_STRING)); + assertEquals("abc", StringHelper.removeLastCharOptional(NEW_LINE_AT_THE_END_STRING)); + assertNotEquals("abc", StringHelper.removeLastCharRegexOptional(NEW_LINE_AT_THE_END_STRING)); } @Test public void givenMultiLineString_whenSubstring_thenGetStringWithoutNewLine() { - assertEquals("abc\nde", StringHelper.withoutLastChar(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastChar(MULTIPLE_LINES_STRING)); assertEquals("abc\nde", StringUtils.substring(MULTIPLE_LINES_STRING, 0, MULTIPLE_LINES_STRING.length() - 1)); assertEquals("abc\nde", StringUtils.chop(MULTIPLE_LINES_STRING)); assertEquals("abc\nde", MULTIPLE_LINES_STRING.replaceAll(".$", "")); - assertEquals("abc\nde", StringHelper.removeLastChar(MULTIPLE_LINES_STRING)); - assertEquals("abc\nde", StringHelper.withoutLastCharacter(MULTIPLE_LINES_STRING)); - assertEquals("abc\nde", StringHelper.removeLastCharacter(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastCharRegex(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastCharOptional(MULTIPLE_LINES_STRING)); + assertEquals("abc\nde", StringHelper.removeLastCharRegexOptional(MULTIPLE_LINES_STRING)); } } From a8041fef4f011566322086550540d32fb4311a09 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 16 May 2017 12:17:59 +0100 Subject: [PATCH 012/313] BAEL-838 Tiny change to keep code consistant. Return null or empty. --- core-java/src/main/java/com/baeldung/string/StringHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java/src/main/java/com/baeldung/string/StringHelper.java b/core-java/src/main/java/com/baeldung/string/StringHelper.java index 93ce1b684e..ad2a0b3419 100644 --- a/core-java/src/main/java/com/baeldung/string/StringHelper.java +++ b/core-java/src/main/java/com/baeldung/string/StringHelper.java @@ -21,6 +21,6 @@ public class StringHelper { public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) - .orElse(null); + .orElse(s); } } From 467646d61373825260fece59e46a2afaf748d79f Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 16 May 2017 15:32:16 +0100 Subject: [PATCH 013/313] BAEL-838 Removed unresolved conflict. --- core-java/src/main/java/com/baeldung/string/StringHelper.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/string/StringHelper.java b/core-java/src/main/java/com/baeldung/string/StringHelper.java index adf8d70531..ad2a0b3419 100644 --- a/core-java/src/main/java/com/baeldung/string/StringHelper.java +++ b/core-java/src/main/java/com/baeldung/string/StringHelper.java @@ -21,10 +21,6 @@ public class StringHelper { public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) -<<<<<<< HEAD .orElse(s); -======= - .orElse(null); ->>>>>>> refs/remotes/eugenp/master } } From 6d407f88a339f6ef905063096de21f266a41d020 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 30 May 2017 09:57:12 +0100 Subject: [PATCH 014/313] BAEL-821 New class that shows different rounding techniques. Updated POM. --- core-java/pom.xml | 7 ++++ .../main/java/com/baeldung/maths/Round.java | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/maths/Round.java diff --git a/core-java/pom.xml b/core-java/pom.xml index bcec20b1e1..5c9bf06a57 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -45,6 +45,12 @@ commons-math3 ${commons-math3.version} + + + org.decimal4j + decimal4j + ${decimal4j.version} + org.bouncycastle @@ -369,6 +375,7 @@ 1.55 1.10 3.6.1 + 1.0.3 2.5 4.1 4.01 diff --git a/core-java/src/main/java/com/baeldung/maths/Round.java b/core-java/src/main/java/com/baeldung/maths/Round.java new file mode 100644 index 0000000000..3b30ab2c7a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/maths/Round.java @@ -0,0 +1,38 @@ +package com.baeldung.maths; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; + +import org.apache.commons.math3.util.Precision; +import org.decimal4j.util.DoubleRounder; + +public class Round { + private static final double PI = 3.1415d; + + public static void main (String args[]) { + System.out.println("PI: " + PI); + System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); + // OUTPUTS: Value with 3 digits after decimal point 3.142 + DecimalFormat df = new DecimalFormat("###.###"); + System.out.println(df.format(PI)); + System.out.println(round(PI, 3)); + System.out.println(roundOptional(PI, 3)); + System.out.println(Precision.round(PI, 3)); + System.out.println(DoubleRounder.round(PI, 3)); + } + + public static double round(double value, int places) { + if (places < 0) throw new IllegalArgumentException(); + + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(places, RoundingMode.HALF_UP); + return bd.doubleValue(); + } + + public static double roundOptional(double value, int places) { + double scale = Math.pow(10, places); + double rounded = Math.round(value * scale) / scale; + return rounded; + } +} From fc58395ad484e24fa99496c5317ccc716ba6c7c0 Mon Sep 17 00:00:00 2001 From: iaforek Date: Wed, 31 May 2017 10:21:08 +0100 Subject: [PATCH 015/313] BAEL-821 - Added unit test for different round methods. --- .../java/com/baeldung/maths/RoundTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 core-java/src/test/java/com/baeldung/maths/RoundTest.java diff --git a/core-java/src/test/java/com/baeldung/maths/RoundTest.java b/core-java/src/test/java/com/baeldung/maths/RoundTest.java new file mode 100644 index 0000000000..932836e417 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/maths/RoundTest.java @@ -0,0 +1,29 @@ +package com.baeldung.maths; + +import org.apache.commons.math3.util.Precision; +import org.decimal4j.util.DoubleRounder; +import org.junit.Assert; +import org.junit.Test; + +public class RoundTest { + private double value = 2.03456d; + private int places = 2; + private double delta = 0.0d; + private double expected = 2.03d; + + @Test + public void givenDecimalNumber_roundToNDecimalPlaces_getExpectedResult() { + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + + places = 3; + expected = 2.035d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + } +} From efeffc4034a6f04282178482fb90b6891ac9c2a9 Mon Sep 17 00:00:00 2001 From: Predrag Maric Date: Thu, 1 Jun 2017 01:11:25 +0200 Subject: [PATCH 016/313] BAEL-821 Changed test method name to follow the convention --- core-java/src/test/java/com/baeldung/maths/RoundTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java/src/test/java/com/baeldung/maths/RoundTest.java b/core-java/src/test/java/com/baeldung/maths/RoundTest.java index 932836e417..2621cfb65c 100644 --- a/core-java/src/test/java/com/baeldung/maths/RoundTest.java +++ b/core-java/src/test/java/com/baeldung/maths/RoundTest.java @@ -12,7 +12,7 @@ public class RoundTest { private double expected = 2.03d; @Test - public void givenDecimalNumber_roundToNDecimalPlaces_getExpectedResult() { + public void givenDecimalNumber_whenRoundToNDecimalPlaces_thenGetExpectedResult() { Assert.assertEquals(expected, Round.round(value, places), delta); Assert.assertEquals(expected, Round.roundOptional(value, places), delta); Assert.assertEquals(expected, Precision.round(value, places), delta); From c763d263ece2957f5166f704326074e084225e84 Mon Sep 17 00:00:00 2001 From: iaforek Date: Fri, 2 Jun 2017 00:18:29 +0100 Subject: [PATCH 017/313] BAEL-821 Added more test and updated round methods. --- .../main/java/com/baeldung/maths/Round.java | 13 +++++- .../java/com/baeldung/maths/RoundTest.java | 46 ++++++++++++++++++- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/maths/Round.java b/core-java/src/main/java/com/baeldung/maths/Round.java index 3b30ab2c7a..a38f5e2526 100644 --- a/core-java/src/main/java/com/baeldung/maths/Round.java +++ b/core-java/src/main/java/com/baeldung/maths/Round.java @@ -17,7 +17,8 @@ public class Round { DecimalFormat df = new DecimalFormat("###.###"); System.out.println(df.format(PI)); System.out.println(round(PI, 3)); - System.out.println(roundOptional(PI, 3)); + System.out.println(roundNotPrecise(PI, 3)); + System.out.println(roundAvoid(PI, 3)); System.out.println(Precision.round(PI, 3)); System.out.println(DoubleRounder.round(PI, 3)); } @@ -25,12 +26,20 @@ public class Round { public static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); + BigDecimal bd = new BigDecimal(Double.toString(value)); + bd = bd.setScale(places, RoundingMode.HALF_UP); + return bd.doubleValue(); + } + + public static double roundNotPrecise(double value, int places) { + if (places < 0) throw new IllegalArgumentException(); + BigDecimal bd = new BigDecimal(value); bd = bd.setScale(places, RoundingMode.HALF_UP); return bd.doubleValue(); } - public static double roundOptional(double value, int places) { + public static double roundAvoid(double value, int places) { double scale = Math.pow(10, places); double rounded = Math.round(value * scale) / scale; return rounded; diff --git a/core-java/src/test/java/com/baeldung/maths/RoundTest.java b/core-java/src/test/java/com/baeldung/maths/RoundTest.java index 932836e417..8a31b90cb3 100644 --- a/core-java/src/test/java/com/baeldung/maths/RoundTest.java +++ b/core-java/src/test/java/com/baeldung/maths/RoundTest.java @@ -14,7 +14,8 @@ public class RoundTest { @Test public void givenDecimalNumber_roundToNDecimalPlaces_getExpectedResult() { Assert.assertEquals(expected, Round.round(value, places), delta); - Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertEquals(expected, Round.roundAvoid(value, places), delta); Assert.assertEquals(expected, Precision.round(value, places), delta); Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); @@ -22,7 +23,48 @@ public class RoundTest { expected = 2.035d; Assert.assertEquals(expected, Round.round(value, places), delta); - Assert.assertEquals(expected, Round.roundOptional(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertEquals(expected, Round.roundAvoid(value, places), delta); + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + + value = 1000.0d; + places = 17; + expected = 1000.0d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 92.23372036854776 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); + + value = 256.025d; + places = 2; + expected = 256.03d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertNotEquals(expected, Round.roundNotPrecise(value, places), delta); // Returns: 256.02 ! + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 256.02 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertNotEquals(expected, DoubleRounder.round(value, places), delta); // Returns: 256.02 ! + + value = 260.775d; + places = 2; + expected = 260.78d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertNotEquals(expected, Round.roundNotPrecise(value, places), delta); // Returns: 260.77 ! + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 260.77 ! + Assert.assertEquals(expected, Precision.round(value, places), delta); + Assert.assertNotEquals(expected, DoubleRounder.round(value, places), delta); // Returns: 260.77 ! + + value = 90080070060.1d; + places = 9; + expected = 90080070060.1d; + + Assert.assertEquals(expected, Round.round(value, places), delta); + Assert.assertEquals(expected, Round.roundNotPrecise(value, places), delta); + Assert.assertNotEquals(expected, Round.roundAvoid(value, places), delta); // Returns: 9.223372036854776E9 ! Assert.assertEquals(expected, Precision.round(value, places), delta); Assert.assertEquals(expected, DoubleRounder.round(value, places), delta); } From c5f2fb5b2c30f2ce40cded6760180350f097f722 Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 12 Jun 2017 12:21:57 +0100 Subject: [PATCH 018/313] BAEL-837 - initial commit. A few examples of adding doubles. --- .../maths/FloatingPointArithmetic.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java diff --git a/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java new file mode 100644 index 0000000000..9cdeeb5e81 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java @@ -0,0 +1,44 @@ +package com.baeldung.maths; + +import java.math.BigDecimal; + +public class FloatingPointArithmetic { + public static void main(String[] args) { + + double a = 13.22; + double b = 4.88; + double c = 21.45; + + System.out.println("a = " + a); + System.out.println("b = " + b); + System.out.println("c = " + c); + + double ab = a + b; + System.out.println("a + b = " + ab); + + double abc = a + b + c; + System.out.println("a + b + c = " + abc); + + double ac = a + c; + System.out.println("a + c = " + ac); + + double acb = a + c + b; + System.out.println("a + c + b = " + acb); + + double ac_b = ac + b; + System.out.println("ac + b = " + ac_b); + + BigDecimal d = new BigDecimal(String.valueOf(a)); + BigDecimal e = new BigDecimal(String.valueOf(b)); + BigDecimal f = new BigDecimal(String.valueOf(c)); + + BigDecimal def; + BigDecimal dfe; + + def = d.add(e).add(f); + dfe = d.add(f).add(e); + + System.out.println("d + e + f = " + def); + System.out.println("d + f + e = " + dfe); + } +} From 4019283c33fe2006125ae07196d0af1301fb0dd5 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 13 Jun 2017 11:30:05 +0100 Subject: [PATCH 019/313] added updated example codes --- .../baeldung/string/StringToCharStream.java | 47 ++++++++++++------- .../string/StringToCharStreamUnitTest.java | 14 +++++- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java b/core-java/src/main/java/com/baeldung/string/StringToCharStream.java index 4dc0455192..cbe4deb9a0 100644 --- a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java +++ b/core-java/src/main/java/com/baeldung/string/StringToCharStream.java @@ -12,29 +12,40 @@ public class StringToCharStream { public StringToCharStream() { - //let's use the Stream API to manipulate a string - //this will count the occurrence of each character in the test string + //let's use the Stream API to manipulate a string + //this will count the occurrence of each character in the test string - System.out.println("Counting Occurrence of Letter"); - String testString = "Noww"; + String testString = "tests"; - //we don't want to use foreach, so . . . + //first get an IntStream + IntStream intStream = testString.chars(); + IntStream intStream1 = testString.codePoints(); - Map map = new HashMap<>(); + //now let's map them + Stream characterStream = intStream.mapToObj(c -> (char) c); + Stream characterStream1 = intStream1.mapToObj(c -> (char) c); - testString.codePoints() - .mapToObj(c -> (char) c) - .filter(c -> Character.isLetter(c)) - .forEach(c -> { - if(map.containsKey(c)) { - map.put(c, map.get(c) + 1); - } else { - map.put(c, 1); - } - }); + System.out.println("Counting Occurrence of Letter"); + testString = "Noww"; + + //we don't want to use foreach, so . . . + + Map map = new HashMap<>(); + + testString.codePoints() + .mapToObj(c -> (char) c) + .filter(c -> Character.isLetter(c)) + .forEach(c -> { + if(map.containsKey(c)) { + map.put(c, map.get(c) + 1); + } else { + map.put(c, 1); + } + }); + + //printing out the result here + System.out.println(map.toString()); - //printing out the result here - System.out.println(map.toString()); } diff --git a/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java b/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java index 0c265d0b1f..9332ae814c 100644 --- a/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java @@ -5,7 +5,9 @@ import org.junit.Test; import java.util.stream.IntStream; import java.util.stream.Stream; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** @@ -17,12 +19,13 @@ public class StringToCharStreamUnitTest { @Test public void givenTestString_whenChars_thenReturnIntStream() { - assertTrue(testString.chars() instanceof IntStream); + + assertThat(testString.chars(), instanceOf(IntStream.class)); } @Test public void givenTestString_whenCodePoints_thenReturnIntStream() { - assertTrue(testString.codePoints() instanceof IntStream); + assertThat(testString.codePoints(), instanceOf(IntStream.class)); } @Test @@ -33,4 +36,11 @@ public class StringToCharStreamUnitTest { assertNotNull("IntStream returned by codePoints() did not map to Stream", characterStream1); } + @Test + public void givenIntStream_whenMapToObj_thenReturnStringStream(){ + Stream stringStream + = testString.codePoints().mapToObj(c -> String.valueOf((char) c)); + assertNotNull(stringStream); + } + } From 4c0886e3044a78c9062be417f6ff137a039dcc41 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 13 Jun 2017 17:17:47 +0100 Subject: [PATCH 020/313] updated example code StringToCharStream --- .../com/baeldung/string/StringToCharStream.java | 17 +++++++++++++++++ .../string/StringToCharStreamUnitTest.java | 15 +++++++-------- [B[A[B[B[B[Bssc | 0 3 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 [B[A[B[B[B[Bssc diff --git a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java b/core-java/src/main/java/com/baeldung/string/StringToCharStream.java index 06a3ca6a63..6c2e38a546 100644 --- a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java +++ b/core-java/src/main/java/com/baeldung/string/StringToCharStream.java @@ -28,6 +28,23 @@ public class StringToCharStream { } + public static IntStream getIntStreamFromCodePoints(String test) { + return test.codePoints(); + } + + public static IntStream getIntStreamFromChars(String test) { + return test.chars(); + } + + public static Stream mapIntStreamToCharStream(IntStream intStream) { + return intStream.mapToObj(c -> (char) c); + } + + public static Stream mapIntStreamToStringStream(IntStream intStream) { + return intStream.mapToObj(c -> String.valueOf((char) c)); + } + + public static void main(String[] args) { new StringToCharStream(); diff --git a/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java b/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java index 52e38ff898..eeb3051fc1 100644 --- a/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringToCharStreamUnitTest.java @@ -8,27 +8,26 @@ import java.util.stream.Stream; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; public class StringToCharStreamUnitTest { - private String testString = "Tests"; @Test public void givenTestString_whenChars_thenReturnIntStream() { - - assertThat(testString.chars(), instanceOf(IntStream.class)); + assertThat(StringToCharStream.getIntStreamFromChars("test"), instanceOf(IntStream.class)); } @Test public void givenTestString_whenCodePoints_thenReturnIntStream() { - assertThat(testString.codePoints(), instanceOf(IntStream.class)); + assertThat(StringToCharStream.getIntStreamFromCodePoints("test"), instanceOf(IntStream.class)); } @Test public void givenIntStream_whenMapToObj_thenReturnCharacterStream() { - Stream characterStream = testString.chars().mapToObj(c -> (char) c); - Stream characterStream1 = testString.codePoints().mapToObj(c -> (char) c); + Stream characterStream + = StringToCharStream.mapIntStreamToCharStream(StringToCharStream.getIntStreamFromChars("test")); + Stream characterStream1 + = StringToCharStream.mapIntStreamToCharStream(StringToCharStream.getIntStreamFromCodePoints("test")); assertNotNull("IntStream returned by chars() did not map to Stream", characterStream); assertNotNull("IntStream returned by codePoints() did not map to Stream", characterStream1); } @@ -36,7 +35,7 @@ public class StringToCharStreamUnitTest { @Test public void givenIntStream_whenMapToObj_thenReturnStringStream() { Stream stringStream - = testString.codePoints().mapToObj(c -> String.valueOf((char) c)); + = StringToCharStream.mapIntStreamToStringStream(StringToCharStream.getIntStreamFromCodePoints("test")); assertNotNull(stringStream); } diff --git a/[B[A[B[B[B[Bssc b/[B[A[B[B[B[Bssc new file mode 100644 index 0000000000..e69de29bb2 From de138a4a925c8019cdacc10cb2ecce2ea58f3c53 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 13 Jun 2017 22:29:27 +0100 Subject: [PATCH 021/313] BAEL-837 - Couple of smaller changes --- .../maths/FloatingPointArithmetic.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java index 9cdeeb5e81..4163adcf09 100644 --- a/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java +++ b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java @@ -13,30 +13,37 @@ public class FloatingPointArithmetic { System.out.println("b = " + b); System.out.println("c = " + c); - double ab = a + b; - System.out.println("a + b = " + ab); + double sum_ab = a + b; + System.out.println("a + b = " + sum_ab); double abc = a + b + c; System.out.println("a + b + c = " + abc); - double ac = a + c; - System.out.println("a + c = " + ac); + double ab_c = sum_ab + c; + System.out.println("ab + c = " + ab_c); + + double sum_ac = a + c; + System.out.println("a + c = " + sum_ac); double acb = a + c + b; System.out.println("a + c + b = " + acb); - double ac_b = ac + b; + double ac_b = sum_ac + b; System.out.println("ac + b = " + ac_b); + double ab = 18.1; + double ac = 34.67; + double sum_ab_c = ab + c; + double sum_ac_b = ac + b; + System.out.println("ab + c = " + sum_ab_c); + System.out.println("ac + b = " + sum_ac_b); + BigDecimal d = new BigDecimal(String.valueOf(a)); BigDecimal e = new BigDecimal(String.valueOf(b)); BigDecimal f = new BigDecimal(String.valueOf(c)); - BigDecimal def; - BigDecimal dfe; - - def = d.add(e).add(f); - dfe = d.add(f).add(e); + BigDecimal def = d.add(e).add(f); + BigDecimal dfe = d.add(f).add(e); System.out.println("d + e + f = " + def); System.out.println("d + f + e = " + dfe); From f6a39f84bb36adad56c75ed77e411ab775d2cd54 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 13 Jun 2017 22:29:27 +0100 Subject: [PATCH 022/313] BAEL-837 - Added jUnit test. --- .../maths/FloatingPointArithmetic.java | 27 ++++++----- .../maths/FloatingPointArithmeticTest.java | 45 +++++++++++++++++++ 2 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 core-java/src/test/java/com/baeldung/maths/FloatingPointArithmeticTest.java diff --git a/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java index 9cdeeb5e81..4163adcf09 100644 --- a/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java +++ b/core-java/src/main/java/com/baeldung/maths/FloatingPointArithmetic.java @@ -13,30 +13,37 @@ public class FloatingPointArithmetic { System.out.println("b = " + b); System.out.println("c = " + c); - double ab = a + b; - System.out.println("a + b = " + ab); + double sum_ab = a + b; + System.out.println("a + b = " + sum_ab); double abc = a + b + c; System.out.println("a + b + c = " + abc); - double ac = a + c; - System.out.println("a + c = " + ac); + double ab_c = sum_ab + c; + System.out.println("ab + c = " + ab_c); + + double sum_ac = a + c; + System.out.println("a + c = " + sum_ac); double acb = a + c + b; System.out.println("a + c + b = " + acb); - double ac_b = ac + b; + double ac_b = sum_ac + b; System.out.println("ac + b = " + ac_b); + double ab = 18.1; + double ac = 34.67; + double sum_ab_c = ab + c; + double sum_ac_b = ac + b; + System.out.println("ab + c = " + sum_ab_c); + System.out.println("ac + b = " + sum_ac_b); + BigDecimal d = new BigDecimal(String.valueOf(a)); BigDecimal e = new BigDecimal(String.valueOf(b)); BigDecimal f = new BigDecimal(String.valueOf(c)); - BigDecimal def; - BigDecimal dfe; - - def = d.add(e).add(f); - dfe = d.add(f).add(e); + BigDecimal def = d.add(e).add(f); + BigDecimal dfe = d.add(f).add(e); System.out.println("d + e + f = " + def); System.out.println("d + f + e = " + dfe); diff --git a/core-java/src/test/java/com/baeldung/maths/FloatingPointArithmeticTest.java b/core-java/src/test/java/com/baeldung/maths/FloatingPointArithmeticTest.java new file mode 100644 index 0000000000..2066f13c6d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/maths/FloatingPointArithmeticTest.java @@ -0,0 +1,45 @@ +package com.baeldung.maths; + +import java.math.BigDecimal; + +import org.junit.Assert; +import org.junit.Test; + +public class FloatingPointArithmeticTest { + + @Test + public void givenDecimalNumbers_whenAddedTogether_thenGetExpectedResult() { + double a = 13.22; + double b = 4.88; + double c = 21.45; + double result = 39.55; + + double abc = a + b + c; + double acb = a + c + b; + + Assert.assertEquals(result, abc, 0); + Assert.assertNotEquals(result, acb, 0); + + double ab = 18.1; + double ac = 34.67; + + double ab_c = ab + c; + double ac_b = ac + b; + + Assert.assertEquals(result, ab_c, 0); + Assert.assertNotEquals(result, ac_b, 0); + + BigDecimal d = new BigDecimal(String.valueOf(a)); + BigDecimal e = new BigDecimal(String.valueOf(b)); + BigDecimal f = new BigDecimal(String.valueOf(c)); + BigDecimal sum = new BigDecimal("39.55"); + + BigDecimal def = d.add(e).add(f); + BigDecimal dfe = d.add(f).add(e); + + Assert.assertEquals(0, def.compareTo(sum)); + Assert.assertEquals(0, dfe.compareTo(sum)); + + Assert.assertNotEquals(0, sum.compareTo(new BigDecimal(String.valueOf(acb)))); + } +} From 562d340b82c9886ea0680f3759fe50d8fa6b95e3 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Fri, 16 Jun 2017 11:21:10 +0100 Subject: [PATCH 023/313] deleted StringToCharStream.java locally --- .../baeldung/string/StringToCharStream.java | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/string/StringToCharStream.java diff --git a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java b/core-java/src/main/java/com/baeldung/string/StringToCharStream.java deleted file mode 100644 index 6c2e38a546..0000000000 --- a/core-java/src/main/java/com/baeldung/string/StringToCharStream.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.string; - -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -public class StringToCharStream { - - private StringToCharStream() { - String testString = "tests"; - - IntStream intStream = testString.chars(); - IntStream intStream1 = testString.codePoints(); - - Stream characterStream = intStream.mapToObj(c -> (char) c); - Stream characterStream1 = intStream1.mapToObj(c -> (char) c); - - System.out.println("Counting Occurrence of Letter"); - - Map map = "Noww".codePoints() - .mapToObj(c -> (char) c) - .filter(Character::isLetter) - .collect(Collectors.toMap(c -> c, c -> 1, Integer::sum)); - - //printing out the result here - System.out.println(map.toString()); - - } - - public static IntStream getIntStreamFromCodePoints(String test) { - return test.codePoints(); - } - - public static IntStream getIntStreamFromChars(String test) { - return test.chars(); - } - - public static Stream mapIntStreamToCharStream(IntStream intStream) { - return intStream.mapToObj(c -> (char) c); - } - - public static Stream mapIntStreamToStringStream(IntStream intStream) { - return intStream.mapToObj(c -> String.valueOf((char) c)); - } - - - public static void main(String[] args) { - - new StringToCharStream(); - - } -} From 6e3d26062aa46c28786762363fe1d9859d1a4d0a Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Fri, 16 Jun 2017 11:34:04 +0100 Subject: [PATCH 024/313] removed redundant file --- [B[A[B[B[B[Bssc | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 [B[A[B[B[B[Bssc diff --git a/[B[A[B[B[B[Bssc b/[B[A[B[B[B[Bssc deleted file mode 100644 index e69de29bb2..0000000000 From 5397d2c97015013bcc29307e88ba6869f953be99 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sun, 25 Jun 2017 19:28:02 +0100 Subject: [PATCH 025/313] added code for apache commons collection SetUtils --- libraries/pom.xml | 14 ++- .../commons/collections/SetUtilsUnitTest.java | 115 ++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java diff --git a/libraries/pom.xml b/libraries/pom.xml index da040c9731..45b371061e 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -85,6 +85,11 @@ commons-lang3 ${commons-lang.version} + + org.apache.commons + commons-collections4 + ${commons.collections.version} + org.jasypt jasypt @@ -345,7 +350,12 @@ opennlp-tools 1.8.0 - + + junit + junit + ${junit.version} + test + 0.7.0 @@ -371,6 +381,8 @@ 1.4.0 1.1.0 4.1.10.Final + 4.1 + 4.12 \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java new file mode 100644 index 0000000000..3c2949a9b1 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java @@ -0,0 +1,115 @@ +package com.baeldung.commons.collections; + +import org.apache.commons.collections4.SetUtils; +import org.apache.commons.collections4.set.TransformedSet; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Created by smatt on 21/06/2017. + */ +public class SetUtilsUnitTest { + + @Test(expected = IllegalArgumentException.class) + public void givenSetAndPredicate_whenPredicatedSet_thenValidateSet_and_throw_IllegalArgumentException() { + Set sourceSet = new HashSet<>(); + sourceSet.add("London"); + sourceSet.add("Lagos"); + sourceSet.add("Error Source1"); + Set validatingSet + = SetUtils.predicatedSet(sourceSet, (s) -> s.startsWith("L")); + validatingSet.add("Error Source2"); + } + + @Test + public void givenTwoSets_whenDifference_thenSetView() { + Set a = new HashSet<>(); + a.add(1); + a.add(2); + a.add(5); + Set b = new HashSet<>(); + b.add(1); + b.add(2); + SetUtils.SetView result = SetUtils.difference(a, b); + assertTrue(result.size() == 1 && result.contains(5)); + } + + @Test + public void givenTwoSets_whenUnion_thenUnionResult() { + Set a = new HashSet<>(); + a.add(1); + a.add(2); + a.add(5); + Set b = new HashSet<>(); + b.add(1); + b.add(2); + Set expected = new HashSet<>(); + expected.addAll(a); + expected.addAll(b); + SetUtils.SetView union = SetUtils.union(a, b); + assertTrue(SetUtils.isEqualSet(expected, union)); + } + + @Test + public void givenTwoSets_whenIntersection_thenIntersectionResult() { + Set a = new HashSet<>(); + a.add(1); + a.add(2); + a.add(5); + Set b = new HashSet<>(); + b.add(1); + b.add(2); + Set expected = new HashSet<>(); + expected.add(1); + expected.add(2); + SetUtils.SetView intersect = SetUtils.intersection(a, b); + assertTrue(SetUtils.isEqualSet(expected, intersect)); + } + + @Test + public void givenSet_whenTransformedSet_thenTransformedResult() { + Set a = SetUtils.transformedSet(new HashSet<>(), (e) -> e * 2 ); + a.add(2); + assertEquals(a.toArray()[0], 4); + + Set source = new HashSet<>(); + source.add(1); + Set newSet = TransformedSet.transformedSet(source, (e) -> e * 2); + assertEquals(newSet.toArray()[0], 2); + assertEquals(source.toArray()[0], 2); + } + + @Test + public void givenTwoSet_whenDisjunction_thenDisjunctionSet() { + Set a = new HashSet<>(); + a.add(1); + a.add(2); + a.add(5); + Set b = new HashSet<>(); + b.add(1); + b.add(2); + b.add(3); + SetUtils.SetView result = SetUtils.disjunction(a, b); + assertTrue(result.toSet().contains(5) && result.toSet().contains(3)); + } + + @Test + public void givenSet_when_OrderedSet_thenMaintainElementOrder() { + Set set = new HashSet<>(); + set.add(10); + set.add(1); + set.add(5); + System.out.println("unordered set: " + set); + + Set orderedSet = SetUtils.orderedSet(new HashSet<>()); + orderedSet.add(10); + orderedSet.add(1); + orderedSet.add(5); + System.out.println("ordered set = " + orderedSet); + } +} \ No newline at end of file From f75d80cd270e4660d3336596c111075447edfc85 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 26 Jun 2017 09:42:21 +0100 Subject: [PATCH 026/313] refactored example code --- .../commons/collections/SetUtilsUnitTest.java | 64 +++++-------------- 1 file changed, 16 insertions(+), 48 deletions(-) diff --git a/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java index 3c2949a9b1..4d264e3aea 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java +++ b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java @@ -4,6 +4,7 @@ import org.apache.commons.collections4.SetUtils; import org.apache.commons.collections4.set.TransformedSet; import org.junit.Test; +import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -18,55 +19,34 @@ public class SetUtilsUnitTest { @Test(expected = IllegalArgumentException.class) public void givenSetAndPredicate_whenPredicatedSet_thenValidateSet_and_throw_IllegalArgumentException() { Set sourceSet = new HashSet<>(); - sourceSet.add("London"); - sourceSet.add("Lagos"); - sourceSet.add("Error Source1"); + sourceSet.addAll(Arrays.asList("London", "Lagos", "Err Source1")); Set validatingSet = SetUtils.predicatedSet(sourceSet, (s) -> s.startsWith("L")); - validatingSet.add("Error Source2"); + validatingSet.add("Err Source2"); } @Test public void givenTwoSets_whenDifference_thenSetView() { - Set a = new HashSet<>(); - a.add(1); - a.add(2); - a.add(5); - Set b = new HashSet<>(); - b.add(1); - b.add(2); + Set a = new HashSet<>(Arrays.asList(1,2,5)); + Set b = new HashSet<>(Arrays.asList(1,2)); SetUtils.SetView result = SetUtils.difference(a, b); assertTrue(result.size() == 1 && result.contains(5)); } @Test public void givenTwoSets_whenUnion_thenUnionResult() { - Set a = new HashSet<>(); - a.add(1); - a.add(2); - a.add(5); - Set b = new HashSet<>(); - b.add(1); - b.add(2); - Set expected = new HashSet<>(); - expected.addAll(a); - expected.addAll(b); + Set a = new HashSet<>(Arrays.asList(1,2,5)); + Set b = new HashSet<>(Arrays.asList(1,2)); + Set expected = new HashSet<>(Arrays.asList(1,2,5)); SetUtils.SetView union = SetUtils.union(a, b); assertTrue(SetUtils.isEqualSet(expected, union)); } @Test public void givenTwoSets_whenIntersection_thenIntersectionResult() { - Set a = new HashSet<>(); - a.add(1); - a.add(2); - a.add(5); - Set b = new HashSet<>(); - b.add(1); - b.add(2); - Set expected = new HashSet<>(); - expected.add(1); - expected.add(2); + Set a = new HashSet<>(Arrays.asList(1,2,5)); + Set b = new HashSet<>(Arrays.asList(1,2)); + Set expected = new HashSet<>(Arrays.asList(1,2)); SetUtils.SetView intersect = SetUtils.intersection(a, b); assertTrue(SetUtils.isEqualSet(expected, intersect)); } @@ -77,8 +57,7 @@ public class SetUtilsUnitTest { a.add(2); assertEquals(a.toArray()[0], 4); - Set source = new HashSet<>(); - source.add(1); + Set source = new HashSet<>(Arrays.asList(1)); Set newSet = TransformedSet.transformedSet(source, (e) -> e * 2); assertEquals(newSet.toArray()[0], 2); assertEquals(source.toArray()[0], 2); @@ -86,30 +65,19 @@ public class SetUtilsUnitTest { @Test public void givenTwoSet_whenDisjunction_thenDisjunctionSet() { - Set a = new HashSet<>(); - a.add(1); - a.add(2); - a.add(5); - Set b = new HashSet<>(); - b.add(1); - b.add(2); - b.add(3); + Set a = new HashSet<>(Arrays.asList(1,2,5)); + Set b = new HashSet<>(Arrays.asList(1,2,3)); SetUtils.SetView result = SetUtils.disjunction(a, b); assertTrue(result.toSet().contains(5) && result.toSet().contains(3)); } @Test public void givenSet_when_OrderedSet_thenMaintainElementOrder() { - Set set = new HashSet<>(); - set.add(10); - set.add(1); - set.add(5); + Set set = new HashSet<>(Arrays.asList(10,1,5)); System.out.println("unordered set: " + set); Set orderedSet = SetUtils.orderedSet(new HashSet<>()); - orderedSet.add(10); - orderedSet.add(1); - orderedSet.add(5); + orderedSet.addAll(Arrays.asList(10,1,5)); System.out.println("ordered set = " + orderedSet); } } \ No newline at end of file From f775bf91e53a1ecfb9b70596688d7c8202bf495f Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 4 Jul 2017 15:16:41 +0100 Subject: [PATCH 027/313] BAEL-579 Updated Spring Cloud Version I was getting error: java.lang.NoSuchMethodError: org.springframework.cloud.config.environment.Environment After version update, all is okay. --- spring-cloud/spring-cloud-config/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml index 81693b7e2e..d91b30d13f 100644 --- a/spring-cloud/spring-cloud-config/pom.xml +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -34,7 +34,7 @@ - Brixton.SR7 + Dalston.SR1 From 076657a26a57e0aa676989a4d97966a3b9d53e1c Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 4 Jul 2017 17:39:33 +0100 Subject: [PATCH 028/313] BAEL-579 Added actuator to Cloud Config Client. --- .../spring-cloud-config/client/pom.xml | 98 ++++++++++--------- .../cloud/config/client/ConfigClient.java | 60 ++++++------ 2 files changed, 82 insertions(+), 76 deletions(-) diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml index 667040ed3c..c49f26f65d 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -1,47 +1,51 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 1.0-SNAPSHOT - - client - - - - org.springframework.cloud - spring-cloud-starter-config - ${spring-cloud-starter-config.version} - - - org.springframework.boot - spring-boot-starter-web - ${org.springframework.boot.version} - - - - org.springframework.boot - spring-boot-starter-test - ${org.springframework.boot.version} - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - 1.2.2.RELEASE - 1.4.2.RELEASE - - + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0-SNAPSHOT + + client + + + + org.springframework.cloud + spring-cloud-starter-config + ${spring-cloud-starter-config.version} + + + org.springframework.boot + spring-boot-starter-web + ${org.springframework.boot.version} + + + + org.springframework.boot + spring-boot-starter-test + ${org.springframework.boot.version} + test + + + org.springframework.boot + spring-boot-actuator + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + 1.2.2.RELEASE + 1.4.2.RELEASE + + diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java index 1dd3bbdab0..96121eb9b5 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java @@ -1,29 +1,31 @@ -package com.baeldung.spring.cloud.config.client; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@SpringBootApplication -@RestController -public class ConfigClient { - @Value("${user.role}") - private String role; - - @Value("${user.password}") - private String password; - - public static void main(String[] args) { - SpringApplication.run(ConfigClient.class, args); - } - - @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) - public String whoami(@PathVariable("username") String username) { - return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); - } -} +package com.baeldung.spring.cloud.config.client; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +@RefreshScope +public class ConfigClient { + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + public static void main(String[] args) { + SpringApplication.run(ConfigClient.class, args); + } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} From 7845da922d89d53506dd0fff387ea13694c50bc1 Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 4 Jul 2017 23:04:25 +0100 Subject: [PATCH 029/313] BAEL-579 Enabled cloud bus and updated dependencies. --- .../spring-cloud-config/server/pom.xml | 107 +++++++++--------- .../src/main/resources/application.properties | 23 ++-- 2 files changed, 67 insertions(+), 63 deletions(-) diff --git a/spring-cloud/spring-cloud-config/server/pom.xml b/spring-cloud/spring-cloud-config/server/pom.xml index 0157851001..7aeb1967a0 100644 --- a/spring-cloud/spring-cloud-config/server/pom.xml +++ b/spring-cloud/spring-cloud-config/server/pom.xml @@ -1,54 +1,53 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 1.0-SNAPSHOT - - server - - - - org.springframework.cloud - spring-cloud-config-server - ${spring-cloud-config-server.version} - - - org.springframework.boot - spring-boot-starter-security - ${org.springframework.boot.version} - - - org.springframework.boot - spring-boot-starter-web - ${org.springframework.boot.version} - - - - org.springframework.boot - spring-boot-starter-test - ${org.springframework.boot.version} - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - ${org.springframework.boot.version} - - - - - - 1.2.2.RELEASE - 1.4.2.RELEASE - - - + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0-SNAPSHOT + + server + + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.cloud + spring-cloud-config-monitor + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties index 3d4f3bcd47..95699c9fa0 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties @@ -1,9 +1,14 @@ -server.port=8888 -spring.cloud.config.server.git.uri= -spring.cloud.config.server.git.clone-on-start=true -security.user.name=root -security.user.password=s3cr3t -encrypt.key-store.location=classpath:/config-server.jks -encrypt.key-store.password=my-s70r3-s3cr3t -encrypt.key-store.alias=config-server-key -encrypt.key-store.secret=my-k34-s3cr3t +server.port=8888 +spring.cloud.config.server.git.uri= +spring.cloud.config.server.git.clone-on-start=true +security.user.name=root +security.user.password=s3cr3t +encrypt.key-store.location=classpath:/config-server.jks +encrypt.key-store.password=my-s70r3-s3cr3t +encrypt.key-store.alias=config-server-key +encrypt.key-store.secret=my-k34-s3cr3t +spring.cloud.bus.enabled=true +spring.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest \ No newline at end of file From 1d96bc5761994a33af9a7a9aa5ab68604a5b44dc Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 4 Jul 2017 23:41:22 +0100 Subject: [PATCH 030/313] BAEL-579 Config Client using Spring Cloud Bus. --- .../spring-cloud-config/client/pom.xml | 12 ++++------ .../cloud/config/client/ConfigClient.java | 20 ---------------- .../config/client/ConfigClientController.java | 24 +++++++++++++++++++ .../src/main/resources/bootstrap.properties | 16 ++++++++----- 4 files changed, 39 insertions(+), 33 deletions(-) create mode 100644 spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml index c49f26f65d..e7316aa832 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -15,24 +15,26 @@ org.springframework.cloud spring-cloud-starter-config - ${spring-cloud-starter-config.version} org.springframework.boot spring-boot-starter-web - ${org.springframework.boot.version} org.springframework.boot spring-boot-starter-test - ${org.springframework.boot.version} test + org.springframework.boot spring-boot-actuator + + org.springframework.cloud + spring-cloud-starter-bus-amqp + @@ -44,8 +46,4 @@ - - 1.2.2.RELEASE - 1.4.2.RELEASE - diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java index 96121eb9b5..1cc3752a16 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java @@ -1,31 +1,11 @@ package com.baeldung.spring.cloud.config.client; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; @SpringBootApplication -@RestController -@RefreshScope public class ConfigClient { - @Value("${user.role}") - private String role; - - @Value("${user.password}") - private String password; - public static void main(String[] args) { SpringApplication.run(ConfigClient.class, args); } - - @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) - public String whoami(@PathVariable("username") String username) { - return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); - } } diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java new file mode 100644 index 0000000000..bd882e5870 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java @@ -0,0 +1,24 @@ +package com.baeldung.spring.cloud.config.client; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RefreshScope +public class ConfigClientController { + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} diff --git a/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties index 5dde8baa28..8b3f97b5c6 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties +++ b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties @@ -1,6 +1,10 @@ -spring.application.name=config-client -spring.profiles.active=development -spring.cloud.config.uri=http://localhost:8888 -spring.cloud.config.username=root -spring.cloud.config.password=s3cr3t -spring.cloud.config.fail-fast=true +spring.application.name=config-client +spring.profiles.active=development +spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.username=root +spring.cloud.config.password=s3cr3t +spring.cloud.config.fail-fast=true +spring.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest \ No newline at end of file From 73d05a5d5f97f41e4eab4a422898abbee53ebffd Mon Sep 17 00:00:00 2001 From: iaforek Date: Wed, 5 Jul 2017 12:51:02 +0100 Subject: [PATCH 031/313] BAEL-579 Recreated Basic Config Server. --- .../spring-cloud-config-server/pom.xml | 68 ++++++++++++++++++ .../SpringCloudConfigServerApplication.java | 14 ++++ .../src/main/resources/application.properties | 9 +++ .../src/main/resources/config-server.jks | Bin 0 -> 3842 bytes ...ringCloudConfigServerApplicationTests.java | 16 +++++ 5 files changed, 107 insertions(+) create mode 100644 spring-cloud-bus/spring-cloud-config-server/pom.xml create mode 100644 spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java create mode 100644 spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties create mode 100644 spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks create mode 100644 spring-cloud-bus/spring-cloud-config-server/src/test/java/com/baeldung/SpringCloudConfigServerApplicationTests.java diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml new file mode 100644 index 0000000000..e03a975c54 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-server + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-server + Demo Spring Cloud Config Server + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-config-server + + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java b/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java new file mode 100644 index 0000000000..4feace7c89 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java @@ -0,0 +1,14 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; + +@SpringBootApplication +@EnableConfigServer +public class SpringCloudConfigServerApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigServerApplication.class, args); + } +} diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties new file mode 100644 index 0000000000..45be8c1e89 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties @@ -0,0 +1,9 @@ +server.port=8888 +spring.cloud.config.server.git.uri=https://github.com/iaforek/spring-cloudconfig-properties +spring.cloud.config.server.git.clone-on-start=true +security.user.name=root +security.user.password=s3cr3t +encrypt.key-store.location=classpath:/config-server.jks +encrypt.key-store.password=my-s70r3-s3cr3t +encrypt.key-store.alias=config-server-key +encrypt.key-store.secret=my-k34-s3cr3t \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks new file mode 100644 index 0000000000000000000000000000000000000000..f3dddb4a8f4c4773a8feae4d8534b129e5e67f45 GIT binary patch literal 3842 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 Date: Wed, 5 Jul 2017 13:08:33 +0100 Subject: [PATCH 032/313] BAEL-579 Recreated Config Client. --- .../spring-cloud-config-client/pom.xml | 66 +++++++++++++++++++ .../SpringCloudConfigClientApplication.java | 30 +++++++++ .../src/main/resources/bootstrap.properties | 6 ++ ...ringCloudConfigClientApplicationTests.java | 16 +++++ 4 files changed, 118 insertions(+) create mode 100644 spring-cloud-bus/spring-cloud-config-client/pom.xml create mode 100644 spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java create mode 100644 spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties create mode 100644 spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml new file mode 100644 index 0000000000..58726bc3cc --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-client + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-client + Demo Spring Cloud Config Client + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java new file mode 100644 index 0000000000..cfa56eea99 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java @@ -0,0 +1,30 @@ +package com.baeldung; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class SpringCloudConfigClientApplication { + + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigClientApplication.class, args); + } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..a0af4978c2 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties @@ -0,0 +1,6 @@ +spring.application.name=config-client +spring.profiles.active=development +spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.username=root +spring.cloud.config.password=s3cr3t +spring.cloud.config.fail-fast=true \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java b/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java new file mode 100644 index 0000000000..3b361f385a --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringCloudConfigClientApplicationTests { + + @Test + public void contextLoads() { + } + +} From 2b55217ee98bb5438a9261b23ff37b7933830ae2 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 09:37:50 +0100 Subject: [PATCH 033/313] BAEL-579 Removed test Git URL. --- .../src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties index 45be8c1e89..1a7c67b7cd 100644 --- a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties @@ -1,5 +1,5 @@ server.port=8888 -spring.cloud.config.server.git.uri=https://github.com/iaforek/spring-cloudconfig-properties +spring.cloud.config.server.git.uri= spring.cloud.config.server.git.clone-on-start=true security.user.name=root security.user.password=s3cr3t From 42af88c3c2e105bf56e30bf29503e3d661ce6dfc Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 10:34:48 +0100 Subject: [PATCH 034/313] BAEL-579 Added Actuator to Config Client --- spring-cloud-bus/spring-cloud-config-client/pom.xml | 5 +++++ .../com/baeldung/SpringCloudConfigClientApplication.java | 2 ++ .../src/main/resources/bootstrap.properties | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml index 58726bc3cc..fce0e6d56b 100644 --- a/spring-cloud-bus/spring-cloud-config-client/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -39,6 +39,11 @@ spring-boot-starter-test test + + + org.springframework.boot + spring-boot-actuator + diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java index cfa56eea99..d0afd7f6bf 100644 --- a/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java @@ -3,6 +3,7 @@ package com.baeldung; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController +@RefreshScope public class SpringCloudConfigClientApplication { @Value("${user.role}") diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties index a0af4978c2..7b362614ba 100644 --- a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties @@ -3,4 +3,5 @@ spring.profiles.active=development spring.cloud.config.uri=http://localhost:8888 spring.cloud.config.username=root spring.cloud.config.password=s3cr3t -spring.cloud.config.fail-fast=true \ No newline at end of file +spring.cloud.config.fail-fast=true +management.security.enabled=false \ No newline at end of file From dc5a4b3af6ddcfbb5190faa373a9c6ebb043a298 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 11:24:30 +0100 Subject: [PATCH 035/313] BAEL-579 Added Spring Cloud Bus to Client. --- spring-cloud-bus/spring-cloud-config-client/pom.xml | 5 +++++ .../src/main/resources/application.yml | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml index fce0e6d56b..2eb0191c79 100644 --- a/spring-cloud-bus/spring-cloud-config-client/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -44,6 +44,11 @@ org.springframework.boot spring-boot-actuator + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml new file mode 100644 index 0000000000..547e0284f3 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml @@ -0,0 +1,7 @@ +--- +spring: + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest \ No newline at end of file From ee95780416b48528ee92b8fb41920595d4c8f10c Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:02:51 +0100 Subject: [PATCH 036/313] BAEL-579 Server changes for Spring Cloud Bus Added dependencies and removed git.clone-on-start as this was causing server to throw errors after git properties change. --- spring-cloud-bus/spring-cloud-config-server/pom.xml | 10 ++++++++++ .../src/main/resources/application.properties | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml index e03a975c54..2425c95620 100644 --- a/spring-cloud-bus/spring-cloud-config-server/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -41,6 +41,16 @@ spring-boot-starter-test test + + + org.springframework.cloud + spring-cloud-config-monitor + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties index 1a7c67b7cd..85b75fa64a 100644 --- a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties @@ -1,9 +1,12 @@ server.port=8888 -spring.cloud.config.server.git.uri= -spring.cloud.config.server.git.clone-on-start=true +spring.cloud.config.server.git.uri=https://github.com/iaforek/spring-cloudconfig-properties security.user.name=root security.user.password=s3cr3t encrypt.key-store.location=classpath:/config-server.jks encrypt.key-store.password=my-s70r3-s3cr3t encrypt.key-store.alias=config-server-key -encrypt.key-store.secret=my-k34-s3cr3t \ No newline at end of file +encrypt.key-store.secret=my-k34-s3cr3t +spring.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest \ No newline at end of file From 7f8b32cdd68d15ea31a07e653b7a81d8fdc30ba8 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:05:13 +0100 Subject: [PATCH 037/313] BAEL-579 Removed Git URL. --- .../src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties index 85b75fa64a..4c18c192c0 100644 --- a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties @@ -1,5 +1,5 @@ server.port=8888 -spring.cloud.config.server.git.uri=https://github.com/iaforek/spring-cloudconfig-properties +spring.cloud.config.server.git.uri= security.user.name=root security.user.password=s3cr3t encrypt.key-store.location=classpath:/config-server.jks From a68b0e59f31aa2b747283c41b487d6cdcbb53ffe Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:13:29 +0100 Subject: [PATCH 038/313] Revert "BAEL-579 Updated Spring Cloud Version" This reverts commit f775bf91e53a1ecfb9b70596688d7c8202bf495f. --- spring-cloud/spring-cloud-config/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml index d91b30d13f..81693b7e2e 100644 --- a/spring-cloud/spring-cloud-config/pom.xml +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -34,7 +34,7 @@ - Dalston.SR1 + Brixton.SR7 From 5681be08446e16eb2ab20e888fa5a47688361104 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:18:37 +0100 Subject: [PATCH 039/313] Revert "BAEL-579 Config Client using Spring Cloud Bus." This reverts commit 1d96bc5761994a33af9a7a9aa5ab68604a5b44dc. --- .../spring-cloud-config/client/pom.xml | 12 ++++++---- .../cloud/config/client/ConfigClient.java | 20 ++++++++++++++++ .../config/client/ConfigClientController.java | 24 ------------------- .../src/main/resources/bootstrap.properties | 16 +++++-------- 4 files changed, 33 insertions(+), 39 deletions(-) delete mode 100644 spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml index e7316aa832..c49f26f65d 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -15,26 +15,24 @@ org.springframework.cloud spring-cloud-starter-config + ${spring-cloud-starter-config.version} org.springframework.boot spring-boot-starter-web + ${org.springframework.boot.version} org.springframework.boot spring-boot-starter-test + ${org.springframework.boot.version} test - org.springframework.boot spring-boot-actuator - - org.springframework.cloud - spring-cloud-starter-bus-amqp - @@ -46,4 +44,8 @@ + + 1.2.2.RELEASE + 1.4.2.RELEASE + diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java index 1cc3752a16..96121eb9b5 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java @@ -1,11 +1,31 @@ package com.baeldung.spring.cloud.config.client; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; @SpringBootApplication +@RestController +@RefreshScope public class ConfigClient { + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + public static void main(String[] args) { SpringApplication.run(ConfigClient.class, args); } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } } diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java deleted file mode 100644 index bd882e5870..0000000000 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClientController.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.spring.cloud.config.client; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RefreshScope -public class ConfigClientController { - @Value("${user.role}") - private String role; - - @Value("${user.password}") - private String password; - - @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) - public String whoami(@PathVariable("username") String username) { - return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); - } -} diff --git a/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties index 8b3f97b5c6..5dde8baa28 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties +++ b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties @@ -1,10 +1,6 @@ -spring.application.name=config-client -spring.profiles.active=development -spring.cloud.config.uri=http://localhost:8888 -spring.cloud.config.username=root -spring.cloud.config.password=s3cr3t -spring.cloud.config.fail-fast=true -spring.rabbitmq.host=localhost -spring.rabbitmq.port=5672 -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest \ No newline at end of file +spring.application.name=config-client +spring.profiles.active=development +spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.username=root +spring.cloud.config.password=s3cr3t +spring.cloud.config.fail-fast=true From 3856d1a83238f752f49fc40a8fb18c312c9026c1 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:19:08 +0100 Subject: [PATCH 040/313] Revert "BAEL-579 Enabled cloud bus and updated dependencies." This reverts commit 7845da922d89d53506dd0fff387ea13694c50bc1. --- .../spring-cloud-config/server/pom.xml | 107 +++++++++--------- .../src/main/resources/application.properties | 23 ++-- 2 files changed, 63 insertions(+), 67 deletions(-) diff --git a/spring-cloud/spring-cloud-config/server/pom.xml b/spring-cloud/spring-cloud-config/server/pom.xml index 7aeb1967a0..0157851001 100644 --- a/spring-cloud/spring-cloud-config/server/pom.xml +++ b/spring-cloud/spring-cloud-config/server/pom.xml @@ -1,53 +1,54 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 1.0-SNAPSHOT - - server - - - - org.springframework.cloud - spring-cloud-config-server - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.springframework.cloud - spring-cloud-config-monitor - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0-SNAPSHOT + + server + + + + org.springframework.cloud + spring-cloud-config-server + ${spring-cloud-config-server.version} + + + org.springframework.boot + spring-boot-starter-security + ${org.springframework.boot.version} + + + org.springframework.boot + spring-boot-starter-web + ${org.springframework.boot.version} + + + + org.springframework.boot + spring-boot-starter-test + ${org.springframework.boot.version} + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${org.springframework.boot.version} + + + + + + 1.2.2.RELEASE + 1.4.2.RELEASE + + + diff --git a/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties index 95699c9fa0..3d4f3bcd47 100644 --- a/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties @@ -1,14 +1,9 @@ -server.port=8888 -spring.cloud.config.server.git.uri= -spring.cloud.config.server.git.clone-on-start=true -security.user.name=root -security.user.password=s3cr3t -encrypt.key-store.location=classpath:/config-server.jks -encrypt.key-store.password=my-s70r3-s3cr3t -encrypt.key-store.alias=config-server-key -encrypt.key-store.secret=my-k34-s3cr3t -spring.cloud.bus.enabled=true -spring.rabbitmq.host=localhost -spring.rabbitmq.port=5672 -spring.rabbitmq.username=guest -spring.rabbitmq.password=guest \ No newline at end of file +server.port=8888 +spring.cloud.config.server.git.uri= +spring.cloud.config.server.git.clone-on-start=true +security.user.name=root +security.user.password=s3cr3t +encrypt.key-store.location=classpath:/config-server.jks +encrypt.key-store.password=my-s70r3-s3cr3t +encrypt.key-store.alias=config-server-key +encrypt.key-store.secret=my-k34-s3cr3t From bf7829d539acbfe3a7d580e1db617e3c56fb2922 Mon Sep 17 00:00:00 2001 From: iaforek Date: Thu, 6 Jul 2017 12:19:26 +0100 Subject: [PATCH 041/313] Revert "BAEL-579 Added actuator to Cloud Config Client." This reverts commit 076657a26a57e0aa676989a4d97966a3b9d53e1c. --- .../spring-cloud-config/client/pom.xml | 98 +++++++++---------- .../cloud/config/client/ConfigClient.java | 60 ++++++------ 2 files changed, 76 insertions(+), 82 deletions(-) diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml index c49f26f65d..667040ed3c 100644 --- a/spring-cloud/spring-cloud-config/client/pom.xml +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -1,51 +1,47 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 1.0-SNAPSHOT - - client - - - - org.springframework.cloud - spring-cloud-starter-config - ${spring-cloud-starter-config.version} - - - org.springframework.boot - spring-boot-starter-web - ${org.springframework.boot.version} - - - - org.springframework.boot - spring-boot-starter-test - ${org.springframework.boot.version} - test - - - org.springframework.boot - spring-boot-actuator - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - 1.2.2.RELEASE - 1.4.2.RELEASE - - + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0-SNAPSHOT + + client + + + + org.springframework.cloud + spring-cloud-starter-config + ${spring-cloud-starter-config.version} + + + org.springframework.boot + spring-boot-starter-web + ${org.springframework.boot.version} + + + + org.springframework.boot + spring-boot-starter-test + ${org.springframework.boot.version} + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + 1.2.2.RELEASE + 1.4.2.RELEASE + + diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java index 96121eb9b5..1dd3bbdab0 100644 --- a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java @@ -1,31 +1,29 @@ -package com.baeldung.spring.cloud.config.client; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@SpringBootApplication -@RestController -@RefreshScope -public class ConfigClient { - @Value("${user.role}") - private String role; - - @Value("${user.password}") - private String password; - - public static void main(String[] args) { - SpringApplication.run(ConfigClient.class, args); - } - - @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) - public String whoami(@PathVariable("username") String username) { - return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); - } -} +package com.baeldung.spring.cloud.config.client; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class ConfigClient { + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + public static void main(String[] args) { + SpringApplication.run(ConfigClient.class, args); + } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} From 67dc0bd2e6366bce742ddcfbf31276e05b87fc6c Mon Sep 17 00:00:00 2001 From: iaforek Date: Fri, 7 Jul 2017 09:44:38 +0100 Subject: [PATCH 042/313] BAEL-579 Added missing dependency versions. --- .../spring-cloud-config-server/pom.xml | 159 +++++++++--------- 1 file changed, 81 insertions(+), 78 deletions(-) diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml index 2425c95620..9ec661b718 100644 --- a/spring-cloud-bus/spring-cloud-config-server/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -1,78 +1,81 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-config-server - 0.0.1-SNAPSHOT - jar - - spring-cloud-config-server - Demo Spring Cloud Config Server - - - org.springframework.boot - spring-boot-starter-parent - 1.5.4.RELEASE - - - - - UTF-8 - UTF-8 - 1.8 - Dalston.SR1 - - - - - org.springframework.cloud - spring-cloud-config-server - - - - org.springframework.boot - spring-boot-starter-security - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.springframework.cloud - spring-cloud-config-monitor - - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - - - - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-server + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-server + Demo Spring Cloud Config Server + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-config-server + 1.3.1.RELEASE + + + + org.springframework.boot + spring-boot-starter-security + 1.5.4.RELEASE + + + + org.springframework.boot + spring-boot-starter-test + 1.5.4.RELEASE + test + + + + org.springframework.cloud + spring-cloud-config-monitor + 1.3.1.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + 1.2.1.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + From fc3af59d27a491263246c6d9677d3bc4627cdc0b Mon Sep 17 00:00:00 2001 From: iaforek Date: Fri, 7 Jul 2017 09:49:29 +0100 Subject: [PATCH 043/313] BAEL-579 Added missing dependency versions. --- .../spring-cloud-config-client/pom.xml | 157 +++++++++--------- .../spring-cloud-config-server/pom.xml | 1 + 2 files changed, 82 insertions(+), 76 deletions(-) diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml index 2eb0191c79..977f18b17f 100644 --- a/spring-cloud-bus/spring-cloud-config-client/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -1,76 +1,81 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-config-client - 0.0.1-SNAPSHOT - jar - - spring-cloud-config-client - Demo Spring Cloud Config Client - - - org.springframework.boot - spring-boot-starter-parent - 1.5.4.RELEASE - - - - UTF-8 - UTF-8 - 1.8 - Dalston.SR1 - - - - - org.springframework.cloud - spring-cloud-starter-config - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.springframework.boot - spring-boot-actuator - - - - org.springframework.cloud - spring-cloud-starter-bus-amqp - - - - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-client + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-client + Demo Spring Cloud Config Client + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-starter-config + 1.3.1.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.5.4.RELEASE + + + + org.springframework.boot + spring-boot-starter-test + 1.5.4.RELEASE + test + + + + org.springframework.boot + spring-boot-actuator + 1.5.4.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + 1.3.1.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 1.5.4.RELEASE + + + + + diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml index 9ec661b718..e37f601d2c 100644 --- a/spring-cloud-bus/spring-cloud-config-server/pom.xml +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -74,6 +74,7 @@ org.springframework.boot spring-boot-maven-plugin + 1.5.4.RELEASE From 23959fc2c27fd9ef256d687349b68c49beace88b Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sun, 16 Jul 2017 01:13:09 +0100 Subject: [PATCH 044/313] added example code for bytebuddy --- libraries/pom.xml | 11 +++ .../main/java/com/baeldung/bytebuddy/Bar.java | 16 ++++ .../main/java/com/baeldung/bytebuddy/Foo.java | 7 ++ .../baeldung/bytebuddy/ByteBuddyUnitTest.java | 89 +++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 libraries/src/main/java/com/baeldung/bytebuddy/Bar.java create mode 100644 libraries/src/main/java/com/baeldung/bytebuddy/Foo.java create mode 100644 libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java diff --git a/libraries/pom.xml b/libraries/pom.xml index 9093a2db03..eebbdf3f0e 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -525,6 +525,16 @@ hll ${hll.version} + + net.bytebuddy + byte-buddy + ${bytebuddy.version} + + + net.bytebuddy + byte-buddy-agent + ${bytebuddy.version} + 0.7.0 @@ -566,6 +576,7 @@ mytheme 1.6.0 + 1.7.1 diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java b/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java new file mode 100644 index 0000000000..d0362a6c92 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java @@ -0,0 +1,16 @@ +package com.baeldung.bytebuddy; + +import net.bytebuddy.implementation.bind.annotation.BindingPriority; + +public class Bar { + + @BindingPriority(3) + public static String sayHelloBar() { return "Holla in Bar!"; } + + @BindingPriority(2) + public static String sayBar() { return "bar"; } + + public String bar() { return Bar.class.getSimpleName() + " - Bar"; } + + +} diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java b/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java new file mode 100644 index 0000000000..4be06785b1 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.bytebuddy; + +public class Foo { + + public String sayHelloFoo() { return "Hello in Foo!"; } + +} diff --git a/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java b/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java new file mode 100644 index 0000000000..6b7364a0a5 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java @@ -0,0 +1,89 @@ +package com.baeldung.bytebuddy; + +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.agent.ByteBuddyAgent; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; +import net.bytebuddy.dynamic.loading.ClassReloadingStrategy; +import net.bytebuddy.implementation.FixedValue; +import net.bytebuddy.implementation.MethodDelegation; +import net.bytebuddy.matcher.ElementMatchers; +import org.junit.Test; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +import static net.bytebuddy.matcher.ElementMatchers.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class ByteBuddyUnitTest { + + @Test + public void givenObject_whenToString_thenReturnHelloWorldString() throws InstantiationException, IllegalAccessException { + DynamicType.Unloaded unloadedType = new ByteBuddy() + .subclass(Object.class) + .method(ElementMatchers.isToString()) + .intercept(FixedValue.value("Hello World ByteBuddy!")) + .make(); + + Class dynamicType = unloadedType.load(getClass().getClassLoader()) + .getLoaded(); + + assertEquals(dynamicType.newInstance().toString(), "Hello World ByteBuddy!"); + } + + @Test + public void givenFoo_whenRedefined_thenReturnFooRedefined() throws Exception { + ByteBuddyAgent.install(); + new ByteBuddy() + .redefine(Foo.class) + .method(named("sayHelloFoo")) + .intercept(FixedValue.value("Hello Foo Redefined")) + .make() + .load(Foo.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent()); + Foo f = new Foo(); + assertEquals(f.sayHelloFoo(), "Hello Foo Redefined"); + } + + @Test + public void givenSayHelloFoo_whenMethodDelegation_thenSayHelloBar() throws IllegalAccessException, InstantiationException { + + String r = new ByteBuddy() + .subclass(Foo.class) + .method( + named("sayHelloFoo") + .and(isDeclaredBy(Foo.class) + .and(returns(String.class))) + ) + .intercept(MethodDelegation.to(Bar.class)) + .make() + .load(getClass().getClassLoader()) + .getLoaded() + .newInstance() + .sayHelloFoo(); + + assertEquals(r, Bar.sayHelloBar()); + } + + @Test + public void givenMethodName_whenDefineMethod_thenCreateMethod() throws Exception { + Class type = new ByteBuddy() + .subclass(Object.class) + .name("MyClassName") + .defineMethod("custom", String.class, Modifier.PUBLIC) + .intercept(MethodDelegation.to(Bar.class)) + .defineField("x", String.class, Modifier.PUBLIC) + .make() + .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) + .getLoaded(); + + Method m = type.getDeclaredMethod("custom", null); + + assertEquals(m.invoke(type.newInstance()), Bar.sayHelloBar()); + assertNotNull(type.getDeclaredField("x")); + + } + + +} From 471c1e45bb9a889fcf063732ad1d42b0655cb8f1 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 27 Jul 2017 10:42:11 +0100 Subject: [PATCH 045/313] added example code for PCollections --- libraries/pom.xml | 6 ++ .../pcollections/PCollectionsUnitTest.java | 91 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java diff --git a/libraries/pom.xml b/libraries/pom.xml index 6ab312a535..d78d1b28ec 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -458,6 +458,11 @@ byte-buddy-agent ${bytebuddy.version} + + org.pcollections + pcollections + ${pcollections.version} + 0.7.0 @@ -497,5 +502,6 @@ 2.0.0.0 1.6.0 1.7.1 + 2.1.2 diff --git a/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java b/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java new file mode 100644 index 0000000000..b2f815074a --- /dev/null +++ b/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java @@ -0,0 +1,91 @@ +package com.baeldung.pcollections; + +import org.junit.Test; +import org.pcollections.*; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class PCollectionsUnitTest { + + @Test + public void whenEmpty_thenCreateEmptyHashPMap() { + HashPMap pmap = HashTreePMap.empty(); + assertEquals(pmap.size(), 0); + } + + @Test + public void givenKeyValue_whenSingleton_thenCreateNonEmptyHashPMap() { + HashPMap pmap1 = HashTreePMap.singleton("key1", "value1"); + assertEquals(pmap1.size(), 1); + } + + @Test + public void givenExistingHashMap_whenFrom_thenCreateHashPMap() { + Map map = new HashMap(); + map.put("mkey1", "mval1"); + map.put("mkey2", "mval2"); + + HashPMap pmap2 = HashTreePMap.from(map); + assertEquals(pmap2.size(), 2); + } + + @Test + public void whenHashPMapMethods_thenPerformOperations() { + + HashPMap pmap = HashTreePMap.empty(); + pmap = pmap.plus("key1", "value1"); + assertEquals(pmap.size(), 1); + + Map map = new HashMap(); + map.put("key2", "val2"); + map.put("key3", "val3"); + pmap = pmap.plusAll(map); + + assertEquals(pmap.size(), 3); + + pmap = pmap.minus("key1"); + assertFalse(pmap.containsKey("key1")); + + pmap = pmap.minusAll(map.keySet()); + assertEquals(pmap.size(), 0); + + } + + @Test + public void whenTreePVectorMethods_thenPerformOperations() { + TreePVector pVector = TreePVector.empty(); + + pVector = pVector.plus("e1"); + pVector = pVector.plusAll(Arrays.asList("e2", "e3", "e4")); + assertEquals(4, pVector.size()); + + TreePVector pSub = pVector.subList(0, 2); + assertTrue(pSub.contains("e1") && pSub.contains("e2")); + + TreePVector pVW = (TreePVector) pVector.with(0, "e10"); + assertEquals(pVW.get(0), "e10"); + + pVector = pVector.minus("e1"); + TreePVector pV1 = pVector.minusAll(Arrays.asList("e2", "e3")); + assertEquals(pV1.size(), 1); + } + + @Test + public void whenMapPSetMethods_thenPerformOperations() { + + MapPSet pSet = HashTreePSet.empty() + .plusAll(Arrays.asList("e1","e2","e3","e4")); + assertEquals(pSet.size(), 4); + + pSet = pSet.minus("e4"); + assertFalse(pSet.contains("e4")); + + } + +} From 759693781a49cfd2b7a97e8e2b4cbb397988aac8 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 27 Jul 2017 10:44:54 +0100 Subject: [PATCH 046/313] update pom --- libraries/pom.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/libraries/pom.xml b/libraries/pom.xml index d78d1b28ec..a655f5267a 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -448,16 +448,6 @@ byte-buddy-agent ${bytebuddy.version} - - net.bytebuddy - byte-buddy - ${bytebuddy.version} - - - net.bytebuddy - byte-buddy-agent - ${bytebuddy.version} - org.pcollections pcollections From cb7dc1b9afeeb8b3e9c0e11d504c83af0dbaf3c8 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 29 Jul 2017 14:55:24 +0100 Subject: [PATCH 047/313] refactored tests for PCollections --- .../pcollections/PCollectionsUnitTest.java | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java b/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java index b2f815074a..1fd110ddd8 100644 --- a/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java +++ b/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java @@ -39,53 +39,52 @@ public class PCollectionsUnitTest { public void whenHashPMapMethods_thenPerformOperations() { HashPMap pmap = HashTreePMap.empty(); - pmap = pmap.plus("key1", "value1"); - assertEquals(pmap.size(), 1); + HashPMap pmap0 = pmap.plus("key1", "value1"); Map map = new HashMap(); map.put("key2", "val2"); map.put("key3", "val3"); - pmap = pmap.plusAll(map); + HashPMap pmap1 = pmap0.plusAll(map); - assertEquals(pmap.size(), 3); + HashPMap pmap2 = pmap1.minus("key1"); - pmap = pmap.minus("key1"); - assertFalse(pmap.containsKey("key1")); - - pmap = pmap.minusAll(map.keySet()); - assertEquals(pmap.size(), 0); + HashPMap pmap3 = pmap2.minusAll(map.keySet()); + assertEquals(pmap0.size(), 1); + assertEquals(pmap1.size(), 3); + assertFalse(pmap2.containsKey("key1")); + assertEquals(pmap3.size(), 0); } @Test public void whenTreePVectorMethods_thenPerformOperations() { TreePVector pVector = TreePVector.empty(); - pVector = pVector.plus("e1"); - pVector = pVector.plusAll(Arrays.asList("e2", "e3", "e4")); - assertEquals(4, pVector.size()); + TreePVector pV1 = pVector.plus("e1"); + TreePVector pV2 = pV1.plusAll(Arrays.asList("e2", "e3", "e4")); + assertEquals(1, pV1.size()); + assertEquals(4, pV2.size()); - TreePVector pSub = pVector.subList(0, 2); + TreePVector pV3 = pV2.minus("e1"); + TreePVector pV4 = pV3.minusAll(Arrays.asList("e2", "e3", "e4")); + assertEquals(pV3.size(), 3); + assertEquals(pV4.size(), 0); + + TreePVector pSub = pV2.subList(0, 2); assertTrue(pSub.contains("e1") && pSub.contains("e2")); - TreePVector pVW = (TreePVector) pVector.with(0, "e10"); + TreePVector pVW = (TreePVector) pV2.with(0, "e10"); assertEquals(pVW.get(0), "e10"); - - pVector = pVector.minus("e1"); - TreePVector pV1 = pVector.minusAll(Arrays.asList("e2", "e3")); - assertEquals(pV1.size(), 1); } @Test public void whenMapPSetMethods_thenPerformOperations() { - MapPSet pSet = HashTreePSet.empty() .plusAll(Arrays.asList("e1","e2","e3","e4")); assertEquals(pSet.size(), 4); - pSet = pSet.minus("e4"); - assertFalse(pSet.contains("e4")); - + MapPSet pSet1 = pSet.minus("e4"); + assertFalse(pSet1.contains("e4")); } } From 4c338e63e0c2f4abca4c770aeeb7b402bdc32071 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 3 Aug 2017 08:43:19 +0100 Subject: [PATCH 048/313] spring security xml config --- jee7/.gitignore | 5 ++++ jee7/pom.xml | 3 +++ .../main/webapp/WEB-INF/spring/security.xml | 23 ++++++++++++++++ jee7/src/main/webapp/WEB-INF/web.xml | 27 +++++++++++++++++++ jee7/src/main/webapp/index.jsp | 18 +++++++++++++ jee7/src/main/webapp/secure.jsp | 24 +++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 jee7/.gitignore create mode 100644 jee7/src/main/webapp/WEB-INF/spring/security.xml create mode 100644 jee7/src/main/webapp/index.jsp create mode 100644 jee7/src/main/webapp/secure.jsp diff --git a/jee7/.gitignore b/jee7/.gitignore new file mode 100644 index 0000000000..067348b3f4 --- /dev/null +++ b/jee7/.gitignore @@ -0,0 +1,5 @@ + +/classes/ +/.idea/ +/target/ +/jee7.iml diff --git a/jee7/pom.xml b/jee7/pom.xml index b5e0d80b6c..6858a05d17 100644 --- a/jee7/pom.xml +++ b/jee7/pom.xml @@ -6,8 +6,10 @@ com.baeldung jee7 1.0-SNAPSHOT + war JavaEE 7 Arquillian Archetype Sample + com.baeldung parent-modules @@ -174,6 +176,7 @@ maven-war-plugin ${maven-war-plugin.version} + webapp false diff --git a/jee7/src/main/webapp/WEB-INF/spring/security.xml b/jee7/src/main/webapp/WEB-INF/spring/security.xml new file mode 100644 index 0000000000..777cd9461f --- /dev/null +++ b/jee7/src/main/webapp/WEB-INF/spring/security.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jee7/src/main/webapp/WEB-INF/web.xml b/jee7/src/main/webapp/WEB-INF/web.xml index 11bd87cf99..5be1bf8808 100644 --- a/jee7/src/main/webapp/WEB-INF/web.xml +++ b/jee7/src/main/webapp/WEB-INF/web.xml @@ -32,6 +32,33 @@ + + + + + + contextConfigLocation + + /WEB-INF/spring/*.xml + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + + springSecurityFilterChain + /* + + + + org.springframework.web.context.ContextLoaderListener + + + + index.jsf welcome.jsf diff --git a/jee7/src/main/webapp/index.jsp b/jee7/src/main/webapp/index.jsp new file mode 100644 index 0000000000..66a47eb7ce --- /dev/null +++ b/jee7/src/main/webapp/index.jsp @@ -0,0 +1,18 @@ +<%-- + Created by IntelliJ IDEA. + User: smatt + Date: 02/08/2017 + Time: 07:03 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Index Page + + + Non-secured Index Page +
+ Login + + diff --git a/jee7/src/main/webapp/secure.jsp b/jee7/src/main/webapp/secure.jsp new file mode 100644 index 0000000000..0cadd2cd4f --- /dev/null +++ b/jee7/src/main/webapp/secure.jsp @@ -0,0 +1,24 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %> + + + + + Home Page + + +

Home Page

+ +

+ Hello
+ Roles: +

+ +
+ + +
+ + \ No newline at end of file From d6985a389ca92134444687bd4581af8d8b61d158 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 3 Aug 2017 08:45:17 +0100 Subject: [PATCH 049/313] spring security xml config --- jee7/src/main/webapp/WEB-INF/web.xml | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/jee7/src/main/webapp/WEB-INF/web.xml b/jee7/src/main/webapp/WEB-INF/web.xml index 5be1bf8808..1bcbb96e24 100644 --- a/jee7/src/main/webapp/WEB-INF/web.xml +++ b/jee7/src/main/webapp/WEB-INF/web.xml @@ -36,26 +36,26 @@ - - contextConfigLocation - - /WEB-INF/spring/*.xml - - + + + + + + - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - + + + + - - springSecurityFilterChain - /* - + + + + - - org.springframework.web.context.ContextLoaderListener - + + + From dedd4c11e82fe5de23d908f0f2e4ea6134dc1294 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Fri, 4 Aug 2017 10:39:21 +0100 Subject: [PATCH 050/313] remove redundant comment --- jee7/src/main/webapp/index.jsp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/jee7/src/main/webapp/index.jsp b/jee7/src/main/webapp/index.jsp index 66a47eb7ce..93fef9713d 100644 --- a/jee7/src/main/webapp/index.jsp +++ b/jee7/src/main/webapp/index.jsp @@ -1,10 +1,3 @@ -<%-- - Created by IntelliJ IDEA. - User: smatt - Date: 02/08/2017 - Time: 07:03 AM - To change this template use File | Settings | File Templates. ---%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -15,4 +8,4 @@
Login - + \ No newline at end of file From ac7c7f2701bd9f6ea3506f175271805cc77df57d Mon Sep 17 00:00:00 2001 From: iaforek Date: Tue, 8 Aug 2017 12:41:24 +0100 Subject: [PATCH 051/313] Updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1890e8bd0e..67f33c2a0b 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ SpringDataInjectionDemo/.mvn/wrapper/maven-wrapper.properties spring-call-getters-using-reflection/.mvn/wrapper/maven-wrapper.properties spring-check-if-a-property-is-null/.mvn/wrapper/maven-wrapper.properties +*.springBeans From 21279619227ea2459a24f30de18c822b54fd70bd Mon Sep 17 00:00:00 2001 From: iaforek Date: Wed, 9 Aug 2017 23:01:59 +0100 Subject: [PATCH 052/313] BAEL-1065 Simple performance check StringBuffer vs StringBuilder. --- .../string/StringBufferStringBuilder.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java diff --git a/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java b/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java new file mode 100644 index 0000000000..4623b83de0 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java @@ -0,0 +1,25 @@ +package com.baeldung.string; + +public class StringBufferStringBuilder { + + public static void main(String[] args) { + + int iterations = 10000000; + + System.gc(); + long startTime = System.currentTimeMillis(); + StringBuffer stringBuffer = new StringBuffer("abc"); + for (int i = 0; i < iterations; i++) { + stringBuffer.append("def"); + } + System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms"); // Time taken by StringBuffer: 394ms + + System.gc(); + startTime = System.currentTimeMillis(); + StringBuilder stringBuilder = new StringBuilder("abc"); + for (int i = 0; i < iterations; i++) { + stringBuilder.append("def"); + } + System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms"); // Time taken by StringBuilder: 129ms + } +} From 57ea6593ee142c5ab407f4c1ec65e32bb44c6bf9 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 15 Aug 2017 05:39:12 +0100 Subject: [PATCH 053/313] example code for apache-shiro --- apache-shiro/.gitignore | 4 + apache-shiro/README.md | 0 apache-shiro/pom.xml | 65 +++++++++++ .../src/main/java/com/baeldung/Main.java | 85 +++++++++++++++ .../main/java/com/baeldung/MyCustomRealm.java | 102 ++++++++++++++++++ .../src/main/resources/log4j.properties | 12 +++ apache-shiro/src/main/resources/shiro.ini | 3 + 7 files changed, 271 insertions(+) create mode 100644 apache-shiro/.gitignore create mode 100644 apache-shiro/README.md create mode 100644 apache-shiro/pom.xml create mode 100644 apache-shiro/src/main/java/com/baeldung/Main.java create mode 100644 apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java create mode 100644 apache-shiro/src/main/resources/log4j.properties create mode 100644 apache-shiro/src/main/resources/shiro.ini diff --git a/apache-shiro/.gitignore b/apache-shiro/.gitignore new file mode 100644 index 0000000000..020cda4898 --- /dev/null +++ b/apache-shiro/.gitignore @@ -0,0 +1,4 @@ + +/.idea/ +/target/ +/apache-shiro.iml \ No newline at end of file diff --git a/apache-shiro/README.md b/apache-shiro/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apache-shiro/pom.xml b/apache-shiro/pom.xml new file mode 100644 index 0000000000..97ed872a26 --- /dev/null +++ b/apache-shiro/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.baeldung + apache-shiro + 1.0-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + 1.4.0 + 1.2.17 + 1.7.25 + + + + + org.apache.shiro + shiro-core + ${apache-shiro-core-version} + + + org.slf4j + jcl-over-slf4j + ${slf4j-version} + runtime + + + org.slf4j + slf4j-log4j12 + ${slf4j-version} + runtime + + + log4j + log4j + ${log4j-version} + runtime + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.2 + + 1.8 + 1.8 + + + + + + + \ No newline at end of file diff --git a/apache-shiro/src/main/java/com/baeldung/Main.java b/apache-shiro/src/main/java/com/baeldung/Main.java new file mode 100644 index 0000000000..a584008387 --- /dev/null +++ b/apache-shiro/src/main/java/com/baeldung/Main.java @@ -0,0 +1,85 @@ +package com.baeldung; + +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.config.IniSecurityManagerFactory; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.session.Session; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.Factory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Main { + + private static final transient Logger log = LoggerFactory.getLogger(Main.class); + + public static void main(String[] args) { + + Factory factory + = new IniSecurityManagerFactory("classpath:shiro.ini"); + SecurityManager securityManager = factory.getInstance(); + + SecurityUtils.setSecurityManager(securityManager); + Subject currentUser = SecurityUtils.getSubject(); + + if (!currentUser.isAuthenticated()) { + UsernamePasswordToken token + = new UsernamePasswordToken("user", "password"); + token.setRememberMe(true); + try { + currentUser.login(token); + } catch (UnknownAccountException uae) { + log.error("Username Not Found!", uae); + } catch (IncorrectCredentialsException ice) { + log.error("Invalid Credentials!", ice); + } catch (LockedAccountException lae) { + log.error("Your Account is Locked!", lae); + } catch (AuthenticationException ae) { + log.error("Unexpected Error!", ae); + } + } + + log.info("User [" + currentUser.getPrincipal() + "] logged in successfully."); + + if (currentUser.hasRole("admin")) { + log.info("Welcome Admin"); + } else if(currentUser.hasRole("editor")) { + log.info("Welcome, Editor!"); + } else if(currentUser.hasRole("author")) { + log.info("Welcome, Author"); + } else { + log.info("Welcome, Guest"); + } + + if(currentUser.isPermitted("articles:compose")) { + log.info("You can compose an article"); + } else { + log.info("You are not permitted to compose an article!"); + } + + if(currentUser.isPermitted("articles:save")) { + log.info("You can save articles"); + } else { + log.info("You can not save articles"); + } + + if(currentUser.isPermitted("articles:publish")) { + log.info("You can publish articles"); + } else { + log.info("You can not publish articles"); + } + + Session session = currentUser.getSession(); + session.setAttribute("key", "value"); + String value = (String) session.getAttribute("key"); + if (value.equals("value")) { + log.info("Retrieved the correct value! [" + value + "]"); + } + + currentUser.logout(); + + System.exit(0); + } + +} diff --git a/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java b/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java new file mode 100644 index 0000000000..8d792c76a5 --- /dev/null +++ b/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java @@ -0,0 +1,102 @@ +package com.baeldung; + +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.jdbc.JdbcRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.*; + +public class MyCustomRealm extends JdbcRealm { + + private Map credentials = new HashMap<>(); + private Map> roles = new HashMap<>(); + private Map> perm = new HashMap<>(); + + { + credentials.put("user", "password"); + credentials.put("user2", "password2"); + credentials.put("user3", "password3"); + + roles.put("user", new HashSet<>(Arrays.asList("admin"))); + roles.put("user2", new HashSet<>(Arrays.asList("editor"))); + roles.put("user3", new HashSet<>(Arrays.asList("author"))); + + perm.put("admin", new HashSet<>(Arrays.asList("*"))); + perm.put("editor", new HashSet<>(Arrays.asList("articles:*"))); + perm.put("author", + new HashSet<>(Arrays.asList("articles:compose", + "articles:save"))); + + } + + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) + throws AuthenticationException { + + UsernamePasswordToken uToken = (UsernamePasswordToken) token; + + if(uToken.getUsername() == null + || uToken.getUsername().isEmpty() + || !credentials.containsKey(uToken.getUsername()) + ) { + throw new UnknownAccountException("username not found!"); + } + + + return new SimpleAuthenticationInfo( + uToken.getUsername(), credentials.get(uToken.getUsername()), + getName()); + } + + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + Set roleNames = new HashSet<>(); + Set permissions = new HashSet<>(); + + principals.forEach(p -> { + try { + Set roles = getRoleNamesForUser(null, (String) p); + roleNames.addAll(roles); + permissions.addAll(getPermissions(null, null,roles)); + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames); + info.setStringPermissions(permissions); + return info; + } + + @Override + protected Set getRoleNamesForUser(Connection conn, String username) throws SQLException { + if(!roles.containsKey(username)) { + throw new SQLException("username not found!"); + } + + return roles.get(username); + } + + @Override + protected Set getPermissions(Connection conn, String username, Collection roleNames) throws SQLException { + for (String role : roleNames) { + if (!perm.containsKey(role)) { + throw new SQLException("role not found!"); + } + } + + Set finalSet = new HashSet<>(); + for (String role : roleNames) { + finalSet.addAll(perm.get(role)); + } + + return finalSet; + } + +} diff --git a/apache-shiro/src/main/resources/log4j.properties b/apache-shiro/src/main/resources/log4j.properties new file mode 100644 index 0000000000..897bf08221 --- /dev/null +++ b/apache-shiro/src/main/resources/log4j.properties @@ -0,0 +1,12 @@ +log4j.rootLogger=INFO, stdout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n + +log4j.logger.org.apache=WARN + +log4j.logger.org.apache.shiro=INFO + +log4j.logger.org.apache.shiro.util.ThreadContext=WARN +log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN \ No newline at end of file diff --git a/apache-shiro/src/main/resources/shiro.ini b/apache-shiro/src/main/resources/shiro.ini new file mode 100644 index 0000000000..a75f591015 --- /dev/null +++ b/apache-shiro/src/main/resources/shiro.ini @@ -0,0 +1,3 @@ +jdbcRealm = com.baeldung.MyCustomRealm + +securityManager.realms = $jdbcRealm \ No newline at end of file From e3fed15627ee375562eec33e659d7acb83bd3305 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 21 Aug 2017 09:43:23 +0100 Subject: [PATCH 054/313] updated example code for Vavr Collections --- .../collections/CollectionAPIUnitTest.java | 167 +++++++++++------- 1 file changed, 106 insertions(+), 61 deletions(-) diff --git a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java index 4b4eb55fc5..1de428739d 100644 --- a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java +++ b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java @@ -30,16 +30,68 @@ import static org.junit.Assert.assertTrue; public class CollectionAPIUnitTest { + @Test - public void givenEmptyList_whenStacked_thenCorrect() { + public void givenParams_whenListAPI_thenCorrect() { + + List list = List.of("Java", "PHP", "Jquery", "JavaScript", "JShell", "JAVA"); + + List list1 = list.drop(2); + assertFalse(list1.contains("Java") && list1.contains("PHP")); + + List list2 = list.dropRight(2); + assertFalse(list2.contains("JAVA") && list2.contains("JShell")); + + List list3 = list.dropUntil(s -> s.contains("Shell")); + assertEquals(list3.size(), 2); + + List list4 = list.dropWhile(s -> s.length() > 0); + assertTrue(list4.isEmpty()); + + List list5 = list.take(1); + assertEquals(list5.single(), "Java"); + + List list6 = list.takeRight(1); + assertEquals(list6.single(), "JAVA"); + + List list7 = list.takeUntil(s -> s.length() > 6); + assertEquals(list7.size(), 3); + + //distinct + List list8 = list.distinctBy( (s1, s2) -> s1.startsWith(s2.charAt(0)+"") ? 0 : 1); + assertEquals(list8.size(), 2); + + //groupBY + Iterator> iterator = list.grouped(2); + assertEquals(iterator.head().size(), 2); + + Map> map = list.groupBy(e -> e.startsWith("J")); + assertEquals(map.size(), 2); + assertEquals(map.get(false).get().size(), 1); + assertEquals(map.get(true).get().size(), 5); + + //interperse + String words = List.of("Boys", "Girls") + .intersperse("and") + .reduce((s1, s2) -> s1.concat( " " + s2 )) + .trim(); + + assertEquals(words, "Boys and Girls"); + + } + + @Test + public void givenEmptyList_whenStackAPI_thenCorrect() { + List intList = List.empty(); - List anotherList = intList.push(4) - .push(0); - Iterator iterator = anotherList.iterator(); + List intList1 = intList.pushAll(List.rangeClosed(5,10)); + + assertEquals(intList1.peek(), Integer.valueOf(10)); + + List intList2 = intList1.pop(); + assertEquals(intList2.size(), (intList1.size() - 1) ); - assertEquals(new Integer(0), iterator.next()); - assertEquals(new Integer(4), iterator.next()); } @Test @@ -61,27 +113,33 @@ public class CollectionAPIUnitTest { @Test public void givenQueue_whenEnqueued_thenCorrect() { + Queue queue = Queue.of(1, 2, 3); - Queue secondQueue = queue.enqueue(4) - .enqueue(5); + Queue secondQueue = queue.enqueueAll(List.of(4,5)); assertEquals(3, queue.size()); assertEquals(5, secondQueue.size()); Tuple2> result = secondQueue.dequeue(); - Integer headValue = result.apply((head, tail) -> head); - assertEquals(new Integer(1), headValue); + assertEquals(Integer.valueOf(1), result._1); - Iterator iterator = result.apply((head, tail) -> tail.iterator()); - - assertEquals(new Integer(2), iterator.next()); - assertEquals(new Integer(3), iterator.next()); - assertEquals(new Integer(4), iterator.next()); - assertEquals(new Integer(5), iterator.next()); + Queue tailQueue = result._2; + assertFalse(tailQueue.contains(secondQueue.get(0))); } @Test public void givenStream_whenProcessed_thenCorrect() { + + Stream s1 = Stream.tabulate(5, (i)-> i + 1); + assertEquals(s1.get(2).intValue(), 3); + + Stream s = Stream.of(2,1,3,4); + + Stream> s2 = s.zip(List.of(7,8,9)); + Tuple2 t1 = s2.get(0); + assertEquals(t1._1().intValue(), 2); + assertEquals(t1._2().intValue(), 7); + Stream intStream = Stream.iterate(0, i -> i + 1) .take(10); @@ -92,7 +150,6 @@ public class CollectionAPIUnitTest { .longValue(); assertEquals(20, evenSum); - assertEquals(new Integer(5), intStream.get(5)); } @Test @@ -102,11 +159,12 @@ public class CollectionAPIUnitTest { assertEquals(3, intArray.size()); assertEquals(2, newArray.size()); + assertEquals(3, newArray.get(1).intValue()); + + Array array2 = intArray.replace(1, 5); + assertEquals(array2.get(0).intValue(), 5); + - assertEquals(new Integer(1), intArray.get(0)); - assertEquals(new Integer(2), intArray.get(1)); - assertEquals(new Integer(3), intArray.get(2)); - assertEquals(new Integer(3), newArray.get(1)); } @Test @@ -117,10 +175,8 @@ public class CollectionAPIUnitTest { assertEquals(4, intVector.size()); assertEquals(4, newVector.size()); - assertEquals(new Integer(1), intVector.get(0)); - assertEquals(new Integer(2), intVector.get(1)); - assertEquals(new Integer(3), intVector.get(2)); - assertEquals(new Integer(6), newVector.get(1)); + assertEquals(2, intVector.get(1).intValue()); + assertEquals(6, newVector.get(1).intValue()); } @Test @@ -143,57 +199,48 @@ public class CollectionAPIUnitTest { assertEquals(3, set.size()); assertEquals(4, newSet.size()); - assertFalse(set.contains("Yellow")); assertTrue(newSet.contains("Yellow")); } @Test public void givenSortedSet_whenIterated_thenCorrect() { SortedSet set = TreeSet.of("Red", "Green", "Blue"); + assertEquals("Blue", set.head()); - Iterator iterator = set.iterator(); - assertEquals("Blue", iterator.next()); - assertEquals("Green", iterator.next()); - assertEquals("Red", iterator.next()); + SortedSet intSet = TreeSet.of(1,2,3); + assertEquals(2, intSet.average().get().intValue()); + } @Test public void givenSortedSet_whenReversed_thenCorrect() { - SortedSet set = TreeSet.of(Comparator.reverseOrder(), "Green", "Red", "Blue"); + SortedSet set = TreeSet.of( "Green", "Red", "Blue"); + assertEquals("Blue", set.head()); - Iterator iterator = set.iterator(); - assertEquals("Red", iterator.next()); - assertEquals("Green", iterator.next()); - assertEquals("Blue", iterator.next()); + SortedSet reversedSet = set.toSortedSet(Comparator.reverseOrder()); + assertEquals("Red", reversedSet.head()); + + String str = set.mkString(" and "); + assertEquals("Blue and Green and Red", str); } @Test public void givenMap_whenIterated_thenCorrect() { Map> map = List.rangeClosed(0, 10) .groupBy(i -> i % 2); - + assertEquals(2, map.size()); - - Iterator>> iterator = map.iterator(); - assertEquals(6, iterator.next() - ._2() - .size()); - assertEquals(5, iterator.next() - ._2() - .size()); + assertEquals(6, map.get(0).get().size()); + assertEquals(5, map.get(1).get().size()); } @Test public void givenTreeMap_whenIterated_thenCorrect() { - SortedMap map = TreeMap.of(3, "Three", 2, "Two", 4, "Four", 1, "One"); + SortedMap map + = TreeMap.of(3, "Three", 2, "Two", 4, "Four", 1, "One"); - Iterator> iterator = map.iterator(); - assertEquals(new Integer(1), iterator.next() - ._1()); - assertEquals(new Integer(2), iterator.next() - ._1()); - assertEquals(new Integer(3), iterator.next() - ._1()); + assertEquals(1, map.keySet().toJavaArray()[0]); + assertEquals("Four", map.get(4).get()); } @Test @@ -202,14 +249,13 @@ public class CollectionAPIUnitTest { List vavrList = List.ofAll(javaList); assertEquals(4, vavrList.size()); - assertEquals(new Integer(1), vavrList.head()); + assertEquals(1, vavrList.head().intValue()); java.util.stream.Stream javaStream = javaList.stream(); Set vavrSet = HashSet.ofAll(javaStream); assertEquals(4, vavrSet.size()); - assertEquals(new Integer(2), vavrSet.tail() - .head()); + assertEquals(2, vavrSet.tail().head().intValue()); } @Test @@ -220,7 +266,7 @@ public class CollectionAPIUnitTest { .collect(List.collector()); assertEquals(4, vavrList.size()); - assertEquals(new Integer(2), vavrList.head()); + assertEquals(2, vavrList.head().intValue()); } @Test @@ -231,7 +277,7 @@ public class CollectionAPIUnitTest { java.util.Map map = List.of("1", "2", "3") .toJavaMap(i -> Tuple.of(i, Integer.valueOf(i))); - assertEquals(new Integer(2), map.get("2")); + assertEquals(2, map.get("2").intValue()); } @Test @@ -240,8 +286,7 @@ public class CollectionAPIUnitTest { .collect(Collectors.toSet()); assertEquals(3, javaSet.size()); - assertEquals(new Integer(1), javaSet.iterator() - .next()); + assertEquals(1, javaSet.toArray()[0]); } @Test @@ -250,7 +295,7 @@ public class CollectionAPIUnitTest { .asJavaMutable(); javaList.add(4); - assertEquals(new Integer(4), javaList.get(3)); + assertEquals(4, javaList.get(3).intValue()); } @Test(expected = UnsupportedOperationException.class) @@ -258,7 +303,7 @@ public class CollectionAPIUnitTest { java.util.List javaList = List.of(1, 2, 3) .asJava(); - assertEquals(new Integer(3), javaList.get(2)); + assertEquals(3, javaList.get(2).intValue()); javaList.add(4); } From 17ce271e8d6bd7c0c4c1ff22cfd85d2c2a0399e8 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 21 Aug 2017 12:11:27 +0100 Subject: [PATCH 055/313] updated Vavr's Collection example --- .../vavr/collections/CollectionAPIUnitTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java index 1de428739d..3db43148eb 100644 --- a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java +++ b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java @@ -34,7 +34,8 @@ public class CollectionAPIUnitTest { @Test public void givenParams_whenListAPI_thenCorrect() { - List list = List.of("Java", "PHP", "Jquery", "JavaScript", "JShell", "JAVA"); + List list + = List.of("Java", "PHP", "Jquery", "JavaScript", "JShell", "JAVA"); List list1 = list.drop(2); assertFalse(list1.contains("Java") && list1.contains("PHP")); @@ -58,7 +59,8 @@ public class CollectionAPIUnitTest { assertEquals(list7.size(), 3); //distinct - List list8 = list.distinctBy( (s1, s2) -> s1.startsWith(s2.charAt(0)+"") ? 0 : 1); + List list8 + = list.distinctBy( (s1, s2) -> s1.startsWith(s2.charAt(0)+"") ? 0 : 1); assertEquals(list8.size(), 2); //groupBY @@ -214,14 +216,12 @@ public class CollectionAPIUnitTest { @Test public void givenSortedSet_whenReversed_thenCorrect() { - SortedSet set = TreeSet.of( "Green", "Red", "Blue"); - assertEquals("Blue", set.head()); - - SortedSet reversedSet = set.toSortedSet(Comparator.reverseOrder()); + SortedSet reversedSet + = TreeSet.of(Comparator.reverseOrder(), "Green", "Red", "Blue"); assertEquals("Red", reversedSet.head()); - String str = set.mkString(" and "); - assertEquals("Blue and Green and Red", str); + String str = reversedSet.mkString(" and "); + assertEquals("Red and Green and Blue", str); } @Test From 31c5db1aa63d09ce771604eea707f2caf124043a Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 24 Aug 2017 16:22:38 +0100 Subject: [PATCH 056/313] updated Vavr Collection file --- .../com/baeldung/vavr/collections/CollectionAPIUnitTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java index 3db43148eb..cfc789a837 100644 --- a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java +++ b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java @@ -58,12 +58,10 @@ public class CollectionAPIUnitTest { List list7 = list.takeUntil(s -> s.length() > 6); assertEquals(list7.size(), 3); - //distinct List list8 = list.distinctBy( (s1, s2) -> s1.startsWith(s2.charAt(0)+"") ? 0 : 1); assertEquals(list8.size(), 2); - //groupBY Iterator> iterator = list.grouped(2); assertEquals(iterator.head().size(), 2); @@ -72,7 +70,6 @@ public class CollectionAPIUnitTest { assertEquals(map.get(false).get().size(), 1); assertEquals(map.get(true).get().size(), 5); - //interperse String words = List.of("Boys", "Girls") .intersperse("and") .reduce((s1, s2) -> s1.concat( " " + s2 )) From 1bb1dc081584fac798903d7c913ad38a88c47794 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Fri, 25 Aug 2017 14:11:55 +0100 Subject: [PATCH 057/313] updated example code for Apache Shiro --- apache-shiro/pom.xml | 19 +++- .../com/baeldung/ShiroSpringApplication.java | 45 ++++++++ .../controllers/ShiroSpringController.java | 105 ++++++++++++++++++ .../com/baeldung/models/UserCredentials.java | 40 +++++++ .../src/main/resources/application.properties | 11 ++ .../src/main/resources/templates/index.ftl | 10 ++ .../src/main/resources/templates/login.ftl | 27 +++++ .../src/main/resources/templates/secure.ftl | 15 +++ 8 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 apache-shiro/src/main/java/com/baeldung/ShiroSpringApplication.java create mode 100644 apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java create mode 100644 apache-shiro/src/main/java/com/baeldung/models/UserCredentials.java create mode 100644 apache-shiro/src/main/resources/application.properties create mode 100644 apache-shiro/src/main/resources/templates/index.ftl create mode 100644 apache-shiro/src/main/resources/templates/login.ftl create mode 100644 apache-shiro/src/main/resources/templates/secure.ftl diff --git a/apache-shiro/pom.xml b/apache-shiro/pom.xml index 97ed872a26..711ddb5cee 100644 --- a/apache-shiro/pom.xml +++ b/apache-shiro/pom.xml @@ -9,9 +9,9 @@ 1.0-SNAPSHOT - com.baeldung - parent-modules - 1.0.0-SNAPSHOT + org.springframework.boot + spring-boot-starter-parent + 1.5.2.RELEASE @@ -21,6 +21,19 @@ + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.apache.shiro + shiro-spring-boot-web-starter + ${apache-shiro-core-version} + org.apache.shiro shiro-core diff --git a/apache-shiro/src/main/java/com/baeldung/ShiroSpringApplication.java b/apache-shiro/src/main/java/com/baeldung/ShiroSpringApplication.java new file mode 100644 index 0000000000..e12d3ebffa --- /dev/null +++ b/apache-shiro/src/main/java/com/baeldung/ShiroSpringApplication.java @@ -0,0 +1,45 @@ +package com.baeldung; + +import org.apache.shiro.realm.Realm; +import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition; +import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +/** + * Created by smatt on 21/08/2017. + */ +@SpringBootApplication +public class ShiroSpringApplication { + + private static final transient Logger log = LoggerFactory.getLogger(ShiroSpringApplication.class); + + public static void main(String... args) { + SpringApplication.run(ShiroSpringApplication.class, args); + } + + + @Bean + public Realm realm() { + return new MyCustomRealm(); + } + + + @Bean + public ShiroFilterChainDefinition shiroFilterChainDefinition() { + DefaultShiroFilterChainDefinition filter + = new DefaultShiroFilterChainDefinition(); + + filter.addPathDefinition("/secure", "authc"); + filter.addPathDefinition("/**", "anon"); + + return filter; + } + + + + +} diff --git a/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java b/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java new file mode 100644 index 0000000000..e6e72b2579 --- /dev/null +++ b/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java @@ -0,0 +1,105 @@ +package com.baeldung.controllers; + +import com.baeldung.models.UserCredentials; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import javax.servlet.http.HttpServletRequest; + +@Controller +public class ShiroSpringController { + + + + @GetMapping("/") + public String index() { + return "index"; + } + + + @RequestMapping( value = "/login", method = {RequestMethod.GET, RequestMethod.POST}) + public String login(HttpServletRequest req, UserCredentials cred, RedirectAttributes attr) { + + if(req.getMethod().equals(RequestMethod.GET.toString())) { + return "login"; + } + else { + + Subject subject = SecurityUtils.getSubject(); + + if(!subject.isAuthenticated()) { + UsernamePasswordToken token = new UsernamePasswordToken( + cred.getUsername(), cred.getPassword(), cred.isRememberMe()); + try { + subject.login(token); + } catch (AuthenticationException ae) { + ae.printStackTrace(); + attr.addFlashAttribute("error", "Invalid Credentials"); + return "redirect:/login"; + } + } + + return "redirect:/secure"; + } + } + + + @GetMapping("/secure") + public String secure(ModelMap modelMap) { + + Subject currentUser = SecurityUtils.getSubject(); + String role = "", permission = ""; + + if(currentUser.hasRole("admin")) { + role = role + "You are an Admin"; + } + else if(currentUser.hasRole("editor")) { + role = role + "You are an Editor"; + } + else if(currentUser.hasRole("author")) { + role = role + "You are an Author"; + } + + if(currentUser.isPermitted("articles:compose")) { + permission = permission + "You can compose an article, "; + } else { + permission = permission + "You are not permitted to compose an article!, "; + } + + if(currentUser.isPermitted("articles:save")) { + permission = permission + "You can save articles, "; + } else { + permission = permission + "\nYou can not save articles, "; + } + + if(currentUser.isPermitted("articles:publish")) { + permission = permission + "\nYou can publish articles"; + } else { + permission = permission + "\nYou can not publish articles"; + } + + modelMap.addAttribute("username", currentUser.getPrincipal()); + modelMap.addAttribute("permission", permission); + modelMap.addAttribute("role", role); + + return "secure"; + } + + + @PostMapping("/logout") + public String logout() { + Subject subject = SecurityUtils.getSubject(); + subject.logout(); + return "redirect:/"; + } + +} diff --git a/apache-shiro/src/main/java/com/baeldung/models/UserCredentials.java b/apache-shiro/src/main/java/com/baeldung/models/UserCredentials.java new file mode 100644 index 0000000000..51b429046a --- /dev/null +++ b/apache-shiro/src/main/java/com/baeldung/models/UserCredentials.java @@ -0,0 +1,40 @@ +package com.baeldung.models; + +public class UserCredentials { + + private String username; + private String password; + private boolean rememberMe = false; + + public UserCredentials() {} + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isRememberMe() { + return rememberMe; + } + + public void setRememberMe(boolean rememberMe) { + this.rememberMe = rememberMe; + } + + @Override + public String toString() { + return "username = " + getUsername() + + "\nrememberMe = " + isRememberMe(); + } +} diff --git a/apache-shiro/src/main/resources/application.properties b/apache-shiro/src/main/resources/application.properties new file mode 100644 index 0000000000..5bcb6b3352 --- /dev/null +++ b/apache-shiro/src/main/resources/application.properties @@ -0,0 +1,11 @@ +server.port=9000 +server.servlet-path=/ +server.context-path=/ + +#shiro-spring-boot-config +shiro.loginUrl = /login +shiro.successUrl = /secure +shiro.unauthorizedUrl = /login + +#freemarker +spring.freemarker.suffix=.ftl diff --git a/apache-shiro/src/main/resources/templates/index.ftl b/apache-shiro/src/main/resources/templates/index.ftl new file mode 100644 index 0000000000..0210d656fc --- /dev/null +++ b/apache-shiro/src/main/resources/templates/index.ftl @@ -0,0 +1,10 @@ + + + Index + + +

Welcome Guest!

+
+ Login + + \ No newline at end of file diff --git a/apache-shiro/src/main/resources/templates/login.ftl b/apache-shiro/src/main/resources/templates/login.ftl new file mode 100644 index 0000000000..3a0552dc2e --- /dev/null +++ b/apache-shiro/src/main/resources/templates/login.ftl @@ -0,0 +1,27 @@ + + + Login + + +

Login

+
+
+ <#if (error?length > 0)??> +

${error}

+ <#else> + + + +
+ +

+ +
+ +

+ Remember Me +

+ +
+ + \ No newline at end of file diff --git a/apache-shiro/src/main/resources/templates/secure.ftl b/apache-shiro/src/main/resources/templates/secure.ftl new file mode 100644 index 0000000000..4466a0162f --- /dev/null +++ b/apache-shiro/src/main/resources/templates/secure.ftl @@ -0,0 +1,15 @@ + + + Secure + + +

Welcome ${username}!

+

Role: ${role}

+

Permissions

+

${permission}

+
+
+ +
+ + \ No newline at end of file From c578f30d7d57365aa24ce990fafe343df8400016 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 2 Sep 2017 13:51:17 +0100 Subject: [PATCH 058/313] updated Vavr Collections example --- .../collections/CollectionAPIUnitTest.java | 67 ++++++++++++++++--- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java index cfc789a837..b4e7628e84 100644 --- a/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java +++ b/vavr/src/test/java/com/baeldung/vavr/collections/CollectionAPIUnitTest.java @@ -2,8 +2,9 @@ package com.baeldung.vavr.collections; import io.vavr.Tuple; import io.vavr.Tuple2; -import io.vavr.collection.Array; -import io.vavr.collection.CharSeq; +import io.vavr.collection.*; +import io.vavr.collection.BitSet; +import io.vavr.collection.HashMap; import io.vavr.collection.HashSet; import io.vavr.collection.Iterator; import io.vavr.collection.List; @@ -12,13 +13,12 @@ import io.vavr.collection.Queue; import io.vavr.collection.Set; import io.vavr.collection.SortedMap; import io.vavr.collection.SortedSet; -import io.vavr.collection.Stream; import io.vavr.collection.TreeMap; import io.vavr.collection.TreeSet; import io.vavr.collection.Vector; import org.junit.Test; -import java.util.Comparator; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -124,6 +124,9 @@ public class CollectionAPIUnitTest { Queue tailQueue = result._2; assertFalse(tailQueue.contains(secondQueue.get(0))); + + Queue> queue1 = queue.combinations(2); + assertEquals(queue1.get(2).toCharSeq(), CharSeq.of("23")); } @Test @@ -153,17 +156,23 @@ public class CollectionAPIUnitTest { @Test public void givenArray_whenQueried_thenCorrect() { + + Array rArray = Array.range(1, 5); + assertFalse(rArray.contains(5)); + + Array rArray2 = Array.rangeClosed(1, 5); + assertTrue(rArray2.contains(5)); + + Array rArray3 = Array.rangeClosedBy(1,6,2); + assertEquals(rArray3.size(), 3); + Array intArray = Array.of(1, 2, 3); Array newArray = intArray.removeAt(1); - - assertEquals(3, intArray.size()); assertEquals(2, newArray.size()); assertEquals(3, newArray.get(1).intValue()); Array array2 = intArray.replace(1, 5); assertEquals(array2.get(0).intValue(), 5); - - } @Test @@ -199,6 +208,15 @@ public class CollectionAPIUnitTest { assertEquals(3, set.size()); assertEquals(4, newSet.size()); assertTrue(newSet.contains("Yellow")); + + HashSet set0 = HashSet.rangeClosed(1,5); + HashSet set1 = HashSet.rangeClosed(3, 6); + + assertEquals(set0.union(set1), HashSet.rangeClosed(1,6)); + assertEquals(set0.diff(set1), HashSet.rangeClosed(1,2)); + assertEquals(set0.intersect(set1), HashSet.rangeClosed(3,5)); + + } @Test @@ -222,13 +240,39 @@ public class CollectionAPIUnitTest { } @Test - public void givenMap_whenIterated_thenCorrect() { + public void giveBitSet_whenApiMethods_thenCorrect() { + + BitSet bitSet = BitSet.of(1,2,3,4,5,6,7,8); + + BitSet bitSet1 = bitSet.takeUntil(i -> i > 4); + assertEquals(bitSet1.size(), 4); + + } + + @Test + public void givenMap_whenMapApi_thenCorrect() { Map> map = List.rangeClosed(0, 10) .groupBy(i -> i % 2); assertEquals(2, map.size()); assertEquals(6, map.get(0).get().size()); assertEquals(5, map.get(1).get().size()); + + Map map1 + = HashMap.of("key1", "val1", "key2", "val2", "key3", "val3"); + + Map fMap + = map1.filterKeys(k -> k.contains("1") || k.contains("2")); + assertFalse(fMap.containsKey("key3")); + + Map fMap2 + = map1.filterValues(v -> v.contains("3")); + assertEquals(fMap2.size(), 1); + assertTrue(fMap2.containsValue("val3")); + + Map map2 = map1.map( + (k, v) -> Tuple.of(k, Integer.valueOf(v.charAt(v.length() - 1) + "") )); + assertEquals(map2.get("key1").get().intValue(), 1); } @Test @@ -238,6 +282,11 @@ public class CollectionAPIUnitTest { assertEquals(1, map.keySet().toJavaArray()[0]); assertEquals("Four", map.get(4).get()); + + TreeMap treeMap2 = + TreeMap.of(Comparator.reverseOrder(), 3,"three", 6, "six", 1, "one"); + assertEquals(treeMap2.keySet().mkString(), "631"); + } @Test From 6c4397787690ae61e6121f8506c4b78380f3f43e Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 4 Sep 2017 21:09:29 +0100 Subject: [PATCH 059/313] BAEL-1065 Added JMH benchmarks --- core-java/pom.xml | 784 +++++++++--------- .../string/StringBufferStringBuilder.java | 57 +- 2 files changed, 449 insertions(+), 392 deletions(-) diff --git a/core-java/pom.xml b/core-java/pom.xml index 84a56c8bc7..295eabc265 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,420 +1,456 @@ - 4.0.0 - com.baeldung - core-java - 0.1.0-SNAPSHOT - jar + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + core-java + 0.1.0-SNAPSHOT + jar - core-java + core-java - + - - - net.sourceforge.collections - collections-generic - ${collections-generic.version} - - - com.google.guava - guava - ${guava.version} - + + org.openjdk.jmh + jmh-core + 1.19 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.19 + - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - + + + net.sourceforge.collections + collections-generic + ${collections-generic.version} + + + com.google.guava + guava + ${guava.version} + - - commons-io - commons-io - ${commons-io.version} - + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + commons-io + commons-io + ${commons-io.version} + - - org.apache.commons - commons-math3 - ${commons-math3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.decimal4j - decimal4j - ${decimal4j.version} - + + org.apache.commons + commons-math3 + ${commons-math3.version} + - - org.bouncycastle - bcprov-jdk15on - ${bouncycastle.version} - + + org.decimal4j + decimal4j + ${decimal4j.version} + - - org.unix4j - unix4j-command - ${unix4j.version} - + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + - - com.googlecode.grep4j - grep4j - ${grep4j.version} - - + + org.unix4j + unix4j-command + ${unix4j.version} + - + + com.googlecode.grep4j + grep4j + ${grep4j.version} + + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - org.projectlombok - lombok - ${lombok.version} - provided - + - + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + - - org.hamcrest - hamcrest-all - 1.3 - test - + - - junit - junit - ${junit.version} - test - + + org.hamcrest + hamcrest-all + 1.3 + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + junit + junit + ${junit.version} + test + - - org.assertj - assertj-core - ${assertj.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - - - com.jayway.awaitility - awaitility - ${avaitility.version} - test - + + org.assertj + assertj-core + ${assertj.version} + test + - - commons-codec - commons-codec - ${commons-codec.version} - + + org.mockito + mockito-core + ${mockito.version} + test + + + com.jayway.awaitility + awaitility + ${avaitility.version} + test + - - org.javamoney - moneta - 1.1 - + + commons-codec + commons-codec + ${commons-codec.version} + - - org.owasp.esapi - esapi - 2.1.0.1 - + + org.javamoney + moneta + 1.1 + - - com.sun.messaging.mq - fscontext - ${fscontext.version} - - + + org.owasp.esapi + esapi + 2.1.0.1 + - - core-java - - - src/main/resources - true - - + + com.sun.messaging.mq + fscontext + ${fscontext.version} + + - + + core-java + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*IntegrationTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - - true - - + + org.codehaus.mojo + exec-maven-plugin - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-dependencies - prepare-package - - copy-dependencies - - - ${project.build.directory}/libs - - - - + + + run-benchmarks + integration-test + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + - - org.apache.maven.plugins - maven-jar-plugin - - - - true - libs/ - org.baeldung.executable.ExecutableMavenJar - - - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-assembly-plugin - - - package - - single - - - ${project.basedir} - - - org.baeldung.executable.ExecutableMavenJar - - - - jar-with-dependencies - - - - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + + true + + - - org.apache.maven.plugins - maven-shade-plugin - - - - shade - - - true - - - org.baeldung.executable.ExecutableMavenJar - - - - - - + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/libs + + + + - - com.jolira - onejar-maven-plugin - - - - org.baeldung.executable.ExecutableMavenJar - true - ${project.build.finalName}-onejar.${project.packaging} - - - one-jar - - - - + + org.apache.maven.plugins + maven-jar-plugin + + + + true + libs/ + org.baeldung.executable.ExecutableMavenJar + + + + - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - spring-boot - org.baeldung.executable.ExecutableMavenJar - - - - + + org.apache.maven.plugins + maven-assembly-plugin + + + package + + single + + + ${project.basedir} + + + org.baeldung.executable.ExecutableMavenJar + + + + jar-with-dependencies + + + + + - - org.codehaus.mojo - exec-maven-plugin - 1.6.0 - - java - com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed - - -Xmx300m - -XX:+UseParallelGC - -classpath - - com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed - - - - + + org.apache.maven.plugins + maven-shade-plugin + + + + shade + + + true + + + org.baeldung.executable.ExecutableMavenJar + + + + + + - + + com.jolira + onejar-maven-plugin + + + + org.baeldung.executable.ExecutableMavenJar + true + ${project.build.finalName}-onejar.${project.packaging} + + + one-jar + + + + - - - integration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*ManualTest.java - - - **/*IntegrationTest.java - - - - - - - json - - - - - - - + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + spring-boot + org.baeldung.executable.ExecutableMavenJar + + + + - - - 2.8.5 + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + -Xmx300m + -XX:+UseParallelGC + -classpath + + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + + + - - 1.7.21 - 1.1.7 + - - 21.0 - 3.5 - 1.55 - 1.10 - 3.6.1 - 1.0.3 - 2.5 - 4.1 - 4.01 - 0.4 - 1.8.7 - 1.16.12 - 4.6-b01 + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*ManualTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + - - 1.3 - 4.12 - 1.10.19 - 3.6.1 - 1.7.0 + + + 2.8.5 - - 3.6.0 - 2.19.1 + + 1.7.21 + 1.1.7 - + + 21.0 + 3.5 + 1.55 + 1.10 + 3.6.1 + 1.0.3 + 2.5 + 4.1 + 4.01 + 0.4 + 1.8.7 + 1.16.12 + 4.6-b01 + + + 1.3 + 4.12 + 1.10.19 + 3.6.1 + 1.7.0 + + + 3.6.0 + 2.19.1 + + \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java b/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java index 4623b83de0..74f489d57f 100644 --- a/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java +++ b/core-java/src/main/java/com/baeldung/string/StringBufferStringBuilder.java @@ -1,25 +1,46 @@ package com.baeldung.string; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + public class StringBufferStringBuilder { - public static void main(String[] args) { + public static void main(String[] args) throws RunnerException { - int iterations = 10000000; + Options opt = new OptionsBuilder() + .include(StringBufferStringBuilder.class.getSimpleName()) + .build(); - System.gc(); - long startTime = System.currentTimeMillis(); - StringBuffer stringBuffer = new StringBuffer("abc"); - for (int i = 0; i < iterations; i++) { - stringBuffer.append("def"); - } - System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms"); // Time taken by StringBuffer: 394ms - - System.gc(); - startTime = System.currentTimeMillis(); - StringBuilder stringBuilder = new StringBuilder("abc"); - for (int i = 0; i < iterations; i++) { - stringBuilder.append("def"); - } - System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms"); // Time taken by StringBuilder: 129ms + new Runner(opt).run(); } -} + + @State(Scope.Benchmark) + public static class MyState { + int iterations = 1000; + String initial = "abc"; + String suffix = "def"; + } + + @Benchmark + public StringBuffer benchmarkStringBuffer(MyState state) { + StringBuffer stringBuffer = new StringBuffer(state.initial); + for (int i = 0; i < state.iterations; i++) { + stringBuffer.append(state.suffix); + } + return stringBuffer; + } + + @Benchmark + public StringBuilder benchmarkStringBuilder(MyState state) { + StringBuilder stringBuilder = new StringBuilder(state.initial); + for (int i = 0; i < state.iterations; i++) { + stringBuilder.append(state.suffix); + } + return stringBuilder; + } +} \ No newline at end of file From 3f5bef6427dcf197d2b740c473200d0ffb023292 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 16 Sep 2017 09:53:52 +0100 Subject: [PATCH 060/313] added example code for N1QL --- couchbase-sdk/.gitignore | 6 + couchbase-sdk/pom.xml | 16 +- .../baeldung/couchbase/n1ql/CodeSnippets.java | 235 ++++++++++++++++++ 3 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 couchbase-sdk/.gitignore create mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java diff --git a/couchbase-sdk/.gitignore b/couchbase-sdk/.gitignore new file mode 100644 index 0000000000..f6867e01bd --- /dev/null +++ b/couchbase-sdk/.gitignore @@ -0,0 +1,6 @@ +# Created by .ignore support plugin (hsz.mobi) + +# IntelliJ project files +.idea +*.iml +/target/ diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml index fd9e1b08f6..a864b611dc 100644 --- a/couchbase-sdk/pom.xml +++ b/couchbase-sdk/pom.xml @@ -23,6 +23,18 @@ ${couchbase.client.version}
+ + com.fasterxml.jackson.core + jackson-databind + ${jackson-version} + + + io.vavr + vavr + ${vavr-version} + + + org.springframework @@ -67,9 +79,11 @@ 1.8 UTF-8 - 2.4.0 + 2.4.7 4.3.5.RELEASE 3.5 + 0.9.0 + 2.9.1 diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java new file mode 100644 index 0000000000..e297c34d7a --- /dev/null +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -0,0 +1,235 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonArray; +import com.couchbase.client.java.document.json.JsonObject; +import com.couchbase.client.java.query.N1qlQuery; +import com.couchbase.client.java.query.N1qlQueryResult; +import com.couchbase.client.java.query.N1qlQueryRow; +import com.couchbase.client.java.query.Statement; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.vavr.control.Try; +import rx.Observable; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import static com.couchbase.client.java.query.Select.select; +import static com.couchbase.client.java.query.dsl.Expression.i; +import static com.couchbase.client.java.query.dsl.Expression.s; +import static com.couchbase.client.java.query.dsl.Expression.x; + +public class CodeSnippets { + + public static void main(String[] args) { + + Cluster cluster = CouchbaseCluster.create("127.0.0.1"); + Bucket bucket = cluster.openBucket("test", 1, TimeUnit.MINUTES); + Bucket bucket1 = cluster.openBucket("travel-sample", 2, TimeUnit.MINUTES); + + bucket.bucketManager().createN1qlPrimaryIndex(true, false); + bucket1.bucketManager().createN1qlPrimaryIndex(true, false); + + insertDocument(bucket1); + basicSelect(bucket1); + selectStatement1(bucket1); + selectStatement2(bucket1); + selectStatement3DSL(bucket1); + selectStatement4(bucket1); + selectStatement4DSL(bucket1); + insertStatement1(bucket1); + insertStatement2(bucket1); + insertStatement3Bulk(bucket1); + updateStatement1(bucket1); + updateStatement2Upsert(bucket1); + updateStatement3(bucket1); + deleteStatement1(bucket1); + deleteStatement2(bucket1); + + bucket.close(); + bucket1.close(); + cluster.disconnect(); + System.exit(0); + + } + + private static void insertDocument(Bucket bucket) { + + JsonObject personObj = JsonObject.create() + .put("name", "John") + .put("email", "john@doe.com") + .put("interests", JsonArray.from("Java", "Nigerian Jollof")); + + String id = UUID.randomUUID().toString(); + JsonDocument doc = JsonDocument.create(id, personObj); + bucket.insert(doc); + + System.out.println(bucket.get(id)); + } + + private static void basicSelect(Bucket bucket) { + + N1qlQueryResult result + = bucket.query(N1qlQuery.simple("SELECT * FROM test")); + + result.forEach(System.out::println); + + System.out.println("result count: " + result.info().resultCount()); + System.out.println("error count: " + result.info().errorCount()); + } + + private static void selectStatement1(Bucket bucket) { + + N1qlQueryResult result1 = bucket.query( + N1qlQuery.simple("SELECT name FROM `travel-sample` WHERE type = 'airport' LIMIT 100")); + + System.out.println("Result Count " + result1.info().resultCount()); + + N1qlQueryRow row = result1.allRows().get(0); + JsonObject rowJson = row.value(); + System.out.println("Name in First Row " + rowJson.get("name")); + + } + + private static void selectStatement2(Bucket bucket) { + + JsonObject pVal = JsonObject.create().put("type", "airport"); + String query = "SELECT * FROM `travel-sample` WHERE type = $type LIMIT 100"; + N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); + + System.out.println(r2.allRows()); + + List list = extractJsonResult(r2); + System.out.println(list.get(0).get("travel-sample").get("airportname").asText()); + } + + private static void selectStatement3DSL(Bucket bucket) { + + Statement statement + = select("*").from(i("travel-sample")).where(x("type").eq(s("airport"))).limit(100); + N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); + + List list2 = extractJsonResult(r3); + System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); + } + + private static void selectStatement4(Bucket bucket) { + + String query2 = "SELECT t.city, " + + "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " + + "FROM `travel-sample` t " + + "WHERE t.type=\"airport\"" + + "AND t.country LIKE '%States'" + + "AND t.geo.lat >= 70 " + + "LIMIT 2"; + N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2)); + List list3 = extractJsonResult(r4); + System.out.println("First Doc : " + list3.get(0)); + } + + private static void selectStatement4DSL(Bucket bucket) { + + Statement st2 = select( + x("t.city, t.airportname") + .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa")) + .from(i("travel-sample").as("t")) + .where( x("t.type").eq(s("airport")) + .and(x("t.country").like(s("%States"))) + .and(x("t.geo.lat").gte(70))) + .limit(2); + N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2)); + List list5 = extractJsonResult(r5); + System.out.println("First Doc : " + list5.get(0)); + System.out.println("Query from Statement2: " + st2.toString()); + + } + + private static void insertStatement1(Bucket bucket) { + + String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + + " VALUES(\"cust1293\", {\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + + " RETURNING META().id as docid, *"; + N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); + r1.forEach(System.out::println); + } + + private static void insertStatement2(Bucket bucket) { + + JsonObject ob = JsonObject.create() + .put("id", "1293") + .put("name", "Sample Airline") + .put("type", "airline"); + bucket.insert(JsonDocument.create("cust1295", ob)); + } + + private static void insertStatement3Bulk(Bucket bucket) { + + int docsToCreate = 10; + List documents = new ArrayList<>(); + for (int i = 5; i < docsToCreate; i++) { + JsonObject content = JsonObject.create() + .put("id", i) + .put("type", "airline") + .put("name", "Sample Airline " + i); + documents.add(JsonDocument.create("cust_" + i, content)); + } + + List r5 = Observable + .from(documents) + .flatMap(doc -> bucket.async().insert(doc)) + .toList() + .last() + .toBlocking() + .single(); + + r5.forEach(System.out::println); + } + + private static void updateStatement1(Bucket bucket) { + + String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " + + "SET name=\"Sample Airline Updated\" RETURNING name"; + N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2)); + result.forEach(System.out::println); + } + + private static void updateStatement2Upsert(Bucket bucket) { + + JsonObject o2 = JsonObject.create() + .put("name", "Sample Airline Updated"); + bucket.upsert(JsonDocument.create("cust_1", o2)); + } + + private static void updateStatement3(Bucket bucket) { + + String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " + + "UNSET name RETURNING *"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3)); + result1.forEach(System.out::println); + } + + private static void deleteStatement1(Bucket bucket) { + String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\""; + N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4)); + } + + private static void deleteStatement2(Bucket bucket) { + String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *"; + N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5)); + } + + private static List extractJsonResult(N1qlQueryResult result) { + ObjectMapper objectMapper = new ObjectMapper(); + return result.allRows().stream() + .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())).getOrNull()) + .collect(Collectors.toList()); + } + +} From c6cf9546f658001482735e3fdf35a410e709e38b Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 16 Sep 2017 10:20:58 +0100 Subject: [PATCH 061/313] update example code for N1QL --- .../baeldung/couchbase/n1ql/CodeSnippets.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java index e297c34d7a..19342e16ed 100644 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -87,8 +87,9 @@ public class CodeSnippets { private static void selectStatement1(Bucket bucket) { - N1qlQueryResult result1 = bucket.query( - N1qlQuery.simple("SELECT name FROM `travel-sample` WHERE type = 'airport' LIMIT 100")); + String query = "SELECT name FROM `travel-sample` " + + "WHERE type = 'airport' LIMIT 100"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query)); System.out.println("Result Count " + result1.info().resultCount()); @@ -101,23 +102,28 @@ public class CodeSnippets { private static void selectStatement2(Bucket bucket) { JsonObject pVal = JsonObject.create().put("type", "airport"); - String query = "SELECT * FROM `travel-sample` WHERE type = $type LIMIT 100"; + String query = "SELECT * FROM `travel-sample` " + + "WHERE type = $type LIMIT 100"; N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); System.out.println(r2.allRows()); List list = extractJsonResult(r2); - System.out.println(list.get(0).get("travel-sample").get("airportname").asText()); + System.out.println( + list.get(0).get("travel-sample").get("airportname").asText()); } private static void selectStatement3DSL(Bucket bucket) { - Statement statement - = select("*").from(i("travel-sample")).where(x("type").eq(s("airport"))).limit(100); + Statement statement = select("*") + .from(i("travel-sample")) + .where(x("type").eq(s("airport"))) + .limit(100); N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); List list2 = extractJsonResult(r3); System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); + } private static void selectStatement4(Bucket bucket) { @@ -154,7 +160,9 @@ public class CodeSnippets { private static void insertStatement1(Bucket bucket) { String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + - " VALUES(\"cust1293\", {\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + + " VALUES(" + + "\"cust1293\", " + + "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + " RETURNING META().id as docid, *"; N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); r1.forEach(System.out::println); @@ -226,10 +234,11 @@ public class CodeSnippets { } private static List extractJsonResult(N1qlQueryResult result) { - ObjectMapper objectMapper = new ObjectMapper(); - return result.allRows().stream() - .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())).getOrNull()) - .collect(Collectors.toList()); + ObjectMapper objectMapper = new ObjectMapper(); + return result.allRows().stream() + .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())) + .getOrNull()) + .collect(Collectors.toList()); } } From 4fd110f9d6b2b55124008389e2338d20a9d10dd6 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 16 Sep 2017 23:56:04 +0100 Subject: [PATCH 062/313] added integration test for N1QL --- couchbase-sdk/pom.xml | 8 +- .../couchbase/n1ql/BucketFactory.java | 26 ++ .../baeldung/couchbase/n1ql/CodeSnippets.java | 225 +--------------- .../couchbase/n1ql/IntegrationTestConfig.java | 26 ++ .../couchbase/n1ql/N1QLIntegrationTest.java | 255 ++++++++++++++++++ 5 files changed, 312 insertions(+), 228 deletions(-) create mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java create mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java create mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml index a864b611dc..d78ceb8933 100644 --- a/couchbase-sdk/pom.xml +++ b/couchbase-sdk/pom.xml @@ -24,9 +24,9 @@ - com.fasterxml.jackson.core - jackson-databind - ${jackson-version} + com.fasterxml.jackson.core + jackson-databind + ${jackson-version} io.vavr @@ -79,7 +79,7 @@ 1.8 UTF-8 - 2.4.7 + 2.5.0 4.3.5.RELEASE 3.5 0.9.0 diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java new file mode 100644 index 0000000000..98fbe17e60 --- /dev/null +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java @@ -0,0 +1,26 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BucketFactory { + + @Autowired + private Cluster cluster; + + private Bucket travelSampleBucket; + private Bucket testBucket; + + public Bucket getTravelSampleBucket() { + return (travelSampleBucket != null) ? + travelSampleBucket : cluster.openBucket("travel-sample"); + } + + public Bucket getTestBucket() { + return (testBucket != null) ? + testBucket : cluster.openBucket("test"); + } +} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java index 19342e16ed..999dcd897f 100644 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -1,239 +1,16 @@ package com.baeldung.couchbase.n1ql; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonArray; -import com.couchbase.client.java.document.json.JsonObject; -import com.couchbase.client.java.query.N1qlQuery; import com.couchbase.client.java.query.N1qlQueryResult; -import com.couchbase.client.java.query.N1qlQueryRow; -import com.couchbase.client.java.query.Statement; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.vavr.control.Try; -import rx.Observable; -import java.util.ArrayList; import java.util.List; -import java.util.UUID; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static com.couchbase.client.java.query.Select.select; -import static com.couchbase.client.java.query.dsl.Expression.i; -import static com.couchbase.client.java.query.dsl.Expression.s; -import static com.couchbase.client.java.query.dsl.Expression.x; - public class CodeSnippets { - public static void main(String[] args) { - - Cluster cluster = CouchbaseCluster.create("127.0.0.1"); - Bucket bucket = cluster.openBucket("test", 1, TimeUnit.MINUTES); - Bucket bucket1 = cluster.openBucket("travel-sample", 2, TimeUnit.MINUTES); - - bucket.bucketManager().createN1qlPrimaryIndex(true, false); - bucket1.bucketManager().createN1qlPrimaryIndex(true, false); - - insertDocument(bucket1); - basicSelect(bucket1); - selectStatement1(bucket1); - selectStatement2(bucket1); - selectStatement3DSL(bucket1); - selectStatement4(bucket1); - selectStatement4DSL(bucket1); - insertStatement1(bucket1); - insertStatement2(bucket1); - insertStatement3Bulk(bucket1); - updateStatement1(bucket1); - updateStatement2Upsert(bucket1); - updateStatement3(bucket1); - deleteStatement1(bucket1); - deleteStatement2(bucket1); - - bucket.close(); - bucket1.close(); - cluster.disconnect(); - System.exit(0); - - } - - private static void insertDocument(Bucket bucket) { - - JsonObject personObj = JsonObject.create() - .put("name", "John") - .put("email", "john@doe.com") - .put("interests", JsonArray.from("Java", "Nigerian Jollof")); - - String id = UUID.randomUUID().toString(); - JsonDocument doc = JsonDocument.create(id, personObj); - bucket.insert(doc); - - System.out.println(bucket.get(id)); - } - - private static void basicSelect(Bucket bucket) { - - N1qlQueryResult result - = bucket.query(N1qlQuery.simple("SELECT * FROM test")); - - result.forEach(System.out::println); - - System.out.println("result count: " + result.info().resultCount()); - System.out.println("error count: " + result.info().errorCount()); - } - - private static void selectStatement1(Bucket bucket) { - - String query = "SELECT name FROM `travel-sample` " + - "WHERE type = 'airport' LIMIT 100"; - N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query)); - - System.out.println("Result Count " + result1.info().resultCount()); - - N1qlQueryRow row = result1.allRows().get(0); - JsonObject rowJson = row.value(); - System.out.println("Name in First Row " + rowJson.get("name")); - - } - - private static void selectStatement2(Bucket bucket) { - - JsonObject pVal = JsonObject.create().put("type", "airport"); - String query = "SELECT * FROM `travel-sample` " + - "WHERE type = $type LIMIT 100"; - N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); - - System.out.println(r2.allRows()); - - List list = extractJsonResult(r2); - System.out.println( - list.get(0).get("travel-sample").get("airportname").asText()); - } - - private static void selectStatement3DSL(Bucket bucket) { - - Statement statement = select("*") - .from(i("travel-sample")) - .where(x("type").eq(s("airport"))) - .limit(100); - N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); - - List list2 = extractJsonResult(r3); - System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); - - } - - private static void selectStatement4(Bucket bucket) { - - String query2 = "SELECT t.city, " + - "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " + - "FROM `travel-sample` t " + - "WHERE t.type=\"airport\"" + - "AND t.country LIKE '%States'" + - "AND t.geo.lat >= 70 " + - "LIMIT 2"; - N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2)); - List list3 = extractJsonResult(r4); - System.out.println("First Doc : " + list3.get(0)); - } - - private static void selectStatement4DSL(Bucket bucket) { - - Statement st2 = select( - x("t.city, t.airportname") - .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa")) - .from(i("travel-sample").as("t")) - .where( x("t.type").eq(s("airport")) - .and(x("t.country").like(s("%States"))) - .and(x("t.geo.lat").gte(70))) - .limit(2); - N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2)); - List list5 = extractJsonResult(r5); - System.out.println("First Doc : " + list5.get(0)); - System.out.println("Query from Statement2: " + st2.toString()); - - } - - private static void insertStatement1(Bucket bucket) { - - String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + - " VALUES(" + - "\"cust1293\", " + - "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + - " RETURNING META().id as docid, *"; - N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); - r1.forEach(System.out::println); - } - - private static void insertStatement2(Bucket bucket) { - - JsonObject ob = JsonObject.create() - .put("id", "1293") - .put("name", "Sample Airline") - .put("type", "airline"); - bucket.insert(JsonDocument.create("cust1295", ob)); - } - - private static void insertStatement3Bulk(Bucket bucket) { - - int docsToCreate = 10; - List documents = new ArrayList<>(); - for (int i = 5; i < docsToCreate; i++) { - JsonObject content = JsonObject.create() - .put("id", i) - .put("type", "airline") - .put("name", "Sample Airline " + i); - documents.add(JsonDocument.create("cust_" + i, content)); - } - - List r5 = Observable - .from(documents) - .flatMap(doc -> bucket.async().insert(doc)) - .toList() - .last() - .toBlocking() - .single(); - - r5.forEach(System.out::println); - } - - private static void updateStatement1(Bucket bucket) { - - String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " + - "SET name=\"Sample Airline Updated\" RETURNING name"; - N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2)); - result.forEach(System.out::println); - } - - private static void updateStatement2Upsert(Bucket bucket) { - - JsonObject o2 = JsonObject.create() - .put("name", "Sample Airline Updated"); - bucket.upsert(JsonDocument.create("cust_1", o2)); - } - - private static void updateStatement3(Bucket bucket) { - - String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " + - "UNSET name RETURNING *"; - N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3)); - result1.forEach(System.out::println); - } - - private static void deleteStatement1(Bucket bucket) { - String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\""; - N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4)); - } - - private static void deleteStatement2(Bucket bucket) { - String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *"; - N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5)); - } - - private static List extractJsonResult(N1qlQueryResult result) { + public static List extractJsonResult(N1qlQueryResult result) { ObjectMapper objectMapper = new ObjectMapper(); return result.allRows().stream() .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())) diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java new file mode 100644 index 0000000000..ef7e31b224 --- /dev/null +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java @@ -0,0 +1,26 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.couchbase.n1ql" }) +public class IntegrationTestConfig { + + @Bean + public Cluster cluster() { + CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder() + .connectTimeout(60000) + .build(); + return CouchbaseCluster.create(env, "127.0.0.1"); + } + + +} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java new file mode 100644 index 0000000000..d05b107098 --- /dev/null +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java @@ -0,0 +1,255 @@ +package com.baeldung.couchbase.n1ql; + +import com.baeldung.couchbase.n1ql.IntegrationTestConfig; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonArray; +import com.couchbase.client.java.document.json.JsonObject; +import com.couchbase.client.java.query.N1qlQuery; +import com.couchbase.client.java.query.N1qlQueryResult; +import com.couchbase.client.java.query.N1qlQueryRow; +import com.couchbase.client.java.query.Statement; +import com.fasterxml.jackson.databind.JsonNode; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; +import rx.Observable; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static com.baeldung.couchbase.n1ql.CodeSnippets.extractJsonResult; +import static com.couchbase.client.java.query.Select.select; +import static com.couchbase.client.java.query.dsl.Expression.i; +import static com.couchbase.client.java.query.dsl.Expression.s; +import static com.couchbase.client.java.query.dsl.Expression.x; +import static org.junit.Assert.*; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { IntegrationTestConfig.class }) +public class N1QLIntegrationTest { + + + @Autowired + private Cluster cluster; + + @Autowired + private BucketFactory bucketFactory; + + @Test + public void givenAutowiredCluster_whenNotNull_thenNotNull() { + assertNotNull(cluster); + } + + @Test + public void givenBucketFactory_whenGetTestBucket_thenNotNull() { + assertNotNull(bucketFactory.getTestBucket()); + } + + @Test + public void givenBucketFactory_whenGetTravelSampleBucket_thenNotNull() { + assertNotNull(bucketFactory.getTravelSampleBucket()); + } + + @Test + public void givenDocument_whenInsert_thenResult() { + Bucket bucket = bucketFactory.getTestBucket(); + JsonObject personObj = JsonObject.create() + .put("name", "John") + .put("email", "john@doe.com") + .put("interests", JsonArray.from("Java", "Nigerian Jollof")); + + String id = UUID.randomUUID().toString(); + JsonDocument doc = JsonDocument.create(id, personObj); + bucket.insert(doc); + assertNotNull(bucket.get(id)); + } + + @Test + public void whenBasicSelectQuery_thenGetQueryResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + N1qlQueryResult result + = bucket.query(N1qlQuery.simple("SELECT * FROM test")); + + result.forEach(System.out::println); + + System.out.println("result count: " + result.info().resultCount()); + System.out.println("error count: " + result.info().errorCount()); + } + + @Test + public void givenSelectStatement_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query = "SELECT name FROM `travel-sample` " + + "WHERE type = 'airport' LIMIT 100"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query)); + + System.out.println("Result Count " + result1.info().resultCount()); + + N1qlQueryRow row = result1.allRows().get(0); + JsonObject rowJson = row.value(); + System.out.println("Name in First Row " + rowJson.get("name")); + + } + + @Test + public void givenSelectStatement2_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject pVal = JsonObject.create().put("type", "airport"); + String query = "SELECT * FROM `travel-sample` " + + "WHERE type = $type LIMIT 100"; + N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); + + System.out.println(r2.allRows()); + + List list = extractJsonResult(r2); + System.out.println( + list.get(0).get("travel-sample").get("airportname").asText()); + } + + @Test + public void givenSelectDSL_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + Statement statement = select("*") + .from(i("travel-sample")) + .where(x("type").eq(s("airport"))) + .limit(100); + N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); + + List list2 = extractJsonResult(r3); + System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); + + } + + @Test + public void givenSelectStatementWithOperators_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query2 = "SELECT t.city, " + + "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " + + "FROM `travel-sample` t " + + "WHERE t.type=\"airport\"" + + "AND t.country LIKE '%States'" + + "AND t.geo.lat >= 70 " + + "LIMIT 2"; + N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2)); + List list3 = extractJsonResult(r4); + System.out.println("First Doc : " + list3.get(0)); + } + + @Test + public void givenSelectStatementWithDSL2_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + Statement st2 = select( + x("t.city, t.airportname") + .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa")) + .from(i("travel-sample").as("t")) + .where( x("t.type").eq(s("airport")) + .and(x("t.country").like(s("%States"))) + .and(x("t.geo.lat").gte(70))) + .limit(2); + N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2)); + List list5 = extractJsonResult(r5); + System.out.println("First Doc : " + list5.get(0)); + System.out.println("Query from Statement2: " + st2.toString()); + } + + @Test + public void givenInsertStatement_whenQuery_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + + " VALUES(" + + "\"cust1293\", " + + "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + + " RETURNING META().id as docid, *"; + N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); + r1.forEach(System.out::println); + } + + @Test + public void givenDocument_whenInsert_thenResults() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject ob = JsonObject.create() + .put("id", "1293") + .put("name", "Sample Airline") + .put("type", "airline"); + bucket.insert(JsonDocument.create("cust1295", ob)); + } + + @Test + public void givenDocuments_whenBatchInsert_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + int docsToCreate = 10; + List documents = new ArrayList<>(); + for (int i = 5; i < docsToCreate; i++) { + JsonObject content = JsonObject.create() + .put("id", i) + .put("type", "airline") + .put("name", "Sample Airline " + i); + documents.add(JsonDocument.create("cust_" + i, content)); + } + + List r5 = Observable + .from(documents) + .flatMap(doc -> bucket.async().insert(doc)) + .toList() + .last() + .toBlocking() + .single(); + + r5.forEach(System.out::println); + } + + @Test + public void givenUpdateStatement_whenQuery_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " + + "SET name=\"Sample Airline Updated\" RETURNING name"; + N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2)); + result.forEach(System.out::println); + } + + @Test + public void givenDocument_whenUpsert_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject o2 = JsonObject.create() + .put("name", "Sample Airline Updated"); + bucket.upsert(JsonDocument.create("cust_1", o2)); + } + + @Test + public void givenUnestUpdateStatement_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " + + "UNSET name RETURNING *"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3)); + result1.forEach(System.out::println); + } + + @Test + public void givenDeleteStatement_whenQuery_thenDelete() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\""; + N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4)); + } + + @Test + public void givenDeleteStatement2_whenQuery_thenDelete() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *"; + N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5)); + } + + +} From c70752ee448acfff5937f109850a33e60eb80de6 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sun, 17 Sep 2017 15:30:10 +0100 Subject: [PATCH 063/313] update N1QL Example code --- couchbase-sdk/pom.xml | 6 ++-- .../baeldung/couchbase/n1ql/CodeSnippets.java | 16 ++++++++-- .../couchbase/n1ql/N1QLIntegrationTest.java | 31 ++++++++++--------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml index d78ceb8933..f361b333b4 100644 --- a/couchbase-sdk/pom.xml +++ b/couchbase-sdk/pom.xml @@ -29,9 +29,9 @@ ${jackson-version} - io.vavr - vavr - ${vavr-version} + io.vavr + vavr + ${vavr-version} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java index 999dcd897f..72d48e78c3 100644 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -5,16 +5,26 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.vavr.control.Try; +import java.io.IOException; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; public class CodeSnippets { + private static ObjectMapper objectMapper = new ObjectMapper(); + public static List extractJsonResult(N1qlQueryResult result) { - ObjectMapper objectMapper = new ObjectMapper(); return result.allRows().stream() - .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())) - .getOrNull()) + .map(row -> { + try { + return objectMapper.readTree(row.value().toString()); + }catch (IOException e) { + e.printStackTrace(); + return null; + } + }) + .filter(Objects::nonNull) .collect(Collectors.toList()); } diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java index d05b107098..ab85f14c84 100644 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java @@ -12,6 +12,7 @@ import com.couchbase.client.java.query.N1qlQueryResult; import com.couchbase.client.java.query.N1qlQueryRow; import com.couchbase.client.java.query.Statement; import com.fasterxml.jackson.databind.JsonNode; +import io.vavr.collection.Stream; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -29,6 +30,7 @@ import rx.Observable; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; import static com.baeldung.couchbase.n1ql.CodeSnippets.extractJsonResult; import static com.couchbase.client.java.query.Select.select; @@ -190,23 +192,24 @@ public class N1QLIntegrationTest { @Test public void givenDocuments_whenBatchInsert_thenResult() { Bucket bucket = bucketFactory.getTravelSampleBucket(); - int docsToCreate = 10; - List documents = new ArrayList<>(); - for (int i = 5; i < docsToCreate; i++) { + + List documents = Stream.rangeClosed(0,10) + .map( i -> { JsonObject content = JsonObject.create() - .put("id", i) - .put("type", "airline") - .put("name", "Sample Airline " + i); - documents.add(JsonDocument.create("cust_" + i, content)); - } + .put("id", i) + .put("type", "airline") + .put("name", "Sample Airline " + i); + return JsonDocument.create("cust_" + i, content); + }) + .collect(Collectors.toList()); List r5 = Observable - .from(documents) - .flatMap(doc -> bucket.async().insert(doc)) - .toList() - .last() - .toBlocking() - .single(); + .from(documents) + .flatMap(doc -> bucket.async().insert(doc)) + .toList() + .last() + .toBlocking() + .single(); r5.forEach(System.out::println); } From a2760396cdc9ee9e4ece3dd61b4e24f4a9c5ef86 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 18 Sep 2017 12:58:06 +0100 Subject: [PATCH 064/313] update the N1QL example Code --- .../main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java index 9e9f204263..337f475784 100644 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -3,14 +3,18 @@ package com.baeldung.couchbase.n1ql; import com.couchbase.client.java.query.N1qlQueryResult; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; + import java.io.IOException; import java.util.List; import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.stream.Collectors; public class CodeSnippets { private static ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger logger = Logger.getLogger(CodeSnippets.class.getName()); public static List extractJsonResult(N1qlQueryResult result) { return result.allRows().stream() @@ -18,7 +22,7 @@ public class CodeSnippets { try { return objectMapper.readTree(row.value().toString()); }catch (IOException e) { - e.printStackTrace(); + logger.log(Level.WARNING, e.getLocalizedMessage()); return null; } }) From 91c57354ccac023cfcd67ff62bd14836c6b6822c Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 19 Sep 2017 12:23:09 +0100 Subject: [PATCH 065/313] rename module to couchbase --- couchbase/.gitignore | 6 + couchbase/README.md | 51 ++++ couchbase/mvnw | 233 ++++++++++++++++ couchbase/mvnw.cmd | 145 ++++++++++ couchbase/pom.xml | 82 ++++++ .../couchbase/async/CouchbaseEntity.java | 9 + .../couchbase/async/person/Person.java | 90 +++++++ .../async/person/PersonCrudService.java | 24 ++ .../async/person/PersonDocumentConverter.java | 28 ++ .../async/person/RegistrationService.java | 28 ++ .../async/service/AbstractBucketService.java | 27 ++ .../async/service/AbstractCrudService.java | 142 ++++++++++ .../async/service/BucketService.java | 8 + .../async/service/ClusterService.java | 8 + .../async/service/ClusterServiceImpl.java | 36 +++ .../couchbase/async/service/CrudService.java | 26 ++ .../async/service/JsonDocumentConverter.java | 10 + .../async/service/TutorialBucketService.java | 32 +++ .../couchbase/intro/CodeSnippets.java | 87 ++++++ .../mapreduce/CouchbaseKeyGenerator.java | 6 + .../mapreduce/DuplicateKeyException.java | 10 + .../mapreduce/RandomUUIDGenerator.java | 11 + .../couchbase/mapreduce/StudentGrade.java | 50 ++++ .../mapreduce/StudentGradeKeyGenerator.java | 9 + .../mapreduce/StudentGradeQueryBuilder.java | 70 +++++ .../mapreduce/StudentGradeService.java | 169 ++++++++++++ .../couchbase/n1ql/BucketFactory.java | 26 ++ .../baeldung/couchbase/n1ql/CodeSnippets.java | 34 +++ .../couchbase/spring/person/Person.java | 86 ++++++ .../spring/person/PersonCrudService.java | 69 +++++ .../person/PersonDocumentConverter.java | 28 ++ .../spring/person/RegistrationService.java | 28 ++ .../spring/service/BucketService.java | 9 + .../spring/service/ClusterService.java | 17 ++ .../spring/service/ClusterServiceImpl.java | 81 ++++++ .../couchbase/spring/service/CrudService.java | 16 ++ .../spring/service/JsonDocumentConverter.java | 10 + .../spring/service/TutorialBucketService.java | 29 ++ .../src/main/resources/application.properties | 0 couchbase/src/main/resources/logback.xml | 19 ++ .../couchbase/async/AsyncIntegrationTest.java | 13 + .../async/AsyncIntegrationTestConfig.java | 9 + .../PersonCrudServiceIntegrationTest.java | 216 +++++++++++++++ .../ClusterServiceIntegrationTest.java | 35 +++ .../StudentGradeServiceIntegrationTest.java | 150 +++++++++++ .../couchbase/n1ql/IntegrationTestConfig.java | 26 ++ .../couchbase/n1ql/N1QLIntegrationTest.java | 248 ++++++++++++++++++ .../couchbase/spring/IntegrationTest.java | 13 + .../spring/IntegrationTestConfig.java | 9 + .../PersonCrudServiceIntegrationTest.java | 75 ++++++ .../ClusterServiceIntegrationTest.java | 34 +++ couchbase/src/test/resources/logback.xml | 19 ++ 52 files changed, 2696 insertions(+) create mode 100644 couchbase/.gitignore create mode 100644 couchbase/README.md create mode 100644 couchbase/mvnw create mode 100644 couchbase/mvnw.cmd create mode 100644 couchbase/pom.xml create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/person/Person.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/BucketService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/CrudService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/person/Person.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java create mode 100644 couchbase/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java create mode 100644 couchbase/src/main/resources/application.properties create mode 100644 couchbase/src/main/resources/logback.xml create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java create mode 100644 couchbase/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java create mode 100644 couchbase/src/test/resources/logback.xml diff --git a/couchbase/.gitignore b/couchbase/.gitignore new file mode 100644 index 0000000000..f6867e01bd --- /dev/null +++ b/couchbase/.gitignore @@ -0,0 +1,6 @@ +# Created by .ignore support plugin (hsz.mobi) + +# IntelliJ project files +.idea +*.iml +/target/ diff --git a/couchbase/README.md b/couchbase/README.md new file mode 100644 index 0000000000..f124a0192c --- /dev/null +++ b/couchbase/README.md @@ -0,0 +1,51 @@ +## Couchbase SDK Tutorial Project + +### Relevant Articles: +- [Introduction to Couchbase SDK for Java](http://www.baeldung.com/java-couchbase-sdk) +- [Using Couchbase in a Spring Application](http://www.baeldung.com/couchbase-sdk-spring) +- [Asynchronous Batch Opereations in Couchbase](http://www.baeldung.com/async-batch-operations-in-couchbase) +- [Querying Couchbase with MapReduce Views](http://www.baeldung.com/couchbase-query-mapreduce-view) + +### Overview +This Maven project contains the Java code for the Couchbase entities and Spring services +as described in the tutorials, as well as a unit/integration test +for each service implementation. + +### Working with the Code +The project was developed and tested using Java 7 and 8 in the Eclipse-based +Spring Source Toolkit (STS) and therefore should run fine in any +recent version of Eclipse or another IDE of your choice +that supports Java 7 or later. + +### Building the Project +You can also build the project using Maven outside of any IDE: +``` +mvn clean install +``` + +### Package Organization +Java classes for the intro tutorial are in the +org.baeldung.couchbase.intro package. + +Java classes for the Spring service tutorial are in the +org.baeldung.couchbase.spring package hierarchy. + +Java classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy. + + +### Running the tests +The test classes for the Spring service tutorial are: +- org.baeldung.couchbase.spring.service.ClusterServiceTest +- org.baeldung.couchbase.spring.person.PersonCrudServiceTest + +The test classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy: +- org.baeldung.couchbase.async.service.ClusterServiceTest +- org.baeldung.couchbase.async.person.PersonCrudServiceTest + +The test classes may be run as JUnit tests from your IDE +or using the Maven command line: +``` +mvn test +``` diff --git a/couchbase/mvnw b/couchbase/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/couchbase/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase/mvnw.cmd b/couchbase/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/couchbase/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase/pom.xml b/couchbase/pom.xml new file mode 100644 index 0000000000..819c53b038 --- /dev/null +++ b/couchbase/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + com.baeldung + couchbase-sdk + 0.1-SNAPSHOT + jar + couchbase-sdk + Couchbase SDK Tutorials + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + + com.couchbase.client + java-client + ${couchbase.client.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson-version} + + + + + org.springframework + spring-context + ${spring-framework.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-context-support + ${spring-framework.version} + + + commons-logging + commons-logging + + + + + + + org.springframework + spring-test + ${spring-framework.version} + test + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + test + + + + + 1.8 + UTF-8 + 2.5.0 + 4.3.5.RELEASE + 3.5 + 2.9.1 + + + diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java b/couchbase/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java new file mode 100644 index 0000000000..8f459e364f --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.async; + +public interface CouchbaseEntity { + + String getId(); + + void setId(String id); + +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/person/Person.java b/couchbase/src/main/java/com/baeldung/couchbase/async/person/Person.java new file mode 100644 index 0000000000..f1135a32a2 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/person/Person.java @@ -0,0 +1,90 @@ +package com.baeldung.couchbase.async.person; + +import com.baeldung.couchbase.async.CouchbaseEntity; + +public class Person implements CouchbaseEntity { + + private String id; + private String type; + private String name; + private String homeTown; + + Person() { + } + + public Person(Builder b) { + this.id = b.id; + this.type = b.type; + this.name = b.name; + this.homeTown = b.homeTown; + } + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getHomeTown() { + return homeTown; + } + + public void setHomeTown(String homeTown) { + this.homeTown = homeTown; + } + + public static class Builder { + private String id; + private String type; + private String name; + private String homeTown; + + public static Builder newInstance() { + return new Builder(); + } + + public Person build() { + return new Person(this); + } + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder type(String type) { + this.type = type; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder homeTown(String homeTown) { + this.homeTown = homeTown; + return this; + } + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java new file mode 100644 index 0000000000..407bc7ee1c --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java @@ -0,0 +1,24 @@ +package com.baeldung.couchbase.async.person; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import com.baeldung.couchbase.async.service.AbstractCrudService; +import com.baeldung.couchbase.async.service.BucketService; + +@Service +public class PersonCrudService extends AbstractCrudService { + + @Autowired + public PersonCrudService(@Qualifier("TutorialBucketService") BucketService bucketService, PersonDocumentConverter converter) { + super(bucketService, converter); + } + + @PostConstruct + private void init() { + loadBucket(); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java b/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java new file mode 100644 index 0000000000..0f08679ace --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java @@ -0,0 +1,28 @@ +package com.baeldung.couchbase.async.person; + +import org.springframework.stereotype.Service; + +import com.baeldung.couchbase.async.service.JsonDocumentConverter; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; + +@Service +public class PersonDocumentConverter implements JsonDocumentConverter { + + @Override + public JsonDocument toDocument(Person p) { + JsonObject content = JsonObject.empty().put("type", "Person").put("name", p.getName()).put("homeTown", p.getHomeTown()); + return JsonDocument.create(p.getId(), content); + } + + @Override + public Person fromDocument(JsonDocument doc) { + JsonObject content = doc.content(); + Person p = new Person(); + p.setId(doc.id()); + p.setType("Person"); + p.setName(content.getString("name")); + p.setHomeTown(content.getString("homeTown")); + return p; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java new file mode 100644 index 0000000000..7cbc3625db --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java @@ -0,0 +1,28 @@ +package com.baeldung.couchbase.async.person; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.couchbase.client.core.CouchbaseException; + +@Service +public class RegistrationService { + + @Autowired + private PersonCrudService crud; + + public void registerNewPerson(String name, String homeTown) { + Person person = new Person(); + person.setName(name); + person.setHomeTown(homeTown); + crud.create(person); + } + + public Person findRegistrant(String id) { + try { + return crud.read(id); + } catch (CouchbaseException e) { + return crud.readFromReplica(id); + } + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java new file mode 100644 index 0000000000..1180ea00a6 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java @@ -0,0 +1,27 @@ +package com.baeldung.couchbase.async.service; + +import com.couchbase.client.java.Bucket; + +public abstract class AbstractBucketService implements BucketService { + + private ClusterService clusterService; + + private Bucket bucket; + + protected void openBucket() { + bucket = clusterService.openBucket(getBucketName(), getBucketPassword()); + } + + protected abstract String getBucketName(); + + protected abstract String getBucketPassword(); + + public AbstractBucketService(ClusterService clusterService) { + this.clusterService = clusterService; + } + + @Override + public Bucket getBucket() { + return bucket; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java new file mode 100644 index 0000000000..089cc55d5d --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java @@ -0,0 +1,142 @@ +package com.baeldung.couchbase.async.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.couchbase.async.CouchbaseEntity; +import com.couchbase.client.core.BackpressureException; +import com.couchbase.client.core.time.Delay; +import com.couchbase.client.java.AsyncBucket; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.ReplicaMode; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.util.retry.RetryBuilder; + +import rx.Observable; +import rx.functions.Action1; +import rx.functions.Func1; + +public abstract class AbstractCrudService implements CrudService { + + private static final Logger logger = LoggerFactory.getLogger(AbstractCrudService.class); + + private BucketService bucketService; + private Bucket bucket; + private JsonDocumentConverter converter; + + public AbstractCrudService(BucketService bucketService, JsonDocumentConverter converter) { + this.bucketService = bucketService; + this.converter = converter; + } + + protected void loadBucket() { + bucket = bucketService.getBucket(); + } + + @Override + public void create(T t) { + if (t.getId() == null) { + t.setId(UUID.randomUUID().toString()); + } + JsonDocument doc = converter.toDocument(t); + bucket.insert(doc); + } + + @Override + public T read(String id) { + JsonDocument doc = bucket.get(id); + return (doc == null ? null : converter.fromDocument(doc)); + } + + @Override + public T readFromReplica(String id) { + List docs = bucket.getFromReplica(id, ReplicaMode.FIRST); + return (docs.isEmpty() ? null : converter.fromDocument(docs.get(0))); + } + + @Override + public void update(T t) { + JsonDocument doc = converter.toDocument(t); + bucket.upsert(doc); + } + + @Override + public void delete(String id) { + bucket.remove(id); + } + + @Override + public List readBulk(Iterable ids) { + final AsyncBucket asyncBucket = bucket.async(); + Observable asyncOperation = Observable.from(ids).flatMap(new Func1>() { + public Observable call(String key) { + return asyncBucket.get(key); + } + }); + + final List items = new ArrayList(); + try { + asyncOperation.toBlocking().forEach(new Action1() { + public void call(JsonDocument doc) { + T item = converter.fromDocument(doc); + items.add(item); + } + }); + } catch (Exception e) { + logger.error("Error during bulk get", e); + } + + return items; + } + + @Override + public void createBulk(Iterable items) { + final AsyncBucket asyncBucket = bucket.async(); + Observable.from(items).flatMap(new Func1>() { + @SuppressWarnings("unchecked") + @Override + public Observable call(final T t) { + if (t.getId() == null) { + t.setId(UUID.randomUUID().toString()); + } + JsonDocument doc = converter.toDocument(t); + return asyncBucket.insert(doc).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); + } + }).last().toBlocking().single(); + } + + @Override + public void updateBulk(Iterable items) { + final AsyncBucket asyncBucket = bucket.async(); + Observable.from(items).flatMap(new Func1>() { + @SuppressWarnings("unchecked") + @Override + public Observable call(final T t) { + JsonDocument doc = converter.toDocument(t); + return asyncBucket.upsert(doc).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); + } + }).last().toBlocking().single(); + } + + @Override + public void deleteBulk(Iterable ids) { + final AsyncBucket asyncBucket = bucket.async(); + Observable.from(ids).flatMap(new Func1>() { + @SuppressWarnings("unchecked") + @Override + public Observable call(String key) { + return asyncBucket.remove(key).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); + } + }).last().toBlocking().single(); + } + + @Override + public boolean exists(String id) { + return bucket.exists(id); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/BucketService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/BucketService.java new file mode 100644 index 0000000000..28470be99f --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/BucketService.java @@ -0,0 +1,8 @@ +package com.baeldung.couchbase.async.service; + +import com.couchbase.client.java.Bucket; + +public interface BucketService { + + Bucket getBucket(); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java new file mode 100644 index 0000000000..7bf891244f --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java @@ -0,0 +1,8 @@ +package com.baeldung.couchbase.async.service; + +import com.couchbase.client.java.Bucket; + +public interface ClusterService { + + Bucket openBucket(String name, String password); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java new file mode 100644 index 0000000000..e708922988 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java @@ -0,0 +1,36 @@ +package com.baeldung.couchbase.async.service; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Service; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; + +@Service +public class ClusterServiceImpl implements ClusterService { + + private Cluster cluster; + private Map buckets = new ConcurrentHashMap<>(); + + @PostConstruct + private void init() { + CouchbaseEnvironment env = DefaultCouchbaseEnvironment.create(); + cluster = CouchbaseCluster.create(env, "localhost"); + } + + @Override + synchronized public Bucket openBucket(String name, String password) { + if (!buckets.containsKey(name)) { + Bucket bucket = cluster.openBucket(name, password); + buckets.put(name, bucket); + } + return buckets.get(name); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/CrudService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/CrudService.java new file mode 100644 index 0000000000..5bd0e52214 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/CrudService.java @@ -0,0 +1,26 @@ +package com.baeldung.couchbase.async.service; + +import java.util.List; + +public interface CrudService { + + void create(T t); + + T read(String id); + + T readFromReplica(String id); + + void update(T t); + + void delete(String id); + + List readBulk(Iterable ids); + + void createBulk(Iterable items); + + void updateBulk(Iterable items); + + void deleteBulk(Iterable ids); + + boolean exists(String id); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java new file mode 100644 index 0000000000..193e91016a --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java @@ -0,0 +1,10 @@ +package com.baeldung.couchbase.async.service; + +import com.couchbase.client.java.document.JsonDocument; + +public interface JsonDocumentConverter { + + JsonDocument toDocument(T t); + + T fromDocument(JsonDocument doc); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java b/couchbase/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java new file mode 100644 index 0000000000..459585d995 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java @@ -0,0 +1,32 @@ +package com.baeldung.couchbase.async.service; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +@Service +@Qualifier("TutorialBucketService") +public class TutorialBucketService extends AbstractBucketService { + + @PostConstruct + void init() { + openBucket(); + } + + @Autowired + public TutorialBucketService(ClusterService clusterService) { + super(clusterService); + } + + @Override + protected String getBucketName() { + return "baeldung-tutorial"; + } + + @Override + protected String getBucketPassword() { + return ""; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java b/couchbase/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java new file mode 100644 index 0000000000..e7bddc6442 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java @@ -0,0 +1,87 @@ +package com.baeldung.couchbase.intro; + +import java.util.List; +import java.util.UUID; + +import com.couchbase.client.core.CouchbaseException; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.ReplicaMode; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; + +public class CodeSnippets { + + static Cluster loadClusterWithDefaultEnvironment() { + return CouchbaseCluster.create("localhost"); + } + + static Cluster loadClusterWithCustomEnvironment() { + CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).kvTimeout(3000).build(); + return CouchbaseCluster.create(env, "localhost"); + } + + static Bucket loadDefaultBucketWithBlankPassword(Cluster cluster) { + return cluster.openBucket(); + } + + static Bucket loadBaeldungBucket(Cluster cluster) { + return cluster.openBucket("baeldung", ""); + } + + static JsonDocument insertExample(Bucket bucket) { + JsonObject content = JsonObject.empty().put("name", "John Doe").put("type", "Person").put("email", "john.doe@mydomain.com").put("homeTown", "Chicago"); + String id = UUID.randomUUID().toString(); + JsonDocument document = JsonDocument.create(id, content); + JsonDocument inserted = bucket.insert(document); + return inserted; + } + + static JsonDocument retrieveAndUpsertExample(Bucket bucket, String id) { + JsonDocument document = bucket.get(id); + JsonObject content = document.content(); + content.put("homeTown", "Kansas City"); + JsonDocument upserted = bucket.upsert(document); + return upserted; + } + + static JsonDocument replaceExample(Bucket bucket, String id) { + JsonDocument document = bucket.get(id); + JsonObject content = document.content(); + content.put("homeTown", "Milwaukee"); + JsonDocument replaced = bucket.replace(document); + return replaced; + } + + static JsonDocument removeExample(Bucket bucket, String id) { + JsonDocument removed = bucket.remove(id); + return removed; + } + + static JsonDocument getFirstFromReplicaExample(Bucket bucket, String id) { + try { + return bucket.get(id); + } catch (CouchbaseException e) { + List list = bucket.getFromReplica(id, ReplicaMode.FIRST); + if (!list.isEmpty()) { + return list.get(0); + } + } + return null; + } + + static JsonDocument getLatestReplicaVersion(Bucket bucket, String id) { + long maxCasValue = -1; + JsonDocument latest = null; + for (JsonDocument replica : bucket.getFromReplica(id, ReplicaMode.ALL)) { + if (replica.cas() > maxCasValue) { + latest = replica; + maxCasValue = replica.cas(); + } + } + return latest; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java new file mode 100644 index 0000000000..9ac1bbb3f7 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java @@ -0,0 +1,6 @@ +package com.baeldung.couchbase.mapreduce; + +public interface CouchbaseKeyGenerator { + + String generateKey(T t); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java new file mode 100644 index 0000000000..78baaa155c --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java @@ -0,0 +1,10 @@ +package com.baeldung.couchbase.mapreduce; + +@SuppressWarnings("serial") +public class DuplicateKeyException extends Exception { + + public DuplicateKeyException(String s) { + super(s); + } + +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java new file mode 100644 index 0000000000..9baf4a4f43 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java @@ -0,0 +1,11 @@ +package com.baeldung.couchbase.mapreduce; + +import java.util.UUID; + +public class RandomUUIDGenerator implements CouchbaseKeyGenerator { + + @Override + public String generateKey(T t) { + return UUID.randomUUID().toString(); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java new file mode 100644 index 0000000000..846aba716a --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java @@ -0,0 +1,50 @@ +package com.baeldung.couchbase.mapreduce; + +public class StudentGrade { + + private String name; + private String course; + private Integer grade; + private Integer hours; + + public StudentGrade() { } + + public StudentGrade(String name, String course, Integer grade, Integer hours) { + this.name = name; + this.course = course; + this.grade = grade; + this.hours = hours; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCourse() { + return course; + } + + public void setCourse(String course) { + this.course = course; + } + + public Integer getGrade() { + return grade; + } + + public void setGrade(Integer grade) { + this.grade = grade; + } + + public Integer getHours() { + return hours; + } + + public void setHours(Integer hours) { + this.hours = hours; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java new file mode 100644 index 0000000000..680e37ba57 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.mapreduce; + +public class StudentGradeKeyGenerator implements CouchbaseKeyGenerator { + + @Override + public String generateKey(StudentGrade g) { + return g.getName() + ":" + g.getCourse(); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java new file mode 100644 index 0000000000..37bb03645a --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java @@ -0,0 +1,70 @@ +package com.baeldung.couchbase.mapreduce; + +import com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper; +import com.couchbase.client.java.document.json.JsonArray; +import com.couchbase.client.java.view.ViewQuery; + +public class StudentGradeQueryBuilder { + + final ObjectMapper om = new ObjectMapper(); + + public ViewQuery findAll() { + return ViewQuery.from("studentGrades", "findByCourse"); + } + + public ViewQuery findByCourse(String course) { + return ViewQuery.from("studentGrades", "findByCourse") + .key(course); + } + + public ViewQuery findByCourses(String... courses) { + return ViewQuery.from("studentGrades", "findByCourse") + .keys(JsonArray.from(courses)); + } + + public ViewQuery findByGradeInRange(int lower, int upper, boolean inclusiveEnd) { + return ViewQuery.from("studentGrades", "findByGrade") + .startKey(lower) + .endKey(upper) + .inclusiveEnd(inclusiveEnd); + } + + public ViewQuery findByGradeLessThan(int upper) { + return ViewQuery.from("studentGrades", "findByGrade") + .endKey(upper) + .inclusiveEnd(false); + } + + public ViewQuery findByGradeGreaterThan(int lower) { + return ViewQuery.from("studentGrades", "findByGrade") + .startKey(lower); + } + + public ViewQuery findByCourseAndGradeInRange(String course, int minGrade, int maxGrade, boolean inclusiveEnd) { + return ViewQuery.from("studentGrades", "findByCourseAndGrade") + .startKey(JsonArray.from(course, minGrade)) + .endKey(JsonArray.from(course, maxGrade)) + .inclusiveEnd(inclusiveEnd); + } + + public ViewQuery findTopGradesByCourse(String course, int limit) { + return ViewQuery.from("studentGrades", "findByCourseAndGrade") + .startKey(JsonArray.from(course, 100)) + .endKey(JsonArray.from(course, 0)) + .inclusiveEnd(true) + .descending() + .limit(limit); + } + + public ViewQuery countStudentsByCourse() { + return ViewQuery.from("studentGrades", "countStudentsByCourse") + .reduce() + .groupLevel(1); + } + + public ViewQuery sumCreditsByStudent() { + return ViewQuery.from("studentGrades", "sumCreditsByStudent") + .reduce() + .groupLevel(1); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java new file mode 100644 index 0000000000..2d2c63f699 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java @@ -0,0 +1,169 @@ +package com.baeldung.couchbase.mapreduce; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonArray; +import com.couchbase.client.java.document.json.JsonObject; +import com.couchbase.client.java.view.ViewQuery; +import com.couchbase.client.java.view.ViewResult; +import com.couchbase.client.java.view.ViewRow; + +public class StudentGradeService { + + final CouchbaseKeyGenerator keyGenerator; + final CouchbaseCluster cluster; + final Bucket bucket; + final ObjectMapper om = new ObjectMapper(); + final StudentGradeQueryBuilder queryBuilder; + + public StudentGradeService(CouchbaseKeyGenerator keyGenerator) { + this.keyGenerator = keyGenerator; + this.queryBuilder = new StudentGradeQueryBuilder(); + cluster = CouchbaseCluster.create("127.0.0.1"); + bucket = cluster.openBucket("baeldung-tutorial"); + } + + public String insert(StudentGrade studentGrade) throws DuplicateKeyException { + String id = keyGenerator.generateKey(studentGrade); + if(bucket.exists(id)) { + throw new DuplicateKeyException("document already exists with key " + id); + } + JsonObject content = JsonObject.empty() + .put("type", "StudentGrade") + .put("name", studentGrade.getName()) + .put("course", studentGrade.getCourse()) + .put("grade", studentGrade.getGrade()) + .put("hours", studentGrade.getHours()); + JsonDocument doc = JsonDocument.create(id, content); + bucket.insert(doc); + return id; + } + + public List findAll() { + ViewQuery query = queryBuilder.findAll(); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + private List extractDocuments(ViewResult result) { + List docs = new ArrayList<>(); + for(ViewRow row : result.allRows()) { + JsonDocument doc = row.document(); + docs.add(doc); + } + return docs; + } + + public List findByCourse(String course) { + ViewQuery query = queryBuilder.findByCourse(course); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findByCourses(String... courses) { + ViewQuery query = queryBuilder.findByCourses(courses); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findByGradeInRange(int lower, int upper, boolean inclusiveEnd) { + ViewQuery query = queryBuilder.findByGradeInRange(lower, upper, inclusiveEnd); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findByGradeLessThan(int upper) { + ViewQuery query = queryBuilder.findByGradeLessThan(upper); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findByGradeGreaterThan(int lower) { + ViewQuery query = queryBuilder.findByGradeGreaterThan(lower); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findByCourseAndGradeInRange(String course, int minGrade, int maxGrade, boolean inclusiveEnd) { + ViewQuery query = queryBuilder.findByCourseAndGradeInRange(course, minGrade, maxGrade, inclusiveEnd); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public List findTopGradesByCourse(String course, int limit) { + ViewQuery query = queryBuilder.findTopGradesByCourse(course, limit); + ViewResult result = bucket.query(query); + return extractDocuments(result); + } + + public Map countStudentsByCourse() { + ViewQuery query = ViewQuery.from("studentGrades", "countStudentsByCourse") + .reduce() + .groupLevel(1); + ViewResult result = bucket.query(query); + + Map numStudentsByCourse = new HashMap<>(); + for(ViewRow row : result.allRows()) { + JsonArray keyArray = (JsonArray) row.key(); + String course = keyArray.getString(0); + long count = Long.valueOf(row.value().toString()); + numStudentsByCourse.put(course, count); + } + + return numStudentsByCourse; + } + + public Map sumCreditHoursByStudent() { + ViewQuery query = ViewQuery.from("studentGrades", "sumHoursByStudent") + .reduce() + .groupLevel(1); + ViewResult result = bucket.query(query); + + Map creditHoursByStudent = new HashMap<>(); + for(ViewRow row : result.allRows()) { + String course = (String) row.key(); + long sum = Long.valueOf(row.value().toString()); + creditHoursByStudent.put(course, sum); + } + + return creditHoursByStudent; + } + + public Map sumGradePointsByStudent() { + ViewQuery query = ViewQuery.from("studentGrades", "sumGradePointsByStudent") + .reduce() + .groupLevel(1); + ViewResult result = bucket.query(query); + + Map gradePointsByStudent = new HashMap<>(); + for(ViewRow row : result.allRows()) { + String course = (String) row.key(); + long sum = Long.valueOf(row.value().toString()); + gradePointsByStudent.put(course, sum); + } + + return gradePointsByStudent; + } + + public Map calculateGpaByStudent() { + Map creditHoursByStudent = sumCreditHoursByStudent(); + Map gradePointsByStudent = sumGradePointsByStudent(); + + Map result = new HashMap<>(); + for(Entry creditHoursEntry : creditHoursByStudent.entrySet()) { + String name = creditHoursEntry.getKey(); + long totalHours = creditHoursEntry.getValue(); + long totalGradePoints = gradePointsByStudent.get(name); + result.put(name, ((float) totalGradePoints / totalHours)); + } + return result; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java b/couchbase/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java new file mode 100644 index 0000000000..98fbe17e60 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java @@ -0,0 +1,26 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class BucketFactory { + + @Autowired + private Cluster cluster; + + private Bucket travelSampleBucket; + private Bucket testBucket; + + public Bucket getTravelSampleBucket() { + return (travelSampleBucket != null) ? + travelSampleBucket : cluster.openBucket("travel-sample"); + } + + public Bucket getTestBucket() { + return (testBucket != null) ? + testBucket : cluster.openBucket("test"); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java new file mode 100644 index 0000000000..45067911cb --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -0,0 +1,34 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.query.N1qlQueryResult; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; + +public class CodeSnippets { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + private static final Logger logger = Logger.getLogger(CodeSnippets.class.getName()); + + public static List extractJsonResult(N1qlQueryResult result) { + return result.allRows().stream() + .map(row -> { + try { + return objectMapper.readTree(row.value().toString()); + }catch (IOException e) { + logger.log(Level.WARNING, e.getLocalizedMessage()); + return null; + } + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/person/Person.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/Person.java new file mode 100644 index 0000000000..403b7c8d3b --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/Person.java @@ -0,0 +1,86 @@ +package com.baeldung.couchbase.spring.person; + +public class Person { + + private String id; + private String type; + private String name; + private String homeTown; + + Person() { + } + + public Person(Builder b) { + this.id = b.id; + this.type = b.type; + this.name = b.name; + this.homeTown = b.homeTown; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getHomeTown() { + return homeTown; + } + + public void setHomeTown(String homeTown) { + this.homeTown = homeTown; + } + + public static class Builder { + private String id; + private String type; + private String name; + private String homeTown; + + public static Builder newInstance() { + return new Builder(); + } + + public Person build() { + return new Person(this); + } + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder type(String type) { + this.type = type; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder homeTown(String homeTown) { + this.homeTown = homeTown; + return this; + } + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java new file mode 100644 index 0000000000..163f6417ca --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java @@ -0,0 +1,69 @@ +package com.baeldung.couchbase.spring.person; + +import java.util.List; +import java.util.UUID; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.couchbase.spring.service.CrudService; +import com.baeldung.couchbase.spring.service.TutorialBucketService; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.ReplicaMode; +import com.couchbase.client.java.document.JsonDocument; + +@Service +public class PersonCrudService implements CrudService { + + @Autowired + private TutorialBucketService bucketService; + + @Autowired + private PersonDocumentConverter converter; + + private Bucket bucket; + + @PostConstruct + private void init() { + bucket = bucketService.getBucket(); + } + + @Override + public void create(Person person) { + if (person.getId() == null) { + person.setId(UUID.randomUUID().toString()); + } + JsonDocument document = converter.toDocument(person); + bucket.insert(document); + } + + @Override + public Person read(String id) { + JsonDocument doc = bucket.get(id); + return (doc != null ? converter.fromDocument(doc) : null); + } + + @Override + public Person readFromReplica(String id) { + List docs = bucket.getFromReplica(id, ReplicaMode.FIRST); + return (docs.isEmpty() ? null : converter.fromDocument(docs.get(0))); + } + + @Override + public void update(Person person) { + JsonDocument document = converter.toDocument(person); + bucket.upsert(document); + } + + @Override + public void delete(String id) { + bucket.remove(id); + } + + @Override + public boolean exists(String id) { + return bucket.exists(id); + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java new file mode 100644 index 0000000000..71108d16dd --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java @@ -0,0 +1,28 @@ +package com.baeldung.couchbase.spring.person; + +import org.springframework.stereotype.Service; + +import com.baeldung.couchbase.spring.service.JsonDocumentConverter; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; + +@Service +public class PersonDocumentConverter implements JsonDocumentConverter { + + @Override + public JsonDocument toDocument(Person p) { + JsonObject content = JsonObject.empty().put("type", "Person").put("name", p.getName()).put("homeTown", p.getHomeTown()); + return JsonDocument.create(p.getId(), content); + } + + @Override + public Person fromDocument(JsonDocument doc) { + JsonObject content = doc.content(); + Person p = new Person(); + p.setId(doc.id()); + p.setType("Person"); + p.setName(content.getString("name")); + p.setHomeTown(content.getString("homeTown")); + return p; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java new file mode 100644 index 0000000000..cad3bdd5a5 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java @@ -0,0 +1,28 @@ +package com.baeldung.couchbase.spring.person; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.couchbase.client.core.CouchbaseException; + +@Service +public class RegistrationService { + + @Autowired + private PersonCrudService crud; + + public void registerNewPerson(String name, String homeTown) { + Person person = new Person(); + person.setName(name); + person.setHomeTown(homeTown); + crud.create(person); + } + + public Person findRegistrant(String id) { + try { + return crud.read(id); + } catch (CouchbaseException e) { + return crud.readFromReplica(id); + } + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java new file mode 100644 index 0000000000..1ea9c72114 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.spring.service; + +import com.couchbase.client.java.Bucket; + +public interface BucketService { + + Bucket getBucket(); + +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java new file mode 100644 index 0000000000..da7a10141f --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java @@ -0,0 +1,17 @@ +package com.baeldung.couchbase.spring.service; + +import java.util.List; + +import com.couchbase.client.java.AsyncBucket; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.document.JsonDocument; + +public interface ClusterService { + + Bucket openBucket(String name, String password); + + List getDocuments(Bucket bucket, Iterable keys); + + List getDocumentsAsync(AsyncBucket bucket, Iterable keys); + +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java new file mode 100644 index 0000000000..1cceb11ccc --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java @@ -0,0 +1,81 @@ +package com.baeldung.couchbase.spring.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.annotation.PostConstruct; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import com.couchbase.client.java.AsyncBucket; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; + +import rx.Observable; +import rx.functions.Action1; +import rx.functions.Func1; + +@Service +public class ClusterServiceImpl implements ClusterService { + private static final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class); + + private Cluster cluster; + private Map buckets = new ConcurrentHashMap<>(); + + @PostConstruct + private void init() { + CouchbaseEnvironment env = DefaultCouchbaseEnvironment.create(); + cluster = CouchbaseCluster.create(env, "localhost"); + } + + @Override + synchronized public Bucket openBucket(String name, String password) { + if (!buckets.containsKey(name)) { + Bucket bucket = cluster.openBucket(name, password); + buckets.put(name, bucket); + } + return buckets.get(name); + } + + @Override + public List getDocuments(Bucket bucket, Iterable keys) { + List docs = new ArrayList<>(); + for (String key : keys) { + JsonDocument doc = bucket.get(key); + if (doc != null) { + docs.add(doc); + } + } + return docs; + } + + @Override + public List getDocumentsAsync(final AsyncBucket asyncBucket, Iterable keys) { + Observable asyncBulkGet = Observable.from(keys).flatMap(new Func1>() { + public Observable call(String key) { + return asyncBucket.get(key); + } + }); + + final List docs = new ArrayList<>(); + try { + asyncBulkGet.toBlocking().forEach(new Action1() { + public void call(JsonDocument doc) { + docs.add(doc); + } + }); + } catch (Exception e) { + logger.error("Error during bulk get", e); + } + + return docs; + } +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java new file mode 100644 index 0000000000..5b12af7003 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java @@ -0,0 +1,16 @@ +package com.baeldung.couchbase.spring.service; + +public interface CrudService { + + void create(T t); + + T read(String id); + + T readFromReplica(String id); + + void update(T t); + + void delete(String id); + + boolean exists(String id); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java new file mode 100644 index 0000000000..f63bb8691b --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java @@ -0,0 +1,10 @@ +package com.baeldung.couchbase.spring.service; + +import com.couchbase.client.java.document.JsonDocument; + +public interface JsonDocumentConverter { + + JsonDocument toDocument(T t); + + T fromDocument(JsonDocument doc); +} diff --git a/couchbase/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java new file mode 100644 index 0000000000..b91c131912 --- /dev/null +++ b/couchbase/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java @@ -0,0 +1,29 @@ +package com.baeldung.couchbase.spring.service; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import com.couchbase.client.java.Bucket; + +@Service +@Qualifier("TutorialBucketService") +public class TutorialBucketService implements BucketService { + + @Autowired + private ClusterService couchbase; + + private Bucket bucket; + + @PostConstruct + private void init() { + bucket = couchbase.openBucket("baeldung-tutorial", ""); + } + + @Override + public Bucket getBucket() { + return bucket; + } +} diff --git a/couchbase/src/main/resources/application.properties b/couchbase/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/couchbase/src/main/resources/logback.xml b/couchbase/src/main/resources/logback.xml new file mode 100644 index 0000000000..ec0dc2469a --- /dev/null +++ b/couchbase/src/main/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + + \ No newline at end of file diff --git a/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java new file mode 100644 index 0000000000..3079fc928a --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java @@ -0,0 +1,13 @@ +package com.baeldung.couchbase.async; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) +@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) +public abstract class AsyncIntegrationTest { +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java b/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java new file mode 100644 index 0000000000..efc3e9957f --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.async; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.couchbase.async" }) +public class AsyncIntegrationTestConfig { +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java new file mode 100644 index 0000000000..565aaed5da --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java @@ -0,0 +1,216 @@ +package com.baeldung.couchbase.async.person; + +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.annotation.PostConstruct; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.person.Person; +import com.baeldung.couchbase.async.person.PersonCrudService; +import com.baeldung.couchbase.async.person.PersonDocumentConverter; +import com.baeldung.couchbase.async.service.BucketService; +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.document.JsonDocument; + +public class PersonCrudServiceIntegrationTest extends AsyncIntegrationTest { + + @Autowired + private PersonCrudService personService; + + @Autowired + @Qualifier("TutorialBucketService") + private BucketService bucketService; + + @Autowired + private PersonDocumentConverter converter; + + private Bucket bucket; + + @PostConstruct + private void init() { + bucket = bucketService.getBucket(); + } + + @Test + public final void givenRandomPerson_whenCreate_thenPersonPersisted() { + // create person + Person person = randomPerson(); + personService.create(person); + + // check results + assertNotNull(person.getId()); + assertNotNull(bucket.get(person.getId())); + + // cleanup + bucket.remove(person.getId()); + } + + @Test + public final void givenId_whenRead_thenReturnsPerson() { + // create and insert person document + String id = insertRandomPersonDocument().id(); + + // read person and check results + assertNotNull(personService.read(id)); + + // cleanup + bucket.remove(id); + } + + @Test + public final void givenNewHometown_whenUpdate_thenNewHometownPersisted() { + // create and insert person document + JsonDocument doc = insertRandomPersonDocument(); + + // update person + Person expected = converter.fromDocument(doc); + String updatedHomeTown = RandomStringUtils.randomAlphabetic(12); + expected.setHomeTown(updatedHomeTown); + personService.update(expected); + + // check results + JsonDocument actual = bucket.get(expected.getId()); + assertNotNull(actual); + assertNotNull(actual.content()); + assertEquals(expected.getHomeTown(), actual.content().getString("homeTown")); + + // cleanup + bucket.remove(expected.getId()); + } + + @Test + public final void givenRandomPerson_whenDelete_thenPersonNotInBucket() { + // create and insert person document + String id = insertRandomPersonDocument().id(); + + // delete person and check results + personService.delete(id); + assertNull(bucket.get(id)); + } + + @Test + public final void givenIds_whenReadBulk_thenReturnsOnlyPersonsWithMatchingIds() { + List ids = new ArrayList<>(); + + // add some person documents + for (int i = 0; i < 5; i++) { + ids.add(insertRandomPersonDocument().id()); + } + + // perform bulk read + List persons = personService.readBulk(ids); + + // check results + for (Person person : persons) { + assertTrue(ids.contains(person.getId())); + } + + // cleanup + for (String id : ids) { + bucket.remove(id); + } + } + + @Test + public final void givenPersons_whenInsertBulk_thenPersonsAreInserted() { + + // create some persons + List persons = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + persons.add(randomPerson()); + } + + // perform bulk insert + personService.createBulk(persons); + + // check results + for (Person person : persons) { + assertNotNull(bucket.get(person.getId())); + } + + // cleanup + for (Person person : persons) { + bucket.remove(person.getId()); + } + } + + @Test + public final void givenPersons_whenUpdateBulk_thenPersonsAreUpdated() { + + List ids = new ArrayList<>(); + + // add some person documents + for (int i = 0; i < 5; i++) { + ids.add(insertRandomPersonDocument().id()); + } + + // load persons from Couchbase + List persons = new ArrayList<>(); + for (String id : ids) { + persons.add(converter.fromDocument(bucket.get(id))); + } + + // modify persons + for (Person person : persons) { + person.setHomeTown(RandomStringUtils.randomAlphabetic(10)); + } + + // perform bulk update + personService.updateBulk(persons); + + // check results + for (Person person : persons) { + JsonDocument doc = bucket.get(person.getId()); + assertEquals(person.getName(), doc.content().getString("name")); + assertEquals(person.getHomeTown(), doc.content().getString("homeTown")); + } + + // cleanup + for (String id : ids) { + bucket.remove(id); + } + } + + @Test + public void givenIds_whenDeleteBulk_thenPersonsAreDeleted() { + + List ids = new ArrayList<>(); + + // add some person documents + for (int i = 0; i < 5; i++) { + ids.add(insertRandomPersonDocument().id()); + } + + // perform bulk delete + personService.deleteBulk(ids); + + // check results + for (String id : ids) { + assertNull(bucket.get(id)); + } + + } + + private JsonDocument insertRandomPersonDocument() { + Person expected = randomPersonWithId(); + JsonDocument doc = converter.toDocument(expected); + return bucket.insert(doc); + } + + private Person randomPerson() { + return Person.Builder.newInstance().name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); + } + + private Person randomPersonWithId() { + return Person.Builder.newInstance().id(UUID.randomUUID().toString()).name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); + } +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java new file mode 100644 index 0000000000..d0db5d37a3 --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.couchbase.async.service; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; + +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.AsyncIntegrationTestConfig; +import com.baeldung.couchbase.async.service.ClusterService; +import com.couchbase.client.java.Bucket; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) +@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) +public class ClusterServiceIntegrationTest extends AsyncIntegrationTest { + + @Autowired + private ClusterService couchbaseService; + + private Bucket defaultBucket; + + @Test + public void whenOpenBucket_thenBucketIsNotNull() throws Exception { + defaultBucket = couchbaseService.openBucket("default", ""); + assertNotNull(defaultBucket); + assertFalse(defaultBucket.isClosed()); + defaultBucket.close(); + } +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java new file mode 100644 index 0000000000..00d462e32a --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java @@ -0,0 +1,150 @@ +package com.baeldung.couchbase.mapreduce; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.view.ViewResult; +import com.couchbase.client.java.view.ViewRow; + +public class StudentGradeServiceIntegrationTest { + private static final Logger logger = LoggerFactory.getLogger(StudentGradeServiceIntegrationTest.class); + + static StudentGradeService studentGradeService; + static Set gradeIds = new HashSet<>(); + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + studentGradeService = new StudentGradeService(new StudentGradeKeyGenerator()); + insertStudentGrade(new StudentGrade("John Doe", "History", 80, 3)); + insertStudentGrade(new StudentGrade("Jane Doe", "History", 89, 3)); + insertStudentGrade(new StudentGrade("Bob Smith", "History", 90, 3)); + insertStudentGrade(new StudentGrade("Mary Jones", "History", 92, 3)); + insertStudentGrade(new StudentGrade("Jane Doe", "Math", 59, 3)); + insertStudentGrade(new StudentGrade("Bob Smith", "Math", 91, 3)); + insertStudentGrade(new StudentGrade("Mary Jones", "Math", 86, 3)); + insertStudentGrade(new StudentGrade("John Doe", "Science", 85, 4)); + insertStudentGrade(new StudentGrade("Bob Smith", "Science", 97, 4)); + insertStudentGrade(new StudentGrade("Mary Jones", "Science", 84, 4)); + } + + private static void insertStudentGrade(StudentGrade studentGrade) { + try { + String id = studentGradeService.insert(studentGrade); + gradeIds.add(id); + } catch (DuplicateKeyException e) { + } + } + + @Test + public final void whenFindAll_thenSuccess() { + List docs = studentGradeService.findAll(); + printDocuments(docs); + } + + @Test + public final void whenFindByCourse_thenSuccess() { + List docs = studentGradeService.findByCourse("History"); + printDocuments(docs); + } + + @Test + public final void whenFindByCourses_thenSuccess() { + List docs = studentGradeService.findByCourses("History", "Science"); + printDocuments(docs); + } + + @Test + public final void whenFindByGradeInRange_thenSuccess() { + List docs = studentGradeService.findByGradeInRange(80, 89, true); + printDocuments(docs); + } + + @Test + public final void whenFindByGradeLessThan_thenSuccess() { + List docs = studentGradeService.findByGradeLessThan(60); + printDocuments(docs); + } + + @Test + public final void whenFindByGradeGreaterThan_thenSuccess() { + List docs = studentGradeService.findByGradeGreaterThan(90); + printDocuments(docs); + } + + @Test + public final void whenFindByCourseAndGradeInRange_thenSuccess() { + List docs = studentGradeService.findByCourseAndGradeInRange("Math", 80, 89, true); + printDocuments(docs); + } + + @Test + public final void whenFindTopGradesByCourse_thenSuccess() { + List docs = studentGradeService.findTopGradesByCourse("Science", 2); + printDocuments(docs); + } + + @Test + public final void whenCountStudentsByCourse_thenSuccess() { + Map map = studentGradeService.countStudentsByCourse(); + printMap(map); + } + + @Test + public final void whenSumCreditHoursByStudent_thenSuccess() { + Map map = studentGradeService.sumCreditHoursByStudent(); + printMap(map); + } + + @Test + public final void whenSumGradePointsByStudent_thenSuccess() { + Map map = studentGradeService.sumGradePointsByStudent(); + printMap(map); + } + + @Test + public final void whenCalculateGpaByStudent_thenSuccess() { + Map map = studentGradeService.calculateGpaByStudent(); + printGpaMap(map); + } + + private void printMap(Map map) { + for(Map.Entry entry : map.entrySet()) { + logger.info(entry.getKey() + "=" + entry.getValue()); + } + } + + private void printGpaMap(Map map) { + for(Map.Entry entry : map.entrySet()) { + logger.info(entry.getKey() + "=" + entry.getValue()); + } + } + + private void printDocuments(List docs) { + for(JsonDocument doc : docs) { + String key = doc.id(); + logger.info(key + " = " + doc.content().toString()); + } + } + + private void printViewResultDocuments(ViewResult result) { + for(ViewRow row : result.allRows()) { + JsonDocument doc = row.document(); + String key = doc.id(); + logger.info(key + "=" + doc.content().toString()); + } + } + + private void printViewResultRows(ViewResult result) { + for(ViewRow row : result.allRows()) { + logger.info(row.toString()); + } + } +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java b/couchbase/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java new file mode 100644 index 0000000000..ef7e31b224 --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java @@ -0,0 +1,26 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.env.CouchbaseEnvironment; +import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.couchbase.n1ql" }) +public class IntegrationTestConfig { + + @Bean + public Cluster cluster() { + CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder() + .connectTimeout(60000) + .build(); + return CouchbaseCluster.create(env, "127.0.0.1"); + } + + +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java new file mode 100644 index 0000000000..8112d7d222 --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java @@ -0,0 +1,248 @@ +package com.baeldung.couchbase.n1ql; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonArray; +import com.couchbase.client.java.document.json.JsonObject; +import com.couchbase.client.java.query.N1qlQuery; +import com.couchbase.client.java.query.N1qlQueryResult; +import com.couchbase.client.java.query.N1qlQueryRow; +import com.couchbase.client.java.query.Statement; +import com.fasterxml.jackson.databind.JsonNode; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import rx.Observable; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static com.baeldung.couchbase.n1ql.CodeSnippets.extractJsonResult; +import static com.couchbase.client.java.query.Select.select; +import static com.couchbase.client.java.query.dsl.Expression.*; +import static org.junit.Assert.assertNotNull; + + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { IntegrationTestConfig.class }) +public class N1QLIntegrationTest { + + + @Autowired + private Cluster cluster; + + @Autowired + private BucketFactory bucketFactory; + + @Test + public void givenAutowiredCluster_whenNotNull_thenNotNull() { + assertNotNull(cluster); + } + + @Test + public void givenBucketFactory_whenGetTestBucket_thenNotNull() { + assertNotNull(bucketFactory.getTestBucket()); + } + + @Test + public void givenBucketFactory_whenGetTravelSampleBucket_thenNotNull() { + assertNotNull(bucketFactory.getTravelSampleBucket()); + } + + @Test + public void givenDocument_whenInsert_thenResult() { + Bucket bucket = bucketFactory.getTestBucket(); + JsonObject personObj = JsonObject.create() + .put("name", "John") + .put("email", "john@doe.com") + .put("interests", JsonArray.from("Java", "Nigerian Jollof")); + + String id = UUID.randomUUID().toString(); + JsonDocument doc = JsonDocument.create(id, personObj); + bucket.insert(doc); + assertNotNull(bucket.get(id)); + } + + @Test + public void whenBasicSelectQuery_thenGetQueryResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + N1qlQueryResult result + = bucket.query(N1qlQuery.simple("SELECT * FROM test")); + + result.forEach(System.out::println); + + System.out.println("result count: " + result.info().resultCount()); + System.out.println("error count: " + result.info().errorCount()); + } + + @Test + public void givenSelectStatement_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query = "SELECT name FROM `travel-sample` " + + "WHERE type = 'airport' LIMIT 100"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query)); + + System.out.println("Result Count " + result1.info().resultCount()); + + N1qlQueryRow row = result1.allRows().get(0); + JsonObject rowJson = row.value(); + System.out.println("Name in First Row " + rowJson.get("name")); + + } + + @Test + public void givenSelectStatement2_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject pVal = JsonObject.create().put("type", "airport"); + String query = "SELECT * FROM `travel-sample` " + + "WHERE type = $type LIMIT 100"; + N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); + + System.out.println(r2.allRows()); + + List list = extractJsonResult(r2); + System.out.println( + list.get(0).get("travel-sample").get("airportname").asText()); + } + + @Test + public void givenSelectDSL_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + Statement statement = select("*") + .from(i("travel-sample")) + .where(x("type").eq(s("airport"))) + .limit(100); + N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); + + List list2 = extractJsonResult(r3); + System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); + + } + + @Test + public void givenSelectStatementWithOperators_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query2 = "SELECT t.city, " + + "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " + + "FROM `travel-sample` t " + + "WHERE t.type=\"airport\"" + + "AND t.country LIKE '%States'" + + "AND t.geo.lat >= 70 " + + "LIMIT 2"; + N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2)); + List list3 = extractJsonResult(r4); + System.out.println("First Doc : " + list3.get(0)); + } + + @Test + public void givenSelectStatementWithDSL2_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + Statement st2 = select( + x("t.city, t.airportname") + .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa")) + .from(i("travel-sample").as("t")) + .where( x("t.type").eq(s("airport")) + .and(x("t.country").like(s("%States"))) + .and(x("t.geo.lat").gte(70))) + .limit(2); + N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2)); + List list5 = extractJsonResult(r5); + System.out.println("First Doc : " + list5.get(0)); + System.out.println("Query from Statement2: " + st2.toString()); + } + + @Test + public void givenInsertStatement_whenQuery_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + + " VALUES(" + + "\"cust1293\", " + + "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + + " RETURNING META().id as docid, *"; + N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); + r1.forEach(System.out::println); + } + + @Test + public void givenDocument_whenInsert_thenResults() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject ob = JsonObject.create() + .put("id", "1293") + .put("name", "Sample Airline") + .put("type", "airline"); + bucket.insert(JsonDocument.create("cust1295", ob)); + } + + @Test + public void givenDocuments_whenBatchInsert_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + + List documents = IntStream.rangeClosed(0,10) + .mapToObj( i -> { + JsonObject content = JsonObject.create() + .put("id", i) + .put("type", "airline") + .put("name", "Sample Airline " + i); + return JsonDocument.create("cust_" + i, content); + }) + .collect(Collectors.toList()); + + List r5 = Observable + .from(documents) + .flatMap(doc -> bucket.async().insert(doc)) + .toList() + .last() + .toBlocking() + .single(); + + r5.forEach(System.out::println); + } + + @Test + public void givenUpdateStatement_whenQuery_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " + + "SET name=\"Sample Airline Updated\" RETURNING name"; + N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2)); + result.forEach(System.out::println); + } + + @Test + public void givenDocument_whenUpsert_thenUpdate() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + JsonObject o2 = JsonObject.create() + .put("name", "Sample Airline Updated"); + bucket.upsert(JsonDocument.create("cust_1", o2)); + } + + @Test + public void givenUnestUpdateStatement_whenQuery_thenResult() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " + + "UNSET name RETURNING *"; + N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3)); + result1.forEach(System.out::println); + } + + @Test + public void givenDeleteStatement_whenQuery_thenDelete() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\""; + N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4)); + } + + @Test + public void givenDeleteStatement2_whenQuery_thenDelete() { + Bucket bucket = bucketFactory.getTravelSampleBucket(); + String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *"; + N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5)); + } + + +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java new file mode 100644 index 0000000000..9c0b0a50c1 --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java @@ -0,0 +1,13 @@ +package com.baeldung.couchbase.spring; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) +public abstract class IntegrationTest { +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java b/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java new file mode 100644 index 0000000000..d814b31a07 --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.spring; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.couchbase.spring" }) +public class IntegrationTestConfig { +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java new file mode 100644 index 0000000000..ec15be1acc --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java @@ -0,0 +1,75 @@ +package com.baeldung.couchbase.spring.person; + +import static org.junit.Assert.*; + +import javax.annotation.PostConstruct; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.baeldung.couchbase.spring.IntegrationTest; + +public class PersonCrudServiceIntegrationTest extends IntegrationTest { + + private static final String CLARK_KENT = "Clark Kent"; + private static final String SMALLVILLE = "Smallville"; + private static final String CLARK_KENT_ID = "Person:ClarkKent"; + + private Person clarkKent; + + @Autowired + private PersonCrudService personService; + + @PostConstruct + private void init() { + clarkKent = personService.read(CLARK_KENT_ID); + if (clarkKent == null) { + clarkKent = buildClarkKent(); + personService.create(clarkKent); + } + } + + @Test + public final void givenRandomPerson_whenCreate_thenPersonPersisted() { + Person person = randomPerson(); + personService.create(person); + String id = person.getId(); + assertNotNull(personService.read(id)); + } + + @Test + public final void givenClarkKentId_whenRead_thenReturnsClarkKent() { + Person person = personService.read(CLARK_KENT_ID); + assertNotNull(person); + } + + @Test + public final void givenNewHometown_whenUpdate_thenNewHometownPersisted() { + Person expected = randomPerson(); + personService.create(expected); + String updatedHomeTown = RandomStringUtils.randomAlphabetic(12); + expected.setHomeTown(updatedHomeTown); + personService.update(expected); + Person actual = personService.read(expected.getId()); + assertNotNull(actual); + assertEquals(expected.getHomeTown(), actual.getHomeTown()); + } + + @Test + public final void givenRandomPerson_whenDelete_thenPersonNotInBucket() { + Person person = randomPerson(); + personService.create(person); + String id = person.getId(); + personService.delete(id); + assertNull(personService.read(id)); + } + + private Person buildClarkKent() { + return Person.Builder.newInstance().id(CLARK_KENT_ID).name(CLARK_KENT).homeTown(SMALLVILLE).build(); + } + + private Person randomPerson() { + return Person.Builder.newInstance().name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); + } +} diff --git a/couchbase/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java b/couchbase/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java new file mode 100644 index 0000000000..ead247dfbc --- /dev/null +++ b/couchbase/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.couchbase.spring.service; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; + +import com.baeldung.couchbase.spring.IntegrationTest; +import com.baeldung.couchbase.spring.IntegrationTestConfig; +import com.couchbase.client.java.Bucket; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) +public class ClusterServiceIntegrationTest extends IntegrationTest { + + @Autowired + private ClusterService couchbaseService; + + private Bucket defaultBucket; + + @Test + public void whenOpenBucket_thenBucketIsNotNull() throws Exception { + defaultBucket = couchbaseService.openBucket("default", ""); + assertNotNull(defaultBucket); + assertFalse(defaultBucket.isClosed()); + defaultBucket.close(); + } +} diff --git a/couchbase/src/test/resources/logback.xml b/couchbase/src/test/resources/logback.xml new file mode 100644 index 0000000000..ec0dc2469a --- /dev/null +++ b/couchbase/src/test/resources/logback.xml @@ -0,0 +1,19 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + + \ No newline at end of file From 2cf7bcfb0018430f70d5d5099e550a410a25afd1 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 19 Sep 2017 12:25:55 +0100 Subject: [PATCH 066/313] rename module to couchbase --- couchbase-sdk/.gitignore | 6 - couchbase-sdk/README.md | 51 ---- couchbase-sdk/mvnw | 233 ---------------- couchbase-sdk/mvnw.cmd | 145 ---------- couchbase-sdk/pom.xml | 82 ------ .../couchbase/async/CouchbaseEntity.java | 9 - .../couchbase/async/person/Person.java | 90 ------- .../async/person/PersonCrudService.java | 24 -- .../async/person/PersonDocumentConverter.java | 28 -- .../async/person/RegistrationService.java | 28 -- .../async/service/AbstractBucketService.java | 27 -- .../async/service/AbstractCrudService.java | 142 ---------- .../async/service/BucketService.java | 8 - .../async/service/ClusterService.java | 8 - .../async/service/ClusterServiceImpl.java | 36 --- .../couchbase/async/service/CrudService.java | 26 -- .../async/service/JsonDocumentConverter.java | 10 - .../async/service/TutorialBucketService.java | 32 --- .../couchbase/intro/CodeSnippets.java | 87 ------ .../mapreduce/CouchbaseKeyGenerator.java | 6 - .../mapreduce/DuplicateKeyException.java | 10 - .../mapreduce/RandomUUIDGenerator.java | 11 - .../couchbase/mapreduce/StudentGrade.java | 50 ---- .../mapreduce/StudentGradeKeyGenerator.java | 9 - .../mapreduce/StudentGradeQueryBuilder.java | 70 ----- .../mapreduce/StudentGradeService.java | 169 ------------ .../couchbase/n1ql/BucketFactory.java | 26 -- .../baeldung/couchbase/n1ql/CodeSnippets.java | 34 --- .../couchbase/spring/person/Person.java | 86 ------ .../spring/person/PersonCrudService.java | 69 ----- .../person/PersonDocumentConverter.java | 28 -- .../spring/person/RegistrationService.java | 28 -- .../spring/service/BucketService.java | 9 - .../spring/service/ClusterService.java | 17 -- .../spring/service/ClusterServiceImpl.java | 81 ------ .../couchbase/spring/service/CrudService.java | 16 -- .../spring/service/JsonDocumentConverter.java | 10 - .../spring/service/TutorialBucketService.java | 29 -- .../src/main/resources/application.properties | 0 couchbase-sdk/src/main/resources/logback.xml | 19 -- .../couchbase/async/AsyncIntegrationTest.java | 13 - .../async/AsyncIntegrationTestConfig.java | 9 - .../PersonCrudServiceIntegrationTest.java | 216 --------------- .../ClusterServiceIntegrationTest.java | 35 --- .../StudentGradeServiceIntegrationTest.java | 150 ----------- .../couchbase/n1ql/IntegrationTestConfig.java | 26 -- .../couchbase/n1ql/N1QLIntegrationTest.java | 248 ------------------ .../couchbase/spring/IntegrationTest.java | 13 - .../spring/IntegrationTestConfig.java | 9 - .../PersonCrudServiceIntegrationTest.java | 75 ------ .../ClusterServiceIntegrationTest.java | 34 --- couchbase-sdk/src/test/resources/logback.xml | 19 -- 52 files changed, 2696 deletions(-) delete mode 100644 couchbase-sdk/.gitignore delete mode 100644 couchbase-sdk/README.md delete mode 100755 couchbase-sdk/mvnw delete mode 100644 couchbase-sdk/mvnw.cmd delete mode 100644 couchbase-sdk/pom.xml delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java delete mode 100644 couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java delete mode 100644 couchbase-sdk/src/main/resources/application.properties delete mode 100644 couchbase-sdk/src/main/resources/logback.xml delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java delete mode 100644 couchbase-sdk/src/test/resources/logback.xml diff --git a/couchbase-sdk/.gitignore b/couchbase-sdk/.gitignore deleted file mode 100644 index f6867e01bd..0000000000 --- a/couchbase-sdk/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Created by .ignore support plugin (hsz.mobi) - -# IntelliJ project files -.idea -*.iml -/target/ diff --git a/couchbase-sdk/README.md b/couchbase-sdk/README.md deleted file mode 100644 index f124a0192c..0000000000 --- a/couchbase-sdk/README.md +++ /dev/null @@ -1,51 +0,0 @@ -## Couchbase SDK Tutorial Project - -### Relevant Articles: -- [Introduction to Couchbase SDK for Java](http://www.baeldung.com/java-couchbase-sdk) -- [Using Couchbase in a Spring Application](http://www.baeldung.com/couchbase-sdk-spring) -- [Asynchronous Batch Opereations in Couchbase](http://www.baeldung.com/async-batch-operations-in-couchbase) -- [Querying Couchbase with MapReduce Views](http://www.baeldung.com/couchbase-query-mapreduce-view) - -### Overview -This Maven project contains the Java code for the Couchbase entities and Spring services -as described in the tutorials, as well as a unit/integration test -for each service implementation. - -### Working with the Code -The project was developed and tested using Java 7 and 8 in the Eclipse-based -Spring Source Toolkit (STS) and therefore should run fine in any -recent version of Eclipse or another IDE of your choice -that supports Java 7 or later. - -### Building the Project -You can also build the project using Maven outside of any IDE: -``` -mvn clean install -``` - -### Package Organization -Java classes for the intro tutorial are in the -org.baeldung.couchbase.intro package. - -Java classes for the Spring service tutorial are in the -org.baeldung.couchbase.spring package hierarchy. - -Java classes for the Asynchronous Couchbase tutorial are in the -org.baeldung.couchbase.async package hierarchy. - - -### Running the tests -The test classes for the Spring service tutorial are: -- org.baeldung.couchbase.spring.service.ClusterServiceTest -- org.baeldung.couchbase.spring.person.PersonCrudServiceTest - -The test classes for the Asynchronous Couchbase tutorial are in the -org.baeldung.couchbase.async package hierarchy: -- org.baeldung.couchbase.async.service.ClusterServiceTest -- org.baeldung.couchbase.async.person.PersonCrudServiceTest - -The test classes may be run as JUnit tests from your IDE -or using the Maven command line: -``` -mvn test -``` diff --git a/couchbase-sdk/mvnw b/couchbase-sdk/mvnw deleted file mode 100755 index a1ba1bf554..0000000000 --- a/couchbase-sdk/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase-sdk/mvnw.cmd b/couchbase-sdk/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/couchbase-sdk/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml deleted file mode 100644 index 819c53b038..0000000000 --- a/couchbase-sdk/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - com.baeldung - couchbase-sdk - 0.1-SNAPSHOT - jar - couchbase-sdk - Couchbase SDK Tutorials - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - - com.couchbase.client - java-client - ${couchbase.client.version} - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson-version} - - - - - org.springframework - spring-context - ${spring-framework.version} - - - commons-logging - commons-logging - - - - - org.springframework - spring-context-support - ${spring-framework.version} - - - commons-logging - commons-logging - - - - - - - org.springframework - spring-test - ${spring-framework.version} - test - - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - test - - - - - 1.8 - UTF-8 - 2.5.0 - 4.3.5.RELEASE - 3.5 - 2.9.1 - - - diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java deleted file mode 100644 index 8f459e364f..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase.async; - -public interface CouchbaseEntity { - - String getId(); - - void setId(String id); - -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java deleted file mode 100644 index f1135a32a2..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.baeldung.couchbase.async.person; - -import com.baeldung.couchbase.async.CouchbaseEntity; - -public class Person implements CouchbaseEntity { - - private String id; - private String type; - private String name; - private String homeTown; - - Person() { - } - - public Person(Builder b) { - this.id = b.id; - this.type = b.type; - this.name = b.name; - this.homeTown = b.homeTown; - } - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getHomeTown() { - return homeTown; - } - - public void setHomeTown(String homeTown) { - this.homeTown = homeTown; - } - - public static class Builder { - private String id; - private String type; - private String name; - private String homeTown; - - public static Builder newInstance() { - return new Builder(); - } - - public Person build() { - return new Person(this); - } - - public Builder id(String id) { - this.id = id; - return this; - } - - public Builder type(String type) { - this.type = type; - return this; - } - - public Builder name(String name) { - this.name = name; - return this; - } - - public Builder homeTown(String homeTown) { - this.homeTown = homeTown; - return this; - } - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java deleted file mode 100644 index 407bc7ee1c..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.couchbase.async.person; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.async.service.AbstractCrudService; -import com.baeldung.couchbase.async.service.BucketService; - -@Service -public class PersonCrudService extends AbstractCrudService { - - @Autowired - public PersonCrudService(@Qualifier("TutorialBucketService") BucketService bucketService, PersonDocumentConverter converter) { - super(bucketService, converter); - } - - @PostConstruct - private void init() { - loadBucket(); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java deleted file mode 100644 index 0f08679ace..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.couchbase.async.person; - -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.async.service.JsonDocumentConverter; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonObject; - -@Service -public class PersonDocumentConverter implements JsonDocumentConverter { - - @Override - public JsonDocument toDocument(Person p) { - JsonObject content = JsonObject.empty().put("type", "Person").put("name", p.getName()).put("homeTown", p.getHomeTown()); - return JsonDocument.create(p.getId(), content); - } - - @Override - public Person fromDocument(JsonDocument doc) { - JsonObject content = doc.content(); - Person p = new Person(); - p.setId(doc.id()); - p.setType("Person"); - p.setName(content.getString("name")); - p.setHomeTown(content.getString("homeTown")); - return p; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java deleted file mode 100644 index 7cbc3625db..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.couchbase.async.person; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.couchbase.client.core.CouchbaseException; - -@Service -public class RegistrationService { - - @Autowired - private PersonCrudService crud; - - public void registerNewPerson(String name, String homeTown) { - Person person = new Person(); - person.setName(name); - person.setHomeTown(homeTown); - crud.create(person); - } - - public Person findRegistrant(String id) { - try { - return crud.read(id); - } catch (CouchbaseException e) { - return crud.readFromReplica(id); - } - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java deleted file mode 100644 index 1180ea00a6..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import com.couchbase.client.java.Bucket; - -public abstract class AbstractBucketService implements BucketService { - - private ClusterService clusterService; - - private Bucket bucket; - - protected void openBucket() { - bucket = clusterService.openBucket(getBucketName(), getBucketPassword()); - } - - protected abstract String getBucketName(); - - protected abstract String getBucketPassword(); - - public AbstractBucketService(ClusterService clusterService) { - this.clusterService = clusterService; - } - - @Override - public Bucket getBucket() { - return bucket; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java deleted file mode 100644 index 089cc55d5d..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.baeldung.couchbase.async.CouchbaseEntity; -import com.couchbase.client.core.BackpressureException; -import com.couchbase.client.core.time.Delay; -import com.couchbase.client.java.AsyncBucket; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.ReplicaMode; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.util.retry.RetryBuilder; - -import rx.Observable; -import rx.functions.Action1; -import rx.functions.Func1; - -public abstract class AbstractCrudService implements CrudService { - - private static final Logger logger = LoggerFactory.getLogger(AbstractCrudService.class); - - private BucketService bucketService; - private Bucket bucket; - private JsonDocumentConverter converter; - - public AbstractCrudService(BucketService bucketService, JsonDocumentConverter converter) { - this.bucketService = bucketService; - this.converter = converter; - } - - protected void loadBucket() { - bucket = bucketService.getBucket(); - } - - @Override - public void create(T t) { - if (t.getId() == null) { - t.setId(UUID.randomUUID().toString()); - } - JsonDocument doc = converter.toDocument(t); - bucket.insert(doc); - } - - @Override - public T read(String id) { - JsonDocument doc = bucket.get(id); - return (doc == null ? null : converter.fromDocument(doc)); - } - - @Override - public T readFromReplica(String id) { - List docs = bucket.getFromReplica(id, ReplicaMode.FIRST); - return (docs.isEmpty() ? null : converter.fromDocument(docs.get(0))); - } - - @Override - public void update(T t) { - JsonDocument doc = converter.toDocument(t); - bucket.upsert(doc); - } - - @Override - public void delete(String id) { - bucket.remove(id); - } - - @Override - public List readBulk(Iterable ids) { - final AsyncBucket asyncBucket = bucket.async(); - Observable asyncOperation = Observable.from(ids).flatMap(new Func1>() { - public Observable call(String key) { - return asyncBucket.get(key); - } - }); - - final List items = new ArrayList(); - try { - asyncOperation.toBlocking().forEach(new Action1() { - public void call(JsonDocument doc) { - T item = converter.fromDocument(doc); - items.add(item); - } - }); - } catch (Exception e) { - logger.error("Error during bulk get", e); - } - - return items; - } - - @Override - public void createBulk(Iterable items) { - final AsyncBucket asyncBucket = bucket.async(); - Observable.from(items).flatMap(new Func1>() { - @SuppressWarnings("unchecked") - @Override - public Observable call(final T t) { - if (t.getId() == null) { - t.setId(UUID.randomUUID().toString()); - } - JsonDocument doc = converter.toDocument(t); - return asyncBucket.insert(doc).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); - } - }).last().toBlocking().single(); - } - - @Override - public void updateBulk(Iterable items) { - final AsyncBucket asyncBucket = bucket.async(); - Observable.from(items).flatMap(new Func1>() { - @SuppressWarnings("unchecked") - @Override - public Observable call(final T t) { - JsonDocument doc = converter.toDocument(t); - return asyncBucket.upsert(doc).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); - } - }).last().toBlocking().single(); - } - - @Override - public void deleteBulk(Iterable ids) { - final AsyncBucket asyncBucket = bucket.async(); - Observable.from(ids).flatMap(new Func1>() { - @SuppressWarnings("unchecked") - @Override - public Observable call(String key) { - return asyncBucket.remove(key).retryWhen(RetryBuilder.anyOf(BackpressureException.class).delay(Delay.exponential(TimeUnit.MILLISECONDS, 100)).max(10).build()); - } - }).last().toBlocking().single(); - } - - @Override - public boolean exists(String id) { - return bucket.exists(id); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java deleted file mode 100644 index 28470be99f..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import com.couchbase.client.java.Bucket; - -public interface BucketService { - - Bucket getBucket(); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java deleted file mode 100644 index 7bf891244f..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import com.couchbase.client.java.Bucket; - -public interface ClusterService { - - Bucket openBucket(String name, String password); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java deleted file mode 100644 index e708922988..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.annotation.PostConstruct; - -import org.springframework.stereotype.Service; - -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.env.CouchbaseEnvironment; -import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; - -@Service -public class ClusterServiceImpl implements ClusterService { - - private Cluster cluster; - private Map buckets = new ConcurrentHashMap<>(); - - @PostConstruct - private void init() { - CouchbaseEnvironment env = DefaultCouchbaseEnvironment.create(); - cluster = CouchbaseCluster.create(env, "localhost"); - } - - @Override - synchronized public Bucket openBucket(String name, String password) { - if (!buckets.containsKey(name)) { - Bucket bucket = cluster.openBucket(name, password); - buckets.put(name, bucket); - } - return buckets.get(name); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java deleted file mode 100644 index 5bd0e52214..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import java.util.List; - -public interface CrudService { - - void create(T t); - - T read(String id); - - T readFromReplica(String id); - - void update(T t); - - void delete(String id); - - List readBulk(Iterable ids); - - void createBulk(Iterable items); - - void updateBulk(Iterable items); - - void deleteBulk(Iterable ids); - - boolean exists(String id); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java deleted file mode 100644 index 193e91016a..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import com.couchbase.client.java.document.JsonDocument; - -public interface JsonDocumentConverter { - - JsonDocument toDocument(T t); - - T fromDocument(JsonDocument doc); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java deleted file mode 100644 index 459585d995..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - -@Service -@Qualifier("TutorialBucketService") -public class TutorialBucketService extends AbstractBucketService { - - @PostConstruct - void init() { - openBucket(); - } - - @Autowired - public TutorialBucketService(ClusterService clusterService) { - super(clusterService); - } - - @Override - protected String getBucketName() { - return "baeldung-tutorial"; - } - - @Override - protected String getBucketPassword() { - return ""; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java deleted file mode 100644 index e7bddc6442..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.baeldung.couchbase.intro; - -import java.util.List; -import java.util.UUID; - -import com.couchbase.client.core.CouchbaseException; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.ReplicaMode; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonObject; -import com.couchbase.client.java.env.CouchbaseEnvironment; -import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; - -public class CodeSnippets { - - static Cluster loadClusterWithDefaultEnvironment() { - return CouchbaseCluster.create("localhost"); - } - - static Cluster loadClusterWithCustomEnvironment() { - CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).kvTimeout(3000).build(); - return CouchbaseCluster.create(env, "localhost"); - } - - static Bucket loadDefaultBucketWithBlankPassword(Cluster cluster) { - return cluster.openBucket(); - } - - static Bucket loadBaeldungBucket(Cluster cluster) { - return cluster.openBucket("baeldung", ""); - } - - static JsonDocument insertExample(Bucket bucket) { - JsonObject content = JsonObject.empty().put("name", "John Doe").put("type", "Person").put("email", "john.doe@mydomain.com").put("homeTown", "Chicago"); - String id = UUID.randomUUID().toString(); - JsonDocument document = JsonDocument.create(id, content); - JsonDocument inserted = bucket.insert(document); - return inserted; - } - - static JsonDocument retrieveAndUpsertExample(Bucket bucket, String id) { - JsonDocument document = bucket.get(id); - JsonObject content = document.content(); - content.put("homeTown", "Kansas City"); - JsonDocument upserted = bucket.upsert(document); - return upserted; - } - - static JsonDocument replaceExample(Bucket bucket, String id) { - JsonDocument document = bucket.get(id); - JsonObject content = document.content(); - content.put("homeTown", "Milwaukee"); - JsonDocument replaced = bucket.replace(document); - return replaced; - } - - static JsonDocument removeExample(Bucket bucket, String id) { - JsonDocument removed = bucket.remove(id); - return removed; - } - - static JsonDocument getFirstFromReplicaExample(Bucket bucket, String id) { - try { - return bucket.get(id); - } catch (CouchbaseException e) { - List list = bucket.getFromReplica(id, ReplicaMode.FIRST); - if (!list.isEmpty()) { - return list.get(0); - } - } - return null; - } - - static JsonDocument getLatestReplicaVersion(Bucket bucket, String id) { - long maxCasValue = -1; - JsonDocument latest = null; - for (JsonDocument replica : bucket.getFromReplica(id, ReplicaMode.ALL)) { - if (replica.cas() > maxCasValue) { - latest = replica; - maxCasValue = replica.cas(); - } - } - return latest; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java deleted file mode 100644 index 9ac1bbb3f7..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/CouchbaseKeyGenerator.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -public interface CouchbaseKeyGenerator { - - String generateKey(T t); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java deleted file mode 100644 index 78baaa155c..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/DuplicateKeyException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -@SuppressWarnings("serial") -public class DuplicateKeyException extends Exception { - - public DuplicateKeyException(String s) { - super(s); - } - -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java deleted file mode 100644 index 9baf4a4f43..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/RandomUUIDGenerator.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -import java.util.UUID; - -public class RandomUUIDGenerator implements CouchbaseKeyGenerator { - - @Override - public String generateKey(T t) { - return UUID.randomUUID().toString(); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java deleted file mode 100644 index 846aba716a..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGrade.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -public class StudentGrade { - - private String name; - private String course; - private Integer grade; - private Integer hours; - - public StudentGrade() { } - - public StudentGrade(String name, String course, Integer grade, Integer hours) { - this.name = name; - this.course = course; - this.grade = grade; - this.hours = hours; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getCourse() { - return course; - } - - public void setCourse(String course) { - this.course = course; - } - - public Integer getGrade() { - return grade; - } - - public void setGrade(Integer grade) { - this.grade = grade; - } - - public Integer getHours() { - return hours; - } - - public void setHours(Integer hours) { - this.hours = hours; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java deleted file mode 100644 index 680e37ba57..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeKeyGenerator.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -public class StudentGradeKeyGenerator implements CouchbaseKeyGenerator { - - @Override - public String generateKey(StudentGrade g) { - return g.getName() + ":" + g.getCourse(); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java deleted file mode 100644 index 37bb03645a..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeQueryBuilder.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -import com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper; -import com.couchbase.client.java.document.json.JsonArray; -import com.couchbase.client.java.view.ViewQuery; - -public class StudentGradeQueryBuilder { - - final ObjectMapper om = new ObjectMapper(); - - public ViewQuery findAll() { - return ViewQuery.from("studentGrades", "findByCourse"); - } - - public ViewQuery findByCourse(String course) { - return ViewQuery.from("studentGrades", "findByCourse") - .key(course); - } - - public ViewQuery findByCourses(String... courses) { - return ViewQuery.from("studentGrades", "findByCourse") - .keys(JsonArray.from(courses)); - } - - public ViewQuery findByGradeInRange(int lower, int upper, boolean inclusiveEnd) { - return ViewQuery.from("studentGrades", "findByGrade") - .startKey(lower) - .endKey(upper) - .inclusiveEnd(inclusiveEnd); - } - - public ViewQuery findByGradeLessThan(int upper) { - return ViewQuery.from("studentGrades", "findByGrade") - .endKey(upper) - .inclusiveEnd(false); - } - - public ViewQuery findByGradeGreaterThan(int lower) { - return ViewQuery.from("studentGrades", "findByGrade") - .startKey(lower); - } - - public ViewQuery findByCourseAndGradeInRange(String course, int minGrade, int maxGrade, boolean inclusiveEnd) { - return ViewQuery.from("studentGrades", "findByCourseAndGrade") - .startKey(JsonArray.from(course, minGrade)) - .endKey(JsonArray.from(course, maxGrade)) - .inclusiveEnd(inclusiveEnd); - } - - public ViewQuery findTopGradesByCourse(String course, int limit) { - return ViewQuery.from("studentGrades", "findByCourseAndGrade") - .startKey(JsonArray.from(course, 100)) - .endKey(JsonArray.from(course, 0)) - .inclusiveEnd(true) - .descending() - .limit(limit); - } - - public ViewQuery countStudentsByCourse() { - return ViewQuery.from("studentGrades", "countStudentsByCourse") - .reduce() - .groupLevel(1); - } - - public ViewQuery sumCreditsByStudent() { - return ViewQuery.from("studentGrades", "sumCreditsByStudent") - .reduce() - .groupLevel(1); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java deleted file mode 100644 index 2d2c63f699..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/mapreduce/StudentGradeService.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.couchbase.client.deps.com.fasterxml.jackson.databind.ObjectMapper; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonArray; -import com.couchbase.client.java.document.json.JsonObject; -import com.couchbase.client.java.view.ViewQuery; -import com.couchbase.client.java.view.ViewResult; -import com.couchbase.client.java.view.ViewRow; - -public class StudentGradeService { - - final CouchbaseKeyGenerator keyGenerator; - final CouchbaseCluster cluster; - final Bucket bucket; - final ObjectMapper om = new ObjectMapper(); - final StudentGradeQueryBuilder queryBuilder; - - public StudentGradeService(CouchbaseKeyGenerator keyGenerator) { - this.keyGenerator = keyGenerator; - this.queryBuilder = new StudentGradeQueryBuilder(); - cluster = CouchbaseCluster.create("127.0.0.1"); - bucket = cluster.openBucket("baeldung-tutorial"); - } - - public String insert(StudentGrade studentGrade) throws DuplicateKeyException { - String id = keyGenerator.generateKey(studentGrade); - if(bucket.exists(id)) { - throw new DuplicateKeyException("document already exists with key " + id); - } - JsonObject content = JsonObject.empty() - .put("type", "StudentGrade") - .put("name", studentGrade.getName()) - .put("course", studentGrade.getCourse()) - .put("grade", studentGrade.getGrade()) - .put("hours", studentGrade.getHours()); - JsonDocument doc = JsonDocument.create(id, content); - bucket.insert(doc); - return id; - } - - public List findAll() { - ViewQuery query = queryBuilder.findAll(); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - private List extractDocuments(ViewResult result) { - List docs = new ArrayList<>(); - for(ViewRow row : result.allRows()) { - JsonDocument doc = row.document(); - docs.add(doc); - } - return docs; - } - - public List findByCourse(String course) { - ViewQuery query = queryBuilder.findByCourse(course); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findByCourses(String... courses) { - ViewQuery query = queryBuilder.findByCourses(courses); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findByGradeInRange(int lower, int upper, boolean inclusiveEnd) { - ViewQuery query = queryBuilder.findByGradeInRange(lower, upper, inclusiveEnd); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findByGradeLessThan(int upper) { - ViewQuery query = queryBuilder.findByGradeLessThan(upper); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findByGradeGreaterThan(int lower) { - ViewQuery query = queryBuilder.findByGradeGreaterThan(lower); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findByCourseAndGradeInRange(String course, int minGrade, int maxGrade, boolean inclusiveEnd) { - ViewQuery query = queryBuilder.findByCourseAndGradeInRange(course, minGrade, maxGrade, inclusiveEnd); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public List findTopGradesByCourse(String course, int limit) { - ViewQuery query = queryBuilder.findTopGradesByCourse(course, limit); - ViewResult result = bucket.query(query); - return extractDocuments(result); - } - - public Map countStudentsByCourse() { - ViewQuery query = ViewQuery.from("studentGrades", "countStudentsByCourse") - .reduce() - .groupLevel(1); - ViewResult result = bucket.query(query); - - Map numStudentsByCourse = new HashMap<>(); - for(ViewRow row : result.allRows()) { - JsonArray keyArray = (JsonArray) row.key(); - String course = keyArray.getString(0); - long count = Long.valueOf(row.value().toString()); - numStudentsByCourse.put(course, count); - } - - return numStudentsByCourse; - } - - public Map sumCreditHoursByStudent() { - ViewQuery query = ViewQuery.from("studentGrades", "sumHoursByStudent") - .reduce() - .groupLevel(1); - ViewResult result = bucket.query(query); - - Map creditHoursByStudent = new HashMap<>(); - for(ViewRow row : result.allRows()) { - String course = (String) row.key(); - long sum = Long.valueOf(row.value().toString()); - creditHoursByStudent.put(course, sum); - } - - return creditHoursByStudent; - } - - public Map sumGradePointsByStudent() { - ViewQuery query = ViewQuery.from("studentGrades", "sumGradePointsByStudent") - .reduce() - .groupLevel(1); - ViewResult result = bucket.query(query); - - Map gradePointsByStudent = new HashMap<>(); - for(ViewRow row : result.allRows()) { - String course = (String) row.key(); - long sum = Long.valueOf(row.value().toString()); - gradePointsByStudent.put(course, sum); - } - - return gradePointsByStudent; - } - - public Map calculateGpaByStudent() { - Map creditHoursByStudent = sumCreditHoursByStudent(); - Map gradePointsByStudent = sumGradePointsByStudent(); - - Map result = new HashMap<>(); - for(Entry creditHoursEntry : creditHoursByStudent.entrySet()) { - String name = creditHoursEntry.getKey(); - long totalHours = creditHoursEntry.getValue(); - long totalGradePoints = gradePointsByStudent.get(name); - result.put(name, ((float) totalGradePoints / totalHours)); - } - return result; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java deleted file mode 100644 index 98fbe17e60..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.couchbase.n1ql; - -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class BucketFactory { - - @Autowired - private Cluster cluster; - - private Bucket travelSampleBucket; - private Bucket testBucket; - - public Bucket getTravelSampleBucket() { - return (travelSampleBucket != null) ? - travelSampleBucket : cluster.openBucket("travel-sample"); - } - - public Bucket getTestBucket() { - return (testBucket != null) ? - testBucket : cluster.openBucket("test"); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java deleted file mode 100644 index 45067911cb..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.couchbase.n1ql; - -import com.couchbase.client.java.query.N1qlQueryResult; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import java.io.IOException; -import java.util.List; -import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -public class CodeSnippets { - - private static ObjectMapper objectMapper = new ObjectMapper(); - - private static final Logger logger = Logger.getLogger(CodeSnippets.class.getName()); - - public static List extractJsonResult(N1qlQueryResult result) { - return result.allRows().stream() - .map(row -> { - try { - return objectMapper.readTree(row.value().toString()); - }catch (IOException e) { - logger.log(Level.WARNING, e.getLocalizedMessage()); - return null; - } - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } - -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java deleted file mode 100644 index 403b7c8d3b..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.couchbase.spring.person; - -public class Person { - - private String id; - private String type; - private String name; - private String homeTown; - - Person() { - } - - public Person(Builder b) { - this.id = b.id; - this.type = b.type; - this.name = b.name; - this.homeTown = b.homeTown; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getHomeTown() { - return homeTown; - } - - public void setHomeTown(String homeTown) { - this.homeTown = homeTown; - } - - public static class Builder { - private String id; - private String type; - private String name; - private String homeTown; - - public static Builder newInstance() { - return new Builder(); - } - - public Person build() { - return new Person(this); - } - - public Builder id(String id) { - this.id = id; - return this; - } - - public Builder type(String type) { - this.type = type; - return this; - } - - public Builder name(String name) { - this.name = name; - return this; - } - - public Builder homeTown(String homeTown) { - this.homeTown = homeTown; - return this; - } - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java deleted file mode 100644 index 163f6417ca..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.baeldung.couchbase.spring.person; - -import java.util.List; -import java.util.UUID; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.spring.service.CrudService; -import com.baeldung.couchbase.spring.service.TutorialBucketService; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.ReplicaMode; -import com.couchbase.client.java.document.JsonDocument; - -@Service -public class PersonCrudService implements CrudService { - - @Autowired - private TutorialBucketService bucketService; - - @Autowired - private PersonDocumentConverter converter; - - private Bucket bucket; - - @PostConstruct - private void init() { - bucket = bucketService.getBucket(); - } - - @Override - public void create(Person person) { - if (person.getId() == null) { - person.setId(UUID.randomUUID().toString()); - } - JsonDocument document = converter.toDocument(person); - bucket.insert(document); - } - - @Override - public Person read(String id) { - JsonDocument doc = bucket.get(id); - return (doc != null ? converter.fromDocument(doc) : null); - } - - @Override - public Person readFromReplica(String id) { - List docs = bucket.getFromReplica(id, ReplicaMode.FIRST); - return (docs.isEmpty() ? null : converter.fromDocument(docs.get(0))); - } - - @Override - public void update(Person person) { - JsonDocument document = converter.toDocument(person); - bucket.upsert(document); - } - - @Override - public void delete(String id) { - bucket.remove(id); - } - - @Override - public boolean exists(String id) { - return bucket.exists(id); - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java deleted file mode 100644 index 71108d16dd..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.couchbase.spring.person; - -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.spring.service.JsonDocumentConverter; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonObject; - -@Service -public class PersonDocumentConverter implements JsonDocumentConverter { - - @Override - public JsonDocument toDocument(Person p) { - JsonObject content = JsonObject.empty().put("type", "Person").put("name", p.getName()).put("homeTown", p.getHomeTown()); - return JsonDocument.create(p.getId(), content); - } - - @Override - public Person fromDocument(JsonDocument doc) { - JsonObject content = doc.content(); - Person p = new Person(); - p.setId(doc.id()); - p.setType("Person"); - p.setName(content.getString("name")); - p.setHomeTown(content.getString("homeTown")); - return p; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java deleted file mode 100644 index cad3bdd5a5..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.couchbase.spring.person; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.couchbase.client.core.CouchbaseException; - -@Service -public class RegistrationService { - - @Autowired - private PersonCrudService crud; - - public void registerNewPerson(String name, String homeTown) { - Person person = new Person(); - person.setName(name); - person.setHomeTown(homeTown); - crud.create(person); - } - - public Person findRegistrant(String id) { - try { - return crud.read(id); - } catch (CouchbaseException e) { - return crud.readFromReplica(id); - } - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java deleted file mode 100644 index 1ea9c72114..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import com.couchbase.client.java.Bucket; - -public interface BucketService { - - Bucket getBucket(); - -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java deleted file mode 100644 index da7a10141f..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import java.util.List; - -import com.couchbase.client.java.AsyncBucket; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.document.JsonDocument; - -public interface ClusterService { - - Bucket openBucket(String name, String password); - - List getDocuments(Bucket bucket, Iterable keys); - - List getDocumentsAsync(AsyncBucket bucket, Iterable keys); - -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java deleted file mode 100644 index 1cceb11ccc..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import com.couchbase.client.java.AsyncBucket; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.env.CouchbaseEnvironment; -import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; - -import rx.Observable; -import rx.functions.Action1; -import rx.functions.Func1; - -@Service -public class ClusterServiceImpl implements ClusterService { - private static final Logger logger = LoggerFactory.getLogger(ClusterServiceImpl.class); - - private Cluster cluster; - private Map buckets = new ConcurrentHashMap<>(); - - @PostConstruct - private void init() { - CouchbaseEnvironment env = DefaultCouchbaseEnvironment.create(); - cluster = CouchbaseCluster.create(env, "localhost"); - } - - @Override - synchronized public Bucket openBucket(String name, String password) { - if (!buckets.containsKey(name)) { - Bucket bucket = cluster.openBucket(name, password); - buckets.put(name, bucket); - } - return buckets.get(name); - } - - @Override - public List getDocuments(Bucket bucket, Iterable keys) { - List docs = new ArrayList<>(); - for (String key : keys) { - JsonDocument doc = bucket.get(key); - if (doc != null) { - docs.add(doc); - } - } - return docs; - } - - @Override - public List getDocumentsAsync(final AsyncBucket asyncBucket, Iterable keys) { - Observable asyncBulkGet = Observable.from(keys).flatMap(new Func1>() { - public Observable call(String key) { - return asyncBucket.get(key); - } - }); - - final List docs = new ArrayList<>(); - try { - asyncBulkGet.toBlocking().forEach(new Action1() { - public void call(JsonDocument doc) { - docs.add(doc); - } - }); - } catch (Exception e) { - logger.error("Error during bulk get", e); - } - - return docs; - } -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java deleted file mode 100644 index 5b12af7003..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -public interface CrudService { - - void create(T t); - - T read(String id); - - T readFromReplica(String id); - - void update(T t); - - void delete(String id); - - boolean exists(String id); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java deleted file mode 100644 index f63bb8691b..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import com.couchbase.client.java.document.JsonDocument; - -public interface JsonDocumentConverter { - - JsonDocument toDocument(T t); - - T fromDocument(JsonDocument doc); -} diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java deleted file mode 100644 index b91c131912..0000000000 --- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import javax.annotation.PostConstruct; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - -import com.couchbase.client.java.Bucket; - -@Service -@Qualifier("TutorialBucketService") -public class TutorialBucketService implements BucketService { - - @Autowired - private ClusterService couchbase; - - private Bucket bucket; - - @PostConstruct - private void init() { - bucket = couchbase.openBucket("baeldung-tutorial", ""); - } - - @Override - public Bucket getBucket() { - return bucket; - } -} diff --git a/couchbase-sdk/src/main/resources/application.properties b/couchbase-sdk/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/couchbase-sdk/src/main/resources/logback.xml b/couchbase-sdk/src/main/resources/logback.xml deleted file mode 100644 index ec0dc2469a..0000000000 --- a/couchbase-sdk/src/main/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java deleted file mode 100644 index 3079fc928a..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.couchbase.async; - -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) -@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class AsyncIntegrationTest { -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java deleted file mode 100644 index efc3e9957f..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase.async; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = { "com.baeldung.couchbase.async" }) -public class AsyncIntegrationTestConfig { -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java deleted file mode 100644 index 565aaed5da..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java +++ /dev/null @@ -1,216 +0,0 @@ -package com.baeldung.couchbase.async.person; - -import static org.junit.Assert.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import javax.annotation.PostConstruct; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; - -import com.baeldung.couchbase.async.AsyncIntegrationTest; -import com.baeldung.couchbase.async.person.Person; -import com.baeldung.couchbase.async.person.PersonCrudService; -import com.baeldung.couchbase.async.person.PersonDocumentConverter; -import com.baeldung.couchbase.async.service.BucketService; -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.document.JsonDocument; - -public class PersonCrudServiceIntegrationTest extends AsyncIntegrationTest { - - @Autowired - private PersonCrudService personService; - - @Autowired - @Qualifier("TutorialBucketService") - private BucketService bucketService; - - @Autowired - private PersonDocumentConverter converter; - - private Bucket bucket; - - @PostConstruct - private void init() { - bucket = bucketService.getBucket(); - } - - @Test - public final void givenRandomPerson_whenCreate_thenPersonPersisted() { - // create person - Person person = randomPerson(); - personService.create(person); - - // check results - assertNotNull(person.getId()); - assertNotNull(bucket.get(person.getId())); - - // cleanup - bucket.remove(person.getId()); - } - - @Test - public final void givenId_whenRead_thenReturnsPerson() { - // create and insert person document - String id = insertRandomPersonDocument().id(); - - // read person and check results - assertNotNull(personService.read(id)); - - // cleanup - bucket.remove(id); - } - - @Test - public final void givenNewHometown_whenUpdate_thenNewHometownPersisted() { - // create and insert person document - JsonDocument doc = insertRandomPersonDocument(); - - // update person - Person expected = converter.fromDocument(doc); - String updatedHomeTown = RandomStringUtils.randomAlphabetic(12); - expected.setHomeTown(updatedHomeTown); - personService.update(expected); - - // check results - JsonDocument actual = bucket.get(expected.getId()); - assertNotNull(actual); - assertNotNull(actual.content()); - assertEquals(expected.getHomeTown(), actual.content().getString("homeTown")); - - // cleanup - bucket.remove(expected.getId()); - } - - @Test - public final void givenRandomPerson_whenDelete_thenPersonNotInBucket() { - // create and insert person document - String id = insertRandomPersonDocument().id(); - - // delete person and check results - personService.delete(id); - assertNull(bucket.get(id)); - } - - @Test - public final void givenIds_whenReadBulk_thenReturnsOnlyPersonsWithMatchingIds() { - List ids = new ArrayList<>(); - - // add some person documents - for (int i = 0; i < 5; i++) { - ids.add(insertRandomPersonDocument().id()); - } - - // perform bulk read - List persons = personService.readBulk(ids); - - // check results - for (Person person : persons) { - assertTrue(ids.contains(person.getId())); - } - - // cleanup - for (String id : ids) { - bucket.remove(id); - } - } - - @Test - public final void givenPersons_whenInsertBulk_thenPersonsAreInserted() { - - // create some persons - List persons = new ArrayList<>(); - for (int i = 0; i < 5; i++) { - persons.add(randomPerson()); - } - - // perform bulk insert - personService.createBulk(persons); - - // check results - for (Person person : persons) { - assertNotNull(bucket.get(person.getId())); - } - - // cleanup - for (Person person : persons) { - bucket.remove(person.getId()); - } - } - - @Test - public final void givenPersons_whenUpdateBulk_thenPersonsAreUpdated() { - - List ids = new ArrayList<>(); - - // add some person documents - for (int i = 0; i < 5; i++) { - ids.add(insertRandomPersonDocument().id()); - } - - // load persons from Couchbase - List persons = new ArrayList<>(); - for (String id : ids) { - persons.add(converter.fromDocument(bucket.get(id))); - } - - // modify persons - for (Person person : persons) { - person.setHomeTown(RandomStringUtils.randomAlphabetic(10)); - } - - // perform bulk update - personService.updateBulk(persons); - - // check results - for (Person person : persons) { - JsonDocument doc = bucket.get(person.getId()); - assertEquals(person.getName(), doc.content().getString("name")); - assertEquals(person.getHomeTown(), doc.content().getString("homeTown")); - } - - // cleanup - for (String id : ids) { - bucket.remove(id); - } - } - - @Test - public void givenIds_whenDeleteBulk_thenPersonsAreDeleted() { - - List ids = new ArrayList<>(); - - // add some person documents - for (int i = 0; i < 5; i++) { - ids.add(insertRandomPersonDocument().id()); - } - - // perform bulk delete - personService.deleteBulk(ids); - - // check results - for (String id : ids) { - assertNull(bucket.get(id)); - } - - } - - private JsonDocument insertRandomPersonDocument() { - Person expected = randomPersonWithId(); - JsonDocument doc = converter.toDocument(expected); - return bucket.insert(doc); - } - - private Person randomPerson() { - return Person.Builder.newInstance().name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); - } - - private Person randomPersonWithId() { - return Person.Builder.newInstance().id(UUID.randomUUID().toString()).name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); - } -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java deleted file mode 100644 index d0db5d37a3..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.couchbase.async.service; - -import static org.junit.Assert.*; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; - -import com.baeldung.couchbase.async.AsyncIntegrationTest; -import com.baeldung.couchbase.async.AsyncIntegrationTestConfig; -import com.baeldung.couchbase.async.service.ClusterService; -import com.couchbase.client.java.Bucket; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) -@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceIntegrationTest extends AsyncIntegrationTest { - - @Autowired - private ClusterService couchbaseService; - - private Bucket defaultBucket; - - @Test - public void whenOpenBucket_thenBucketIsNotNull() throws Exception { - defaultBucket = couchbaseService.openBucket("default", ""); - assertNotNull(defaultBucket); - assertFalse(defaultBucket.isClosed()); - defaultBucket.close(); - } -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java deleted file mode 100644 index 00d462e32a..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/mapreduce/StudentGradeServiceIntegrationTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.baeldung.couchbase.mapreduce; - -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.view.ViewResult; -import com.couchbase.client.java.view.ViewRow; - -public class StudentGradeServiceIntegrationTest { - private static final Logger logger = LoggerFactory.getLogger(StudentGradeServiceIntegrationTest.class); - - static StudentGradeService studentGradeService; - static Set gradeIds = new HashSet<>(); - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - studentGradeService = new StudentGradeService(new StudentGradeKeyGenerator()); - insertStudentGrade(new StudentGrade("John Doe", "History", 80, 3)); - insertStudentGrade(new StudentGrade("Jane Doe", "History", 89, 3)); - insertStudentGrade(new StudentGrade("Bob Smith", "History", 90, 3)); - insertStudentGrade(new StudentGrade("Mary Jones", "History", 92, 3)); - insertStudentGrade(new StudentGrade("Jane Doe", "Math", 59, 3)); - insertStudentGrade(new StudentGrade("Bob Smith", "Math", 91, 3)); - insertStudentGrade(new StudentGrade("Mary Jones", "Math", 86, 3)); - insertStudentGrade(new StudentGrade("John Doe", "Science", 85, 4)); - insertStudentGrade(new StudentGrade("Bob Smith", "Science", 97, 4)); - insertStudentGrade(new StudentGrade("Mary Jones", "Science", 84, 4)); - } - - private static void insertStudentGrade(StudentGrade studentGrade) { - try { - String id = studentGradeService.insert(studentGrade); - gradeIds.add(id); - } catch (DuplicateKeyException e) { - } - } - - @Test - public final void whenFindAll_thenSuccess() { - List docs = studentGradeService.findAll(); - printDocuments(docs); - } - - @Test - public final void whenFindByCourse_thenSuccess() { - List docs = studentGradeService.findByCourse("History"); - printDocuments(docs); - } - - @Test - public final void whenFindByCourses_thenSuccess() { - List docs = studentGradeService.findByCourses("History", "Science"); - printDocuments(docs); - } - - @Test - public final void whenFindByGradeInRange_thenSuccess() { - List docs = studentGradeService.findByGradeInRange(80, 89, true); - printDocuments(docs); - } - - @Test - public final void whenFindByGradeLessThan_thenSuccess() { - List docs = studentGradeService.findByGradeLessThan(60); - printDocuments(docs); - } - - @Test - public final void whenFindByGradeGreaterThan_thenSuccess() { - List docs = studentGradeService.findByGradeGreaterThan(90); - printDocuments(docs); - } - - @Test - public final void whenFindByCourseAndGradeInRange_thenSuccess() { - List docs = studentGradeService.findByCourseAndGradeInRange("Math", 80, 89, true); - printDocuments(docs); - } - - @Test - public final void whenFindTopGradesByCourse_thenSuccess() { - List docs = studentGradeService.findTopGradesByCourse("Science", 2); - printDocuments(docs); - } - - @Test - public final void whenCountStudentsByCourse_thenSuccess() { - Map map = studentGradeService.countStudentsByCourse(); - printMap(map); - } - - @Test - public final void whenSumCreditHoursByStudent_thenSuccess() { - Map map = studentGradeService.sumCreditHoursByStudent(); - printMap(map); - } - - @Test - public final void whenSumGradePointsByStudent_thenSuccess() { - Map map = studentGradeService.sumGradePointsByStudent(); - printMap(map); - } - - @Test - public final void whenCalculateGpaByStudent_thenSuccess() { - Map map = studentGradeService.calculateGpaByStudent(); - printGpaMap(map); - } - - private void printMap(Map map) { - for(Map.Entry entry : map.entrySet()) { - logger.info(entry.getKey() + "=" + entry.getValue()); - } - } - - private void printGpaMap(Map map) { - for(Map.Entry entry : map.entrySet()) { - logger.info(entry.getKey() + "=" + entry.getValue()); - } - } - - private void printDocuments(List docs) { - for(JsonDocument doc : docs) { - String key = doc.id(); - logger.info(key + " = " + doc.content().toString()); - } - } - - private void printViewResultDocuments(ViewResult result) { - for(ViewRow row : result.allRows()) { - JsonDocument doc = row.document(); - String key = doc.id(); - logger.info(key + "=" + doc.content().toString()); - } - } - - private void printViewResultRows(ViewResult result) { - for(ViewRow row : result.allRows()) { - logger.info(row.toString()); - } - } -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java deleted file mode 100644 index ef7e31b224..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.couchbase.n1ql; - -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.CouchbaseCluster; -import com.couchbase.client.java.env.CouchbaseEnvironment; -import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -@Configuration -@ComponentScan(basePackages = { "com.baeldung.couchbase.n1ql" }) -public class IntegrationTestConfig { - - @Bean - public Cluster cluster() { - CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder() - .connectTimeout(60000) - .build(); - return CouchbaseCluster.create(env, "127.0.0.1"); - } - - -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java deleted file mode 100644 index 8112d7d222..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.baeldung.couchbase.n1ql; - -import com.couchbase.client.java.Bucket; -import com.couchbase.client.java.Cluster; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonArray; -import com.couchbase.client.java.document.json.JsonObject; -import com.couchbase.client.java.query.N1qlQuery; -import com.couchbase.client.java.query.N1qlQueryResult; -import com.couchbase.client.java.query.N1qlQueryRow; -import com.couchbase.client.java.query.Statement; -import com.fasterxml.jackson.databind.JsonNode; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import rx.Observable; - -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import static com.baeldung.couchbase.n1ql.CodeSnippets.extractJsonResult; -import static com.couchbase.client.java.query.Select.select; -import static com.couchbase.client.java.query.dsl.Expression.*; -import static org.junit.Assert.assertNotNull; - - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) -public class N1QLIntegrationTest { - - - @Autowired - private Cluster cluster; - - @Autowired - private BucketFactory bucketFactory; - - @Test - public void givenAutowiredCluster_whenNotNull_thenNotNull() { - assertNotNull(cluster); - } - - @Test - public void givenBucketFactory_whenGetTestBucket_thenNotNull() { - assertNotNull(bucketFactory.getTestBucket()); - } - - @Test - public void givenBucketFactory_whenGetTravelSampleBucket_thenNotNull() { - assertNotNull(bucketFactory.getTravelSampleBucket()); - } - - @Test - public void givenDocument_whenInsert_thenResult() { - Bucket bucket = bucketFactory.getTestBucket(); - JsonObject personObj = JsonObject.create() - .put("name", "John") - .put("email", "john@doe.com") - .put("interests", JsonArray.from("Java", "Nigerian Jollof")); - - String id = UUID.randomUUID().toString(); - JsonDocument doc = JsonDocument.create(id, personObj); - bucket.insert(doc); - assertNotNull(bucket.get(id)); - } - - @Test - public void whenBasicSelectQuery_thenGetQueryResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - N1qlQueryResult result - = bucket.query(N1qlQuery.simple("SELECT * FROM test")); - - result.forEach(System.out::println); - - System.out.println("result count: " + result.info().resultCount()); - System.out.println("error count: " + result.info().errorCount()); - } - - @Test - public void givenSelectStatement_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query = "SELECT name FROM `travel-sample` " + - "WHERE type = 'airport' LIMIT 100"; - N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query)); - - System.out.println("Result Count " + result1.info().resultCount()); - - N1qlQueryRow row = result1.allRows().get(0); - JsonObject rowJson = row.value(); - System.out.println("Name in First Row " + rowJson.get("name")); - - } - - @Test - public void givenSelectStatement2_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - JsonObject pVal = JsonObject.create().put("type", "airport"); - String query = "SELECT * FROM `travel-sample` " + - "WHERE type = $type LIMIT 100"; - N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal)); - - System.out.println(r2.allRows()); - - List list = extractJsonResult(r2); - System.out.println( - list.get(0).get("travel-sample").get("airportname").asText()); - } - - @Test - public void givenSelectDSL_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - Statement statement = select("*") - .from(i("travel-sample")) - .where(x("type").eq(s("airport"))) - .limit(100); - N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement)); - - List list2 = extractJsonResult(r3); - System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText()); - - } - - @Test - public void givenSelectStatementWithOperators_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query2 = "SELECT t.city, " + - "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " + - "FROM `travel-sample` t " + - "WHERE t.type=\"airport\"" + - "AND t.country LIKE '%States'" + - "AND t.geo.lat >= 70 " + - "LIMIT 2"; - N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2)); - List list3 = extractJsonResult(r4); - System.out.println("First Doc : " + list3.get(0)); - } - - @Test - public void givenSelectStatementWithDSL2_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - Statement st2 = select( - x("t.city, t.airportname") - .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa")) - .from(i("travel-sample").as("t")) - .where( x("t.type").eq(s("airport")) - .and(x("t.country").like(s("%States"))) - .and(x("t.geo.lat").gte(70))) - .limit(2); - N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2)); - List list5 = extractJsonResult(r5); - System.out.println("First Doc : " + list5.get(0)); - System.out.println("Query from Statement2: " + st2.toString()); - } - - @Test - public void givenInsertStatement_whenQuery_thenUpdate() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query = "INSERT INTO `travel-sample` (KEY, VALUE) " + - " VALUES(" + - "\"cust1293\", " + - "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" + - " RETURNING META().id as docid, *"; - N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query)); - r1.forEach(System.out::println); - } - - @Test - public void givenDocument_whenInsert_thenResults() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - JsonObject ob = JsonObject.create() - .put("id", "1293") - .put("name", "Sample Airline") - .put("type", "airline"); - bucket.insert(JsonDocument.create("cust1295", ob)); - } - - @Test - public void givenDocuments_whenBatchInsert_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - - List documents = IntStream.rangeClosed(0,10) - .mapToObj( i -> { - JsonObject content = JsonObject.create() - .put("id", i) - .put("type", "airline") - .put("name", "Sample Airline " + i); - return JsonDocument.create("cust_" + i, content); - }) - .collect(Collectors.toList()); - - List r5 = Observable - .from(documents) - .flatMap(doc -> bucket.async().insert(doc)) - .toList() - .last() - .toBlocking() - .single(); - - r5.forEach(System.out::println); - } - - @Test - public void givenUpdateStatement_whenQuery_thenUpdate() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " + - "SET name=\"Sample Airline Updated\" RETURNING name"; - N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2)); - result.forEach(System.out::println); - } - - @Test - public void givenDocument_whenUpsert_thenUpdate() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - JsonObject o2 = JsonObject.create() - .put("name", "Sample Airline Updated"); - bucket.upsert(JsonDocument.create("cust_1", o2)); - } - - @Test - public void givenUnestUpdateStatement_whenQuery_thenResult() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " + - "UNSET name RETURNING *"; - N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3)); - result1.forEach(System.out::println); - } - - @Test - public void givenDeleteStatement_whenQuery_thenDelete() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\""; - N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4)); - } - - @Test - public void givenDeleteStatement2_whenQuery_thenDelete() { - Bucket bucket = bucketFactory.getTravelSampleBucket(); - String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *"; - N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5)); - } - - -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java deleted file mode 100644 index 9c0b0a50c1..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.couchbase.spring; - -import org.junit.runner.RunWith; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) -@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class IntegrationTest { -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java deleted file mode 100644 index d814b31a07..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase.spring; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = { "com.baeldung.couchbase.spring" }) -public class IntegrationTestConfig { -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java deleted file mode 100644 index ec15be1acc..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.baeldung.couchbase.spring.person; - -import static org.junit.Assert.*; - -import javax.annotation.PostConstruct; - -import org.apache.commons.lang3.RandomStringUtils; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import com.baeldung.couchbase.spring.IntegrationTest; - -public class PersonCrudServiceIntegrationTest extends IntegrationTest { - - private static final String CLARK_KENT = "Clark Kent"; - private static final String SMALLVILLE = "Smallville"; - private static final String CLARK_KENT_ID = "Person:ClarkKent"; - - private Person clarkKent; - - @Autowired - private PersonCrudService personService; - - @PostConstruct - private void init() { - clarkKent = personService.read(CLARK_KENT_ID); - if (clarkKent == null) { - clarkKent = buildClarkKent(); - personService.create(clarkKent); - } - } - - @Test - public final void givenRandomPerson_whenCreate_thenPersonPersisted() { - Person person = randomPerson(); - personService.create(person); - String id = person.getId(); - assertNotNull(personService.read(id)); - } - - @Test - public final void givenClarkKentId_whenRead_thenReturnsClarkKent() { - Person person = personService.read(CLARK_KENT_ID); - assertNotNull(person); - } - - @Test - public final void givenNewHometown_whenUpdate_thenNewHometownPersisted() { - Person expected = randomPerson(); - personService.create(expected); - String updatedHomeTown = RandomStringUtils.randomAlphabetic(12); - expected.setHomeTown(updatedHomeTown); - personService.update(expected); - Person actual = personService.read(expected.getId()); - assertNotNull(actual); - assertEquals(expected.getHomeTown(), actual.getHomeTown()); - } - - @Test - public final void givenRandomPerson_whenDelete_thenPersonNotInBucket() { - Person person = randomPerson(); - personService.create(person); - String id = person.getId(); - personService.delete(id); - assertNull(personService.read(id)); - } - - private Person buildClarkKent() { - return Person.Builder.newInstance().id(CLARK_KENT_ID).name(CLARK_KENT).homeTown(SMALLVILLE).build(); - } - - private Person randomPerson() { - return Person.Builder.newInstance().name(RandomStringUtils.randomAlphabetic(10)).homeTown(RandomStringUtils.randomAlphabetic(10)).build(); - } -} diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java deleted file mode 100644 index ead247dfbc..0000000000 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.couchbase.spring.service; - -import static org.junit.Assert.*; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; - -import com.baeldung.couchbase.spring.IntegrationTest; -import com.baeldung.couchbase.spring.IntegrationTestConfig; -import com.couchbase.client.java.Bucket; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) -@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceIntegrationTest extends IntegrationTest { - - @Autowired - private ClusterService couchbaseService; - - private Bucket defaultBucket; - - @Test - public void whenOpenBucket_thenBucketIsNotNull() throws Exception { - defaultBucket = couchbaseService.openBucket("default", ""); - assertNotNull(defaultBucket); - assertFalse(defaultBucket.isClosed()); - defaultBucket.close(); - } -} diff --git a/couchbase-sdk/src/test/resources/logback.xml b/couchbase-sdk/src/test/resources/logback.xml deleted file mode 100644 index ec0dc2469a..0000000000 --- a/couchbase-sdk/src/test/resources/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - \ No newline at end of file From ca1d617520745af45678b1e73f9245b6394cd5a7 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 19 Sep 2017 13:31:08 +0100 Subject: [PATCH 067/313] change module name in parent module and pom --- couchbase/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/couchbase/pom.xml b/couchbase/pom.xml index 819c53b038..c79ce853d0 100644 --- a/couchbase/pom.xml +++ b/couchbase/pom.xml @@ -6,7 +6,7 @@ couchbase-sdk 0.1-SNAPSHOT jar - couchbase-sdk + couchbase Couchbase SDK Tutorials diff --git a/pom.xml b/pom.xml index 11737938a9..fac746f7df 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ core-java core-java-8 core-java-concurrency - couchbase-sdk + couchbase deltaspike dozer From d1c9a5691453eba089a8fc4173183d5fddf96cf2 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 14 Oct 2017 13:41:27 +0100 Subject: [PATCH 068/313] added cas-server module --- cas-server/.gitignore | 14 ++ cas-server/LICENSE.txt | 202 +++++++++++++++ cas-server/README.md | 88 +++++++ cas-server/build.cmd | 82 ++++++ cas-server/build.sh | 97 ++++++++ cas-server/etc/cas/config/application.yml | 2 + cas-server/etc/cas/config/cas.properties | 7 + cas-server/etc/cas/config/log4j2.xml | 117 +++++++++ cas-server/etc/cas/thekeystore | Bin 0 -> 2225 bytes cas-server/etc/cas/thekeystore.crt | Bin 0 -> 808 bytes cas-server/maven/maven-wrapper.properties | 1 + cas-server/mvnw | 234 ++++++++++++++++++ cas-server/mvnw.bat | 174 +++++++++++++ cas-server/pom.xml | 158 ++++++++++++ .../src/main/resources/application.properties | 126 ++++++++++ cas-server/src/main/resources/cas.properties | 41 +++ .../resources/services/casSecuredApp.json | 8 + 17 files changed, 1351 insertions(+) create mode 100644 cas-server/.gitignore create mode 100644 cas-server/LICENSE.txt create mode 100644 cas-server/README.md create mode 100644 cas-server/build.cmd create mode 100644 cas-server/build.sh create mode 100644 cas-server/etc/cas/config/application.yml create mode 100644 cas-server/etc/cas/config/cas.properties create mode 100644 cas-server/etc/cas/config/log4j2.xml create mode 100644 cas-server/etc/cas/thekeystore create mode 100644 cas-server/etc/cas/thekeystore.crt create mode 100644 cas-server/maven/maven-wrapper.properties create mode 100644 cas-server/mvnw create mode 100644 cas-server/mvnw.bat create mode 100644 cas-server/pom.xml create mode 100644 cas-server/src/main/resources/application.properties create mode 100644 cas-server/src/main/resources/cas.properties create mode 100644 cas-server/src/main/resources/services/casSecuredApp.json diff --git a/cas-server/.gitignore b/cas-server/.gitignore new file mode 100644 index 0000000000..5304519922 --- /dev/null +++ b/cas-server/.gitignore @@ -0,0 +1,14 @@ +.classpath +!/.project +.project +.settings +target/ +.idea/ +.DS_Store +.idea +overlays/ +.gradle/ +build/ +bin/ +*.iml +*.log diff --git a/cas-server/LICENSE.txt b/cas-server/LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/cas-server/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cas-server/README.md b/cas-server/README.md new file mode 100644 index 0000000000..bae8b648e5 --- /dev/null +++ b/cas-server/README.md @@ -0,0 +1,88 @@ +CAS Overlay Template +============================ + +Generic CAS WAR overlay to exercise the latest versions of CAS. This overlay could be freely used as a starting template for local CAS war overlays. The CAS services management overlay is available [here](https://github.com/apereo/cas-services-management-overlay). + +# Versions + +```xml +5.1.x +``` + +# Requirements +* JDK 1.8+ + +# Configuration + +The `etc` directory contains the configuration files and directories that need to be copied to `/etc/cas/config`. + +# Build + +To see what commands are available to the build script, run: + +```bash +./build.sh help +``` + +To package the final web application, run: + +```bash +./build.sh package +``` + +To update `SNAPSHOT` versions run: + +```bash +./build.sh package -U +``` + +# Deployment + +- Create a keystore file `thekeystore` under `/etc/cas`. Use the password `changeit` for both the keystore and the key/certificate entries. +- Ensure the keystore is loaded up with keys and certificates of the server. + +On a successful deployment via the following methods, CAS will be available at: + +* `http://cas.server.name:8080/cas` +* `https://cas.server.name:8443/cas` + +## Executable WAR + +Run the CAS web application as an executable WAR. + +```bash +./build.sh run +``` + +## Spring Boot + +Run the CAS web application as an executable WAR via Spring Boot. This is most useful during development and testing. + +```bash +./build.sh bootrun +``` + +### Warning! + +Be careful with this method of deployment. `bootRun` is not designed to work with already executable WAR artifacts such that CAS server web application. YMMV. Today, uses of this mode ONLY work when there is **NO OTHER** dependency added to the build script and the `cas-server-webapp` is the only present module. See [this issue](https://github.com/apereo/cas/issues/2334) and [this issue](https://github.com/spring-projects/spring-boot/issues/8320) for more info. + + +## Spring Boot App Server Selection +There is an app.server property in the pom.xml that can be used to select a spring boot application server. +It defaults to "-tomcat" but "-jetty" and "-undertow" are supported. +It can also be set to an empty value (nothing) if you want to deploy CAS to an external application server of your choice and you don't want the spring boot libraries included. + +```xml +-tomcat +``` + +## Windows Build +If you are building on windows, try build.cmd instead of build.sh. Arguments are similar but for usage, run: + +``` +build.cmd help +``` + +## External + +Deploy resultant `target/cas.war` to a servlet container of choice. diff --git a/cas-server/build.cmd b/cas-server/build.cmd new file mode 100644 index 0000000000..f907dcb388 --- /dev/null +++ b/cas-server/build.cmd @@ -0,0 +1,82 @@ +@echo off + +@set JAVA_ARGS=-Xms500m -Xmx1g +@set CAS_DIR=\etc\cas +@set CONFIG_DIR=\etc\cas\config + +@rem Call this script with DNAME and CERT_SUBJ_ALT_NAMES already set to override +@if "%DNAME%" == "" set DNAME=CN=cas.example.org,OU=Example,OU=Org,C=US +@rem List other host names or ip addresses you want in your certificate, may help with host name verification, +@rem if client apps make https connection for ticket validation and compare name in cert (include sub. alt. names) +@rem to name used to access CAS +@if "%CERT_SUBJ_ALT_NAMES%" == "" set CERT_SUBJ_ALT_NAMES=dns:example.org,dns:localhost,dns:%COMPUTERNAME%,ip:127.0.0.1 + +@rem Check for mvn in path, use it if found, otherwise use maven wrapper +@set MAVEN_CMD=mvn +@where /q mvn +@if %ERRORLEVEL% neq 0 set MAVEN_CMD=.\mvnw.bat + +@if "%1" == "" call:help +@if "%1" == "copy" call:copy +@if "%1" == "clean" call:clean %2 %3 %4 +@if "%1" == "package" call:package %2 %3 %4 +@if "%1" == "bootrun" call:bootrun %2 %3 %4 +@if "%1" == "debug" call:debug %2 %3 %4 +@if "%1" == "run" call:run %2 %3 %4 +@if "%1" == "help" call:help +@if "%1" == "gencert" call:gencert + +@rem function section starts here +@goto:eof + +:copy + @echo "Creating configuration directory under %CONFIG_DIR%" + if not exist %CONFIG_DIR% mkdir %CONFIG_DIR% + + @echo "Copying configuration files from etc/cas to /etc/cas" + xcopy /S /Y etc\cas\* \etc\cas +@goto:eof + +:help + @echo "Usage: build.bat [copy|clean|package|run|debug|bootrun|gencert] [optional extra args for maven]" + @echo "To get started on a clean system, run "build.bat copy" and "build.bat gencert", then "build.bat run" + @echo "Note that using the copy or gencert arguments will create and/or overwrite the %CAS_DIR% which is outside this project" +@goto:eof + +:clean + call %MAVEN_CMD% clean %1 %2 %3 + exit /B %ERRORLEVEL% +@goto:eof + +:package + call %MAVEN_CMD% clean package -T 5 %1 %2 %3 + exit /B %ERRORLEVEL% +@goto:eof + +:bootrun + call %MAVEN_CMD% clean package spring-boot:run -T 5 %1 %2 %3 + exit /B %ERRORLEVEL% +@goto:eof + +:debug + call:package %1 %2 %3 & java %JAVA_ARGS% -Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n -jar target/cas.war +@goto:eof + +:run + call:package %1 %2 %3 & java %JAVA_ARGS% -jar target/cas.war +@goto:eof + +:gencert + where /q keytool + if ERRORLEVEL 1 ( + @echo Java keytool.exe not found in path. + exit /b 1 + ) else ( + if not exist %CAS_DIR% mkdir %CAS_DIR% + @echo on + @echo Generating self-signed SSL cert for %DNAME% in %CAS_DIR%\thekeystore + keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore %CAS_DIR%\thekeystore -dname %DNAME% -ext SAN=%CERT_SUBJ_ALT_NAMES% + @echo Exporting cert for use in trust store (used by cas clients) + keytool -exportcert -alias cas -storepass changeit -keystore %CAS_DIR%\thekeystore -file %CAS_DIR%\cas.cer + ) +@goto:eof diff --git a/cas-server/build.sh b/cas-server/build.sh new file mode 100644 index 0000000000..e33f7de854 --- /dev/null +++ b/cas-server/build.sh @@ -0,0 +1,97 @@ +#!/bin/bash + + +function copy() { + echo -e "Creating configuration directory under /etc/cas" + mkdir -p /etc/cas/config + + echo -e "Copying configuration files from etc/cas to /etc/cas" + cp -rfv etc/cas/* /etc/cas +} + +function help() { + echo "Usage: build.sh [copy|clean|package|run|debug|bootrun|gencert]" + echo " copy: Copy config from ./etc/cas/config to /etc/cas/config" + echo " clean: Clean Maven build directory" + echo " package: Clean and build CAS war, also call copy" + echo " run: Build and run CAS.war via spring boot (java -jar target/cas.war)" + echo " debug: Run CAS.war and listen for Java debugger on port 5000" + echo " bootrun: Run with maven spring boot plugin, doesn't work with multiple dependencies" + echo " gencert: Create keystore with SSL certificate in location where CAS looks by default" +} + +function clean() { + ./mvnw clean "$@" +} + +function package() { + ./mvnw clean package -T 5 "$@" + copy +} + +function bootrun() { + ./mvnw clean package spring-boot:run -T 5 "$@" +} + +function debug() { + package && java -Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n -jar target/cas.war +} + +function run() { + package && java -jar target/cas.war +} + +function gencert() { + if [[ ! -d /etc/cas ]] ; then + copy + fi + which keytool + if [[ $? -ne 0 ]] ; then + echo Error: Java JDK \'keytool\' is not installed or is not in the path + exit 1 + fi + # override DNAME and CERT_SUBJ_ALT_NAMES before calling or use dummy values + DNAME="${DNAME:-CN=cas.example.org,OU=Example,OU=Org,C=US}" + CERT_SUBJ_ALT_NAMES="${CERT_SUBJ_ALT_NAMES:-dns:example.org,dns:localhost,ip:127.0.0.1}" + echo "Generating keystore for CAS with DN ${DNAME}" + keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore /etc/cas/thekeystore -dname ${DNAME} -ext SAN=${CERT_SUBJ_ALT_NAMES} + keytool -exportcert -alias cas -storepass changeit -keystore /etc/cas/thekeystore -file /etc/cas/cas.cer +} + +if [ $# -eq 0 ]; then + echo -e "No commands provided. Defaulting to [run]\n" + run + exit 0 +fi + + +case "$1" in +"copy") + copy + ;; +"clean") + shift + clean "$@" + ;; +"package") + shift + package "$@" + ;; +"bootrun") + shift + bootrun "$@" + ;; +"debug") + debug "$@" + ;; +"run") + run "$@" + ;; +"gencert") + gencert "$@" + ;; +*) + help + ;; +esac + diff --git a/cas-server/etc/cas/config/application.yml b/cas-server/etc/cas/config/application.yml new file mode 100644 index 0000000000..be1f7c3edd --- /dev/null +++ b/cas-server/etc/cas/config/application.yml @@ -0,0 +1,2 @@ +info: + description: CAS Configuration \ No newline at end of file diff --git a/cas-server/etc/cas/config/cas.properties b/cas-server/etc/cas/config/cas.properties new file mode 100644 index 0000000000..47a1477308 --- /dev/null +++ b/cas-server/etc/cas/config/cas.properties @@ -0,0 +1,7 @@ +cas.server.name: https://cas.example.org:8443 +cas.server.prefix: https://cas.example.org:8443/cas + +cas.adminPagesSecurity.ip=127\.0\.0\.1 + +logging.config: file:/etc/cas/config/log4j2.xml +# cas.serviceRegistry.config.location: classpath:/services diff --git a/cas-server/etc/cas/config/log4j2.xml b/cas-server/etc/cas/config/log4j2.xml new file mode 100644 index 0000000000..53b30b4228 --- /dev/null +++ b/cas-server/etc/cas/config/log4j2.xml @@ -0,0 +1,117 @@ + + + + + + . + + warn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cas-server/etc/cas/thekeystore b/cas-server/etc/cas/thekeystore new file mode 100644 index 0000000000000000000000000000000000000000..15f9af2dae6366804459009361140e8526f811b9 GIT binary patch literal 2225 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 Lt(?_lzc& literal 0 HcmV?d00001 diff --git a/cas-server/maven/maven-wrapper.properties b/cas-server/maven/maven-wrapper.properties new file mode 100644 index 0000000000..b368e4609a --- /dev/null +++ b/cas-server/maven/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https\://repository.apache.org/content/repositories/releases/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip diff --git a/cas-server/mvnw b/cas-server/mvnw new file mode 100644 index 0000000000..2275ac7647 --- /dev/null +++ b/cas-server/mvnw @@ -0,0 +1,234 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + wdir=$(cd "$wdir/.."; pwd) + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER="org.apache.maven.wrapper.MavenWrapperMain" + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + -classpath \ +"$MAVEN_PROJECTBASEDIR/maven/maven-wrapper.jar" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/cas-server/mvnw.bat b/cas-server/mvnw.bat new file mode 100644 index 0000000000..d391151aa7 --- /dev/null +++ b/cas-server/mvnw.bat @@ -0,0 +1,174 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto chkMHome + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:chkMHome +if not "%M2_HOME%"=="" goto valMHome + +SET "M2_HOME=%~dp0.." +if not "%M2_HOME%"=="" goto valMHome + +echo. +echo Error: M2_HOME not found in your environment. >&2 +echo Please set the M2_HOME variable in your environment to match the >&2 +echo location of the Maven installation. >&2 +echo. +goto error + +:valMHome + +:stripMHome +if not "_%M2_HOME:~-1%"=="_\" goto checkMCmd +set "M2_HOME=%M2_HOME:~0,-1%" +goto stripMHome + +:checkMCmd +if exist "%M2_HOME%\bin\mvn.cmd" goto init + +echo. +echo Error: M2_HOME is set to an invalid directory. >&2 +echo M2_HOME = "%M2_HOME%" >&2 +echo Please set the M2_HOME variable in your environment to match the >&2 +echo location of the Maven installation >&2 +echo. +goto error +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\maven\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/cas-server/pom.xml b/cas-server/pom.xml new file mode 100644 index 0000000000..e8625b48f7 --- /dev/null +++ b/cas-server/pom.xml @@ -0,0 +1,158 @@ + + + 4.0.0 + com.baeldung + cas-server + war + 1.0 + + + + + com.rimerosolutions.maven.plugins + wrapper-maven-plugin + 0.0.4 + + true + MD5 + + + + org.springframework.boot + spring-boot-maven-plugin + ${springboot.version} + + org.springframework.boot.loader.WarLauncher + true + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + cas + false + false + + false + ${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF + + + + + org.apereo.cas + cas-server-webapp${app.server} + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + + cas + + + + + org.apereo.cas + cas-server-webapp${app.server} + ${cas.version} + war + runtime + + + org.apereo.cas + cas-server-support-json-service-registry + ${cas.version} + + + org.apereo.cas + cas-server-support-jdbc + ${cas.version} + + + org.apereo.cas + cas-server-support-jdbc-drivers + ${cas.version} + + + + + 5.1.4 + 1.5.3.RELEASE + + -tomcat + 1.8 + 1.8 + UTF-8 + + + + + sonatype-releases + http://oss.sonatype.org/content/repositories/releases/ + + false + + + true + + + + sonatype-snapshots + https://oss.sonatype.org/content/repositories/snapshots/ + + true + + + false + + + + shibboleth-releases + https://build.shibboleth.net/nexus/content/repositories/releases + + + spring-milestones + https://repo.spring.io/milestone + + + + + + + false + + pgp + + + + com.github.s4u.plugins + pgpverify-maven-plugin + 1.1.0 + + + + check + + + + + hkp://pool.sks-keyservers.net + ${settings.localRepository}/pgpkeys-cache + test + true + false + + + + + + + diff --git a/cas-server/src/main/resources/application.properties b/cas-server/src/main/resources/application.properties new file mode 100644 index 0000000000..2d5e9a7277 --- /dev/null +++ b/cas-server/src/main/resources/application.properties @@ -0,0 +1,126 @@ +## +# CAS Server Context Configuration +# +server.context-path=/cas +server.port=8443 + +server.ssl.key-store=file:/etc/cas/thekeystore +server.ssl.key-store-password=changeit +server.ssl.key-password=changeit +# server.ssl.ciphers= +# server.ssl.client-auth= +# server.ssl.enabled= +# server.ssl.key-alias= +# server.ssl.key-store-provider= +# server.ssl.key-store-type= +# server.ssl.protocol= +# server.ssl.trust-store= +# server.ssl.trust-store-password= +# server.ssl.trust-store-provider= +# server.ssl.trust-store-type= + +server.max-http-header-size=2097152 +server.use-forward-headers=true +server.connection-timeout=20000 +server.error.include-stacktrace=NEVER + +server.tomcat.max-http-post-size=2097152 +server.tomcat.basedir=build/tomcat +server.tomcat.accesslog.enabled=true +server.tomcat.accesslog.pattern=%t %a "%r" %s (%D ms) +server.tomcat.accesslog.suffix=.log +server.tomcat.max-threads=10 +server.tomcat.port-header=X-Forwarded-Port +server.tomcat.protocol-header=X-Forwarded-Proto +server.tomcat.protocol-header-https-value=https +server.tomcat.remote-ip-header=X-FORWARDED-FOR +server.tomcat.uri-encoding=UTF-8 + +spring.http.encoding.charset=UTF-8 +spring.http.encoding.enabled=true +spring.http.encoding.force=true + +## +# CAS Cloud Bus Configuration +# +spring.cloud.bus.enabled=false +# spring.cloud.bus.refresh.enabled=true +# spring.cloud.bus.env.enabled=true +# spring.cloud.bus.destination=CasCloudBus +# spring.cloud.bus.ack.enabled=true + +endpoints.enabled=false +endpoints.sensitive=true + +endpoints.restart.enabled=false +endpoints.shutdown.enabled=false + +management.security.enabled=true +management.security.roles=ACTUATOR,ADMIN +management.security.sessions=if_required +management.context-path=/status +management.add-application-context-header=false + +security.basic.authorize-mode=role +security.basic.enabled=false +security.basic.path=/cas/status/** + +## +# CAS Web Application Session Configuration +# +server.session.timeout=300 +server.session.cookie.http-only=true +server.session.tracking-modes=COOKIE + +## +# CAS Thymeleaf View Configuration +# +spring.thymeleaf.encoding=UTF-8 +spring.thymeleaf.cache=true +spring.thymeleaf.mode=HTML +## +# CAS Log4j Configuration +# +# logging.config=file:/etc/cas/log4j2.xml +server.context-parameters.isLog4jAutoInitializationDisabled=true + +## +# CAS AspectJ Configuration +# +spring.aop.auto=true +spring.aop.proxy-target-class=true + +## +# CAS Authentication Credentials +# +#cas.authn.accept.users=casuser::Mellon +cas.authn.accept.users= +cas.authn.accept.name= + +#CAS Database Authentication Property +cas.authn.jdbc.query[0].sql=SELECT * FROM users WHERE email = ? +cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC +cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect +cas.authn.jdbc.query[0].user=root +cas.authn.jdbc.query[0].password= +cas.authn.jdbc.query[0].ddlAuto=none +cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver +cas.authn.jdbc.query[0].fieldPassword=password +cas.authn.jdbc.query[0].passwordEncoder.type=BCRYPT + + +## +# CAS Delegated Authentication +# +cas.authn.pac4j.bitbucket.clientName=Bitbucket +cas.authn.pac4j.dropbox.clientName=Dropbox +cas.authn.pac4j.facebook.clientName=Facebook +cas.authn.pac4j.foursquare.clientName=Foursquare +cas.authn.pac4j.github.clientName=Github +cas.authn.pac4j.google.clientName=Google +cas.authn.pac4j.linkedIn.clientName=LinkedIn +cas.authn.pac4j.paypal.clientName=PayPal +cas.authn.pac4j.twitter.clientName=Twitter +cas.authn.pac4j.yahoo.clientName=Yahoo +cas.authn.pac4j.windowsLive.clientName=Windows Live +cas.authn.pac4j.wordpress.clientName=WordPress diff --git a/cas-server/src/main/resources/cas.properties b/cas-server/src/main/resources/cas.properties new file mode 100644 index 0000000000..be2babcd14 --- /dev/null +++ b/cas-server/src/main/resources/cas.properties @@ -0,0 +1,41 @@ +cas.server.name: https://localhost:8443 +cas.server.prefix: https://localhost:8443/cas + +cas.adminPagesSecurity.ip=127\.0\.0\.1 + +logging.config: file:/etc/cas/config/log4j2.xml + +cas.serviceRegistry.initFromJson=true +cas.serviceRegistry.config.location=classpath:/services + +cas.authn.accept.users= +cas.authn.accept.name= + +#CAS Database Authentication Property + +# cas.authn.jdbc.query[0].healthQuery= +# cas.authn.jdbc.query[0].isolateInternalQueries=false +# cas.authn.jdbc.query[0].failFast=true +# cas.authn.jdbc.query[0].isolationLevelName=ISOLATION_READ_COMMITTED +# cas.authn.jdbc.query[0].leakThreshold=10 +# cas.authn.jdbc.query[0].propagationBehaviorName=PROPAGATION_REQUIRED +# cas.authn.jdbc.query[0].batchSize=1 +# cas.authn.jdbc.query[0].maxAgeDays=180 +# cas.authn.jdbc.query[0].autocommit=false +# cas.authn.jdbc.query[0].idleTimeout=5000 +# cas.authn.jdbc.query[0].credentialCriteria= +# cas.authn.jdbc.query[0].name= +# cas.authn.jdbc.query[0].order=0 +# cas.authn.jdbc.query[0].dataSourceName= +# cas.authn.jdbc.query[0].dataSourceProxy=false +# cas.authn.jdbc.query[0].fieldExpired= +# cas.authn.jdbc.query[0].fieldDisabled= +# cas.authn.jdbc.query[0].principalAttributeList=sn,cn:commonName,givenName +# cas.authn.jdbc.query[0].passwordEncoder.type=NONE|DEFAULT|STANDARD|BCRYPT|SCRYPT|PBKDF2|com.example.CustomPasswordEncoder +# cas.authn.jdbc.query[0].passwordEncoder.characterEncoding= +# cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm= +# cas.authn.jdbc.query[0].passwordEncoder.secret= +# cas.authn.jdbc.query[0].passwordEncoder.strength=16 +# cas.authn.jdbc.query[0].principalTransformation.suffix= +# cas.authn.jdbc.query[0].principalTransformation.caseConversion=NONE|UPPERCASE|LOWERCASE +# cas.authn.jdbc.query[0].principalTransformation.prefix= \ No newline at end of file diff --git a/cas-server/src/main/resources/services/casSecuredApp.json b/cas-server/src/main/resources/services/casSecuredApp.json new file mode 100644 index 0000000000..336007e484 --- /dev/null +++ b/cas-server/src/main/resources/services/casSecuredApp.json @@ -0,0 +1,8 @@ +{ + "@class" : "org.apereo.cas.services.RegexRegisteredService", + "serviceId" : "^http://localhost:9000/login/cas", + "name" : "CAS Spring Secured App", + "description": "This is a Spring App that usses the CAS Server for it's authentication", + "id" : 19991, + "evaluationOrder" : 1 +} \ No newline at end of file From e6d985d790f50569d47ee6d60fc4432f8ef1b75c Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sun, 15 Oct 2017 13:50:31 +0100 Subject: [PATCH 069/313] added cas secured app for Spring SSO with CAS --- cas-secured-app/.gitignore | 24 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 47610 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + cas-secured-app/mvnw | 225 ++++++++++++++++++ cas-secured-app/mvnw.cmd | 143 +++++++++++ cas-secured-app/pom.xml | 110 +++++++++ .../CasSecuredAppApplication.java | 91 +++++++ .../cassecuredapp/config/SecurityConfig.java | 83 +++++++ .../controllers/AuthController.java | 35 +++ .../controllers/IndexController.java | 15 ++ .../controllers/SecuredPageController.java | 24 ++ .../src/main/resources/application.properties | 1 + .../main/resources/templates/auth/logout.ftl | 10 + .../src/main/resources/templates/index.ftl | 11 + .../main/resources/templates/secure/index.ftl | 12 + .../CasSecuredAppApplicationTests.java | 16 ++ pom.xml | 2 + 17 files changed, 803 insertions(+) create mode 100644 cas-secured-app/.gitignore create mode 100644 cas-secured-app/.mvn/wrapper/maven-wrapper.jar create mode 100644 cas-secured-app/.mvn/wrapper/maven-wrapper.properties create mode 100644 cas-secured-app/mvnw create mode 100644 cas-secured-app/mvnw.cmd create mode 100644 cas-secured-app/pom.xml create mode 100644 cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java create mode 100644 cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java create mode 100644 cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java create mode 100644 cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java create mode 100644 cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java create mode 100644 cas-secured-app/src/main/resources/application.properties create mode 100644 cas-secured-app/src/main/resources/templates/auth/logout.ftl create mode 100644 cas-secured-app/src/main/resources/templates/index.ftl create mode 100644 cas-secured-app/src/main/resources/templates/secure/index.ftl create mode 100644 cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java diff --git a/cas-secured-app/.gitignore b/cas-secured-app/.gitignore new file mode 100644 index 0000000000..2af7cefb0a --- /dev/null +++ b/cas-secured-app/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.jar b/cas-secured-app/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..9cc84ea9b4d95453115d0c26488d6a78694e0bc6 GIT binary patch literal 47610 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 literal 0 HcmV?d00001 diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.properties b/cas-secured-app/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c315043703 --- /dev/null +++ b/cas-secured-app/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip diff --git a/cas-secured-app/mvnw b/cas-secured-app/mvnw new file mode 100644 index 0000000000..5bf251c077 --- /dev/null +++ b/cas-secured-app/mvnw @@ -0,0 +1,225 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +echo $MAVEN_PROJECTBASEDIR +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/cas-secured-app/mvnw.cmd b/cas-secured-app/mvnw.cmd new file mode 100644 index 0000000000..019bd74d76 --- /dev/null +++ b/cas-secured-app/mvnw.cmd @@ -0,0 +1,143 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/cas-secured-app/pom.xml b/cas-secured-app/pom.xml new file mode 100644 index 0000000000..f66d54ae67 --- /dev/null +++ b/cas-secured-app/pom.xml @@ -0,0 +1,110 @@ + + + 4.0.0 + + com.baeldung + cas-secured-app + 0.0.1-SNAPSHOT + jar + + cas-secured-app + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.0.BUILD-SNAPSHOT + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.security + spring-security-cas + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.security + spring-security-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + + diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java new file mode 100644 index 0000000000..fc05e3b38f --- /dev/null +++ b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java @@ -0,0 +1,91 @@ +package com.baeldung.cassecuredapp; + +import org.jasig.cas.client.session.SingleSignOutFilter; +import org.jasig.cas.client.session.SingleSignOutHttpSessionListener; +import org.jasig.cas.client.validation.Cas30ServiceTicketValidator; +import org.jasig.cas.client.validation.TicketValidator; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.context.event.EventListener; +import org.springframework.security.cas.ServiceProperties; +import org.springframework.security.cas.authentication.CasAuthenticationProvider; +import org.springframework.security.cas.web.CasAuthenticationEntryPoint; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; + +import javax.servlet.http.HttpSessionEvent; + +@SpringBootApplication +public class CasSecuredAppApplication { + + public static void main(String[] args) { + SpringApplication.run(CasSecuredAppApplication.class, args); + } + + @Bean + public ServiceProperties serviceProperties() { + ServiceProperties serviceProperties = new ServiceProperties(); + serviceProperties.setService("http://localhost:9000/login/cas"); + serviceProperties.setSendRenew(false); + return serviceProperties; + } + + @Bean + @Primary + public AuthenticationEntryPoint authenticationEntryPoint(ServiceProperties sP) { + CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint(); + entryPoint.setLoginUrl("https://localhost:8443/cas/login"); + entryPoint.setServiceProperties(sP); + return entryPoint; + } + + @Bean + public TicketValidator ticketValidator() { + return new Cas30ServiceTicketValidator("https://localhost:8443/cas"); + } + + @Bean + public CasAuthenticationProvider casAuthenticationProvider() { + CasAuthenticationProvider provider = new CasAuthenticationProvider(); + provider.setServiceProperties(serviceProperties()); + provider.setTicketValidator(ticketValidator()); + provider.setUserDetailsService((s) -> new User("test@test.com", "smatt", + true, true, true, true, + AuthorityUtils.createAuthorityList("ROLE_ADMIN"))); + provider.setKey("CAS_PROVIDER_LOCALHOST_9000"); + return provider; + } + + + @Bean + public SecurityContextLogoutHandler securityContextLogoutHandler() { + return new SecurityContextLogoutHandler(); + } + + @Bean + public LogoutFilter logoutFilter() { + LogoutFilter logoutFilter = new LogoutFilter( + "https://localhost:8443/cas/logout", securityContextLogoutHandler()); + logoutFilter.setFilterProcessesUrl("/logout/cas"); + return logoutFilter; + } + + @Bean + public SingleSignOutFilter singleSignOutFilter() { + SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter(); + singleSignOutFilter.setCasServerUrlPrefix("https://localhost:8443/cas"); + singleSignOutFilter.setIgnoreInitConfiguration(true); + return singleSignOutFilter; + } + + @EventListener + public SingleSignOutHttpSessionListener singleSignOutHttpSessionListener(HttpSessionEvent event) { + return new SingleSignOutHttpSessionListener(); + } +} diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java new file mode 100644 index 0000000000..2eabed49e1 --- /dev/null +++ b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java @@ -0,0 +1,83 @@ +package com.baeldung.cassecuredapp.config; + +import org.jasig.cas.client.session.SingleSignOutFilter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.cas.ServiceProperties; +import org.springframework.security.cas.authentication.CasAuthenticationProvider; +import org.springframework.security.cas.web.CasAuthenticationFilter; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.authentication.logout.LogoutFilter; + +import java.util.Arrays; + +@EnableWebSecurity +@Configuration +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + private AuthenticationProvider authenticationProvider; + private AuthenticationEntryPoint authenticationEntryPoint; + private SingleSignOutFilter singleSignOutFilter; + private LogoutFilter logoutFilter; + + @Autowired + public SecurityConfig(CasAuthenticationProvider casAuthenticationProvider, AuthenticationEntryPoint eP, + LogoutFilter lF + , SingleSignOutFilter ssF + ) { + this.authenticationProvider = casAuthenticationProvider; + this.authenticationEntryPoint = eP; + + this.logoutFilter = lF; + this.singleSignOutFilter = ssF; + + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .regexMatchers("/secured.*", "/login") + .authenticated() + .and() + .authorizeRequests() + .regexMatchers("/") + .permitAll() + .and() + .httpBasic() + .authenticationEntryPoint(authenticationEntryPoint) + .and() + .logout().logoutSuccessUrl("/logout") + .and() + .addFilterBefore(singleSignOutFilter, CasAuthenticationFilter.class) + .addFilterBefore(logoutFilter, LogoutFilter.class); + + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.authenticationProvider(authenticationProvider); + } + + @Override + protected AuthenticationManager authenticationManager() throws Exception { + return new ProviderManager(Arrays.asList(authenticationProvider)); + } + + @Bean + public CasAuthenticationFilter casAuthenticationFilter(ServiceProperties sP) throws Exception { + CasAuthenticationFilter filter = new CasAuthenticationFilter(); + filter.setServiceProperties(sP); + filter.setAuthenticationManager(authenticationManager()); + return filter; + } + +} diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java new file mode 100644 index 0000000000..703e6abf7a --- /dev/null +++ b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java @@ -0,0 +1,35 @@ +package com.baeldung.cassecuredapp.controllers; + +import org.apache.log4j.Logger; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.logout.CookieClearingLogoutHandler; +import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; +import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Controller +public class AuthController { + + private Logger logger = Logger.getLogger(AuthController.class); + + @GetMapping("/logout") + public String logout( + HttpServletRequest request, HttpServletResponse response, SecurityContextLogoutHandler logoutHandler) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + logoutHandler.logout(request, response, auth ); + new CookieClearingLogoutHandler(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY).logout(request, response, auth); + return "auth/logout"; + } + + + @GetMapping("/login") + public String login() { + return "redirect:/secured"; + } + +} diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java new file mode 100644 index 0000000000..75956cf493 --- /dev/null +++ b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java @@ -0,0 +1,15 @@ +package com.baeldung.cassecuredapp.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + + +@Controller +public class IndexController { + + @GetMapping("/") + public String index() { + return "index"; + } +} diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java new file mode 100644 index 0000000000..9a872d1f40 --- /dev/null +++ b/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java @@ -0,0 +1,24 @@ +package com.baeldung.cassecuredapp.controllers; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping(value = "/secured") +public class SecuredPageController { + + @GetMapping + public String index(ModelMap modelMap) { + Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + if( auth != null && auth.getPrincipal() != null + && auth.getPrincipal() instanceof UserDetails) { + modelMap.put("username", ((UserDetails) auth.getPrincipal()).getUsername()); + } + return "secure/index"; + } +} diff --git a/cas-secured-app/src/main/resources/application.properties b/cas-secured-app/src/main/resources/application.properties new file mode 100644 index 0000000000..99802c632f --- /dev/null +++ b/cas-secured-app/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=9000 \ No newline at end of file diff --git a/cas-secured-app/src/main/resources/templates/auth/logout.ftl b/cas-secured-app/src/main/resources/templates/auth/logout.ftl new file mode 100644 index 0000000000..eac345ec33 --- /dev/null +++ b/cas-secured-app/src/main/resources/templates/auth/logout.ftl @@ -0,0 +1,10 @@ + + + Cas Secured App - Logout + + +

You have logged out of Cas Secured Spring Boot App Successfully

+
+Log out of all other Services + + \ No newline at end of file diff --git a/cas-secured-app/src/main/resources/templates/index.ftl b/cas-secured-app/src/main/resources/templates/index.ftl new file mode 100644 index 0000000000..d407756044 --- /dev/null +++ b/cas-secured-app/src/main/resources/templates/index.ftl @@ -0,0 +1,11 @@ + + + Cas Secured App - Index + + +

Welcome to Cas Secured Spring Boot App

+

This is a Public Page

+
+Login + + \ No newline at end of file diff --git a/cas-secured-app/src/main/resources/templates/secure/index.ftl b/cas-secured-app/src/main/resources/templates/secure/index.ftl new file mode 100644 index 0000000000..210ebecc7b --- /dev/null +++ b/cas-secured-app/src/main/resources/templates/secure/index.ftl @@ -0,0 +1,12 @@ + + + Cas Secured App - Secured + + +

Welcome to Cas Secured Spring Boot App

+

This is a Secured Page

+

Welcome home ${username!""}

+
+Logout + + \ No newline at end of file diff --git a/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java b/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java new file mode 100644 index 0000000000..09dbaf0c61 --- /dev/null +++ b/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung.cassecuredapp; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CasSecuredAppApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/pom.xml b/pom.xml index fac746f7df..ed607ec338 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,8 @@ core-java-8 core-java-concurrency couchbase + cas-server + cas-secured-app deltaspike dozer From 261a16988da2ecf2cd762dbb9ef8c76dda249adf Mon Sep 17 00:00:00 2001 From: Radu Tamas Date: Tue, 24 Oct 2017 22:48:54 +0300 Subject: [PATCH 070/313] Code for test article: Different Types of Bean Injection in Spring --- .../dependencyinjectiontypes/Article.java | 21 +++++++++++++++++++ .../ArticleFormatter.java | 16 ++++++++++++++ .../TextFormatter.java | 8 +++++++ .../dependencyinjectiontypes-context.xml | 16 ++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java create mode 100644 spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java create mode 100644 spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java create mode 100644 spring-core/src/main/resources/dependencyinjectiontypes-context.xml diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java new file mode 100644 index 0000000000..921bba01fb --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java @@ -0,0 +1,21 @@ +package com.baeldung.dependencyinjectiontypes; + +import org.springframework.beans.factory.annotation.Autowired; + +public class Article { + + private TextFormatter formatter; + + public Article(TextFormatter formatter) { + this.formatter = formatter; + } + + @Autowired + public void setTextFormatter(TextFormatter formatter) { + this.formatter = formatter; + } + + public String format(String text) { + return formatter.format(text); + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java new file mode 100644 index 0000000000..dc9fa49b19 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java @@ -0,0 +1,16 @@ +package com.baeldung.dependencyinjectiontypes; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class ArticleFormatter { + + @SuppressWarnings("resource") + public static void main(String[] args) { + ApplicationContext context = new ClassPathXmlApplicationContext("dependencyinjectiontypes-context.xml"); + Article article = (Article) context.getBean("articleBean"); + String formattedArticle = article.format("This is a text !"); + + System.out.print(formattedArticle); + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java new file mode 100644 index 0000000000..204436c9bd --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/TextFormatter.java @@ -0,0 +1,8 @@ +package com.baeldung.dependencyinjectiontypes; + +public class TextFormatter { + + public String format(String text) { + return text.toUpperCase(); + } +} diff --git a/spring-core/src/main/resources/dependencyinjectiontypes-context.xml b/spring-core/src/main/resources/dependencyinjectiontypes-context.xml new file mode 100644 index 0000000000..b03d185c43 --- /dev/null +++ b/spring-core/src/main/resources/dependencyinjectiontypes-context.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file From 4ceff2d55306012ec760d427306dc1014e1e392f Mon Sep 17 00:00:00 2001 From: Radu Tamas Date: Wed, 25 Oct 2017 13:32:02 +0300 Subject: [PATCH 071/313] Adding jUnits for test article: Different Types of Bean Injection in Spring --- .../ArticleFormatter.java | 2 +- .../ArticleWithConstructorInjection.java | 17 +++++++++ ...e.java => ArticleWithSetterInjection.java} | 4 +-- .../dependencyinjectiontypes-context.xml | 11 ++++-- .../DependencyInjectionTest.java | 35 +++++++++++++++++++ 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java rename spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/{Article.java => ArticleWithSetterInjection.java} (79%) create mode 100644 spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionTest.java diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java index dc9fa49b19..069e9df084 100644 --- a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleFormatter.java @@ -8,7 +8,7 @@ public class ArticleFormatter { @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("dependencyinjectiontypes-context.xml"); - Article article = (Article) context.getBean("articleBean"); + ArticleWithSetterInjection article = (ArticleWithSetterInjection) context.getBean("articleWithSetterInjectionBean"); String formattedArticle = article.format("This is a text !"); System.out.print(formattedArticle); diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java new file mode 100644 index 0000000000..776e9f4040 --- /dev/null +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithConstructorInjection.java @@ -0,0 +1,17 @@ +package com.baeldung.dependencyinjectiontypes; + +import org.springframework.beans.factory.annotation.Autowired; + +public class ArticleWithConstructorInjection { + + private TextFormatter formatter; + + @Autowired + public ArticleWithConstructorInjection(TextFormatter formatter) { + this.formatter = formatter; + } + + public String format(String text) { + return formatter.format(text); + } +} diff --git a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java similarity index 79% rename from spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java rename to spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java index 921bba01fb..931c6ea276 100644 --- a/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/Article.java +++ b/spring-core/src/main/java/com/baeldung/dependencyinjectiontypes/ArticleWithSetterInjection.java @@ -2,11 +2,11 @@ package com.baeldung.dependencyinjectiontypes; import org.springframework.beans.factory.annotation.Autowired; -public class Article { +public class ArticleWithSetterInjection { private TextFormatter formatter; - public Article(TextFormatter formatter) { + public ArticleWithSetterInjection(TextFormatter formatter) { this.formatter = formatter; } diff --git a/spring-core/src/main/resources/dependencyinjectiontypes-context.xml b/spring-core/src/main/resources/dependencyinjectiontypes-context.xml index b03d185c43..bd6b3c408d 100644 --- a/spring-core/src/main/resources/dependencyinjectiontypes-context.xml +++ b/spring-core/src/main/resources/dependencyinjectiontypes-context.xml @@ -6,11 +6,18 @@ - + + + + + + + \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionTest.java b/spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionTest.java new file mode 100644 index 0000000000..57c1927e58 --- /dev/null +++ b/spring-core/src/test/java/com/baeldung/dependencyinjectiontypes/DependencyInjectionTest.java @@ -0,0 +1,35 @@ +package com.baeldung.dependencyinjectiontypes; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class DependencyInjectionTest { + + @Test + public void givenAutowiredAnnotation_WhenSetOnSetter_ThenDependencyValid() { + + ApplicationContext context = new ClassPathXmlApplicationContext("dependencyinjectiontypes-context.xml"); + ArticleWithSetterInjection article = (ArticleWithSetterInjection) context.getBean("articleWithSetterInjectionBean"); + + String originalText = "This is a text !"; + String formattedArticle = article.format(originalText); + + assertTrue(originalText.toUpperCase().equals(formattedArticle)); + } + + @Test + public void givenAutowiredAnnotation_WhenSetOnConstructor_ThenDependencyValid() { + + ApplicationContext context = new ClassPathXmlApplicationContext("dependencyinjectiontypes-context.xml"); + ArticleWithConstructorInjection article = (ArticleWithConstructorInjection) context.getBean("articleWithConstructorInjectionBean"); + + String originalText = "This is a text !"; + String formattedArticle = article.format(originalText); + + assertTrue(originalText.toUpperCase().equals(formattedArticle)); + } + +} From bb18eec48d740f69bfa79022edc0bf262c6dcd38 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 30 Oct 2017 15:12:22 +0100 Subject: [PATCH 072/313] refactor cas modules into cas folder --- {cas-secured-app => cas/cas-secured-app}/.gitignore | 0 .../cas-secured-app}/.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 {cas-secured-app => cas/cas-secured-app}/mvnw | 0 {cas-secured-app => cas/cas-secured-app}/mvnw.cmd | 0 {cas-secured-app => cas/cas-secured-app}/pom.xml | 0 .../cassecuredapp/CasSecuredAppApplication.java | 0 .../cassecuredapp/config/SecurityConfig.java | 0 .../cassecuredapp/controllers/AuthController.java | 0 .../cassecuredapp/controllers/IndexController.java | 0 .../controllers/SecuredPageController.java | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/templates/auth/logout.ftl | 0 .../src/main/resources/templates/index.ftl | 0 .../src/main/resources/templates/secure/index.ftl | 0 .../CasSecuredAppApplicationTests.java | 0 {cas-server => cas/cas-server}/.gitignore | 0 {cas-server => cas/cas-server}/LICENSE.txt | 0 {cas-server => cas/cas-server}/README.md | 0 {cas-server => cas/cas-server}/build.cmd | 0 {cas-server => cas/cas-server}/build.sh | 0 .../cas-server}/etc/cas/config/application.yml | 0 .../cas-server}/etc/cas/config/cas.properties | 0 .../cas-server}/etc/cas/config/log4j2.xml | 0 {cas-server => cas/cas-server}/etc/cas/thekeystore | Bin .../cas-server}/etc/cas/thekeystore.crt | Bin .../cas-server}/maven/maven-wrapper.properties | 0 {cas-server => cas/cas-server}/mvnw | 0 {cas-server => cas/cas-server}/mvnw.bat | 0 {cas-server => cas/cas-server}/pom.xml | 0 .../src/main/resources/application.properties | 0 .../cas-server}/src/main/resources/cas.properties | 0 .../src/main/resources/services/casSecuredApp.json | 0 pom.xml | 4 ++-- 34 files changed, 2 insertions(+), 2 deletions(-) rename {cas-secured-app => cas/cas-secured-app}/.gitignore (100%) rename {cas-secured-app => cas/cas-secured-app}/.mvn/wrapper/maven-wrapper.jar (100%) rename {cas-secured-app => cas/cas-secured-app}/.mvn/wrapper/maven-wrapper.properties (100%) rename {cas-secured-app => cas/cas-secured-app}/mvnw (100%) rename {cas-secured-app => cas/cas-secured-app}/mvnw.cmd (100%) rename {cas-secured-app => cas/cas-secured-app}/pom.xml (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/resources/application.properties (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/resources/templates/auth/logout.ftl (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/resources/templates/index.ftl (100%) rename {cas-secured-app => cas/cas-secured-app}/src/main/resources/templates/secure/index.ftl (100%) rename {cas-secured-app => cas/cas-secured-app}/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java (100%) rename {cas-server => cas/cas-server}/.gitignore (100%) rename {cas-server => cas/cas-server}/LICENSE.txt (100%) rename {cas-server => cas/cas-server}/README.md (100%) rename {cas-server => cas/cas-server}/build.cmd (100%) rename {cas-server => cas/cas-server}/build.sh (100%) rename {cas-server => cas/cas-server}/etc/cas/config/application.yml (100%) rename {cas-server => cas/cas-server}/etc/cas/config/cas.properties (100%) rename {cas-server => cas/cas-server}/etc/cas/config/log4j2.xml (100%) rename {cas-server => cas/cas-server}/etc/cas/thekeystore (100%) rename {cas-server => cas/cas-server}/etc/cas/thekeystore.crt (100%) rename {cas-server => cas/cas-server}/maven/maven-wrapper.properties (100%) rename {cas-server => cas/cas-server}/mvnw (100%) rename {cas-server => cas/cas-server}/mvnw.bat (100%) rename {cas-server => cas/cas-server}/pom.xml (100%) rename {cas-server => cas/cas-server}/src/main/resources/application.properties (100%) rename {cas-server => cas/cas-server}/src/main/resources/cas.properties (100%) rename {cas-server => cas/cas-server}/src/main/resources/services/casSecuredApp.json (100%) diff --git a/cas-secured-app/.gitignore b/cas/cas-secured-app/.gitignore similarity index 100% rename from cas-secured-app/.gitignore rename to cas/cas-secured-app/.gitignore diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.jar b/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from cas-secured-app/.mvn/wrapper/maven-wrapper.jar rename to cas/cas-secured-app/.mvn/wrapper/maven-wrapper.jar diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.properties b/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from cas-secured-app/.mvn/wrapper/maven-wrapper.properties rename to cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties diff --git a/cas-secured-app/mvnw b/cas/cas-secured-app/mvnw similarity index 100% rename from cas-secured-app/mvnw rename to cas/cas-secured-app/mvnw diff --git a/cas-secured-app/mvnw.cmd b/cas/cas-secured-app/mvnw.cmd similarity index 100% rename from cas-secured-app/mvnw.cmd rename to cas/cas-secured-app/mvnw.cmd diff --git a/cas-secured-app/pom.xml b/cas/cas-secured-app/pom.xml similarity index 100% rename from cas-secured-app/pom.xml rename to cas/cas-secured-app/pom.xml diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java similarity index 100% rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java similarity index 100% rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java similarity index 100% rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java similarity index 100% rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java similarity index 100% rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java diff --git a/cas-secured-app/src/main/resources/application.properties b/cas/cas-secured-app/src/main/resources/application.properties similarity index 100% rename from cas-secured-app/src/main/resources/application.properties rename to cas/cas-secured-app/src/main/resources/application.properties diff --git a/cas-secured-app/src/main/resources/templates/auth/logout.ftl b/cas/cas-secured-app/src/main/resources/templates/auth/logout.ftl similarity index 100% rename from cas-secured-app/src/main/resources/templates/auth/logout.ftl rename to cas/cas-secured-app/src/main/resources/templates/auth/logout.ftl diff --git a/cas-secured-app/src/main/resources/templates/index.ftl b/cas/cas-secured-app/src/main/resources/templates/index.ftl similarity index 100% rename from cas-secured-app/src/main/resources/templates/index.ftl rename to cas/cas-secured-app/src/main/resources/templates/index.ftl diff --git a/cas-secured-app/src/main/resources/templates/secure/index.ftl b/cas/cas-secured-app/src/main/resources/templates/secure/index.ftl similarity index 100% rename from cas-secured-app/src/main/resources/templates/secure/index.ftl rename to cas/cas-secured-app/src/main/resources/templates/secure/index.ftl diff --git a/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java b/cas/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java similarity index 100% rename from cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java rename to cas/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java diff --git a/cas-server/.gitignore b/cas/cas-server/.gitignore similarity index 100% rename from cas-server/.gitignore rename to cas/cas-server/.gitignore diff --git a/cas-server/LICENSE.txt b/cas/cas-server/LICENSE.txt similarity index 100% rename from cas-server/LICENSE.txt rename to cas/cas-server/LICENSE.txt diff --git a/cas-server/README.md b/cas/cas-server/README.md similarity index 100% rename from cas-server/README.md rename to cas/cas-server/README.md diff --git a/cas-server/build.cmd b/cas/cas-server/build.cmd similarity index 100% rename from cas-server/build.cmd rename to cas/cas-server/build.cmd diff --git a/cas-server/build.sh b/cas/cas-server/build.sh similarity index 100% rename from cas-server/build.sh rename to cas/cas-server/build.sh diff --git a/cas-server/etc/cas/config/application.yml b/cas/cas-server/etc/cas/config/application.yml similarity index 100% rename from cas-server/etc/cas/config/application.yml rename to cas/cas-server/etc/cas/config/application.yml diff --git a/cas-server/etc/cas/config/cas.properties b/cas/cas-server/etc/cas/config/cas.properties similarity index 100% rename from cas-server/etc/cas/config/cas.properties rename to cas/cas-server/etc/cas/config/cas.properties diff --git a/cas-server/etc/cas/config/log4j2.xml b/cas/cas-server/etc/cas/config/log4j2.xml similarity index 100% rename from cas-server/etc/cas/config/log4j2.xml rename to cas/cas-server/etc/cas/config/log4j2.xml diff --git a/cas-server/etc/cas/thekeystore b/cas/cas-server/etc/cas/thekeystore similarity index 100% rename from cas-server/etc/cas/thekeystore rename to cas/cas-server/etc/cas/thekeystore diff --git a/cas-server/etc/cas/thekeystore.crt b/cas/cas-server/etc/cas/thekeystore.crt similarity index 100% rename from cas-server/etc/cas/thekeystore.crt rename to cas/cas-server/etc/cas/thekeystore.crt diff --git a/cas-server/maven/maven-wrapper.properties b/cas/cas-server/maven/maven-wrapper.properties similarity index 100% rename from cas-server/maven/maven-wrapper.properties rename to cas/cas-server/maven/maven-wrapper.properties diff --git a/cas-server/mvnw b/cas/cas-server/mvnw similarity index 100% rename from cas-server/mvnw rename to cas/cas-server/mvnw diff --git a/cas-server/mvnw.bat b/cas/cas-server/mvnw.bat similarity index 100% rename from cas-server/mvnw.bat rename to cas/cas-server/mvnw.bat diff --git a/cas-server/pom.xml b/cas/cas-server/pom.xml similarity index 100% rename from cas-server/pom.xml rename to cas/cas-server/pom.xml diff --git a/cas-server/src/main/resources/application.properties b/cas/cas-server/src/main/resources/application.properties similarity index 100% rename from cas-server/src/main/resources/application.properties rename to cas/cas-server/src/main/resources/application.properties diff --git a/cas-server/src/main/resources/cas.properties b/cas/cas-server/src/main/resources/cas.properties similarity index 100% rename from cas-server/src/main/resources/cas.properties rename to cas/cas-server/src/main/resources/cas.properties diff --git a/cas-server/src/main/resources/services/casSecuredApp.json b/cas/cas-server/src/main/resources/services/casSecuredApp.json similarity index 100% rename from cas-server/src/main/resources/services/casSecuredApp.json rename to cas/cas-server/src/main/resources/services/casSecuredApp.json diff --git a/pom.xml b/pom.xml index 3d28707b5f..d49362db37 100644 --- a/pom.xml +++ b/pom.xml @@ -49,8 +49,8 @@ core-java-8 core-java-concurrency couchbase - cas-server - cas-secured-app + cas/cas-server + cas/cas-secured-app deltaspike dozer From 84191bd7eb6590190d0fff53e514159d526a71a6 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 30 Oct 2017 17:02:28 +0100 Subject: [PATCH 073/313] updated files --- cas/cas-secured-app/.gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cas/cas-secured-app/.gitignore b/cas/cas-secured-app/.gitignore index 2af7cefb0a..ef6a9c0808 100644 --- a/cas/cas-secured-app/.gitignore +++ b/cas/cas-secured-app/.gitignore @@ -21,4 +21,7 @@ build/ nbbuild/ dist/ nbdist/ -.nb-gradle/ \ No newline at end of file +.nb-gradle/ +/.mvn/ +/mvnw +/mvnw.cmd From 8c0eaac37bee95890bc49265738047ce66407012 Mon Sep 17 00:00:00 2001 From: Radu Tamas Date: Tue, 31 Oct 2017 13:35:17 +0200 Subject: [PATCH 074/313] BAEL-1265: Adding jUnit for article --- .../executorservice/DelayedCallable.java | 26 ++++ .../WaitingForThreadsToFinishTest.java | 146 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java create mode 100644 core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java new file mode 100644 index 0000000000..2f0796b491 --- /dev/null +++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java @@ -0,0 +1,26 @@ +package com.baeldung.concurrent.executorservice; + +import java.util.concurrent.Callable; + +public class DelayedCallable implements Callable { + + private String name; + private long period; + + public DelayedCallable(String name, long period) { + this.name = name; + this.period = period; + } + + public String call() { + + try { + Thread.sleep(period); + } catch (InterruptedException ex) { + // handle exception + ex.printStackTrace(); + } + + return name; + } +} diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java new file mode 100644 index 0000000000..4a3ee00f24 --- /dev/null +++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java @@ -0,0 +1,146 @@ +package com.baeldung.concurrent.executorservice; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.*; + +import static junit.framework.TestCase.assertTrue; + +public class WaitingForThreadsToFinishTest { + + private static final Logger LOG = LoggerFactory.getLogger(WaitingForThreadsToFinishTest.class); + private final static ExecutorService WORKER_THREAD_POOL = Executors.newFixedThreadPool(10); + + @Test + public void givenMultipleThreads_whenInvokeAll_thenMainThreadShouldWaitForAllToFinish() { + + ExecutorService WORKER_THREAD_POOL = Executors.newFixedThreadPool(10); + + List> callables = Arrays.asList(new DelayedCallable("fast thread", 100), new DelayedCallable("slow thread", 3000)); + + try { + long startProcessingTime = System.currentTimeMillis(); + List> futures = WORKER_THREAD_POOL.invokeAll(callables); + + long totalProcessingTime = System.currentTimeMillis() - startProcessingTime; + assertTrue(totalProcessingTime >= 3000); + + String firstThreadResponse = futures.get(0) + .get(); + assertTrue("First response should be from the fast thread", "fast thread".equals(firstThreadResponse)); + + String secondThreadResponse = futures.get(1) + .get(); + assertTrue("Last response should be from the slow thread", "slow thread".equals(secondThreadResponse)); + + } catch (ExecutionException | InterruptedException ex) { + ex.printStackTrace(); + } + + WORKER_THREAD_POOL.shutdown(); + } + + @Test + public void givenMultipleThreads_whenUsingCompletionService_thenMainThreadShouldWaitForAllToFinish() { + + CompletionService service = new ExecutorCompletionService<>(WORKER_THREAD_POOL); + + List> callables = Arrays.asList(new DelayedCallable("fast thread", 100), new DelayedCallable("slow thread", 3000)); + + for (Callable callable : callables) { + service.submit(callable); + } + + WORKER_THREAD_POOL.shutdown(); + + try { + + long startProcessingTime = System.currentTimeMillis(); + + Future future = service.take(); + String firstThreadResponse = future.get(); + long totalProcessingTime = System.currentTimeMillis() - startProcessingTime; + + assertTrue("First response should be from the fast thread", "fast thread".equals(firstThreadResponse)); + assertTrue(totalProcessingTime >= 100 && totalProcessingTime < 1000); + LOG.debug("Thread finished after: " + totalProcessingTime + " milliseconds"); + + future = service.take(); + String secondThreadResponse = future.get(); + totalProcessingTime = System.currentTimeMillis() - startProcessingTime; + + assertTrue("Last response should be from the slow thread", "slow thread".equals(secondThreadResponse)); + assertTrue(totalProcessingTime >= 3000 && totalProcessingTime < 4000); + LOG.debug("Thread finished after: " + totalProcessingTime + " milliseconds"); + + } catch (ExecutionException | InterruptedException ex) { + ex.printStackTrace(); + } + + } + + @Test + public void givenMultipleThreads_whenUsingCompletableFutures_thenMainThreadShouldWaitForAllToFinish() { + + CompletableFuture future1 = CompletableFuture.supplyAsync(() -> { + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + return "Hello"; + }); + + CompletableFuture future2 = CompletableFuture.supplyAsync(() -> { + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + return "Beautiful"; + }); + + CompletableFuture future3 = CompletableFuture.supplyAsync(() -> { + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + return "World"; + }); + + long startProcessingTime = System.currentTimeMillis(); + CompletableFuture combinedFuture = CompletableFuture.allOf(future1, future2, future3); + combinedFuture.join(); + + long totalProcessingTime = System.currentTimeMillis() - startProcessingTime; + assertTrue(totalProcessingTime >= 5000 && totalProcessingTime < 6000); + + LOG.debug("Responses from all threads are available after " + totalProcessingTime + " milliseconds"); + + try { + String thread1Response = future1.get(); + assertTrue(thread1Response.equals("Hello")); + + String thread2Response = future2.get(); + assertTrue(thread2Response.equals("Beautiful")); + + String thread3Response = future3.get(); + assertTrue(thread3Response.equals("World")); + + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + } +} From f7eff22638f1fba7ab882f25e1c41a8a28835d05 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Tue, 31 Oct 2017 14:16:55 +0100 Subject: [PATCH 075/313] removed redundant files --- .../.mvn/wrapper/maven-wrapper.jar | Bin 47610 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - cas/cas-secured-app/mvnw | 225 ------------------ cas/cas-secured-app/mvnw.cmd | 143 ----------- 4 files changed, 369 deletions(-) delete mode 100644 cas/cas-secured-app/.mvn/wrapper/maven-wrapper.jar delete mode 100644 cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties delete mode 100644 cas/cas-secured-app/mvnw delete mode 100644 cas/cas-secured-app/mvnw.cmd diff --git a/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.jar b/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 9cc84ea9b4d95453115d0c26488d6a78694e0bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47610 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 diff --git a/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties b/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c315043703..0000000000 --- a/cas/cas-secured-app/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip diff --git a/cas/cas-secured-app/mvnw b/cas/cas-secured-app/mvnw deleted file mode 100644 index 5bf251c077..0000000000 --- a/cas/cas-secured-app/mvnw +++ /dev/null @@ -1,225 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -echo $MAVEN_PROJECTBASEDIR -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/cas/cas-secured-app/mvnw.cmd b/cas/cas-secured-app/mvnw.cmd deleted file mode 100644 index 019bd74d76..0000000000 --- a/cas/cas-secured-app/mvnw.cmd +++ /dev/null @@ -1,143 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% From bb416035b082d331f2d27b6c802d36e4d310163e Mon Sep 17 00:00:00 2001 From: Radu Tamas Date: Tue, 31 Oct 2017 19:25:06 +0200 Subject: [PATCH 076/313] BAEL-1265: Closing ExecutorService in jUnit --- .../executorservice/WaitingForThreadsToFinishTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java index 4a3ee00f24..0f461909ea 100644 --- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java +++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishTest.java @@ -142,5 +142,6 @@ public class WaitingForThreadsToFinishTest { e.printStackTrace(); } + WORKER_THREAD_POOL.shutdown(); } } From 490ee197398a64ddac329fed90156f5c1ebce93a Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 6 Nov 2017 17:10:58 +0100 Subject: [PATCH 077/313] refactor the config for cas-server --- .../CasSecuredAppApplication.java | 8 +- cas/cas-server/etc/cas/thekeystore | Bin 2225 -> 0 bytes cas/cas-server/etc/cas/thekeystore.crt | Bin 808 -> 0 bytes .../src/main/resources/application.properties | 16 ++- .../src/main/resources/cas.properties | 7 +- .../resources/etc/cas/config/application.yml | 2 + .../resources/etc/cas/config/cas.properties | 7 ++ .../main/resources/etc/cas/config/log4j2.xml | 117 ++++++++++++++++++ .../src/main/resources/etc/cas/thekeystore | Bin 0 -> 2243 bytes .../main/resources/etc/cas/thekeystore.crt | Bin 0 -> 885 bytes 10 files changed, 145 insertions(+), 12 deletions(-) delete mode 100644 cas/cas-server/etc/cas/thekeystore delete mode 100644 cas/cas-server/etc/cas/thekeystore.crt create mode 100644 cas/cas-server/src/main/resources/etc/cas/config/application.yml create mode 100644 cas/cas-server/src/main/resources/etc/cas/config/cas.properties create mode 100644 cas/cas-server/src/main/resources/etc/cas/config/log4j2.xml create mode 100644 cas/cas-server/src/main/resources/etc/cas/thekeystore create mode 100644 cas/cas-server/src/main/resources/etc/cas/thekeystore.crt diff --git a/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java index fc05e3b38f..25cbb9bc9b 100644 --- a/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java +++ b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java @@ -40,14 +40,14 @@ public class CasSecuredAppApplication { @Primary public AuthenticationEntryPoint authenticationEntryPoint(ServiceProperties sP) { CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint(); - entryPoint.setLoginUrl("https://localhost:8443/cas/login"); + entryPoint.setLoginUrl("https://localhost:6443/cas/login"); entryPoint.setServiceProperties(sP); return entryPoint; } @Bean public TicketValidator ticketValidator() { - return new Cas30ServiceTicketValidator("https://localhost:8443/cas"); + return new Cas30ServiceTicketValidator("https://localhost:6443/cas"); } @Bean @@ -71,7 +71,7 @@ public class CasSecuredAppApplication { @Bean public LogoutFilter logoutFilter() { LogoutFilter logoutFilter = new LogoutFilter( - "https://localhost:8443/cas/logout", securityContextLogoutHandler()); + "https://localhost:6443/cas/logout", securityContextLogoutHandler()); logoutFilter.setFilterProcessesUrl("/logout/cas"); return logoutFilter; } @@ -79,7 +79,7 @@ public class CasSecuredAppApplication { @Bean public SingleSignOutFilter singleSignOutFilter() { SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter(); - singleSignOutFilter.setCasServerUrlPrefix("https://localhost:8443/cas"); + singleSignOutFilter.setCasServerUrlPrefix("https://localhost:6443/cas"); singleSignOutFilter.setIgnoreInitConfiguration(true); return singleSignOutFilter; } diff --git a/cas/cas-server/etc/cas/thekeystore b/cas/cas-server/etc/cas/thekeystore deleted file mode 100644 index 15f9af2dae6366804459009361140e8526f811b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2225 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 Lt(?_lzc& diff --git a/cas/cas-server/src/main/resources/application.properties b/cas/cas-server/src/main/resources/application.properties index 2d5e9a7277..afacd4cbc1 100644 --- a/cas/cas-server/src/main/resources/application.properties +++ b/cas/cas-server/src/main/resources/application.properties @@ -2,9 +2,9 @@ # CAS Server Context Configuration # server.context-path=/cas -server.port=8443 +server.port=6443 -server.ssl.key-store=file:/etc/cas/thekeystore +server.ssl.key-store=classpath:/etc/cas/thekeystore server.ssl.key-store-password=changeit server.ssl.key-password=changeit # server.ssl.ciphers= @@ -40,6 +40,12 @@ spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true +## +#CAS CONFIG LOCATION +# +cas.standalone.config=classpath:/etc/cas/config + + ## # CAS Cloud Bus Configuration # @@ -82,6 +88,7 @@ spring.thymeleaf.mode=HTML # CAS Log4j Configuration # # logging.config=file:/etc/cas/log4j2.xml + server.context-parameters.isLog4jAutoInitializationDisabled=true ## @@ -104,9 +111,10 @@ cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect cas.authn.jdbc.query[0].user=root cas.authn.jdbc.query[0].password= cas.authn.jdbc.query[0].ddlAuto=none -cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver +#cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver +cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver cas.authn.jdbc.query[0].fieldPassword=password -cas.authn.jdbc.query[0].passwordEncoder.type=BCRYPT +cas.authn.jdbc.query[0].passwordEncoder.type=NONE ## diff --git a/cas/cas-server/src/main/resources/cas.properties b/cas/cas-server/src/main/resources/cas.properties index be2babcd14..f80f22fc11 100644 --- a/cas/cas-server/src/main/resources/cas.properties +++ b/cas/cas-server/src/main/resources/cas.properties @@ -1,16 +1,15 @@ -cas.server.name: https://localhost:8443 -cas.server.prefix: https://localhost:8443/cas +cas.server.name: https://localhost:6443 +cas.server.prefix: https://localhost:643/cas cas.adminPagesSecurity.ip=127\.0\.0\.1 -logging.config: file:/etc/cas/config/log4j2.xml - cas.serviceRegistry.initFromJson=true cas.serviceRegistry.config.location=classpath:/services cas.authn.accept.users= cas.authn.accept.name= + #CAS Database Authentication Property # cas.authn.jdbc.query[0].healthQuery= diff --git a/cas/cas-server/src/main/resources/etc/cas/config/application.yml b/cas/cas-server/src/main/resources/etc/cas/config/application.yml new file mode 100644 index 0000000000..be1f7c3edd --- /dev/null +++ b/cas/cas-server/src/main/resources/etc/cas/config/application.yml @@ -0,0 +1,2 @@ +info: + description: CAS Configuration \ No newline at end of file diff --git a/cas/cas-server/src/main/resources/etc/cas/config/cas.properties b/cas/cas-server/src/main/resources/etc/cas/config/cas.properties new file mode 100644 index 0000000000..47a1477308 --- /dev/null +++ b/cas/cas-server/src/main/resources/etc/cas/config/cas.properties @@ -0,0 +1,7 @@ +cas.server.name: https://cas.example.org:8443 +cas.server.prefix: https://cas.example.org:8443/cas + +cas.adminPagesSecurity.ip=127\.0\.0\.1 + +logging.config: file:/etc/cas/config/log4j2.xml +# cas.serviceRegistry.config.location: classpath:/services diff --git a/cas/cas-server/src/main/resources/etc/cas/config/log4j2.xml b/cas/cas-server/src/main/resources/etc/cas/config/log4j2.xml new file mode 100644 index 0000000000..53b30b4228 --- /dev/null +++ b/cas/cas-server/src/main/resources/etc/cas/config/log4j2.xml @@ -0,0 +1,117 @@ + + + + + + . + + warn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cas/cas-server/src/main/resources/etc/cas/thekeystore b/cas/cas-server/src/main/resources/etc/cas/thekeystore new file mode 100644 index 0000000000000000000000000000000000000000..86170dff16f95409b7f2857a75cba1094b43b5b1 GIT binary patch literal 2243 zcmchYS5(u962|jSqosf#(j2`+{zbohagVRU` zX+~)a$#-XPQ?gf+s@EGNM>zK8*U@a^mr7E&JTq*02^1?!n9TK5Xg#IOCT5WKz#`Y~y9rm#``uapQiu6@9xUi6XOu^RwqPU1dxY0* z8VcRA0dSERqnHQzLn0I=t!JKz*=z4vN%;={*Fx*`Hs-hnFE|4M;$Z|;0&5bh4^ z;iG`LWUW`KTj3Atd4dGg;~0DICG_3LXeoZS`Zohdi(>2ry=DzYAuA+0?fCYqwy$>K zL9iOCj$FuK`nbQvbB!6(fegNosi^nKqE7Gz!bl;WA-I{5Gew8fE|#HEi6qRX z8VIK&znc=Bed-V+&gibiM^Yks-vivn3A-7Y1n%dC?z5(2nhcJetwJ?(o0I2^#p{RX zqqFA{4S&h$?G7S7yxfd-Txh4y`5L0e$c_ZfS4`ekaL-^WT5C^xj1`l+!ieiQkx9R(x?Jdw0#5Jrd5u8#@BE>3!Ftun{ zV~d@rsPr3)=?-05akqJ~;O7wXr(X~5_gimkE$q)=4|x#Xu!Y6~8&}Rn!Ly$b*ef;M zJxlz(=uV@^pg7_Lvn(&cNu8g?Hf@?*5@T2X_U-;w_vsoD*9X>7q>@BsLaIhV{QYsU zmg5a;s_D*VtsChodeOG|A66SDms(mOil^rB&c+|++8itPMrJqfmRggWqA-$TVYxNO zmTJNnS~3>ULd8SAA{mG?V9K)6dOf|2^7hBPYd>#p?j_sy4V-*vzhIdbWpUhD;lGiK zn9pLz>pZGI5-Zf@Ubvf8OY5|->DaE_D7%J##`o^l{ep7?6p^Xh%z(eoBkb}SWt=() z1i6l*Lws>`Fy$!(41mE4hiRwizY>HBLRR52Ew`Hxo{kC2pJ0J1z#lMQ8>h3 zz|IT1;N(j4|CibR-Ys8@mHhQNg8+`f{LFS(mhLoD9 zzg2z{eRo@Un3XUQCiWlQE+uysveI|}GCIr1Y_l;$kPnDUlRU{D1DFWWU`mx_l*l`y z*Ox9o73yj_ha^4sP$`RzqsTZWuo5PB@~1gUX$g2 zrpmsY-LIQ*&~2=sU7{5!6QPzyaI)_0BHc3)QehGFzq|Wr8`!bs8Oy;2xtvB}RN9&OW6hycj6?#tI{ALz6L_Tu7f!RcrqcYcGeO;*gy8rx%w zkM#Ufy5BjeyKjs3axoD<>$1x6%~_e!DHd7_WSed+F*zS}zwi!R@4w45=MR?hhi$Xg za~v#}+@7xJxABSUT@P11H)McdrC~cz>c=!JX=hx9QvPUtGFQe_PAnZa-$5G3iTJzR zI?T+j+73`#oY9|@yRH-D7D3ATn0v=JJ`fj{bK^F3PE%xB=q-|?_yS_*`PI>wUhQ~; z!D%J)Xb(*CJNTgYnIdcKiSo!9AzIj+rtwwz7==f%Gj>(ZVW-r~hv`)aYO|e%+L8cx r$2(t8yGpIvZ)QewhgS{MlKqldYTq&f_lfyx_^8gsEdFM5g;ms__$ADZ literal 0 HcmV?d00001 diff --git a/cas/cas-server/src/main/resources/etc/cas/thekeystore.crt b/cas/cas-server/src/main/resources/etc/cas/thekeystore.crt new file mode 100644 index 0000000000000000000000000000000000000000..5bd9d5babaa13aeb8f33af053456117325b39d3e GIT binary patch literal 885 zcmXqLVlFgjVv1bA%*4pV#3G-u|AYZA8>d#AN85K^Mn-N{27^pPZUas>=1>+kVJ1I! zLp}o@5QjsU)h97MzZk}6hw+6B1VHj!!kjtz$%#1``NbuMP%&;SV$4Wl26E!OhUSKb z24;rFh6W}kQ9!N*kZTC#($gtTj7rD>!N|(M+{DPwV9>W?gSP!NK<`Xq!w{Q9yl2*P;d4-BQN8_b9XUMLTHU zJ5X@Jh#}x<-*uBiskNKG$zAG{zVV^&ZoN{l{b`fT54@Ybt}x$vvV7jLXcwN)f9`MY z2~NtoBHt)i9l2e#RpyfCuAqnoQl}4ku2W3^AaUxjOYH0J%QoA?S?8EP;kYROJ1uqp zM}OV4WuEi+j`zB*Y*>}6DYn9#)jvUHs~2V$qL-VhrL-@4mG<$#R1C>atUzVF#{EN#v_yOy4&@ccHgJ)+1FW zW=00a#fk><2C~5DmgQp+V-cCqqp7*xcDCS6*Vl!wcb!+0=UwBC9EiZw1Pnw*2H$

6bdcT4uOb$?IYv;P~zpOfaTY@GI<^IM8( z?y(o@)7X;8notTXk6wag=_v%H*Ze0Y9tNxs#7-nQHM+9Q*Iwk-Kcm)Nf5>8%b| z6yMnLSSr8%g|%0*PP_iBj>oavQ|c8gH{NL4&XamLHqhdY1k=yFWs Date: Mon, 13 Nov 2017 21:38:21 +0000 Subject: [PATCH 078/313] BAEL-1298 Sudoku - Backtracking Algorithm --- .../sudoku/BacktrackingAlgorithm.java | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java new file mode 100644 index 0000000000..e763653fc8 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java @@ -0,0 +1,89 @@ +package com.baeldung.algorithms.sudoku; + +public class BacktrackingAlgorithm { + + public static void main(String[] args) { + + char[][] board = { + { '8', '.', '.', '.', '.', '.', '.', '.', '.' }, + { '.', '.', '3', '6', '.', '.', '.', '.', '.' }, + { '.', '7', '.', '.', '9', '.', '2', '.', '.' }, + { '.', '5', '.', '.', '.', '7', '.', '.', '.' }, + { '.', '.', '.', '.', '4', '5', '7', '.', '.' }, + { '.', '.', '.', '1', '.', '.', '.', '3', '.' }, + { '.', '.', '1', '.', '.', '.', '.', '6', '8' }, + { '.', '.', '8', '5', '.', '.', '.', '1', '.' }, + { '.', '9', '.', '.', '.', '.', '4', '.', '.' } + }; + + BacktrackingAlgorithm solver = new BacktrackingAlgorithm(); + solver.solve(board); + + for (int i = 0; i < 9; i++) { + for (int j = 0; j < 9; j++) { + System.out.print(board[i][j] + " "); + } + System.out.println(); + } + } + + public boolean solve(char[][] board) { + for (int r = 0; r < board.length; r++) { + for (int c = 0; c < board[0].length; c++) { + if (board[r][c] == '.') { + for (int k = 1; k <= 9; k++) { + board[r][c] = (char) ('0' + k); + if (isValid(board, r, c) && solve(board)) { + return true; + } else { + board[r][c] = '.'; + } + } + return false; + } + } + } + return true; + } + + public boolean isValid(char[][] board, int r, int c) { + //check row + boolean[] row = new boolean[9]; + for (int i = 0; i < 9; i++) { + if (board[r][i] >= '1' && board[r][i] <= '9') { + if (row[board[r][i] - '1'] == false) { + row[board[r][i] - '1'] = true; + } else { + return false; + } + } + } + + //check column + boolean[] col = new boolean[9]; + for (int i = 0; i < 9; i++) { + if (board[i][c] >= '1' && board[i][c] <= '9') { + if (col[board[i][c] - '1'] == false) { + col[board[i][c] - '1'] = true; + } else { + return false; + } + } + } + + //check the 3*3 grid + boolean[] grid = new boolean[9]; + for (int i = (r / 3) * 3; i < (r / 3) * 3 + 3; i++) { + for (int j = (c / 3) * 3; j < (c / 3) * 3 + 3; j++) { + if (board[i][j] >= '1' && board[i][j] <= '9') { + if (grid[board[i][j] - '1'] == false) { + grid[board[i][j] - '1'] = true; + } else { + return false; + } + } + } + } + return true; + } +} From 3351d50a5adf25f82ab58bacb547ba78ef5128d4 Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 13 Nov 2017 21:39:44 +0000 Subject: [PATCH 079/313] BAEL-1298 Sudoku - Backtracking Algorithm --- .../baeldung/algorithms/sudoku/BacktrackingAlgorithm.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java index e763653fc8..6d41caf97e 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java @@ -47,7 +47,6 @@ public class BacktrackingAlgorithm { } public boolean isValid(char[][] board, int r, int c) { - //check row boolean[] row = new boolean[9]; for (int i = 0; i < 9; i++) { if (board[r][i] >= '1' && board[r][i] <= '9') { @@ -59,7 +58,6 @@ public class BacktrackingAlgorithm { } } - //check column boolean[] col = new boolean[9]; for (int i = 0; i < 9; i++) { if (board[i][c] >= '1' && board[i][c] <= '9') { @@ -70,8 +68,7 @@ public class BacktrackingAlgorithm { } } } - - //check the 3*3 grid + boolean[] grid = new boolean[9]; for (int i = (r / 3) * 3; i < (r / 3) * 3 + 3; i++) { for (int j = (c / 3) * 3; j < (c / 3) * 3 + 3; j++) { From f6f9480280636bf926fb4c97541249e31bfd34c2 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Mon, 20 Nov 2017 17:45:11 +0100 Subject: [PATCH 080/313] added sql file to generate tables and database --- .../src/main/resources/application.properties | 2 +- .../resources/create_test_db_and_users_tbl.sql | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 cas/cas-server/src/main/resources/create_test_db_and_users_tbl.sql diff --git a/cas/cas-server/src/main/resources/application.properties b/cas/cas-server/src/main/resources/application.properties index afacd4cbc1..018fd351ff 100644 --- a/cas/cas-server/src/main/resources/application.properties +++ b/cas/cas-server/src/main/resources/application.properties @@ -109,7 +109,7 @@ cas.authn.jdbc.query[0].sql=SELECT * FROM users WHERE email = ? cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect cas.authn.jdbc.query[0].user=root -cas.authn.jdbc.query[0].password= +cas.authn.jdbc.query[0].password=root cas.authn.jdbc.query[0].ddlAuto=none #cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver diff --git a/cas/cas-server/src/main/resources/create_test_db_and_users_tbl.sql b/cas/cas-server/src/main/resources/create_test_db_and_users_tbl.sql new file mode 100644 index 0000000000..79a4a48a82 --- /dev/null +++ b/cas/cas-server/src/main/resources/create_test_db_and_users_tbl.sql @@ -0,0 +1,16 @@ +-- Dumping database structure for test +CREATE DATABASE IF NOT EXISTS `test` /*!40100 DEFAULT CHARACTER SET latin1 */; +USE `test`; + +-- Dumping structure for table test.users +CREATE TABLE IF NOT EXISTS `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `email` varchar(50) DEFAULT NULL, + `password` text DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; + +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` (`id`, `email`, `password`) VALUES + (1, 'test@test.com', 'Mellon'); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; \ No newline at end of file From cbf7bcbbbf8ba18d88a5c7af34e11c361102dc07 Mon Sep 17 00:00:00 2001 From: iaforek Date: Sun, 3 Dec 2017 19:48:43 +0000 Subject: [PATCH 081/313] BAEL-1298 Dancing Links Algorithm. Smaller changes to Backtracking --- .../sudoku/BacktrackingAlgorithm.java | 32 +++-- .../algorithms/sudoku/ColumnNode.java | 33 +++++ .../algorithms/sudoku/DancingLinks.java | 134 ++++++++++++++++++ .../sudoku/DancingLinksAlgorithm.java | 102 +++++++++++++ .../algorithms/sudoku/DancingNode.java | 50 +++++++ 5 files changed, 336 insertions(+), 15 deletions(-) create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java index 6d41caf97e..effdcd9c04 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java @@ -2,23 +2,25 @@ package com.baeldung.algorithms.sudoku; public class BacktrackingAlgorithm { - public static void main(String[] args) { - - char[][] board = { - { '8', '.', '.', '.', '.', '.', '.', '.', '.' }, - { '.', '.', '3', '6', '.', '.', '.', '.', '.' }, - { '.', '7', '.', '.', '9', '.', '2', '.', '.' }, + static char[][] board = { + { '8', '.', '.', '.', '.', '.', '.', '.', '.' }, + { '.', '.', '3', '6', '.', '.', '.', '.', '.' }, + { '.', '7', '.', '.', '9', '.', '2', '.', '.' }, { '.', '5', '.', '.', '.', '7', '.', '.', '.' }, - { '.', '.', '.', '.', '4', '5', '7', '.', '.' }, - { '.', '.', '.', '1', '.', '.', '.', '3', '.' }, - { '.', '.', '1', '.', '.', '.', '.', '6', '8' }, + { '.', '.', '.', '.', '4', '5', '7', '.', '.' }, + { '.', '.', '.', '1', '.', '.', '.', '3', '.' }, + { '.', '.', '1', '.', '.', '.', '.', '6', '8' }, { '.', '.', '8', '5', '.', '.', '.', '1', '.' }, - { '.', '9', '.', '.', '.', '.', '4', '.', '.' } + { '.', '9', '.', '.', '.', '.', '4', '.', '.' } }; - + + public static void main(String[] args) { BacktrackingAlgorithm solver = new BacktrackingAlgorithm(); solver.solve(board); + solver.printBoard(); + } + public void printBoard() { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { System.out.print(board[i][j] + " "); @@ -26,7 +28,7 @@ public class BacktrackingAlgorithm { System.out.println(); } } - + public boolean solve(char[][] board) { for (int r = 0; r < board.length; r++) { for (int c = 0; c < board[0].length; c++) { @@ -45,7 +47,7 @@ public class BacktrackingAlgorithm { } return true; } - + public boolean isValid(char[][] board, int r, int c) { boolean[] row = new boolean[9]; for (int i = 0; i < 9; i++) { @@ -68,7 +70,7 @@ public class BacktrackingAlgorithm { } } } - + boolean[] grid = new boolean[9]; for (int i = (r / 3) * 3; i < (r / 3) * 3 + 3; i++) { for (int j = (c / 3) * 3; j < (c / 3) * 3 + 3; j++) { @@ -79,7 +81,7 @@ public class BacktrackingAlgorithm { return false; } } - } + } } return true; } diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java new file mode 100644 index 0000000000..48538344b6 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java @@ -0,0 +1,33 @@ +package com.baeldung.algorithms.sudoku; + +class ColumnNode extends DancingNode { + int size; + String name; + + public ColumnNode(String n) { + super(); + size = 0; + name = n; + C = this; + } + + void cover() { + unlinkLR(); + for (DancingNode i = this.D; i != this; i = i.D) { + for (DancingNode j = i.R; j != i; j = j.R) { + j.unlinkUD(); + j.C.size--; + } + } + } + + void uncover() { + for (DancingNode i = this.U; i != this; i = i.U) { + for (DancingNode j = i.L; j != i; j = j.L) { + j.C.size++; + j.relinkUD(); + } + } + relinkLR(); + } +} \ No newline at end of file diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java new file mode 100644 index 0000000000..a30f8ecab5 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java @@ -0,0 +1,134 @@ +package com.baeldung.algorithms.sudoku; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +public class DancingLinks { + + private ColumnNode header; + private List answer; + + private void search(int k) { + if (header.R == header) { + handleSolution(answer); + } else { + ColumnNode c = selectColumnNodeHeuristic(); + c.cover(); + + for (DancingNode r = c.D; r != c; r = r.D) { + answer.add(r); + + for (DancingNode j = r.R; j != r; j = j.R) { + j.C.cover(); + } + + search(k + 1); + + r = answer.remove(answer.size() - 1); + c = r.C; + + for (DancingNode j = r.L; j != r; j = j.L) { + j.C.uncover(); + } + } + c.uncover(); + } + } + + private ColumnNode selectColumnNodeHeuristic() { + int min = Integer.MAX_VALUE; + ColumnNode ret = null; + for (ColumnNode c = (ColumnNode) header.R; c != header; c = (ColumnNode) c.R) { + if (c.size < min) { + min = c.size; + ret = c; + } + } + return ret; + } + + private ColumnNode makeDLXBoard(boolean[][] grid) { + final int COLS = grid[0].length; + final int ROWS = grid.length; + + ColumnNode headerNode = new ColumnNode("header"); + ArrayList columnNodes = new ArrayList(); + + for (int i = 0; i < COLS; i++) { + ColumnNode n = new ColumnNode(Integer.toString(i)); + columnNodes.add(n); + headerNode = (ColumnNode) headerNode.hookRight(n); + } + headerNode = headerNode.R.C; + + for (int i = 0; i < ROWS; i++) { + DancingNode prev = null; + for (int j = 0; j < COLS; j++) { + if (grid[i][j] == true) { + ColumnNode col = columnNodes.get(j); + DancingNode newNode = new DancingNode(col); + if (prev == null) + prev = newNode; + col.U.hookDown(newNode); + prev = prev.hookRight(newNode); + col.size++; + } + } + } + + headerNode.size = COLS; + + return headerNode; + } + + public DancingLinks(boolean[][] cover) { + header = makeDLXBoard(cover); + } + + public void runSolver() { + answer = new LinkedList(); + search(0); + } + + public void handleSolution(List answer) { + int[][] result = parseBoard(answer); + printSolution(result); + } + + int size = 9; + + private int[][] parseBoard(List answer) { + int[][] result = new int[size][size]; + for (DancingNode n : answer) { + DancingNode rcNode = n; + int min = Integer.parseInt(rcNode.C.name); + for (DancingNode tmp = n.R; tmp != n; tmp = tmp.R) { + int val = Integer.parseInt(tmp.C.name); + if (val < min) { + min = val; + rcNode = tmp; + } + } + int ans1 = Integer.parseInt(rcNode.C.name); + int ans2 = Integer.parseInt(rcNode.R.C.name); + int r = ans1 / size; + int c = ans1 % size; + int num = (ans2 % size) + 1; + result[r][c] = num; + } + return result; + } + + public static void printSolution(int[][] result) { + int N = result.length; + for (int i = 0; i < N; i++) { + String ret = ""; + for (int j = 0; j < N; j++) { + ret += result[i][j] + " "; + } + System.out.println(ret); + } + System.out.println(); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java new file mode 100644 index 0000000000..5cff88c644 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java @@ -0,0 +1,102 @@ +package com.baeldung.algorithms.sudoku; + +import java.util.*; + +public class DancingLinksAlgorithm { + private static int S = 9; + private static int SIDE = 3; + + static char[][] board = { + { '8', '.', '.', '.', '.', '.', '.', '.', '.' }, + { '.', '.', '3', '6', '.', '.', '.', '.', '.' }, + { '.', '7', '.', '.', '9', '.', '2', '.', '.' }, + { '.', '5', '.', '.', '.', '7', '.', '.', '.' }, + { '.', '.', '.', '.', '4', '5', '7', '.', '.' }, + { '.', '.', '.', '1', '.', '.', '.', '3', '.' }, + { '.', '.', '1', '.', '.', '.', '.', '6', '8' }, + { '.', '.', '8', '5', '.', '.', '.', '1', '.' }, + { '.', '9', '.', '.', '.', '.', '4', '.', '.' } + }; + + public static void main(String[] args) { + + DancingLinksAlgorithm solver = new DancingLinksAlgorithm(); + solver.solve(board); + } + + public boolean solve(char[][] board) { + boolean[][] cover = initializeExactCoverBoard(board); + DancingLinks dlx = new DancingLinks(cover); + dlx.runSolver(); + + return true; + } + + private int getIndex(int row, int col, int num) { + return (row - 1) * S * S + (col - 1) * S + (num - 1); + } + + private boolean[][] createExactCoverBoard() { + boolean[][] R = new boolean[9 * 9 * 9][9 * 9 * 4]; + + int hBase = 0; + + for (int r = 1; r <= S; r++) { + for (int c = 1; c <= S; c++, hBase++) { + for (int n = 1; n <= S; n++) { + int index = getIndex(r, c, n); + R[index][hBase] = true; + } + } + } + + for (int r = 1; r <= S; r++) { + for (int n = 1; n <= S; n++, hBase++) { + for (int c1 = 1; c1 <= S; c1++) { + int index = getIndex(r, c1, n); + R[index][hBase] = true; + } + } + } + + for (int c = 1; c <= S; c++) { + for (int n = 1; n <= S; n++, hBase++) { + for (int r1 = 1; r1 <= S; r1++) { + int index = getIndex(r1, c, n); + R[index][hBase] = true; + } + } + } + + for (int br = 1; br <= S; br += SIDE) { + for (int bc = 1; bc <= S; bc += SIDE) { + for (int n = 1; n <= S; n++, hBase++) { + for (int rDelta = 0; rDelta < SIDE; rDelta++) { + for (int cDelta = 0; cDelta < SIDE; cDelta++) { + int index = getIndex(br + rDelta, bc + cDelta, n); + R[index][hBase] = true; + } + } + } + } + } + return R; + } + + private boolean[][] initializeExactCoverBoard(char[][] sudoku) { + boolean[][] R = createExactCoverBoard(); + for (int i = 1; i <= S; i++) { + for (int j = 1; j <= S; j++) { + char n = sudoku[i - 1][j - 1]; + if (n != '.') { + for (int num = 1; num <= S; num++) { + if ((char) ('0' + num) != n) { + Arrays.fill(R[getIndex(i, j, num)], false); + } + } + } + } + } + return R; + } +} \ No newline at end of file diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java new file mode 100644 index 0000000000..13dc3f2b57 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java @@ -0,0 +1,50 @@ +package com.baeldung.algorithms.sudoku; + +class DancingNode { + DancingNode L, R, U, D; + ColumnNode C; + + DancingNode hookDown(DancingNode n1) { + assert (this.C == n1.C); + n1.D = this.D; + n1.D.U = n1; + n1.U = this; + this.D = n1; + return n1; + } + + DancingNode hookRight(DancingNode n1) { + n1.R = this.R; + n1.R.L = n1; + n1.L = this; + this.R = n1; + return n1; + } + + void unlinkLR() { + this.L.R = this.R; + this.R.L = this.L; + } + + void relinkLR() { + this.L.R = this.R.L = this; + } + + void unlinkUD() { + this.U.D = this.D; + this.D.U = this.U; + } + + void relinkUD() { + this.U.D = this.D.U = this; + } + + public DancingNode() { + L = R = U = D = this; + } + + public DancingNode(ColumnNode c) { + this(); + C = c; + } +} \ No newline at end of file From c2575d3b642185ad9f8e201796d0527389cdf14d Mon Sep 17 00:00:00 2001 From: iaforek Date: Mon, 4 Dec 2017 20:45:50 +0000 Subject: [PATCH 082/313] BAEL-1298 Resolve conflict - use most up-to-date POM --- core-java/pom.xml | 884 ++++++++++++++++++++++++---------------------- 1 file changed, 452 insertions(+), 432 deletions(-) diff --git a/core-java/pom.xml b/core-java/pom.xml index 0e57b35ab8..6be76cab33 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,476 +1,496 @@ - 4.0.0 - com.baeldung - core-java - 0.1.0-SNAPSHOT - jar + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + core-java + 0.1.0-SNAPSHOT + jar - core-java + core-java - + - - - net.sourceforge.collections - collections-generic - ${collections-generic.version} - - - com.google.guava - guava - ${guava.version} - + + + net.sourceforge.collections + collections-generic + ${collections-generic.version} + + + com.google.guava + guava + ${guava.version} + - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + - - commons-io - commons-io - ${commons-io.version} - + + commons-io + commons-io + ${commons-io.version} + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.apache.commons - commons-math3 - ${commons-math3.version} - + + org.apache.commons + commons-math3 + ${commons-math3.version} + - - org.decimal4j - decimal4j - ${decimal4j.version} - + + org.decimal4j + decimal4j + ${decimal4j.version} + - - org.bouncycastle - bcprov-jdk15on - ${bouncycastle.version} - + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + - - org.unix4j - unix4j-command - ${unix4j.version} - + + org.unix4j + unix4j-command + ${unix4j.version} + - - com.googlecode.grep4j - grep4j - ${grep4j.version} - - + + com.googlecode.grep4j + grep4j + ${grep4j.version} + + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - - - log4j - log4j - 1.2.17 - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - org.projectlombok - lombok - ${lombok.version} - provided - + + + log4j + log4j + 1.2.17 + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + - + - - org.hamcrest - hamcrest-all - 1.3 - test - + + org.hamcrest + hamcrest-all + 1.3 + test + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.assertj - assertj-core - ${assertj.version} - test - + + org.assertj + assertj-core + ${assertj.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - - - com.jayway.awaitility - awaitility - ${avaitility.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + + + com.jayway.awaitility + awaitility + ${avaitility.version} + test + - - commons-codec - commons-codec - ${commons-codec.version} - + + commons-codec + commons-codec + ${commons-codec.version} + - - org.javamoney - moneta - 1.1 - + + org.javamoney + moneta + 1.1 + - - org.owasp.esapi - esapi - 2.1.0.1 - + + org.owasp.esapi + esapi + 2.1.0.1 + + + com.h2database + h2 + 1.4.196 + runtime + + + com.sun.messaging.mq + fscontext + ${fscontext.version} + + + com.codepoetics + protonpack + ${protonpack.version} + + + one.util + streamex + ${streamex.version} + + + io.vavr + vavr + ${vavr.version} + + + org.openjdk.jmh + jmh-core + 1.19 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.19 + + + org.springframework + spring-web + 4.3.4.RELEASE + - - com.sun.messaging.mq - fscontext - ${fscontext.version} - - - com.codepoetics - protonpack - ${protonpack.version} - - - one.util - streamex - ${streamex.version} - - - io.vavr - vavr - ${vavr.version} - - - org.openjdk.jmh - jmh-core - 1.19 - - - org.openjdk.jmh - jmh-generator-annprocess - 1.19 - - + + org.springframework.boot + spring-boot-starter + 1.5.8.RELEASE + - - core-java - - - src/main/resources - true - - + - + + core-java + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*IntegrationTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - - true - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-dependencies - prepare-package - - copy-dependencies - - - ${project.build.directory}/libs - - - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + **/*IntegrationTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + - - org.apache.maven.plugins - maven-jar-plugin - - - - true - libs/ - org.baeldung.executable.ExecutableMavenJar - - - - + + - - org.apache.maven.plugins - maven-assembly-plugin - - - package - - single - - - ${project.basedir} - - - org.baeldung.executable.ExecutableMavenJar - - - - jar-with-dependencies - - - - - + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/libs + + + + - - org.apache.maven.plugins - maven-shade-plugin - - - - shade - - - true - - - org.baeldung.executable.ExecutableMavenJar - - - - - - + + org.apache.maven.plugins + maven-jar-plugin + + + + true + libs/ + org.baeldung.executable.ExecutableMavenJar + + + + - - com.jolira - onejar-maven-plugin - - - - org.baeldung.executable.ExecutableMavenJar - true - ${project.build.finalName}-onejar.${project.packaging} - - - one-jar - - - - + + org.apache.maven.plugins + maven-assembly-plugin + + + package + + single + + + ${project.basedir} + + + org.baeldung.executable.ExecutableMavenJar + + + + jar-with-dependencies + + + + + - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - spring-boot - org.baeldung.executable.ExecutableMavenJar - - - - + + org.apache.maven.plugins + maven-shade-plugin + + + + shade + + + true + + + org.baeldung.executable.ExecutableMavenJar + + + + + + - - org.codehaus.mojo - exec-maven-plugin - 1.6.0 - - java - com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed - - -Xmx300m - -XX:+UseParallelGC - -classpath - - com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed - - - - - - org.codehaus.mojo - exec-maven-plugin - - - - run-benchmarks - integration-test - - exec - - - test - java - - -classpath - - org.openjdk.jmh.Main - .* - - - - - - + + com.jolira + onejar-maven-plugin + + + + org.baeldung.executable.ExecutableMavenJar + true + ${project.build.finalName}-onejar.${project.packaging} + + + one-jar + + + + - + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + spring-boot + org.baeldung.executable.ExecutableMavenJar + + + + - - - integration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*ManualTest.java - - - **/*IntegrationTest.java - - - - - - - json - - - - - - - + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + -Xmx300m + -XX:+UseParallelGC + -classpath + + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + + - - - 2.8.5 - - 1.7.21 - 1.1.7 + - - 22.0 - 3.5 - 1.55 - 1.10 - 3.6.1 - 1.0.3 - 2.5 - 4.1 - 4.01 - 0.4 - 1.8.7 - 1.16.12 - 4.6-b01 - 1.13 - 0.6.5 - 0.9.0 + - - 1.3 - 4.12 - 2.8.9 - 3.6.1 - 1.7.0 + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*ManualTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + org.codehaus.mojo + exec-maven-plugin - - 3.6.0 - 2.19.1 - + + + run-benchmarks + + none + + exec + + + test + java + + -classpath + + org.openjdk.jmh.Main + .* + + + + + + + + + + + + + 2.8.5 + + + 1.7.21 + 1.1.7 + + + 22.0 + 3.5 + 1.55 + 1.10 + 3.6.1 + 1.0.3 + 2.5 + 4.1 + 4.01 + 0.4 + 1.8.7 + 1.16.12 + 4.6-b01 + 1.13 + 0.6.5 + 0.9.0 + + + 1.3 + 4.12 + 2.8.9 + 3.6.1 + 1.7.0 + + + 3.6.0 + 2.19.1 + \ No newline at end of file From 6b3ba3311953d97302e33808367b49f17e1b0c0d Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Thu, 14 Dec 2017 05:18:00 +0100 Subject: [PATCH 083/313] added source code for VRaptor --- pom.xml | 1 + vraptor/.gitignore | 4 + vraptor/README.md | 13 + vraptor/pom.xml | 134 + .../java/com/baeldung/config/UserInfo.java | 23 + .../baeldung/controllers/AuthController.java | 95 + .../baeldung/controllers/IndexController.java | 40 + .../baeldung/controllers/PostController.java | 84 + .../main/java/com/baeldung/daos/PostDao.java | 54 + .../main/java/com/baeldung/daos/UserDao.java | 51 + .../main/java/com/baeldung/models/Post.java | 105 + .../main/java/com/baeldung/models/User.java | 109 + vraptor/src/main/resources/META-INF/beans.xml | 8 + vraptor/src/main/resources/database.sql | 55 + vraptor/src/main/resources/hibernate.cfg.xml | 31 + vraptor/src/main/resources/log4j.xml | 36 + .../main/resources/templates/auth/login.ftl | 172 + .../resources/templates/auth/register.ftl | 187 + .../src/main/resources/templates/index.ftl | 173 + .../main/resources/templates/posts/add.ftl | 157 + vraptor/src/main/resources/templates/view.ftl | 152 + vraptor/src/main/webapp/META-INF/MANIFEST.MF | 3 + .../main/webapp/WEB-INF/jsp/index/index.jsp | 10 + vraptor/src/main/webapp/WEB-INF/web.xml | 19 + vraptor/src/main/webapp/css/clean-blog.css | 400 + .../src/main/webapp/css/clean-blog.min.css | 5 + vraptor/src/main/webapp/img/about-bg.jpg | Bin 0 -> 33097 bytes vraptor/src/main/webapp/img/contact-bg.jpg | Bin 0 -> 290070 bytes vraptor/src/main/webapp/img/home-bg.jpg | Bin 0 -> 172779 bytes vraptor/src/main/webapp/img/post-bg.jpg | Bin 0 -> 140909 bytes .../src/main/webapp/img/post-sample-image.jpg | Bin 0 -> 115144 bytes vraptor/src/main/webapp/js/clean-blog.js | 40 + vraptor/src/main/webapp/js/clean-blog.min.js | 6 + vraptor/src/main/webapp/js/contact_me.js | 72 + .../main/webapp/js/jqBootstrapValidation.js | 912 ++ .../webapp/vendor/bootstrap/css/bootstrap.css | 6757 ++++++++++ .../vendor/bootstrap/css/bootstrap.min.css | 6 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../webapp/vendor/bootstrap/js/bootstrap.js | 2377 ++++ .../vendor/bootstrap/js/bootstrap.min.js | 7 + .../vendor/font-awesome/css/font-awesome.css | 2199 +++ .../font-awesome/css/font-awesome.min.css | 4 + .../vendor/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome-webfont.svg | 685 + .../fonts/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes .../vendor/font-awesome/less/animated.less | 34 + .../font-awesome/less/bordered-pulled.less | 25 + .../webapp/vendor/font-awesome/less/core.less | 12 + .../vendor/font-awesome/less/fixed-width.less | 6 + .../font-awesome/less/font-awesome.less | 18 + .../vendor/font-awesome/less/icons.less | 733 + .../vendor/font-awesome/less/larger.less | 13 + .../webapp/vendor/font-awesome/less/list.less | 19 + .../vendor/font-awesome/less/mixins.less | 60 + .../webapp/vendor/font-awesome/less/path.less | 15 + .../font-awesome/less/rotated-flipped.less | 20 + .../font-awesome/less/screen-reader.less | 5 + .../vendor/font-awesome/less/stacked.less | 20 + .../vendor/font-awesome/less/variables.less | 744 ++ .../vendor/font-awesome/scss/_animated.scss | 34 + .../font-awesome/scss/_bordered-pulled.scss | 25 + .../vendor/font-awesome/scss/_core.scss | 12 + .../font-awesome/scss/_fixed-width.scss | 6 + .../vendor/font-awesome/scss/_icons.scss | 733 + .../vendor/font-awesome/scss/_larger.scss | 13 + .../vendor/font-awesome/scss/_list.scss | 19 + .../vendor/font-awesome/scss/_mixins.scss | 60 + .../vendor/font-awesome/scss/_path.scss | 15 + .../font-awesome/scss/_rotated-flipped.scss | 20 + .../font-awesome/scss/_screen-reader.scss | 5 + .../vendor/font-awesome/scss/_stacked.scss | 20 + .../vendor/font-awesome/scss/_variables.scss | 744 ++ .../font-awesome/scss/font-awesome.scss | 18 + .../src/main/webapp/vendor/jquery/jquery.js | 11008 ++++++++++++++++ .../main/webapp/vendor/jquery/jquery.min.js | 5 + 82 files changed, 29935 insertions(+) create mode 100644 vraptor/.gitignore create mode 100644 vraptor/README.md create mode 100644 vraptor/pom.xml create mode 100644 vraptor/src/main/java/com/baeldung/config/UserInfo.java create mode 100644 vraptor/src/main/java/com/baeldung/controllers/AuthController.java create mode 100644 vraptor/src/main/java/com/baeldung/controllers/IndexController.java create mode 100644 vraptor/src/main/java/com/baeldung/controllers/PostController.java create mode 100644 vraptor/src/main/java/com/baeldung/daos/PostDao.java create mode 100644 vraptor/src/main/java/com/baeldung/daos/UserDao.java create mode 100644 vraptor/src/main/java/com/baeldung/models/Post.java create mode 100644 vraptor/src/main/java/com/baeldung/models/User.java create mode 100644 vraptor/src/main/resources/META-INF/beans.xml create mode 100644 vraptor/src/main/resources/database.sql create mode 100644 vraptor/src/main/resources/hibernate.cfg.xml create mode 100644 vraptor/src/main/resources/log4j.xml create mode 100644 vraptor/src/main/resources/templates/auth/login.ftl create mode 100644 vraptor/src/main/resources/templates/auth/register.ftl create mode 100644 vraptor/src/main/resources/templates/index.ftl create mode 100644 vraptor/src/main/resources/templates/posts/add.ftl create mode 100644 vraptor/src/main/resources/templates/view.ftl create mode 100644 vraptor/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 vraptor/src/main/webapp/WEB-INF/jsp/index/index.jsp create mode 100644 vraptor/src/main/webapp/WEB-INF/web.xml create mode 100644 vraptor/src/main/webapp/css/clean-blog.css create mode 100644 vraptor/src/main/webapp/css/clean-blog.min.css create mode 100644 vraptor/src/main/webapp/img/about-bg.jpg create mode 100644 vraptor/src/main/webapp/img/contact-bg.jpg create mode 100644 vraptor/src/main/webapp/img/home-bg.jpg create mode 100644 vraptor/src/main/webapp/img/post-bg.jpg create mode 100644 vraptor/src/main/webapp/img/post-sample-image.jpg create mode 100644 vraptor/src/main/webapp/js/clean-blog.js create mode 100644 vraptor/src/main/webapp/js/clean-blog.min.js create mode 100644 vraptor/src/main/webapp/js/contact_me.js create mode 100644 vraptor/src/main/webapp/js/jqBootstrapValidation.js create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.css create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.min.css create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.js create mode 100644 vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.min.js create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.css create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.min.css create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/FontAwesome.otf create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/animated.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/bordered-pulled.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/core.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/fixed-width.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/font-awesome.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/icons.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/larger.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/list.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/mixins.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/path.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/rotated-flipped.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/screen-reader.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/stacked.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/less/variables.less create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_animated.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_bordered-pulled.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_core.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_fixed-width.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_icons.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_larger.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_list.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_mixins.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_path.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_rotated-flipped.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_screen-reader.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_stacked.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/_variables.scss create mode 100644 vraptor/src/main/webapp/vendor/font-awesome/scss/font-awesome.scss create mode 100644 vraptor/src/main/webapp/vendor/jquery/jquery.js create mode 100644 vraptor/src/main/webapp/vendor/jquery/jquery.min.js diff --git a/pom.xml b/pom.xml index 2c611e6efe..a5eacf0a7a 100644 --- a/pom.xml +++ b/pom.xml @@ -263,6 +263,7 @@ deeplearning4j spring-boot-admin lucene + vraptor diff --git a/vraptor/.gitignore b/vraptor/.gitignore new file mode 100644 index 0000000000..27dc294cd1 --- /dev/null +++ b/vraptor/.gitignore @@ -0,0 +1,4 @@ + +/target/ +/.idea/ +/src/main/webapp/WEB-INF/classes/ diff --git a/vraptor/README.md b/vraptor/README.md new file mode 100644 index 0000000000..d547fc1274 --- /dev/null +++ b/vraptor/README.md @@ -0,0 +1,13 @@ +# VRaptor blank project + +This is a blank project to help you to use VRaptor. You can easily import in you IDE as Maven project. + +Este é um projeto em branco para ajudar você a usar o VRaptor. Você pode facilmente importá-lo na sua IDE favorita como um projeto Maven. + +Após criar seu projeto você pode rodá-lo com um tomcat7 ou +: + +``` +mvn tomcat7:run +``` + +Cuidado para *jamais* executar `mvn tomcat:run` pois ele usará um tomcat6 (incompatível). diff --git a/vraptor/pom.xml b/vraptor/pom.xml new file mode 100644 index 0000000000..1f094a3465 --- /dev/null +++ b/vraptor/pom.xml @@ -0,0 +1,134 @@ + + 4.0.0 + + com.baeldung + vraptor + 1.0.0 + war + + A demo project to start using VRaptor 4 + + + UTF-8 + 2.1.2.Final + + + + + br.com.caelum + vraptor + 4.2.0-RC3 + + + + org.jboss.weld.servlet + weld-servlet-core + 2.1.2.Final + + + org.jboss.spec.javax.el + jboss-el-api_3.0_spec + + + + + + org.jboss.weld + weld-core-impl + 2.1.2.Final + + + org.jboss.spec.javax.el + jboss-el-api_3.0_spec + + + + + + javax.el + el-api + 2.2 + provided + + + + org.hibernate + hibernate-validator-cdi + 5.1.1.Final + + + + javax.servlet + jstl + 1.2 + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + org.slf4j + slf4j-log4j12 + 1.7.5 + + + + br.com.caelum.vraptor + vraptor-freemarker + 4.1.0-RC3 + + + + br.com.caelum.vraptor + vraptor-hibernate + 4.0.4 + + + + mysql + mysql-connector-java + 8.0.8-dmr + + + + org.mindrot + jbcrypt + 0.4 + + + + org.freemarker + freemarker + 2.3.27-incubating + + + + + + vraptor + src/main/webapp/WEB-INF/classes + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.1 + + / + + + + + diff --git a/vraptor/src/main/java/com/baeldung/config/UserInfo.java b/vraptor/src/main/java/com/baeldung/config/UserInfo.java new file mode 100644 index 0000000000..2613128790 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/config/UserInfo.java @@ -0,0 +1,23 @@ +package com.baeldung.config; + +import com.baeldung.models.User; + +import javax.enterprise.context.SessionScoped; +import java.io.Serializable; + +@SessionScoped +public class UserInfo implements Serializable { + + private User user; + + + public UserInfo() {} + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } +} diff --git a/vraptor/src/main/java/com/baeldung/controllers/AuthController.java b/vraptor/src/main/java/com/baeldung/controllers/AuthController.java new file mode 100644 index 0000000000..7f93e59606 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/controllers/AuthController.java @@ -0,0 +1,95 @@ +package com.baeldung.controllers; + +import br.com.caelum.vraptor.Controller; +import br.com.caelum.vraptor.Path; +import br.com.caelum.vraptor.Result; +import br.com.caelum.vraptor.freemarker.FreemarkerView; +import br.com.caelum.vraptor.validator.Validator; +import com.baeldung.config.UserInfo; +import com.baeldung.daos.UserDao; +import com.baeldung.models.User; +import org.mindrot.jbcrypt.BCrypt; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; +import java.util.logging.Logger; + +@Controller +public class AuthController { + + private Validator validator; + private UserDao userDao; + private Result result; + private UserInfo userInfo; + private Logger logger = Logger.getLogger(getClass().getName()); + + public AuthController() { + this(null, null, null, null); + } + + @Inject + public AuthController(Validator validator, UserDao userDao, Result result, UserInfo userInfo) { + this.validator = validator; + this.userDao = userDao; + this.result = result; + this.userInfo = userInfo; + } + + @Path("/register") + public void register(User user, HttpServletRequest request) { + + if(request.getMethod().equals("GET")) { + result.use(FreemarkerView.class).withTemplate("auth/register"); + } + else if(request.getMethod().equals("POST")) { + validator.validate(user); + validator.onErrorRedirectTo(this).register(user, request); + if(!user.getPassword().equals(request.getParameter("password_confirmation"))) { + result.include("error", "Passwords Do Not Match"); + result.redirectTo(this).register(null, request); + } + user.setPassword(BCrypt.hashpw(user.getPassword(), BCrypt.gensalt())); + Object resp = userDao.add(user); + if(resp != null) { + result.include("status", "Registration Successful! Now Login"); + result.redirectTo(this).login(request); + } else { + result.include("error", "There was an error during registration"); + result.redirectTo(this).register(user, request); + } + + } else { + result.notFound(); + } + } + + @Path("/login") + public void login(HttpServletRequest request) { + + if(request.getMethod().equals("GET")) { + result.use(FreemarkerView.class).withTemplate("auth/login"); + } + else if(request.getMethod().equals("POST")) { + + if (request.getParameter("user.email").isEmpty() || request.getParameter("user.password").isEmpty()) { + result.include("error", "Email/Password is Required!"); + result.redirectTo(AuthController.class).login(request); + } + + User user = userDao.findByEmail(request.getParameter("user.email")); + if (Objects.nonNull(user) && BCrypt.checkpw(request.getParameter("user.password"), user.getPassword())) { + userInfo.setUser(user); + result.include("status", "Login Successful!"); + result.redirectTo(IndexController.class).index(); + } else { + result.include("error", "Email/Password Does Not Match!"); + result.redirectTo(AuthController.class).login(request); + } + } + else { + result.include("error", "Invalid Request"); + result.notFound(); + } + } +} diff --git a/vraptor/src/main/java/com/baeldung/controllers/IndexController.java b/vraptor/src/main/java/com/baeldung/controllers/IndexController.java new file mode 100644 index 0000000000..2e3f1f1126 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/controllers/IndexController.java @@ -0,0 +1,40 @@ +package com.baeldung.controllers; + +import br.com.caelum.vraptor.Controller; +import br.com.caelum.vraptor.Path; +import br.com.caelum.vraptor.Result; +import br.com.caelum.vraptor.freemarker.FreemarkerView; +import com.baeldung.daos.PostDao; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.inject.Inject; + +@Controller +public class IndexController { + + private PostDao postDao; + private final Result result; + private static final Logger logger = LoggerFactory.getLogger(IndexController.class); + + public IndexController() { + this(null, null); + } + + @Inject + public IndexController(Result result, PostDao postDao) { + this.result = result; + this.postDao = postDao; + } + + @Path("/") + public void index() { + result.include("posts", postDao.all()); + result.use(FreemarkerView.class).withTemplate("index"); + } + + + + + +} \ No newline at end of file diff --git a/vraptor/src/main/java/com/baeldung/controllers/PostController.java b/vraptor/src/main/java/com/baeldung/controllers/PostController.java new file mode 100644 index 0000000000..dfb7589120 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/controllers/PostController.java @@ -0,0 +1,84 @@ +package com.baeldung.controllers; + +import br.com.caelum.vraptor.Controller; +import br.com.caelum.vraptor.Get; +import br.com.caelum.vraptor.Path; +import br.com.caelum.vraptor.Result; +import br.com.caelum.vraptor.freemarker.FreemarkerView; +import br.com.caelum.vraptor.validator.Validator; +import com.baeldung.config.UserInfo; +import com.baeldung.daos.PostDao; +import com.baeldung.models.Post; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; +import java.util.logging.Logger; + +@Controller +public class PostController { + + private Result result; + private Logger logger = Logger.getLogger(PostController.class.getName()); + private PostDao postDao; + private UserInfo userInfo; + private Validator validator; + + public PostController() {} + + @Inject + public PostController(Result result, PostDao postDao, UserInfo userInfo, Validator validator) { + this.result = result; + this.postDao = postDao; + this.userInfo = userInfo; + this.validator = validator; + } + + + @Path(value = "/post/add") + public void add(Post post, HttpServletRequest request) { + + if(request.getMethod().equals("GET")) { + + if(Objects.isNull(userInfo.getUser())) { + result.include("error", "Please Login to Proceed"); + result.redirectTo(AuthController.class).login(request); + return; + } + + result.use(FreemarkerView.class).withTemplate("posts/add"); + } + else if(request.getMethod().equals("POST")) { + + post.setAuthor(userInfo.getUser()); + + validator.validate(post); + if(validator.hasErrors()) + result.include("error", "Post's Title (min of 5 chars) and Body (min of 10 chars) is Required"); + validator.onErrorRedirectTo(this).add(post, request); + + Object id = postDao.add(post); + + if(Objects.nonNull(id)) { + result.include("status", "Post Added Successfully"); + result.redirectTo(IndexController.class).index(); + } else { + result.include("error", "There was an error creating the post. Try Again"); + result.redirectTo(this).add(post, request); + } + } + else { + result.include("error", "Invalid Request Type"); + result.redirectTo(IndexController.class).index(); + } + } + + @Get("/posts/{id}") + public void view(int id) { + result.include("post", postDao.findById(id)); + result.use(FreemarkerView.class).withTemplate("view"); + } + + + +} diff --git a/vraptor/src/main/java/com/baeldung/daos/PostDao.java b/vraptor/src/main/java/com/baeldung/daos/PostDao.java new file mode 100644 index 0000000000..d4a8af15b8 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/daos/PostDao.java @@ -0,0 +1,54 @@ +package com.baeldung.daos; + +import com.baeldung.controllers.PostController; +import com.baeldung.models.Post; +import org.hibernate.Session; +import org.hibernate.SessionFactory; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import java.util.List; +import java.util.logging.Logger; + +@RequestScoped +public class PostDao { + + private Logger logger = Logger.getLogger(PostController.class.getName()); + private SessionFactory sessionFactory; + + public PostDao() {} + + @Inject + public PostDao(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + public Object add(Post post) { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + Object id = session.save(post); + session.getTransaction().commit(); + session.close(); + return id; + } + + public Post findById(int id) { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + Post post = (Post) session.get(Post.class, id); + session.getTransaction().commit(); + session.close(); + return post; + } + + + public List all() { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + List posts = (List) session.createQuery("FROM Post p").list(); + session.getTransaction().commit(); + session.close(); + return posts; + } + +} diff --git a/vraptor/src/main/java/com/baeldung/daos/UserDao.java b/vraptor/src/main/java/com/baeldung/daos/UserDao.java new file mode 100644 index 0000000000..5e63ff9b26 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/daos/UserDao.java @@ -0,0 +1,51 @@ +package com.baeldung.daos; + +import com.baeldung.models.User; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; +import org.omg.PortableInterceptor.LOCATION_FORWARD; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import java.util.logging.Logger; + +@RequestScoped +public class UserDao { + + SessionFactory sessionFactory; + Logger logger = Logger.getLogger(getClass().getName()); + + public UserDao() { + this(null); + } + + @Inject + public UserDao(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + + public Object add(User user) { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + Object Id = session.save(user); + session.getTransaction().commit(); + return Id; + } + + public User findByEmail(String email) { + Session session = sessionFactory.openSession(); + session.beginTransaction(); + Criteria criteria = session.createCriteria(User.class); + criteria.add(Restrictions.eq("email", email)); + criteria.setMaxResults(1); + User u = (User) criteria.uniqueResult(); + session.getTransaction().commit(); + session.close(); + return u; + } + +} diff --git a/vraptor/src/main/java/com/baeldung/models/Post.java b/vraptor/src/main/java/com/baeldung/models/Post.java new file mode 100644 index 0000000000..6beb6e1682 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/models/Post.java @@ -0,0 +1,105 @@ +package com.baeldung.models; + + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.logging.Logger; + +@Entity +@Table(name = "posts") +public class Post { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @NotNull @Size(min = 10) + @Column(columnDefinition = "longtext") + private String post; + + @NotNull @Size(min = 5, max = 100) + @Column(unique = true) + private String title; + + @NotNull + @ManyToOne(targetEntity = User.class, optional = false) + private User author; + + @Column(name = "created_at") + private Date createdAt; + + @Column(name = "updated_at") + private Date updatedAt; + + @Transient + private Logger logger = Logger.getLogger(getClass().getName()); + + public Post() { + createdAt = new Date(); + updatedAt = new Date(); + } + + public Post(String title, String post, User author) { + this.title = title; + this.post = post; + this.author = author; + createdAt = new Date(); + updatedAt = new Date(); + } + + public int getId() { + return id; + } + + public String getPost() { + return post; + } + + public void setPost(String post) { + this.post = post; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public User getAuthor() { + return author; + } + + public void setAuthor(User author) { + this.author = author; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + @Override + public String toString() { + return "title: " + this.title + + "\npost: " + this.post + + "\nauthor: " + this.author + +"\ncreatetdAt: " + this.createdAt + + "\nupdatedAt: " + this.updatedAt; + } +} diff --git a/vraptor/src/main/java/com/baeldung/models/User.java b/vraptor/src/main/java/com/baeldung/models/User.java new file mode 100644 index 0000000000..69af299ca6 --- /dev/null +++ b/vraptor/src/main/java/com/baeldung/models/User.java @@ -0,0 +1,109 @@ +package com.baeldung.models; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import java.time.LocalDateTime; +import java.util.Date; + +@Entity +@Table(name = "users") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @NotNull + @Size(min=3, max=255) + private String name; + + @Column(unique = true) + @NotNull @Pattern(regexp = "" + + "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+" + + "(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"" + + "(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\" + + "[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@" + + "(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]" + + "(?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" + + "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]" + + ":(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\" + + "[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", + message = "Invalid Email Address") + private String email; + + @NotNull + @Size(min=6, max=255) + private String password; + + @Column(name = "created_at") + private Date createdAt; + + @Column(name = "updated_at") + private Date updatedAt; + + public User() { + updatedAt = new Date(); + createdAt = new Date(); + } + + public User(String name, String email, String password) { + this.name = name; + this.email = email; + this.password = password; + createdAt = new Date(); + updatedAt = new Date(); + } + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + + @Override + public String toString() { + return "Name: " + this.name + + "\nEmail: " + this.email; + } +} diff --git a/vraptor/src/main/resources/META-INF/beans.xml b/vraptor/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000000..9e32823437 --- /dev/null +++ b/vraptor/src/main/resources/META-INF/beans.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/vraptor/src/main/resources/database.sql b/vraptor/src/main/resources/database.sql new file mode 100644 index 0000000000..bd4a1a6bde --- /dev/null +++ b/vraptor/src/main/resources/database.sql @@ -0,0 +1,55 @@ +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; + +CREATE DATABASE IF NOT EXISTS `larablog` /*!40100 DEFAULT CHARACTER SET latin1 */; +USE `larablog`; + +CREATE TABLE IF NOT EXISTS `posts` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `post` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `author_id` int(11) DEFAULT NULL, + `published` tinyint(1) NOT NULL DEFAULT 0, + `views` int(11) NOT NULL DEFAULT 0, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DELETE FROM `posts`; +/*!40000 ALTER TABLE `posts` DISABLE KEYS */; +INSERT INTO `posts` (`id`, `title`, `post`, `author_id`, `published`, `views`, `created_at`, `updated_at`) VALUES + (2, 'Sample Post 2', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:19', NULL), + (3, 'Sample Post 3', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:22', NULL), + (4, 'Sample Post 2212', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc lobortis, ante in pretium volutpat, risus metus molestie odio, non placerat magna diam sit amet augue. Donec ullamcorper ornare mauris, id bibendum lacus viverra vel. Curabitur in pellentesque metus. Quisque gravida molestie turpis, id tincidunt purus viverra vitae. In sollicitudin, arcu at interdum sagittis, massa mi cursus diam, eu sodales purus erat vitae dui. Curabitur tempus urna consequat odio pretium pellentesque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tincidunt eros orci, sit amet pharetra eros accumsan vitae. Quisque a massa id nisi sodales rhoncus sed ut ante. Duis sed augue non velit feugiat varius eget eu velit. Nam commodo posuere massa sed convallis. Phasellus dapibus commodo lectus, vitae gravida lorem. Donec molestie a nisi ac mattis. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam tempor ante et rutrum consequat.', 11, 1, 100, '2017-12-12 18:48:24', NULL), + (9, 'This is a Test', 'HJh sahjnasj hjas hjashj ashj ashj ashjsa sahjass naskjasnmas', 11, 0, 0, NULL, NULL), + (10, 'Test Title', 'hjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj', 11, 0, 0, NULL, NULL), + (11, 'Test Title 2', 'This is a as as sa asmas as as as as as', 11, 0, 0, NULL, NULL), + (12, 'This is another Test Article', 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don\'t look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn\'t anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.', 11, 0, 0, '2017-12-14 03:48:52', '2017-12-14 03:48:52'); +/*!40000 ALTER TABLE `posts` ENABLE KEYS */; + +CREATE TABLE IF NOT EXISTS `users` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `is_admin` int(10) unsigned NULL DEFAULT 0, + `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `users_email_unique` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +DELETE FROM `users`; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` (`id`, `name`, `email`, `password`, `is_admin`, `remember_token`, `created_at`, `updated_at`) VALUES + (11, 'Test User', 'test@test.com', '$2a$10$i/TgIqC3xRMnqCEbDryfxuZqhfM/qekfsaQUjBVPUKiiB3Nofr/wO', 0, NULL, '2017-12-14 03:40:57', '2017-12-14 03:40:57'); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; + +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; diff --git a/vraptor/src/main/resources/hibernate.cfg.xml b/vraptor/src/main/resources/hibernate.cfg.xml new file mode 100644 index 0000000000..dad0b44683 --- /dev/null +++ b/vraptor/src/main/resources/hibernate.cfg.xml @@ -0,0 +1,31 @@ + + + + + + org.hibernate.dialect.MySQLDialect + + + com.mysql.cj.jdbc.Driver + + + jdbc:mysql://127.0.0.1:3306/larablog?serverTimezone=UTC + + + root + + + root + + + true + + + true + + + + + + \ No newline at end of file diff --git a/vraptor/src/main/resources/log4j.xml b/vraptor/src/main/resources/log4j.xml new file mode 100644 index 0000000000..4e4c4636bc --- /dev/null +++ b/vraptor/src/main/resources/log4j.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vraptor/src/main/resources/templates/auth/login.ftl b/vraptor/src/main/resources/templates/auth/login.ftl new file mode 100644 index 0000000000..56ab2900cd --- /dev/null +++ b/vraptor/src/main/resources/templates/auth/login.ftl @@ -0,0 +1,172 @@ + + + + + + + + + + + + Clean Blog - Contact + + + + + + + + + + + + + + + + + + + + + +

+ +
+
+
+
+
+

Clean Blog

+
+ A Clean Blog Theme by Start Bootstrap +
+
+
+
+
+ + +
+
+
+

Login

+
${error!""} ${status!""}
+
+
+
+ + +

+
+
+
+
+
+ + +

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/vraptor/src/main/resources/templates/auth/register.ftl b/vraptor/src/main/resources/templates/auth/register.ftl new file mode 100644 index 0000000000..9ac8d42621 --- /dev/null +++ b/vraptor/src/main/resources/templates/auth/register.ftl @@ -0,0 +1,187 @@ + + + + + + + + + + + + Clean Blog - Contact + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

Clean Blog

+
+ A Clean Blog Theme by Start Bootstrap +
+
+
+
+
+ + +
+
+
+

Register

+
${error!""} ${status!""}
+
+
+
+ + +

+
+
+
+
+ + +

+
+
+
+
+
+ + +

+
+
+
+
+
+ + +

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/vraptor/src/main/resources/templates/index.ftl b/vraptor/src/main/resources/templates/index.ftl new file mode 100644 index 0000000000..d65d73f534 --- /dev/null +++ b/vraptor/src/main/resources/templates/index.ftl @@ -0,0 +1,173 @@ + + + + + + + + + + + + Clean Blog + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

Clean Blog

+
+ A Clean Blog Theme by Start Bootstrap +
+
+
+
+
+ + +
+
+
+
${error!""} ${status!""}
+ <#list posts as post> +
+ +

+ ${post.title} +

+

+ <#if (post.post?length > 50) >${post.post?substring(0,50)} <#else> ${post.post} +

+
+ +
+
+ <#else> +

+ NO POSTS YET! +

+ + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/vraptor/src/main/resources/templates/posts/add.ftl b/vraptor/src/main/resources/templates/posts/add.ftl new file mode 100644 index 0000000000..3ef744a49e --- /dev/null +++ b/vraptor/src/main/resources/templates/posts/add.ftl @@ -0,0 +1,157 @@ + + + + + + + + + + + + Clean Blog - Contact + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

Compose the Next Viral Message!

+
${error!""} ${status!""}
+
+
+
+ + +

+
+
+
+
+ + +

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/vraptor/src/main/resources/templates/view.ftl b/vraptor/src/main/resources/templates/view.ftl new file mode 100644 index 0000000000..96525cc93a --- /dev/null +++ b/vraptor/src/main/resources/templates/view.ftl @@ -0,0 +1,152 @@ + + + + + + + + + + + + Clean Blog - Sample Post + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

${post.title}

+ Posted by Start Bootstrap on ${post.createdAt!''} +
+
+
+
+
+ + +
+
+
+
+

+ ${post.post} +

+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vraptor/src/main/webapp/META-INF/MANIFEST.MF b/vraptor/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/vraptor/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/vraptor/src/main/webapp/WEB-INF/jsp/index/index.jsp b/vraptor/src/main/webapp/WEB-INF/jsp/index/index.jsp new file mode 100644 index 0000000000..61efbb9e1d --- /dev/null +++ b/vraptor/src/main/webapp/WEB-INF/jsp/index/index.jsp @@ -0,0 +1,10 @@ + + + + +VRaptor Blank Project + + + It works!! JSP ${variable} ${linkTo[IndexController].index} + + \ No newline at end of file diff --git a/vraptor/src/main/webapp/WEB-INF/web.xml b/vraptor/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..f778a0e779 --- /dev/null +++ b/vraptor/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,19 @@ + + + + vraptor-blank-project + + + javax.servlet.jsp.jstl.fmt.localizationContext + messages + + + + org.jboss.weld.environment.servlet.Listener + + + \ No newline at end of file diff --git a/vraptor/src/main/webapp/css/clean-blog.css b/vraptor/src/main/webapp/css/clean-blog.css new file mode 100644 index 0000000000..04a94f0e0f --- /dev/null +++ b/vraptor/src/main/webapp/css/clean-blog.css @@ -0,0 +1,400 @@ +/*! + * Start Bootstrap - Clean Blog v3.3.7+1 (http://startbootstrap.com/template-overviews/clean-blog) + * Copyright 2013-2016 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) + */ +body { + font-family: 'Lora', 'Times New Roman', serif; + font-size: 20px; + color: #333333; +} +p { + line-height: 1.5; + margin: 30px 0; +} +p a { + text-decoration: underline; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 800; +} +a { + color: #333333; +} +a:hover, +a:focus { + color: #0085A1; +} +a img:hover, +a img:focus { + cursor: zoom-in; +} +blockquote { + color: #777777; + font-style: italic; +} +hr.small { + max-width: 100px; + margin: 15px auto; + border-width: 4px; + border-color: white; +} +.navbar-custom { + position: absolute; + top: 0; + left: 0; + width: 100%; + z-index: 3; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; +} +.navbar-custom .navbar-brand { + font-weight: 800; +} +.navbar-custom .navbar-header .navbar-toggle { + color: #777777; + font-weight: 800; + text-transform: uppercase; + font-size: 12px; +} +.navbar-custom .nav li a { + text-transform: uppercase; + font-size: 12px; + font-weight: 800; + letter-spacing: 1px; +} +@media only screen and (min-width: 768px) { + .navbar-custom { + background: transparent; + border-bottom: 1px solid transparent; + } + .navbar-custom .navbar-brand { + color: white; + padding: 20px; + } + .navbar-custom .navbar-brand:hover, + .navbar-custom .navbar-brand:focus { + color: rgba(255, 255, 255, 0.8); + } + .navbar-custom .nav li a { + color: white; + padding: 20px; + } + .navbar-custom .nav li a:hover, + .navbar-custom .nav li a:focus { + color: rgba(255, 255, 255, 0.8); + } +} +@media only screen and (min-width: 1170px) { + .navbar-custom { + -webkit-transition: background-color 0.3s; + -moz-transition: background-color 0.3s; + transition: background-color 0.3s; + /* Force Hardware Acceleration in WebKit */ + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + } + .navbar-custom.is-fixed { + /* when the user scrolls down, we hide the header right above the viewport */ + position: fixed; + top: -61px; + background-color: rgba(255, 255, 255, 0.9); + border-bottom: 1px solid #f2f2f2; + -webkit-transition: -webkit-transform 0.3s; + -moz-transition: -moz-transform 0.3s; + transition: transform 0.3s; + } + .navbar-custom.is-fixed .navbar-brand { + color: #333333; + } + .navbar-custom.is-fixed .navbar-brand:hover, + .navbar-custom.is-fixed .navbar-brand:focus { + color: #0085A1; + } + .navbar-custom.is-fixed .nav li a { + color: #333333; + } + .navbar-custom.is-fixed .nav li a:hover, + .navbar-custom.is-fixed .nav li a:focus { + color: #0085A1; + } + .navbar-custom.is-visible { + /* if the user changes the scrolling direction, we show the header */ + -webkit-transform: translate3d(0, 100%, 0); + -moz-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + -o-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} +.intro-header { + background-color: #777777; + background: no-repeat center center; + background-attachment: scroll; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + -o-background-size: cover; + margin-bottom: 50px; +} +.intro-header .site-heading, +.intro-header .post-heading, +.intro-header .page-heading { + padding: 100px 0 50px; + color: white; +} +@media only screen and (min-width: 768px) { + .intro-header .site-heading, + .intro-header .post-heading, + .intro-header .page-heading { + padding: 150px 0; + } +} +.intro-header .site-heading, +.intro-header .page-heading { + text-align: center; +} +.intro-header .site-heading h1, +.intro-header .page-heading h1 { + margin-top: 0; + font-size: 50px; +} +.intro-header .site-heading .subheading, +.intro-header .page-heading .subheading { + font-size: 24px; + line-height: 1.1; + display: block; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 300; + margin: 10px 0 0; +} +@media only screen and (min-width: 768px) { + .intro-header .site-heading h1, + .intro-header .page-heading h1 { + font-size: 80px; + } +} +.intro-header .post-heading h1 { + font-size: 35px; +} +.intro-header .post-heading .subheading, +.intro-header .post-heading .meta { + line-height: 1.1; + display: block; +} +.intro-header .post-heading .subheading { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 24px; + margin: 10px 0 30px; + font-weight: 600; +} +.intro-header .post-heading .meta { + font-family: 'Lora', 'Times New Roman', serif; + font-style: italic; + font-weight: 300; + font-size: 20px; +} +.intro-header .post-heading .meta a { + color: white; +} +@media only screen and (min-width: 768px) { + .intro-header .post-heading h1 { + font-size: 55px; + } + .intro-header .post-heading .subheading { + font-size: 30px; + } +} +.post-preview > a { + color: #333333; +} +.post-preview > a:hover, +.post-preview > a:focus { + text-decoration: none; + color: #0085A1; +} +.post-preview > a > .post-title { + font-size: 30px; + margin-top: 30px; + margin-bottom: 10px; +} +.post-preview > a > .post-subtitle { + margin: 0; + font-weight: 300; + margin-bottom: 10px; +} +.post-preview > .post-meta { + color: #777777; + font-size: 18px; + font-style: italic; + margin-top: 0; +} +.post-preview > .post-meta > a { + text-decoration: none; + color: #333333; +} +.post-preview > .post-meta > a:hover, +.post-preview > .post-meta > a:focus { + color: #0085A1; + text-decoration: underline; +} +@media only screen and (min-width: 768px) { + .post-preview > a > .post-title { + font-size: 36px; + } +} +.section-heading { + font-size: 36px; + margin-top: 60px; + font-weight: 700; +} +.caption { + text-align: center; + font-size: 14px; + padding: 10px; + font-style: italic; + margin: 0; + display: block; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} +footer { + padding: 50px 0 65px; +} +footer .list-inline { + margin: 0; + padding: 0; +} +footer .copyright { + font-size: 14px; + text-align: center; + margin-bottom: 0; +} +.floating-label-form-group { + font-size: 14px; + position: relative; + margin-bottom: 0; + padding-bottom: 0.5em; + border-bottom: 1px solid #eeeeee; +} +.floating-label-form-group input, +.floating-label-form-group textarea { + z-index: 1; + position: relative; + padding-right: 0; + padding-left: 0; + border: none; + border-radius: 0; + font-size: 1.5em; + background: none; + box-shadow: none !important; + resize: none; +} +.floating-label-form-group label { + display: block; + z-index: 0; + position: relative; + top: 2em; + margin: 0; + font-size: 0.85em; + line-height: 1.764705882em; + vertical-align: middle; + vertical-align: baseline; + opacity: 0; + -webkit-transition: top 0.3s ease,opacity 0.3s ease; + -moz-transition: top 0.3s ease,opacity 0.3s ease; + -ms-transition: top 0.3s ease,opacity 0.3s ease; + transition: top 0.3s ease,opacity 0.3s ease; +} +.floating-label-form-group::not(:first-child) { + padding-left: 14px; + border-left: 1px solid #eeeeee; +} +.floating-label-form-group-with-value label { + top: 0; + opacity: 1; +} +.floating-label-form-group-with-focus label { + color: #0085A1; +} +form .row:first-child .floating-label-form-group { + border-top: 1px solid #eeeeee; +} +.btn { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + text-transform: uppercase; + font-size: 14px; + font-weight: 800; + letter-spacing: 1px; + border-radius: 0; + padding: 15px 25px; +} +.btn-lg { + font-size: 16px; + padding: 25px 35px; +} +.btn-default:hover, +.btn-default:focus { + background-color: #0085A1; + border: 1px solid #0085A1; + color: white; +} +.pager { + margin: 20px 0 0; +} +.pager li > a, +.pager li > span { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + text-transform: uppercase; + font-size: 14px; + font-weight: 800; + letter-spacing: 1px; + padding: 15px 25px; + background-color: white; + border-radius: 0; +} +.pager li > a:hover, +.pager li > a:focus { + color: white; + background-color: #0085A1; + border: 1px solid #0085A1; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #333333; + cursor: not-allowed; +} +::-moz-selection { + color: white; + text-shadow: none; + background: #0085A1; +} +::selection { + color: white; + text-shadow: none; + background: #0085A1; +} +img::selection { + color: white; + background: transparent; +} +img::-moz-selection { + color: white; + background: transparent; +} +body { + -webkit-tap-highlight-color: #0085A1; +} diff --git a/vraptor/src/main/webapp/css/clean-blog.min.css b/vraptor/src/main/webapp/css/clean-blog.min.css new file mode 100644 index 0000000000..faa3794436 --- /dev/null +++ b/vraptor/src/main/webapp/css/clean-blog.min.css @@ -0,0 +1,5 @@ +/*! + * Start Bootstrap - Clean Blog v3.3.7+1 (http://startbootstrap.com/template-overviews/clean-blog) + * Copyright 2013-2016 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) + */a,body{color:#333}.navbar-custom .nav li a,.navbar-custom .navbar-brand,h1,h2,h3,h4,h5,h6{font-weight:800}.caption,.intro-header .page-heading,.intro-header .site-heading,footer .copyright{text-align:center}body{font-family:Lora,'Times New Roman',serif;font-size:20px;-webkit-tap-highlight-color:#0085A1}.intro-header .page-heading .subheading,.intro-header .post-heading .subheading,.intro-header .site-heading .subheading,.navbar-custom,h1,h2,h3,h4,h5,h6{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif}p{line-height:1.5;margin:30px 0}p a{text-decoration:underline}a:focus,a:hover{color:#0085A1}a img:focus,a img:hover{cursor:zoom-in}blockquote{color:#777;font-style:italic}hr.small{max-width:100px;margin:15px auto;border-width:4px;border-color:#fff}.navbar-custom{position:absolute;top:0;left:0;width:100%;z-index:3}.navbar-custom .navbar-header .navbar-toggle{color:#777;font-weight:800;text-transform:uppercase;font-size:12px}.navbar-custom .nav li a{text-transform:uppercase;font-size:12px;letter-spacing:1px}@media only screen and (min-width:768px){.navbar-custom{background:0 0;border-bottom:1px solid transparent}.navbar-custom .navbar-brand{color:#fff;padding:20px}.navbar-custom .navbar-brand:focus,.navbar-custom .navbar-brand:hover{color:rgba(255,255,255,.8)}.navbar-custom .nav li a{color:#fff;padding:20px}.navbar-custom .nav li a:focus,.navbar-custom .nav li a:hover{color:rgba(255,255,255,.8)}}@media only screen and (min-width:1170px){.navbar-custom{-webkit-transition:background-color .3s;-moz-transition:background-color .3s;transition:background-color .3s;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.navbar-custom.is-fixed{position:fixed;top:-61px;background-color:rgba(255,255,255,.9);border-bottom:1px solid #f2f2f2;-webkit-transition:-webkit-transform .3s;-moz-transition:-moz-transform .3s;transition:transform .3s}.navbar-custom.is-fixed .navbar-brand{color:#333}.navbar-custom.is-fixed .navbar-brand:focus,.navbar-custom.is-fixed .navbar-brand:hover{color:#0085A1}.navbar-custom.is-fixed .nav li a{color:#333}.navbar-custom.is-fixed .nav li a:focus,.navbar-custom.is-fixed .nav li a:hover{color:#0085A1}.navbar-custom.is-visible{-webkit-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.intro-header{background:center center no-repeat;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;-o-background-size:cover;margin-bottom:50px}.intro-header .page-heading,.intro-header .post-heading,.intro-header .site-heading{padding:100px 0 50px;color:#fff}.intro-header .page-heading h1,.intro-header .site-heading h1{margin-top:0;font-size:50px}.intro-header .page-heading .subheading,.intro-header .site-heading .subheading{font-size:24px;line-height:1.1;display:block;font-weight:300;margin:10px 0 0}@media only screen and (min-width:768px){.intro-header .page-heading,.intro-header .post-heading,.intro-header .site-heading{padding:150px 0}.intro-header .page-heading h1,.intro-header .site-heading h1{font-size:80px}}.intro-header .post-heading h1{font-size:35px}.intro-header .post-heading .meta,.intro-header .post-heading .subheading{line-height:1.1;display:block}.intro-header .post-heading .subheading{font-size:24px;margin:10px 0 30px;font-weight:600}.intro-header .post-heading .meta{font-family:Lora,'Times New Roman',serif;font-style:italic;font-weight:300;font-size:20px}.intro-header .post-heading .meta a{color:#fff}@media only screen and (min-width:768px){.intro-header .post-heading h1{font-size:55px}.intro-header .post-heading .subheading{font-size:30px}}.post-preview>a{color:#333}.post-preview>a:focus,.post-preview>a:hover{text-decoration:none;color:#0085A1}.post-preview>a>.post-title{font-size:30px;margin-top:30px;margin-bottom:10px}.post-preview>a>.post-subtitle{margin:0 0 10px;font-weight:300}.post-preview>.post-meta{color:#777;font-size:18px;font-style:italic;margin-top:0}.post-preview>.post-meta>a{text-decoration:none;color:#333}.post-preview>.post-meta>a:focus,.post-preview>.post-meta>a:hover{color:#0085A1;text-decoration:underline}@media only screen and (min-width:768px){.post-preview>a>.post-title{font-size:36px}}.section-heading{font-size:36px;margin-top:60px;font-weight:700}.btn,.pager li>a,.pager li>span{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:800;letter-spacing:1px}.caption{font-size:14px;padding:10px;font-style:italic;margin:0;display:block;border-bottom-right-radius:5px;border-bottom-left-radius:5px}footer{padding:50px 0 65px}footer .list-inline{margin:0;padding:0}footer .copyright{font-size:14px;margin-bottom:0}.floating-label-form-group{font-size:14px;position:relative;margin-bottom:0;padding-bottom:.5em;border-bottom:1px solid #eee}.floating-label-form-group input,.floating-label-form-group textarea{z-index:1;position:relative;padding-right:0;padding-left:0;border:none;border-radius:0;font-size:1.5em;background:0 0;box-shadow:none!important;resize:none}.floating-label-form-group label{display:block;z-index:0;position:relative;top:2em;margin:0;font-size:.85em;line-height:1.764705882em;vertical-align:middle;vertical-align:baseline;opacity:0;-webkit-transition:top .3s ease,opacity .3s ease;-moz-transition:top .3s ease,opacity .3s ease;-ms-transition:top .3s ease,opacity .3s ease;transition:top .3s ease,opacity .3s ease}.floating-label-form-group::not(:first-child){padding-left:14px;border-left:1px solid #eee}.floating-label-form-group-with-value label{top:0;opacity:1}.floating-label-form-group-with-focus label{color:#0085A1}form .row:first-child .floating-label-form-group{border-top:1px solid #eee}.btn{font-size:14px;border-radius:0;padding:15px 25px}.btn-lg{font-size:16px;padding:25px 35px}.btn-default:focus,.btn-default:hover{background-color:#0085A1;border:1px solid #0085A1;color:#fff}.pager{margin:20px 0 0}.pager li>a,.pager li>span{font-size:14px;padding:15px 25px;background-color:#fff;border-radius:0}.pager li>a:focus,.pager li>a:hover{color:#fff;background-color:#0085A1;border:1px solid #0085A1}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#333;cursor:not-allowed}::-moz-selection{color:#fff;text-shadow:none;background:#0085A1}::selection{color:#fff;text-shadow:none;background:#0085A1}img::selection{color:#fff;background:0 0}img::-moz-selection{color:#fff;background:0 0} \ No newline at end of file diff --git a/vraptor/src/main/webapp/img/about-bg.jpg b/vraptor/src/main/webapp/img/about-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af6d4d5cd1629f4cd396ced9b6c4302b24ec884b GIT binary patch literal 33097 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

@Z-2a*BRd+m_LKaU|KQH!g_W;; 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

8P(1GQRo*SRA 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

jYdCZgq3z;a905My}?ea1JCc3}Z=Ty_k`y1D3U( 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 z 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 z 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 Sk3UKZ`)&UK?D*cUEC1P4buf(p literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/img/home-bg.jpg b/vraptor/src/main/webapp/img/home-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4d2108a3fc3c20414a6065d1a019d5bd788b8fd GIT binary patch literal 172779 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�-L^x4&McZ!dP@>a=XL}z6y<)W= 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 literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/img/post-bg.jpg b/vraptor/src/main/webapp/img/post-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21750a49b05043749df1d71e2ddcc3ee933a02ae GIT binary patch literal 140909 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­rP^1HmX!sBJ94Sf*ma^&0Ax4)M?q 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 z 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⪼1uZQRCHW?a3^Ud0 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 literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/img/post-sample-image.jpg b/vraptor/src/main/webapp/img/post-sample-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fc4282987a99a4e54440480e0e54136e7d241d4 GIT binary patch literal 115144 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�M9e9MSx4n-hEiy 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 literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/js/clean-blog.js b/vraptor/src/main/webapp/js/clean-blog.js new file mode 100644 index 0000000000..26a60cce5f --- /dev/null +++ b/vraptor/src/main/webapp/js/clean-blog.js @@ -0,0 +1,40 @@ +// Floating label headings for the contact form +$(function() { + $("body").on("input propertychange", ".floating-label-form-group", function(e) { + $(this).toggleClass("floating-label-form-group-with-value", !!$(e.target).val()); + }).on("focus", ".floating-label-form-group", function() { + $(this).addClass("floating-label-form-group-with-focus"); + }).on("blur", ".floating-label-form-group", function() { + $(this).removeClass("floating-label-form-group-with-focus"); + }); +}); + +// Navigation Scripts to Show Header on Scroll-Up +jQuery(document).ready(function($) { + var MQL = 1170; + + //primary navigation slide-in effect + if ($(window).width() > MQL) { + var headerHeight = $('.navbar-custom').height(); + $(window).on('scroll', { + previousTop: 0 + }, + function() { + var currentTop = $(window).scrollTop(); + //check if user is scrolling up + if (currentTop < this.previousTop) { + //if scrolling up... + if (currentTop > 0 && $('.navbar-custom').hasClass('is-fixed')) { + $('.navbar-custom').addClass('is-visible'); + } else { + $('.navbar-custom').removeClass('is-visible is-fixed'); + } + } else if (currentTop > this.previousTop) { + //if scrolling down... + $('.navbar-custom').removeClass('is-visible'); + if (currentTop > headerHeight && !$('.navbar-custom').hasClass('is-fixed')) $('.navbar-custom').addClass('is-fixed'); + } + this.previousTop = currentTop; + }); + } +}); diff --git a/vraptor/src/main/webapp/js/clean-blog.min.js b/vraptor/src/main/webapp/js/clean-blog.min.js new file mode 100644 index 0000000000..852db7e938 --- /dev/null +++ b/vraptor/src/main/webapp/js/clean-blog.min.js @@ -0,0 +1,6 @@ +/*! + * Start Bootstrap - Clean Blog v3.3.7+1 (http://startbootstrap.com/template-overviews/clean-blog) + * Copyright 2013-2016 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) + */ +$(function(){$("body").on("input propertychange",".floating-label-form-group",function(o){$(this).toggleClass("floating-label-form-group-with-value",!!$(o.target).val())}).on("focus",".floating-label-form-group",function(){$(this).addClass("floating-label-form-group-with-focus")}).on("blur",".floating-label-form-group",function(){$(this).removeClass("floating-label-form-group-with-focus")})}),jQuery(document).ready(function(o){var s=1170;if(o(window).width()>s){var i=o(".navbar-custom").height();o(window).on("scroll",{previousTop:0},function(){var s=o(window).scrollTop();s0&&o(".navbar-custom").hasClass("is-fixed")?o(".navbar-custom").addClass("is-visible"):o(".navbar-custom").removeClass("is-visible is-fixed"):s>this.previousTop&&(o(".navbar-custom").removeClass("is-visible"),s>i&&!o(".navbar-custom").hasClass("is-fixed")&&o(".navbar-custom").addClass("is-fixed")),this.previousTop=s})}}); \ No newline at end of file diff --git a/vraptor/src/main/webapp/js/contact_me.js b/vraptor/src/main/webapp/js/contact_me.js new file mode 100644 index 0000000000..c3d8ecce26 --- /dev/null +++ b/vraptor/src/main/webapp/js/contact_me.js @@ -0,0 +1,72 @@ +// Contact Form Scripts + +$(function() { + + $("#contactForm input,#contactForm textarea").jqBootstrapValidation({ + preventSubmit: true, + submitError: function($form, event, errors) { + // additional error messages or events + }, + submitSuccess: function($form, event) { + event.preventDefault(); // prevent default submit behaviour + // get values from FORM + var name = $("input#name").val(); + var email = $("input#email").val(); + var phone = $("input#phone").val(); + var message = $("textarea#message").val(); + var firstName = name; // For Success/Failure Message + // Check for white space in name for Success/Fail message + if (firstName.indexOf(' ') >= 0) { + firstName = name.split(' ').slice(0, -1).join(' '); + } + $.ajax({ + url: "././mail/contact_me.php", + type: "POST", + data: { + name: name, + phone: phone, + email: email, + message: message + }, + cache: false, + success: function() { + // Success message + $('#success').html("

'); + + //clear all fields + $('#contactForm').trigger("reset"); + }, + error: function() { + // Fail message + $('#success').html("
"); + $('#success > .alert-danger').html(""); + $('#success > .alert-danger').append("Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!"); + $('#success > .alert-danger').append('
'); + //clear all fields + $('#contactForm').trigger("reset"); + }, + }); + }, + filter: function() { + return $(this).is(":visible"); + }, + }); + + $("a[data-toggle=\"tab\"]").click(function(e) { + e.preventDefault(); + $(this).tab("show"); + }); +}); + + +/*When clicking on Full hide fail/success boxes */ +$('#name').focus(function() { + $('#success').html(''); +}); diff --git a/vraptor/src/main/webapp/js/jqBootstrapValidation.js b/vraptor/src/main/webapp/js/jqBootstrapValidation.js new file mode 100644 index 0000000000..7b3b922251 --- /dev/null +++ b/vraptor/src/main/webapp/js/jqBootstrapValidation.js @@ -0,0 +1,912 @@ +/* jqBootstrapValidation + * A plugin for automating validation on Twitter Bootstrap formatted forms. + * + * v1.3.6 + * + * License: MIT - see LICENSE file + * + * http://ReactiveRaven.github.com/jqBootstrapValidation/ + */ + +(function( $ ){ + + var createdElements = []; + + var defaults = { + options: { + prependExistingHelpBlock: false, + sniffHtml: true, // sniff for 'required', 'maxlength', etc + preventSubmit: true, // stop the form submit event from firing if validation fails + submitError: false, // function called if there is an error when trying to submit + submitSuccess: false, // function called just before a successful submit event is sent to the server + semanticallyStrict: false, // set to true to tidy up generated HTML output + autoAdd: { + helpBlocks: true + }, + filter: function () { + // return $(this).is(":visible"); // only validate elements you can see + return true; // validate everything + } + }, + methods: { + init : function( options ) { + + var settings = $.extend(true, {}, defaults); + + settings.options = $.extend(true, settings.options, options); + + var $siblingElements = this; + + var uniqueForms = $.unique( + $siblingElements.map( function () { + return $(this).parents("form")[0]; + }).toArray() + ); + + $(uniqueForms).bind("submit", function (e) { + var $form = $(this); + var warningsFound = 0; + var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter); + $inputs.trigger("submit.validation").trigger("validationLostFocus.validation"); + + $inputs.each(function (i, el) { + var $this = $(el), + $controlGroup = $this.parents(".form-group").first(); + if ( + $controlGroup.hasClass("warning") + ) { + $controlGroup.removeClass("warning").addClass("error"); + warningsFound++; + } + }); + + $inputs.trigger("validationLostFocus.validation"); + + if (warningsFound) { + if (settings.options.preventSubmit) { + e.preventDefault(); + } + $form.addClass("error"); + if ($.isFunction(settings.options.submitError)) { + settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true)); + } + } else { + $form.removeClass("error"); + if ($.isFunction(settings.options.submitSuccess)) { + settings.options.submitSuccess($form, e); + } + } + }); + + return this.each(function(){ + + // Get references to everything we're interested in + var $this = $(this), + $controlGroup = $this.parents(".form-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(), + $form = $this.parents("form").first(), + validatorNames = []; + + // create message container if not exists + if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) { + $helpBlock = $('
'); + $controlGroup.find('.controls').append($helpBlock); + createdElements.push($helpBlock[0]); + } + + // ============================================================= + // SNIFF HTML FOR VALIDATORS + // ============================================================= + + // *snort sniff snuffle* + + if (settings.options.sniffHtml) { + var message = ""; + // --------------------------------------------------------- + // PATTERN + // --------------------------------------------------------- + if ($this.attr("pattern") !== undefined) { + message = "Not in the expected format"; + if ($this.data("validationPatternMessage")) { + message = $this.data("validationPatternMessage"); + } + $this.data("validationPatternMessage", message); + $this.data("validationPatternRegex", $this.attr("pattern")); + } + // --------------------------------------------------------- + // MAX + // --------------------------------------------------------- + if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) { + var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax")); + message = "Too high: Maximum of '" + max + "'"; + if ($this.data("validationMaxMessage")) { + message = $this.data("validationMaxMessage"); + } + $this.data("validationMaxMessage", message); + $this.data("validationMaxMax", max); + } + // --------------------------------------------------------- + // MIN + // --------------------------------------------------------- + if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) { + var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin")); + message = "Too low: Minimum of '" + min + "'"; + if ($this.data("validationMinMessage")) { + message = $this.data("validationMinMessage"); + } + $this.data("validationMinMessage", message); + $this.data("validationMinMin", min); + } + // --------------------------------------------------------- + // MAXLENGTH + // --------------------------------------------------------- + if ($this.attr("maxlength") !== undefined) { + message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters"; + if ($this.data("validationMaxlengthMessage")) { + message = $this.data("validationMaxlengthMessage"); + } + $this.data("validationMaxlengthMessage", message); + $this.data("validationMaxlengthMaxlength", $this.attr("maxlength")); + } + // --------------------------------------------------------- + // MINLENGTH + // --------------------------------------------------------- + if ($this.attr("minlength") !== undefined) { + message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters"; + if ($this.data("validationMinlengthMessage")) { + message = $this.data("validationMinlengthMessage"); + } + $this.data("validationMinlengthMessage", message); + $this.data("validationMinlengthMinlength", $this.attr("minlength")); + } + // --------------------------------------------------------- + // REQUIRED + // --------------------------------------------------------- + if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) { + message = settings.builtInValidators.required.message; + if ($this.data("validationRequiredMessage")) { + message = $this.data("validationRequiredMessage"); + } + $this.data("validationRequiredMessage", message); + } + // --------------------------------------------------------- + // NUMBER + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") { + message = settings.builtInValidators.number.message; + if ($this.data("validationNumberMessage")) { + message = $this.data("validationNumberMessage"); + } + $this.data("validationNumberMessage", message); + } + // --------------------------------------------------------- + // EMAIL + // --------------------------------------------------------- + if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") { + message = "Not a valid email address"; + if ($this.data("validationValidemailMessage")) { + message = $this.data("validationValidemailMessage"); + } else if ($this.data("validationEmailMessage")) { + message = $this.data("validationEmailMessage"); + } + $this.data("validationValidemailMessage", message); + } + // --------------------------------------------------------- + // MINCHECKED + // --------------------------------------------------------- + if ($this.attr("minchecked") !== undefined) { + message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required"; + if ($this.data("validationMincheckedMessage")) { + message = $this.data("validationMincheckedMessage"); + } + $this.data("validationMincheckedMessage", message); + $this.data("validationMincheckedMinchecked", $this.attr("minchecked")); + } + // --------------------------------------------------------- + // MAXCHECKED + // --------------------------------------------------------- + if ($this.attr("maxchecked") !== undefined) { + message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required"; + if ($this.data("validationMaxcheckedMessage")) { + message = $this.data("validationMaxcheckedMessage"); + } + $this.data("validationMaxcheckedMessage", message); + $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked")); + } + } + + // ============================================================= + // COLLECT VALIDATOR NAMES + // ============================================================= + + // Get named validators + if ($this.data("validation") !== undefined) { + validatorNames = $this.data("validation").split(","); + } + + // Get extra ones defined on the element's data attributes + $.each($this.data(), function (i, el) { + var parts = i.replace(/([A-Z])/g, ",$1").split(","); + if (parts[0] === "validation" && parts[1]) { + validatorNames.push(parts[1]); + } + }); + + // ============================================================= + // NORMALISE VALIDATOR NAMES + // ============================================================= + + var validatorNamesToInspect = validatorNames; + var newValidatorNamesToInspect = []; + + do // repeatedly expand 'shortcut' validators into their real validators + { + // Uppercase only the first letter of each name + $.each(validatorNames, function (i, el) { + validatorNames[i] = formatValidatorName(el); + }); + + // Remove duplicate validator names + validatorNames = $.unique(validatorNames); + + // Pull out the new validator names from each shortcut + newValidatorNamesToInspect = []; + $.each(validatorNamesToInspect, function(i, el) { + if ($this.data("validation" + el + "Shortcut") !== undefined) { + // Are these custom validators? + // Pull them out! + $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) { + newValidatorNamesToInspect.push(el2); + }); + } else if (settings.builtInValidators[el.toLowerCase()]) { + // Is this a recognised built-in? + // Pull it out! + var validator = settings.builtInValidators[el.toLowerCase()]; + if (validator.type.toLowerCase() === "shortcut") { + $.each(validator.shortcut.split(","), function (i, el) { + el = formatValidatorName(el); + newValidatorNamesToInspect.push(el); + validatorNames.push(el); + }); + } + } + }); + + validatorNamesToInspect = newValidatorNamesToInspect; + + } while (validatorNamesToInspect.length > 0) + + // ============================================================= + // SET UP VALIDATOR ARRAYS + // ============================================================= + + var validators = {}; + + $.each(validatorNames, function (i, el) { + // Set up the 'override' message + var message = $this.data("validation" + el + "Message"); + var hasOverrideMessage = (message !== undefined); + var foundValidator = false; + message = + ( + message + ? message + : "'" + el + "' validation failed " + ) + ; + + $.each( + settings.validatorTypes, + function (validatorType, validatorTemplate) { + if (validators[validatorType] === undefined) { + validators[validatorType] = []; + } + if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) { + validators[validatorType].push( + $.extend( + true, + { + name: formatValidatorName(validatorTemplate.name), + message: message + }, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + + if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) { + + var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]); + if (hasOverrideMessage) { + validator.message = message; + } + var validatorType = validator.type.toLowerCase(); + + if (validatorType === "shortcut") { + foundValidator = true; + } else { + $.each( + settings.validatorTypes, + function (validatorTemplateType, validatorTemplate) { + if (validators[validatorTemplateType] === undefined) { + validators[validatorTemplateType] = []; + } + if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) { + $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]); + validators[validatorType].push( + $.extend( + validator, + validatorTemplate.init($this, el) + ) + ); + foundValidator = true; + } + } + ); + } + } + + if (! foundValidator) { + $.error("Cannot find validation info for '" + el + "'"); + } + }); + + // ============================================================= + // STORE FALLBACK VALUES + // ============================================================= + + $helpBlock.data( + "original-contents", + ( + $helpBlock.data("original-contents") + ? $helpBlock.data("original-contents") + : $helpBlock.html() + ) + ); + + $helpBlock.data( + "original-role", + ( + $helpBlock.data("original-role") + ? $helpBlock.data("original-role") + : $helpBlock.attr("role") + ) + ); + + $controlGroup.data( + "original-classes", + ( + $controlGroup.data("original-clases") + ? $controlGroup.data("original-classes") + : $controlGroup.attr("class") + ) + ); + + $this.data( + "original-aria-invalid", + ( + $this.data("original-aria-invalid") + ? $this.data("original-aria-invalid") + : $this.attr("aria-invalid") + ) + ); + + // ============================================================= + // VALIDATION + // ============================================================= + + $this.bind( + "validation.validation", + function (event, params) { + + var value = getValue($this); + + // Get a list of the errors to apply + var errorsFound = []; + + $.each(validators, function (validatorType, validatorTypeArray) { + if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) { + $.each(validatorTypeArray, function (i, validator) { + if (settings.validatorTypes[validatorType].validate($this, value, validator)) { + errorsFound.push(validator.message); + } + }); + } + }); + + return errorsFound; + } + ); + + $this.bind( + "getValidators.validation", + function () { + return validators; + } + ); + + // ============================================================= + // WATCH FOR CHANGES + // ============================================================= + $this.bind( + "submit.validation", + function () { + return $this.triggerHandler("change.validation", {submitting: true}); + } + ); + $this.bind( + [ + "keyup", + "focus", + "blur", + "click", + "keydown", + "keypress", + "change" + ].join(".validation ") + ".validation", + function (e, params) { + + var value = getValue($this); + + var errorsFound = []; + + $controlGroup.find("input,textarea,select").each(function (i, el) { + var oldCount = errorsFound.length; + $.each($(el).triggerHandler("validation.validation", params), function (j, message) { + errorsFound.push(message); + }); + if (errorsFound.length > oldCount) { + $(el).attr("aria-invalid", "true"); + } else { + var original = $this.data("original-aria-invalid"); + $(el).attr("aria-invalid", (original !== undefined ? original : false)); + } + }); + + $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation"); + + errorsFound = $.unique(errorsFound.sort()); + + // Were there any errors? + if (errorsFound.length) { + // Better flag it up as a warning. + $controlGroup.removeClass("success error").addClass("warning"); + + // How many errors did we find? + if (settings.options.semanticallyStrict && errorsFound.length === 1) { + // Only one? Being strict? Just output it. + $helpBlock.html(errorsFound[0] + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } else { + // Multiple? Being sloppy? Glue them together into an UL. + $helpBlock.html("
  • " + errorsFound.join("
  • ") + "
" + + ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" )); + } + } else { + $controlGroup.removeClass("warning error success"); + if (value.length > 0) { + $controlGroup.addClass("success"); + } + $helpBlock.html($helpBlock.data("original-contents")); + } + + if (e.type === "blur") { + $controlGroup.removeClass("success"); + } + } + ); + $this.bind("validationLostFocus.validation", function () { + $controlGroup.removeClass("success"); + }); + }); + }, + destroy : function( ) { + + return this.each( + function() { + + var + $this = $(this), + $controlGroup = $this.parents(".form-group").first(), + $helpBlock = $controlGroup.find(".help-block").first(); + + // remove our events + $this.unbind('.validation'); // events are namespaced. + // reset help text + $helpBlock.html($helpBlock.data("original-contents")); + // reset classes + $controlGroup.attr("class", $controlGroup.data("original-classes")); + // reset aria + $this.attr("aria-invalid", $this.data("original-aria-invalid")); + // reset role + $helpBlock.attr("role", $this.data("original-role")); + // remove all elements we created + if (createdElements.indexOf($helpBlock[0]) > -1) { + $helpBlock.remove(); + } + + } + ); + + }, + collectErrors : function(includeEmpty) { + + var errorMessages = {}; + this.each(function (i, el) { + var $el = $(el); + var name = $el.attr("name"); + var errors = $el.triggerHandler("validation.validation", {includeEmpty: true}); + errorMessages[name] = $.extend(true, errors, errorMessages[name]); + }); + + $.each(errorMessages, function (i, el) { + if (el.length === 0) { + delete errorMessages[i]; + } + }); + + return errorMessages; + + }, + hasErrors: function() { + + var errorMessages = []; + + this.each(function (i, el) { + errorMessages = errorMessages.concat( + $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : [] + ); + }); + + return (errorMessages.length > 0); + }, + override : function (newDefaults) { + defaults = $.extend(true, defaults, newDefaults); + } + }, + validatorTypes: { + callback: { + name: "callback", + init: function ($this, name) { + return { + validatorName: name, + callback: $this.data("validation" + name + "Callback"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (validator.lastValue === value && validator.lastFinished) { + return !validator.lastValid; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + + var rrjqbvValidator = validator; + var rrjqbvThis = $this; + executeFunctionByName( + validator.callback, + window, + $this, + value, + function (data) { + if (rrjqbvValidator.lastValue === data.value) { + rrjqbvValidator.lastValid = data.valid; + if (data.message) { + rrjqbvValidator.message = data.message; + } + rrjqbvValidator.lastFinished = true; + rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + rrjqbvThis.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + } + ); + } + + return false; + + } + }, + ajax: { + name: "ajax", + init: function ($this, name) { + return { + validatorName: name, + url: $this.data("validation" + name + "Ajax"), + lastValue: $this.val(), + lastValid: true, + lastFinished: true + }; + }, + validate: function ($this, value, validator) { + if (""+validator.lastValue === ""+value && validator.lastFinished === true) { + return validator.lastValid === false; + } + + if (validator.lastFinished === true) + { + validator.lastValue = value; + validator.lastValid = true; + validator.lastFinished = false; + $.ajax({ + url: validator.url, + data: "value=" + value + "&field=" + $this.attr("name"), + dataType: "json", + success: function (data) { + if (""+validator.lastValue === ""+data.value) { + validator.lastValid = !!(data.valid); + if (data.message) { + validator.message = data.message; + } + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }, + failure: function () { + validator.lastValid = true; + validator.message = "ajax call failed"; + validator.lastFinished = true; + $this.data("validation" + validator.validatorName + "Message", validator.message); + // Timeout is set to avoid problems with the events being considered 'already fired' + setTimeout(function () { + $this.trigger("change.validation"); + }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst + } + }); + } + + return false; + + } + }, + regex: { + name: "regex", + init: function ($this, name) { + return {regex: regexFromString($this.data("validation" + name + "Regex"))}; + }, + validate: function ($this, value, validator) { + return (!validator.regex.test(value) && ! validator.negative) + || (validator.regex.test(value) && validator.negative); + } + }, + required: { + name: "required", + init: function ($this, name) { + return {}; + }, + validate: function ($this, value, validator) { + return !!(value.length === 0 && ! validator.negative) + || !!(value.length > 0 && validator.negative); + }, + blockSubmit: true + }, + match: { + name: "match", + init: function ($this, name) { + var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first(); + element.bind("validation.validation", function () { + $this.trigger("change.validation", {submitting: true}); + }); + return {"element": element}; + }, + validate: function ($this, value, validator) { + return (value !== validator.element.val() && ! validator.negative) + || (value === validator.element.val() && validator.negative); + }, + blockSubmit: true + }, + max: { + name: "max", + init: function ($this, name) { + return {max: $this.data("validation" + name + "Max")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative) + || (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative); + } + }, + min: { + name: "min", + init: function ($this, name) { + return {min: $this.data("validation" + name + "Min")}; + }, + validate: function ($this, value, validator) { + return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative) + || (parseFloat(value) >= parseFloat(validator.min) && validator.negative); + } + }, + maxlength: { + name: "maxlength", + init: function ($this, name) { + return {maxlength: $this.data("validation" + name + "Maxlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length > validator.maxlength) && ! validator.negative) + || ((value.length <= validator.maxlength) && validator.negative); + } + }, + minlength: { + name: "minlength", + init: function ($this, name) { + return {minlength: $this.data("validation" + name + "Minlength")}; + }, + validate: function ($this, value, validator) { + return ((value.length < validator.minlength) && ! validator.negative) + || ((value.length >= validator.minlength) && validator.negative); + } + }, + maxchecked: { + name: "maxchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative) + || (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative); + }, + blockSubmit: true + }, + minchecked: { + name: "minchecked", + init: function ($this, name) { + var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]"); + elements.bind("click.validation", function () { + $this.trigger("change.validation", {includeEmpty: true}); + }); + return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements}; + }, + validate: function ($this, value, validator) { + return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative) + || (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative); + }, + blockSubmit: true + } + }, + builtInValidators: { + email: { + name: "Email", + type: "shortcut", + shortcut: "validemail" + }, + validemail: { + name: "Validemail", + type: "regex", + regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}", + message: "Not a valid email address" + }, + passwordagain: { + name: "Passwordagain", + type: "match", + match: "password", + message: "Does not match the given password" + }, + positive: { + name: "Positive", + type: "shortcut", + shortcut: "number,positivenumber" + }, + negative: { + name: "Negative", + type: "shortcut", + shortcut: "number,negativenumber" + }, + number: { + name: "Number", + type: "regex", + regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?", + message: "Must be a number" + }, + integer: { + name: "Integer", + type: "regex", + regex: "[+-]?\\\d+", + message: "No decimal places allowed" + }, + positivenumber: { + name: "Positivenumber", + type: "min", + min: 0, + message: "Must be a positive number" + }, + negativenumber: { + name: "Negativenumber", + type: "max", + max: 0, + message: "Must be a negative number" + }, + required: { + name: "Required", + type: "required", + message: "This is required" + }, + checkone: { + name: "Checkone", + type: "minchecked", + minchecked: 1, + message: "Check at least one option" + } + } + }; + + var formatValidatorName = function (name) { + return name + .toLowerCase() + .replace( + /(^|\s)([a-z])/g , + function(m,p1,p2) { + return p1+p2.toUpperCase(); + } + ) + ; + }; + + var getValue = function ($this) { + // Extract the value we're talking about + var value = $this.val(); + var type = $this.attr("type"); + if (type === "checkbox") { + value = ($this.is(":checked") ? value : ""); + } + if (type === "radio") { + value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : ""); + } + return value; + }; + + function regexFromString(inputstring) { + return new RegExp("^" + inputstring + "$"); + } + + /** + * Thanks to Jason Bunting via StackOverflow.com + * + * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910 + * Short link: http://tinyurl.com/executeFunctionByName + **/ + function executeFunctionByName(functionName, context /*, args*/) { + var args = Array.prototype.slice.call(arguments).splice(2); + var namespaces = functionName.split("."); + var func = namespaces.pop(); + for(var i = 0; i < namespaces.length; i++) { + context = context[namespaces[i]]; + } + return context[func].apply(this, args); + } + + $.fn.jqBootstrapValidation = function( method ) { + + if ( defaults.methods[method] ) { + return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return defaults.methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' ); + return null; + } + + }; + + $.jqBootstrapValidation = function (options) { + $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments); + }; + +})( jQuery ); diff --git a/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.css b/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.css new file mode 100644 index 0000000000..6167622cec --- /dev/null +++ b/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.css @@ -0,0 +1,6757 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.min.css b/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000000..ed3905e0e0 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/bootstrap/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot b/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64 GIT binary patch literal 20127 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf b/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b GIT binary patch literal 45404 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 G`u_lkUM?>H literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/vraptor/src/main/webapp/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0 GIT binary patch literal 18028 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 literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.js b/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.js new file mode 100644 index 0000000000..8a2e99a535 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.js @@ -0,0 +1,2377 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.7 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.7 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.7' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector === '#' ? [] : selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.7 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.7' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d).prop(d, true) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d).prop(d, false) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault() + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus') + else $btn.find('input:visible,button:visible').first().trigger('focus') + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.7 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.7' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.7 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + +/* jshint latedef: false */ + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.7' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.7 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.7' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.7 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.7' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + } + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var isSvg = window.SVGElement && el instanceof window.SVGElement + // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. + // See https://github.com/twbs/bootstrap/issues/20280 + var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + that.$element = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.7 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.7' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.7 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.7' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.7 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.7' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.7 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.7' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.min.js b/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.min.js new file mode 100644 index 0000000000..9bcd2fccae --- /dev/null +++ b/vraptor/src/main/webapp/vendor/bootstrap/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.css b/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.css new file mode 100644 index 0000000000..a0b879fa00 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.css @@ -0,0 +1,2199 @@ +/*! + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.6.3'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.min.css b/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000000..9b27f8ea8f --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/fonts/FontAwesome.otf b/vraptor/src/main/webapp/vendor/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4de13e832d567ff29c5b4e9561b8c370348cc9c GIT binary patch literal 124988 zcmbUJd0Z36|2U4%l4KKha{x&!By57#qh9rZpm?<2TJKtFy^$jj1QJZbecwX32_PVX zV7f9YgpFlkhA%W0jjEMtS0Jd_fh znd;+QjS%$}-ydy`PBA{D96bW+QiO!EREy0H^Md=|1;cL$g@gh`QIvF%#cZFOVYFFN zjC_5*%MT6qP=mcbgS`S*kkBC&IHbZV(j4qd1=EyB*Nq-84FB8V_@^Kh2T!&rf+x57 z_i>22@LYgTr4OPIjacN5f{+f4Koihp6ozJ@htNW_7_C5&XcLM;Mr1-MXgkV6d8i20 zpk~y8y3t{D0zHi`p_kAV^fvk!eT#lYf1x1?Q9?>W`B7?0OX;cmsj*ZT^$@j$ilm~b zWGa=)p(?0mY8TZ*9idKAXQ*@3bJR=J73v-8OX_>-XX+0MQ+IqApJ6^)pD{jRKC^um z`>gR&v{exJ{Me)YNS& zBwQ_gT)07K6xxJ&!ct+iuu-^E*el#8JSaRNd`fspcvW~q_@VHo@V1B+sYRnj<3&?M z;i6fhg`!oWCqz*qlPE>BU6d}$6%~j|L^YxYQHQ8Uv{$rGbV_tV^t|Y@=$fcs^rh%` z(GcxJOKBCYqsP*d=`eaWy?|a#ucJ57(eyStjV_|g=xW+Yx6!@yVfq>RW%@PxJ^C~H zTly#ZH~Nm47R$x=i8=8D;tArZ;&Aa|@p`dIoFy(1*NR)j-QxY?qvBKI=fu~zm-4?3?PF?px@)!?(lti0^UVXMCUYecktc z-_L!&_r2{q#83>&1TY$AG&7Ew$V_HJnQ$h8nZ-QJ%wrZYtC%PzmPunA%uePYbCfy3 zTx4Eit}t&gpDVg;<2RkK=lG;3hzv5&IRY&@I7+Sx3&kS$~D*k-na?P8x~ z53onrQ|uY`Y4#%fBKr#a4*LQ7GyA&~Nrh5BsY*IrI!ZcLI#D`BYLG@qXG`Zwmq?dO zS4$(M>!h2cTcvSQlQdbHDz!^9rMc2VX@%4wt&=uMTcsV+E@`iHzx1&5nDmtNtn|F} zIq7BT>(aNR??^w8ej@!s`nB|y^e5?W(m$mG(jgfolgJdZVKR+OCmSW3APbdElg*Sp zESoP|EL$d9C0i@oAlo8~k;Til$;>jVEM1l@%a;|)%4JouT3NHKP1Y&fBYRSIP8~OM0 zpXI;H|B?^N?M0`Iba;j3qNQIXWvUHqjcJY_u9v zjnQ_iG2UvlnfPJ(N0KeEN%6_i3A|xSHCfC?Te>AVEyWlGgWoOjz1}URrEa&zTH=f` z@TPFFM<>9aEyiL=;?I<5Yf`E;(QJ?bZQhoGw3&t?+CiE8(~s5Q?%6x^omX5QE#&wQ=?*{W0NwX zt#R?ufSh}kdsiNlsnI|~pjT?V#rhB6-Lj{LyJh1xW2_zePPbaTuXnHPnQUrunk|Z_ zY)Yc}Zpll3PopKtbJ?B-10}-aJYb?Z-r_0PVy#A_*=Di;9rdfKqU8?E+480T))WU(e@ z1LH*}1CK_<0*&qVj6`5Lt7ld`pYW{esd(8m3dXcrl8jj(WwyIhwAoE*DKWOFv{a9% zc`N+<_^L;sfpz0OBJLG!o=70E$%*D9;4LrFQqycEcnRQpqZNc0B;B0kB_@oQYRXDT zgi&HVGw}+nM;?K!W{)6xSkv44J>l}!Ja;{h-F>rrFXinp4b(ww67UJ|IFG+LtIcML zi;Drm0&>hT#^mH!9%u1@HM`LSl!@~2hNr}fqNk9S>bdam?B%DZe;Mk38a&VbPYY1g z!-037;JZjjw!|1StRRmd(zYZUC^0}vj5X019~*5m@=WLDY_r8~+@1zfZ;nqiC)%@; zjW(O7A;D?^BmoA2(bD2#jL{&^v1#^LODYIus)s!iQ*F^8$h;nj0ptfCIPKrQXqBz6g)^yuvij6<^ChI|EUA1 zfNemH*rPm%@|589Jy#x;-jWwZyjnHeY!<@U%qG@8$$} zDwS9B(J3%sv^mz8VvI{lw8!&vfUdV0?J-89)#Slv{N#9JoFxrV9|g05Umj8a)8N6^ z|Foo~{!f)h_P@`1OP+_kMbK}aj(M;+qb&*aH6R6kJp{L>SYmh^>J>6Cr+WBhdm1pG zXExrFr$=}%vl&?Jo&`<5C${kR|5Z#plK!Kd_^L4z=Hao+u@;^xHjmx5rNH3vpqtGp zMpFV9%GBsMP(B_K^M=^d5r6f_Kk#E5U=R!i?*#zg8dHa>Xe=yDryofSkbG1YEMi}4nsrcMt{P0P;aag%5S8Yc4n z@IJx6CEhKtnG%i3aracacYNL)M1iIQUPw!{nT%j(VnN_w`5GGsLhm(%9?|rO#eW;T z((&Jxe@%kt37(85drGn))@BO@<^nC|)p0zkc(rB&0|a~u@}Fpn`qu#b({#^7M1@Wc z_4q@4w_r5*3I1b&`Ods5*VC441epZ=@4b4Yn|BpF9PH7oo~eaSnd&v5d<~=$BoD;L zOYD2sC}6y(&?(c5Y1V`oun8b9)@`X-*0h);YetMcmKUghgvz54Vt5LJ{*3{>5;`^F zpEf&av6wVFs6<|Y@KFD>@Uy?y>d|`tQ{nGMg@%T~X~+UIl@??4yvW^hCQyw(|Jw%o zE;=g?=np<5@EYLit`1=(<3Cki0sV82=Z*hVy&|0oG{^v7&yrySak5$x2OA*nG+XHnL9atO7xVd& z@V16~FVI^UJQ)Tfguw`5FhUsL1`mXJA6N*37+??s^kV=}1ArO;)BvCc05t%p0VWd; zaNz(K4shWB7w(7ehiRYUEbQ-ix1JG#zIt|*UL6_5@%W2^N6AM@9avH!* z2e|0~2Q&)_Z2$)Z zGfbWg=M*@n!Wjx@7@P(;!{M9;=X5wD(vAE&zyRbjz{3V0mjTFS0CE|CTm~SQ0mx;T z0v%3;4yOVf5Xu0AG610rKqvzc$^e8i0HF*(C<7460E99Cp$tGM0|>t%6yQPuE)?K^ zK88?$3j???fC~dSAd3OWVgRxjfGh?eivh@D2m?3+zyVDRKobMd!~irg08I=)69dr1 z05mZGO$N16+7S{M7Kta01-4sc;22Acz47VweVS z(*O<#VgP~|fFK4Shye&<0D>5RAO;|a0SICMf*61x1|Wz52x0(&7=R!KAc!FX;6Q>5 zAVCI@AVb9T_^F_RLD;5F_b}^J=rtV35)Nbu_sY@K=^jp<3VnwIal(N(;UG%kK-h4g zO*qgd9B2~`vXcG>!2?yGQ18u^AHsL^N=&iTIO;(voLcUQ2^Uc1l!I!dTB#1Ii#h<2;p0?4 z^*;5rkJyLx@$(t)Gu`K5pZPw^eAfAF@rm&%@M-jE@!98dSTI%ah~RNSmteo3PjFiB z48(UY3EmfcEcjgTgWwmzZNY#rP#7YdAPg1G5Y7=U6h0zcAzUYn7A6Sug&zq&7ZMRA z5{Z08deJ12S(G8l7nO-BMYWetHfIIaPcVd zIPrrJcbz7lBYs>QC60yIt3!NDd{+FS_zUqj;_t93X{&1Gquc<%n^u}zRY|Nane5-!u-t&S(a6?GuWl<?qg4~ z&p<@|1$tKBG%ASzL z$+kmmvP{-1I|k9mcOmll4a6M(f{3FJL>$#}y?l~IG5Hg6qr5=gChwH* zl^^!R4$sT`;RkRqIqys(4kBDpi%Is#LY8dR50&7gaB* zuBcv9-B5j?`dsz3>U-5Ms@p1}7ORzNy?U&Al6t0kv3iyIarGv3oH|);SLdpW)jQPH z>IQX-xwc0zXE-rZBl6VcH3l`0Jh{0XVrQ~_y ztKkUMvm}(L;eb+BUS1YEEQC?xFs$c-U6|qX< zFzU4&ehA)5^#I3DT(^wQ%4_S?UlVt>wRP&Q(VcC1S$Z5Pd<4c%;@DXX>3@*HFiG6M znPEd2q8iV!eFqNov7;FhIg(-f%m+;D0!Gh@=P)e1MK^Z{rb|y@SaAuA>=^{!*fR>e zqGuSax;u_a7zHpRId&owJWv?H1=EESfCRg8+p}S2*}1vd`eowm_S{`Cvt8}&yY$3~ z`yXN06)+xum%YKcIs6;r;zSK)#dRgx;*!rfSG+sEm0>L~ZQ>xr6ZB>I)Ek;`3X!Go*{wbSU@{na^1^OM8RXZv**-wpjX6OoXin2v%D&g-hwHDxwux8_KSGonXlYbvXE)K=Cuig3XFYV3x<|;Uv zo2#3pBXgVI9kWx*l0V5QIR50XcoB#H#QcSI@=PyY`0}G~>F(k?cwmkf42Ht34F5+gaP45^#VZbN{-#dyvwj4qAGU4 z87%Bpzt52`$QL5g9?H0Z5pg?>q5dq#{sDr7;US#M6>_2TZ`^F-*tgfbv|tm*b~|2R z>N#N7Wx%a;BXGdARU9i`!m!UXz!ota84f7;)9}Uc<-h_r=idm`vEMT~ccd$_lfyzz z?~ZgwmT-fr%^aRdeDDKg_IJAW4NdEw(2&KGNCcTlu5!fHk zSdSmkUb)=R{G$HT)wj0(x_w{if%1bD9hL1n>pCS^z|`%|Z!O#zcQ)!|;-?b!=8YRS z*)7~1)f^5F2bBS%Iyw9RUvfpBU_j<^7{_kn7O*r37ItzD@p4XonV0NijLuVGK?U8u z0-6M?0BP4jwD2OLz>~O_B$@GID9y>nt3i*9=2+q&n_0a108q#-7;s`W;|5hnK-IZtVYuRE2LI@q zHICB<4}LBLy?aju>)FA6+{F#4=rWGnPZsL$sKjJ0evE|R(lQ-MBwIuo>20P1+QHNG zfwsP`bUjJLTSU0D0Y8RA@LbIxsNRKSGrpfVKrJ2Q0LAV|FN*O(;evx1PCl=?wmZ*}4`O1g8)c9tLWE%y1$iIx_5gLgP`FFLxi@udAW& z&s;HvNVVqe4UHN4!rH>R;<`8@3T!QJEAJ?m6hC>q^l2?F#y;4Bx9C}3>9QmW2a-o{ z4Dr=(A~WZ&TD~ARD?7K|Dsea*RhqQ=&YZ658b^)xWc|s;W6gN(Sv>g@d>@ub%FkWc zaY5@UagD+!@n3p*GJ`p=2NWL530N8!AB*vDHWe6M)CIc9S-`QAflJ&fE5kPJz-t(C z1K$uel$O*LYk4KkX0_#EiUTXa+Myp%u__kVGw#!_)6a3_v^!Efh0*ik=87bz=~o#S z+yH(A4kUJ(N0R<9ewV|C!TNl_>4ze52cvVTX#5#4L2E%yW44yX&ydA+zE45U5Cu)?{#u;@WCx#9!y6lVSUKr98b;^qRuyg)JN;(DwD)8dL3vEpffRu%sK zJ#OHl>wucPJsQ6+CLOLK5th;*ZLf(OJ)3uL)^(ljJ@3%qDd3-AA?=E0yBWM2jO6sF zxVWgo{QQEtOkNFS*R~b3S64f#wFm1C)bDHj^~qajKD{g{dhv4E6|E}>zlpQ(F&3{N zd&zooRzy@}CT@XoaBXvkv!kIksJ5}Lv8GW{OV^avmNu03MhD_hQZK^QG}v#TM+7qv z3C0^-9F^KNll+8#a?gaW9-BpiK=+YhSe>=oQg1H`vK8gnw`<&yJgI3`O~eUUO#jJX z1HJ%i_*=3G=i*KHVH$71a*Xi8&-%-Dbn8g0n8>R{DE0 z%_ckp?t=?r2S)pv!*CHl>~%)$*bWnX1uO&@@S55teNS^o&yyP7U+VYxOZgmFt1xb` zKc8d&qaoc+mot@P$8rCweq6KI{h&5keEKl918ZE+u*sbKO%FS);#nOI4_m#*V3mOP zCU~>KHZh-m`swul`wP7!Gv9)(;r%ueNSxv(Za_u915Sa*wP4j3uy1W$Q$s^_5PplU zuX2{vR-7lkfi8Q}8jie5FT^uN?3)a4C|UK#9BBSoAeZU`FcB3aU}y1G33~1$*>Lo+ z>h5cz&W7D>yR@#`bZ2v3R+&D1nJB9)GcQ}~zD;KpwRJY=S$vjpHkKC8dTr^4{FMc3 zh&426B8{wgCn#wr1DY{-u#n~v4_deor!y60W%~8&=fk)yFs|A)4u48Mb&qq8BmZ3S zr>=2)JAc))`#3xfUK-5MtDL(Zh!MtnkdY7a=AgB#W0z)ELq}^X0JJcagC)mE797Xe zW{zU9V)U;>!HRY?HB~lgTUu)Co%&tPtsS+yv2!^SShu&RH@#iL;>Vby+;|$l2`mCX zI{X#a=+tAo7>{LiKhXTE>48mLPFC#VuuRle?`&<;faBR*-dxh4D`_aKDc<2`i6oH4 zkvN_)!#u$+Aj61!0tragk8n>DS!m)nW(@HIr8koKffW=0`9LA!KRM8cDz>$`x~56r zP*+{2-61Y4E-x=BDk%tZi`-9&rno)^MWmU_y~(j}03tRpz$N&chqZ<;1=a?`3$8DF zi*vAMlMXt|&M7S@U_ML5*ca^~G8c zh1~q2ybApc^05eX*7ssC_0vV<4Y4~Cx2xR`;JGf(N#=@J9QyI3idwz1usWxtVD0R{ z@{;0ma67At>q;9X4)#0{d=B2i$n#rwm33%4b~Ws5)w2Z!Ic3?}?3{+y0zLa=PLI7= zXKS{UXJvvMfNFKZGAKTq2(cg8q$Nwighr5EWH-K#%)rTbE(>}&5+n~tCczS5->OGi zAJGzuB&;LD$#9&o4nuYvPIwj%=e06U2805}oEJf^SUj1*w;2qK0j!NrGx%%ZJPUJx zozGlczXFyWJkU%=-W|<2a5kKPA{@ei&<78C7JVQeyr9Aj?;kq=TBo6*uA#Ou2sHK_ zj@_Bx<=DA1h!t<=*u8rlr>uKf@dAbgvFoSDaFaMaHZkllM+GhiO*UJ%mBzuuR7o~C zG>#plo+Z8$CJQmnedv7khqu$Xax`Gr>(v-;+O z!p0med1fv7g`|^de~rgs`hhz%i@))_iVB1Rrp@A|uznO1SZNYiX+qCm;Q>)gZC6LD zcECxucI6b->c1ibV1`y)T>mOAdmifOpSAPsduVu?`@#2G-OKjde{< z4fsm@v`>=XTz9s9pzA73+iBO@)ABP4^=!1xnvs#7WxYKquw`d!+s+nA_g-G1_2V!Q zG+qG0V6}t8V0EKy%xI75i0X;$sqJap(<||%^SC{kA83o-onXab;|F)EsRa>JE_OC_~fCZr%nMwcG!E1bUPZIp#6BSpCw^* zacQFy3mF{d(QDw);LYI4zQ@QzrU%oZ_!`IlfMqb>V`agf{ zJ$GrSA3p;Ntc5hm9vCMg;cy)qCt3)qY5^Vz#{!Tt@C()8W3ihVa+-DZtET|v2Ay6k zvu+iz!_mAW_FnL*ceTSZogD;Huo^6MU|}T|>WYi1i?z{J?Ae54QBesAQBlVd&YnGX z?5vL6I-C6Fz7wZ$h)E1S5rL<%;{V4OM|MUYiGrw!+bLRp{{6U*fRQ@51ZLng2LIq5 z(Y;rAN4^Cd!}`|Roo$*+ThFWodI95rkGIC%MG4Hlp_JmcqsmwW1F0{ z4Gk=rLrmZns@VlEt$CXzKzbHua3C9i(w)qJvl7NoVGHMxEDOgbFv8$L2$d~o#H=`R zU+PgEM)c8r`;LMw=J0q89={rM6MoknW1~!`^(jYtGN08xyJz=7R@2th+*Ygmw(E_n zCqI+0-t{6@!FsWssM|7XbS0fdodq2d_E}Dz3G*p}vw_(UQy1BLF~#)s=-Dz!Sy@R1 z7(f-Bod+6w**NfyW>ksXO7YI@y*ZtQEZF_gFk?IY00bI13^o`?Zh@Z`h>o#hqWE<* zR)AvrfN}7uONGJvBo42|83WO~-+}jZvih>JijrcD4UZxt+4{e(HMZ(&YpQE%HEdMEF%R3HJ(du~=50&VB(|~Q z+2C%0nx-$E;a5BqSbPDSU*JgJSpe?rt`6v%?t{fL7(zbQ3$@WAlVWmyN2Y^NNz#$6G+j4{5Bwe_}h&9 zpF{z*C}0m#LL9#ksn#L&T%>*r4LgDEt4H@;K=*xy0$CKup}-X=Fdqe;M1ceaMWLY2 zkVcC%laS^qq%B6lD-b6}TrA>p5Z8>j=MncC(kYQH80i)u-A1IdB3&=ieU0=wq~D12 zg(&1c6k(D2XDh*@Za8I5=!-9HE2e;kbrMk9;R$RE*2f<`IPsCqPd2^#$; z8uK`MfI?%nXzT$rE*gywL*qY16K0_a4m9BvG~sVF@i=;LGJ0?&dhj%Q(1j)ip-Cn* zS%fC*(BvL8WhI*WJqis#VdIe@4;flexDN_njKZ&>X*1EZ5;W~Hnr=fgXf(r!W>%qD zlhCYqG^+{C4n(t`M-Q>+;a2qURWxS`n)3~sn}_BhG_MoQ??wx%(ZaoG(FL^lJG5j0 zT5=RE8A6XNMJxT$$||(-U9>6?tumw4zGyXzR?E<81zLR-tr>yVSkRiQC~_})d?i|Y zKU#Yft$hlueG@%#KU!x%>o=nf*U-i(XyYqr(;Bo{hc>@~wlHW*4~mLFQHxR3<0vW* zMeRXR-=HWL+A2a@m1yfe6g?3|Z$dH4P|OD?<_?P8hGM@!agQRS7#WLEd=84gjuM8W z1S>KPN2Y5iF#si|qQsZcwvlLC3`z<{N#{`VHkAA>O0lDqkC9n`%oC6~8ksYZxf+?f zk@W{r6QEN9;L>h)LfL>ind3f?eoy~r;xP>S+5|Q8QD^i&5CR< zBD)INCnNg{DD7F4o{BQ^P{uBlDMgtDD2ql}>rmDOl)VMzY(+V{QO*}AcL~ZpjB@`* zdEcV^DJcIcDhNRZ6Hvj|sL+ZEuc0C_Dw>0ea#7J~R2+zkO{ioJDzTxGQ>f%^RPqxl zO+=+HqcRIBbD*-9QTZrTUWUpqqKb!5#ZI(CjdnbOcI-ww{y>$BQPpTvbs9M`P_+tG zA3-&fQSAy;w;0vcqPm|^{Y+F}f$A@y1`0KdK@BTWqYO1(N6n*9YbDw_1?~I1N@Q;*JGMNiK{Pd|sAsYB<4=-hU6-hwVXiY|PDF6N_)XV9}N z(X&6I=Q;GkM)cx!^zun`c_zC22YO{Cx*|qb;P)zeH3wZyLf2-Y*QTS_$DubSqBn}r z8*idFr=sh_(Di6^Lyc~1LH)PTJ4NVS33@jdy?X(@cNo2&iQfMReb9tH9FIP{jXt`8 zK5jrC-$tK2hd#T7zL<%=Jcz#RLpSr#R~Gd3TJ-gC^v!+fn|Sn11^V_F`feopt`>ba zfNoWx?=PVrQqhld(U0fRPm|EkLFnfy^vgHs*G}|X9r}F~`a_BScn9774!I7Z!AA7A zgM!U;pKmC^QcCa{C0tJl2Pm4R=tfE`r^Kfy@f(!Hmy)cae8VY5Mlo3w^E}1ANJ;IK zY!jteO!Qqz=rD>clIx^Faf-%Tp$5~X>Z(k`L28I<-VD%ePIeU$DM zO8+|*l0yyGQNy#T;rpo(8fwHUYQ(G5{ky4=J=CaTYSa~Kw1FCZo*MlLHAYB{p{X$v zYRp1v%s12n-%w+hQDd)D<6fY~OR4cG)c7uH{MXckG-^UA6`DeYzDI=}r3_liFqJYa zp$uCnLn383M}>z{(^gQ^FH_SA6|s?;VWnoOsF|CoSs~P{<a!)?cDFh^YL~2Vq6$M|q?W49nOhpG!(NR>)Nh;Px#nw=<`>EK= zRO}B_oQ*POQSnQt`0G@{L@MDpWg1DDUZ)a!sBJT;Bm#Q>9TjehQh#erRBkc@5njNLFaTY1X50h_=>xPSd)%aXP|WYUMm66yU!rr9D+YfJR> z-Lvb-J$i@u!13#skLtd^gw_3cjYi)6pM(7Ea>5+bxL`78A_sooLlC-=<7ke84Isci z-5V@gq`t7i8L#8xj`1ssH<)|OT^V}#6iq4`a>62~i5v6;PWvJ9F#w;aiMqOa4jh1C z(kWO5fdemC4wMX0^NYTs;;J3R;E58aC^p{`AFa8w5&Lli>%}lyk;r`%D)JBqcEUnc z2HnC8G9fNLn}Hocc{jMg(1KL}yNuh*9PZ;IW0l;1Q`~LqN!yzN+ebdIH6+A(B9SbA z_q&Jw&{o68jemUi{?&K&SdS&JY8K-AvCrPFo;}^Yk|C#f@R%?>f(Vwb(-F-Gq8Uzt zhD)}t9Y1NIwu-Kz7mok-%vwDO`jcqj@3v&h+iQNtv}OUsLCTmDWl>h}a*wOG^V6XD zy*B-wep~_ggPm0|5)7({N{ydjc5^`1RI<6LR6ihe{|rIa4v6E)@n(33L7DnsQmd^_ z=dS7}X|9c;-No5^>{=7!dYlxBN?Y5?+q4H-d!NJ$8GsKKZilUm8}10V3~zMH$;N(H z1i6eax@NqJA9V%bN8JIg87oA1`z!yy^xCrzdL@6agIyaz0)y{U`*GEDrE2NT4SP?K!byyG18PVGtn1-0Sj>BOsX#W@p4oZ{LRPSbgZ(ca zu!r*i_COc`9{oQ(!Rq}f=1%0jr|~F0#tYr9hS0?Sy#voj{x7V&yDeC_m%_4OS`K1U zF}Oty!L_VT9SO$4Uo%4^henZe`25!l35J&G9KJ*DK-@AI&*k>+ZSL&UV}Khl4VXlo zoy~jqYC!MQf&lqIr=SA^@V0y1ox`5vF4%v^Am{i4pZj+VPXjc;aQ`!urw3^N@7VXo z<;Bm)fliQdo{LlEhLF-Tp6DcfH+zNO>=ApjSojSex*OK9Net+92nj+Q{qSta#nF2N z`EF0VD62mA^yBtK3?cu;)en!{g9X`k0_*U)=o+I+^=yOT3Xo+xc><5tJ$7bBVf31< zkG0NtFPdd;N_xSl{q`Jw8RQQ zp@N(Wea@<~rKKyAi<0xrxkUF@U_%N2U?S0y(c5hL^3saZVhv>0G?eO&Z#lN*=*FCs z{FI_3veFWmyQ3frQd6vANJ!bWLx-28HYc`i+m#fQxG6p=akHenbO$_JQd3f2s(b3u zw^m%*D1mrpg;VQ<;8UX>5C7{x?!kgXMM3+?a#40oM}DUkTOnNB+EJ(Pc%|XB#w&-K z5A8hA4*SFiY!v_GQLM#d4)^LCJTD9_WsSP{rxVU5Ug$W`da&g%Ua>#0qqeoPo#*jr zP!XOO##UYz@W*wK?t#ZIAWUCwj5Vs1SVzABijJjoKWp{oHvEZeFt_fz2JRyb<{?_Qe#g1rG z&`_-Vhy23I^p^afSLfE3HB~fK1v#slY8&eZmbl&t99ZIhM^xU>SlQ&+H*TtKs;h5! z^_@U@J8;Wi5V`w;8_v1HXgTn{9h?i5>$EqD0#_B(?O;I$?f4`|ZWDVP1DhVMupiX- zb9gN1$9^1X*1CKSfTYRpYhCv*dm5Z~kBy1*dAFnghwE->m@)p@X?33pF4oju^u0H1Q8 zJ+r|(I>)%x?^W?GYEZuAS7SZmS{^# zc9fOs$qjNtR94Cd5J$lVP$anxFMS(Fig&g)wbtv&@2+kG)15vDWOu&+7{nC1pd+o?RhoWXq@mU6I{st&}ET0kEAkgV6@A`Ui< zl7EH0h0*%vosQiFEri25z(H{>XsD{z z!WuGyJoW)ur*(_Sc~V8NL0{?M)AQPLVHbBJ-QMhMtJm*3)q0}$qy$g+4o7^87inPt z{|%wv>-m|N07Gr&x*=qI_ZY+Tt4aXc|Mm#TrxXrnJU^K*JM|g9eD6m!q`K#T_QT!) zSOYUR)Gvm8p8o&WC3M3g0$d3kNkP;ftVE;$)(1{CFwkvSQiyT?c-S;af_-OPMYiBA z@G5YHqY7fnNpFEm3Cp49V00i}BDZ;O%t^a0n8+cAGzmE3ck#)dy{Dhiz#Nus;iAZF zkg_S-WOIF+MgJOja*F4m3YePs*fJ8J-=1&Iv*k!K^9r(UnxSlQDA(Ft+t8wW2kY?6 z8{pcRZ$jSIaxGBU|Ai}9q(9K!({@}V2mR@N17Lrc2*m4w*#&!<0iD`4$?cDSaX$fv zKl#NyiBMg`Pd%XP+JIMV6A|jb&oeNqO`6NO`d9Hg0!iZW)7Q?9(l2fmWxiT;?F|in z0Y3+^^h@Klhs9OQVKHWZ{uomS^mxUQt_z}5KX?6! zDUJM2!C{ycUkDNuERMpgf^@~4T%b#*1h)g@Y!*^;1t7)!c|3=T>6 z!{I6ZOP3o$tlk( zk=XKbbIh7h&dDd>=rG?AbckQ!ZLb3aK?!XC={?iS%fP|^R#eK*TwoE^_%((eR0;VD ztmiz{JI*^wwMz+ZyiyDveUlpCAj#0B8s;qwsfbfO1VRE?HLwiyJi{;E)Q}nlxz!1MzQs_$-D-rb$PCq2M%_0Zv~ zhj755?_d4?&|x@kUA=Xc|99x>_qU*WRax-&rK`hSNe)+{%cMz9ccg3Gi4ONRccP}d z%dtm$wOU=y6c#xO?M$oF(W1Ro%(XN-nzeXJG1uzE`6mBSLV2kM4b>mJg;8RcD{xNpl zv-*Lkp)H~wTN}ThmAB1q*TG9~6Pb=aX?sq4^hjGzuijPQD#UYOqZ*tr-~!GQsk!hO ztX>iZ&!}^|(%bCL>MTb_Sthx3#}b%OxHUaqduI|Ixv2H!41LL-YG+fcq}AC`yHh(b zKx5^TNAZK_^myN(uI*gex$Vb-`mE92o3ukUbar-mMYg`WmMD*v5H5N}P>$V}QIWYL zt2w(eyKHUj1lzXUjI^Rsds$Aiy)wOglWA(|=Ax|3yz)#*d3JMJd1m1gi8E5x=cJ}* zSJ)~GocUEbRkn(Z%8WdtBdTMI=*LvmOh&bD{D> zZaQ&(22iIzc!XQF)dYO1cSl9@? zJ8TOqi%1wA4T-^?)e%sw8!|J3#f5^w$bsANb%OUBg?qUq_r6|$>_D)C@a@7tq$^Af zR9y#-((BgQ&o9)vo%F)lk3VA7uLEZa?rdQAgxhpRm%z|VIX%$wTW$z);S0y}ulM7G z&s~pVmd{yI9v?^?G^&-UZu#4fd^`8@gY8_0`&ztNNO@ zu7)-UnD}O3iMHBV?R09o9J{M_>((@pF}3e&PW+17pL|*8T3adVh=FNdOwh!yElq`F z-}@}09owt6Z`ag;0lBXQew0|5gOyrmH6(TH-T{YhQ|F|HZBOR4puPuK_ zl*b>&3l`zUb07~m+GP)fghV(bYw0;OIWlA-MQ(RA>|k|GGzV4A5`pp}f?ETIpIqmE z55PA3mMa#&N1E{0N|)=ocD3zgCth{^cJ-fsYMS?-aU9e_a-^n&jQdW1WNp*Z6&m<# zH4+g*IzY_XU;U7)#90W?h;r^=8!Ru zl9+_}>V^cp`@|iYx)CqJk96S0H*c2R)Z%CG>#)Q7BaSDt0UvA5z|!d&4t@hK*5I9_ z1|yQLQ{LXPxq6G16p`ZW3R0}En=Vqij#S_=rR`=(@21K-tJ5?~>hCwL)~(pSv}##S z<-|aUBo6;<7wEY`r*bO^5Z2%Pvi&Qqvir^JRaMvZRWDu6d}&X2?H+B@k%l8RM^-ei zXk6J=)frgv)CIh;`TQl^d=0mr$F0pT)nDH8{G0pwTdwyu9cVmQcTiF`e0b4tEx1wl zH8&8oK6B(NMQ=2{kP@WaY8BVcB<4Gb`HM?Uh4FUts^mo_%Q7U&?(A?8ER+?v4$Na6 znTS=y5Bmo=FzX7$Ed#AsrR)o)uY-!8Iq3X|KHIjxFIBI6g9PC4)V?T3DgU8Hh7>YSok+S#YvRAU#WB8 zP3MnDx)1!d>$r9ozOOd7P2ZYVF+WQ~e8pr-1Me+qme-Qrv<(14mm9%{QeZ@E0Lp}A|yY)4dy?8BmvJay;j|PA0ORR=a z1ncU=4T6t@MFlX0SL&QSqrjehOo|je~yNqTEF6@Wc?b4Zyb+F`UaOgwKNRb?2?!>+bHof4YPE z0{(%!KXU$~4?gAt@fK`XV+Ht!Lho-UKPUJ)Ox?*q+ppdq`8M$A2JPx67*Ed5X>yv+ z*(om3l++eClnQjC+hIAL6?&a-ioS6*3ayMJhfdx|d&645$VpQ(^J%R;k@#uxsFSJHa%B zdD4$aWCA1p0h}FArWQow#o&q603%$&KSOd^609j4!SLB!3}AcCy+|pZ#R>4=!$QDU z`iuVN8(csNM6Lw`AE?VJ%gW1j?vw75qVjU6X!DDmI~!^m>g)BcldhAZ`g*8ncRGvn z^^e1sJVX6M{UUx!;(`8wei81%{qQXXM+$JhsMofwEm51eEzf4xlNls}-|fIN-~i8I zr~o1=G7jJ5;Cqol2!Qb}Ya;UUt*iy!QMv`_6XjU1*?P^yCYT zSFdPb@ea@Ypk4&Vs~^Ju;Hrl({Jx2k6o9^iui!xCtyb3a+Y{=gj856Tx2d*2ew=5k21>|Szd@y-lMYetjJs!^`yz0F@!Zms)Bx9%gd4foE#J(4p8 zG2Kbpq}cSW`H+*_1A8pJ>t;%nTi4G_o;VtwA&@mmAZrrOT!Rif^kQ`(gZxG#Ex$O_B*B{J!f~wX?V?x44-6PJRz8F3zngb{0FU+nrAQJN`Y; z>1?ld7E3;If1}=6(o#^bE2z(}EGk;IED%_?q(lSCaRDS1)9vk*744uHT5Fxo3l{<* zRMA}7QrTSUEUuI6ijQrIg_yuHX8d57dMIotOhkZf#RFjjVIn*kPgWm4?szr+IPZf5 z#vfndh>xE%DUcV3Z@(4sL0HI!g2efRf#=~RAoz7wy|dUmmAs1L;+)*9{ET8rVOeQm zfdh&jjp6e5X>ruY4Nb z=l8p)t*NM}uHfS}rKS31%Xr#NSO)qJkyqz(x&s2 zwn^F~ZJMO%JWrI;maz)RR3=cn6_1KTJ&u*N)0N`)th8{v_n!Ove@2>QXYaLF zR`y=&9iHcT#k2d9k=<4B3iAAYK44chaPlwvM#*{-dJ=p;leyVbUF0EaT^*bHe6fS4 zL1^$5@JDpNg>TS6_qXn+*x@}1?gSi;`SN8PE;M)=d_DMs0Vdd#hX&mVuwoUY1J-&6 z76|V%&fi8tKtZ7{@g_zDmXLjHiFS!svFk;0A2Hj}j=6Ff0x<00zJq#PAcgGSi;N_x zWq5t!-Dw3@vSi@}Wr86gHI*AZ8ic?%WPaqn@n%dv3z}4;V(*nb59Vi^& zKhmM=q@;hYhW3}xp>KiQC|*Z~Vhf0Uw7>W*B)GAO41G&V`zOmte+e17j?pIHqC>Ie zB@O8>Cf}07AZdzMkWhFk6KLphDH(zWhe&AX3WN?Pte~M%It2R;5g(_a*kb|-U4boV zZ-|719w#{JI0?m3t2Onq?$3nPjFX3GF<5x`gV%m^7#RkBo*xDW4{T$vhhZxydc?a8 zTiI*2jbl6DflYXcBSj>X1R>ACg57!Ut?YJs@>g~_+;N8o#B)?lUza6hJ`XW;3X!BXx2Wb@gvoZI9!iq4E{8b{7MF>$Z4?2%%qJB_$_3?mz=Q8vr;Kc0N?drjQI)%?7ut{JQKly{TE}v{!5t1 zLDnEBwtqVUuD~`RL~wP@g{fQ*qPIuMQBiGeadV3b!276LZt{n)pF;cWrzpOM@8Lu` zvQ86HqvPCsPXO7k`RInIw&wm3H5@%k-WDN&^1+b{SNY!aVD4?hH)=yxp(Uj`s)p;~ z-TZyKEHpVPil01L6r}^PAf#5ufyVi^2z{Bl1}I!i1T&7z`+((Z=uvu96vfV68^wJz z8JO)RGDd?iklWi@Z4o-n!k?34`?vXv2V-pr65eH2;Qg}|F)J_yRv^9w?`?n%7uH;bc!Bupg(Dvzd?CT_gfn}0s^vfWNK{i>+{Df`*@>Y!Du7w20F3}t zfC)AP3^7a!pv<}i7bs#bWU%Qi&xi%!4)FZ?$Mp!!`hdg#J`FlY6lT@cWkWErpz5Z{GHBtD}$05y-l;G7eNGbtDV4tn{5zR#8%Sm4(>J)4Yu2t@u~wRzl5B`qlQvDcv$(K`CwU~1#F3}TUD%TvUT~2W z%G+CTV~EB_tXih!kQ4Fs%)Ck0&ydpn&rt`BrPo#4Y}*{cTyAXrlJo_1#mhrfF;1f^ zfm^++V*90kULfmEs1J3{PCUkMzw=XKr<#l)!w+30Y97IK4t(1+?WA2=)b708&LZn2 zNYci5*)TLvIfY?c`ZPaqdxe6h)!n5ecc>n0>)k}oWm~ecMSJG%9XXxmd9=YExr*K) zdODTtrgF}boof+=UflNG`y@}$wg_?ntMDs!`;eji1uYqh3=HN4WKAZ~-E=nnP)$EX zqq7M%@IR2J$Y8`&Mtv&XI3s4lt4ub4SYJ>2M2mL^wlJ;zZi?uU4dM6b> z_Z-#~h?aZ}7qu<}X-1BmL95@8^^~Y7q2JK;m{e!;sWBNku+Z{ARpaOxoDLrlq9%lV zL)MYAWHw(|l~)543;W>=_q!^bBCC~j+D%O2>LFz8|LPtcat(Pu>3EK`3-|8#Xe5=O zN90ekNLgUaPjhgEG0&ZkSEr^K(~SJ$XGI0`=Q`%G1mL@LEj>q9@F}r|$S75$GpZ<- z1IcP88Bd=jOU6jk5`q^es!|W2m8Ah0^}9sKdH$yVVXWV7&J?AZ@lMthEG zzh{xMA*;dEz|m%pMMS1t0b&1TGFK&NsX|$As7k5kSfKAw@+f`e^V!tLmxw0(FziFj zBBQ7YN($5I;m9e}*B6UR4VJfPvW!1?GgGR&q`*qNCymfhzpSsI_* zcbgZNfbEZ4oGz4@1(`C%l9bkWm**Gp3BqcT!RqJ+ch~|4-uymt0Wv{H+l*)s8wH){{p@HGdsk3}Dp;*w=nvnT<} z%sTw93~Hx=LBogBKpN=V^BftIW=qY?F!-@-jlqzm&rbIP4JzGb6700emloo&q)n7< z&a!5y5uD+NKZ{&>I`+y2P9@I-3vGcfQet*TMqXyV#V^|m9zDV@d}k*(PM|sZEg?%t zAs$U0J3GK-_OsZSu7cB})52LG6A618}Rgw!_#( zB*&|((bV1q`zsJ116$;MjlAi5$Uo(2+6NP-tOt83G3~VixrhxN3>*Lu3GM*wA!vJa zO16{M?S1ZjpQpKhQ18C(uDzNdGtPTW){dkv*j;X2&x1yL+j7d#cpjD+LH9p*78LCt z!BpuK@6-exK|HM!ibQyUrFtpiR+r%K!0cnDpIze~*?mY!o)|_S`<&&>b%C%j#bkIp z%U_=74}IVI-Ptdt-Q7Khl!Z8zgboivr12jM_>IqP7^xjArA1^83EE3es4Fd_fU;sa1SV*wRGXeqs!6CV-|OGS`$k4uH`GPKF?*@c$760Cd^=A=o(%W=ONe@h;#l|gzGLAV zzJz0$LkF);Xn;M+0%N_+_`z3<_d0m-@cW-3=U8sdH6Tsaq;zKGWjZ(-2uKKM;s9`Y zIuH%e!bdJKm82B_PAMov#i{Xmaq77EjO0{o@F+xSdQ(yoBwC2p6DWqi5NX=9pX&y3 z+pQ1+*8n{r1d8E2)Y%Vi;ecM8p)uGp;IFViiUr!(Kya5wxD|u%1Ll|z5x{cY|9uN5-wkvwgFQf+fX)*i zOEZ6p72PGy(-2Uzr}wmr61T6Jyd7Tw5$X>$_eO~GD~o|ksm-V{)o|Ur$v}~OTT^ab zLle%AE2^F0Vgt!G+;#PuK0+XKjDN+V%4R9a(gFA<+)^G{R`%}M<}rjPR#k)6JJo+n=m0ix3KlG<7o?L>}d8xnN&nv873j_nTe4Lk z!T$0+-0v{jo_~={O_yetSjtLOMEd>rM0(*&G1rmu*4o4sA?w%fe9LjD;6Rxa z3*3?bje8y`B4H${zrW~FlF=y>b|2M{`DCQ5YOm~F;jQn9;tDw_YiD6{#9HywGkX+w z{!IBZ;BNjp)9 z+yEzuDWWI};!;A}4Z|p21@$6GHxy%X5i^i#6}ts7+iG!o@ACk62Y!S)P52IH;ZCk_ zr*lWR3UXv)zpR$+ZZM?QbE)-)hTST15@Ez|d$h{kw272LzOGl>O!xfrx}D#@TouD( z^@KSj`lPE3r}tHna5|hkOT*}`zDF3|4JY9QK!~&5i)G=fBQ zc8X%EZar78uKD)c8XnWhdRb=7(HLeoAj-|21|bmYl27c$MYIF{gvX_vzHq^`=?l(X zhg3_q%jdzne`@5;_s=hw4!sP|OUmN3qGVuHN7SS@r0z=D<=1eqao_HPQiw1(oT>&Y zBmH*Pa&{x85`;g@Ccsl=FGLka7VOOP(}6KjY)0}{P3MY}Q<=&|$_kU#v^*j`GA%NN zO1|;U^&S`w?Cn1yVtM2r;CevyCfCR{ZEoDsurVc4ADOX}J|E?aV0coBiq4TF=cg2# zIWi*3wWBbiIKnS{Q`na9&C*OG(08hEA`7UG;((<@a>tpMgDeJ-eO;Scr?1cOs{sKd zIj2}(tR{2C#fACBh%FztpRu3Zl~aRtk~C=+Ysh(xd}8_fpVKQjvK#S;Y#(fvzqVK- zPsc~SAIRt8BZegh_Z^qnJ_;=$j~~&?xK{Wc3cz5ZG-TZOzauy^UWEjs6@UYFsVfM6 zy9;odHsRNNgD6H4#TW#&m)hk^tH{?fM&_3nw!x{1(eQE1$ltPK^ePKi6;-?{R3+bG zC!1up_?);n;E7&cLq#0@2d;H0-g|&P#8)hSe%~T>s9Vt_MuRuW!(`I=BYfSS+C2@s zfBZFsJlB3%N;EZ-p=(8D!^hFTseoquMZ;R<@azALavYr|ZhW`=!uzWCGS6?n$o;tD zsr^IL!J)};x}SQciM}u|X!C|`>w?!x(aEq)Ge&RPDW$vE?bV~e-393fe2s=%VQIVh z)wsre*OMpI=*oBEePZ&OtnP5pi4&@ttXg9=*L1Ax+)o?+Vo5^#}{<>p# z)Sk#a((`L5#^F_Us8~L)4MQV2`|ZAp)BFJ_eu?)I8DNe0po$Fma5;uWKF=O!2112< zQ&+QawF)PWGDfAwa4n$~8&|19lUKz=aoFc=OT*|bfLL0TIP`qNxzJ;rquN$mqrxdp zq@0L6%;gkkmlUhoW7;>J;Or9l;Wjca8^nr!be5X>i0MfB=;q~gD4!Poa@YoZ`_KD-JkIaAkbB{Z>izf&VefKe znwX6bNALp@jvv_bCsUvRHVzD=4u8>YrB$*`CbCKfR{4wic_}pAla;Wo=Fo{*S)Au% z&sonW!a0#Sht44rNsx-PkcIESj(&!`O2^JQ#npzNu-5LDzI%$i3LE?x_||0MeAoQcp5{H?^#~ROE zBabi#U;H!;<~>hHNLqIS0{(xpsg}Wn0tW~>M3b>Fae}r;hP4UERd*omQUZ?m2pL6v zIl(1y%9!1RyFu&~&w}m5dtjpb(nsJSzBmR`!_(p$o_JBBtw>+0#(HZlEh;L_;Z6#% zB4J7|CKYEq1D`}pM;pWv!^h^-L`$3fk#vw#p z1K_Im3QPzc43$q5iWh}7?#GpMc`JYg{{K>S5`4AMO?2R!&vV_ENQ3ejpcVY-@(tXZ z-!=ixI2vF^2tq0F7!8Ms`97Ww_&lwBJUWGhE+h$b3%Q)c9a^?OtUOuTwz7D6kSZt? zZs_o!;T)u}+#RpT+9jRC+lLPiZEtTcKGAlJD=*&Pc<7{*TrMFAWD8@rk?Kp|mAY55 zwDj}!2u9>#qIC@rO3ByCtSn=;DK|6M;>fYtYz~V(GdDBaXwH&aB|BP`Hj~wuWyb3) zvneOjo|S8L*m81n>}Ff0bi*N~B`ed41Y?fbmSfAdrAN|cJVk zw)jQnBfL26^oJ3=XVSm%|ErYwHKvBRawhHRTa=pMNJK)&3%<~Lw7{8zouMU&d1-OQ z)z_5P=JRZJU@}Y`?N1)__t_6`pKzn0IfdYi;&FsgeU1_ZV5M?rfcymnxKrILl!%qB zK(MHEBp3c7^)bAF%*ud0RJ?pu^a{0nK|okyO#^?p`pu&%xxMOEz2B+jrU0z1qLt*~g9lv))wy=7C6|{wC%Y1}W8>DOty!&FTo6&Q zk}KWlqW`rD>qL&ST~GXU=Q;EywJE)L-;w;IM^wLWxJAX>rp;-aAzURoMjuwoEtBbh zp<6aQiPi#M-9B#1jHOblr!xZSdvw1Fr+umJ)t6UCuV1A?cSn5m!cW|ZW4n(LXc&eQ zvHExNU#`7BfmI5VCz1S4zQk?uBkU7$T_hgf%7Bb0KH9pAS8kRvCRf25N=| zgVmtkIz2HdgkKR8x+rpuG<1I4yqT(z2gdIi$5qeWHNQpMMJFPBxSmXW;!N;65f`JS z+i!od`8)M{7b=?G;g8gvZK^shEom-&e;`uT^jF9ZsqWo~i|?tf9V3ITG;;a1 zCkyM3i!H_crK4xg9d4HbUEqG094B9r-TeV*d1pZPB7aerGB;vm z9_^>b6!bhu6b_z-L!ep6B~Sg-9?QM?_|6F#vC`v<8)uAHfj}~I7M&EwHAK~}o;uX> zVx%gzIO?F2BjOIA-uns@I-8h{wk$hV2ph;fW=EFIWX_cC3C6?? za*y5QusCyVxw%fW-DEdr8#1$`jcb&dSs6By)8w?~*=_dRysTV<-C)fyWlG;%k7Xb| z+u$@f%r1LwuH9w9OJh!YW~TI9q|$6m$C2qdMrRIyTP|Ck*_Gumn2pj)CZ*9}O6Srn z2D?**<-^4RXlpX4&gUz$jYea-Io+Ir1<&GiI9xgS2n(L{-&_t1zZRhi#^dPLD#;@< z9Sd^j`#O}puN zX^3rCWV4#6#pPvA#JCEJ9A%brso*jzJWs6GQGH=AaY9Qqk~ivCtEwOFhc)@o`h zp8`>2v^qo*Qop0c%n6?a3mZKfn?0XMgL4{owy2RAFE4chl~lx9Et9gW8YbF6{9|r8 zi(|MAB(Sr0%Yg1WhNc6_8Q3`d^`U`mf&y`!Fy0Wx4CB-x@ux2cIwct`#E8o56-DK0 zca6BbA|(N??r2Yp2pZ9W%3T>X8Fd_8F8n5XUpMpk6m?IHc*@Kb(~&4$?)goW5t*Tj zP|*&c1JUYZvZ`)1`A2^;SB4)KqOuB>Mh%3?&_Q(`h1#Rr0$>E9TLZ<@Y4n%$_4D-g zZ^w~>oOj8<$3Gu^>wO}b@M$Y(^A8^)KZlb;kV1Z)J}pJ84=wGHG2w2c@jSmMX)#$v z9YjQ(4N_7gAq{2VxE;56z;mEAPP%U z2tuLGUB)^;LtSiTq=U{s=G#W*I_nI(;>!KvD)oH?@Q;lMLHv}i(g#40f)EIxxRG%O16U`($9#`D&k?V06>O6 zY!^qQpEI&Dw$4cAuk>9)=Ni1b_?5@)GSoTA+&151biO09BDUV(S7+SiEU!Sajq^oL zjuRypRb*7C9nS1*2Vdu`taQ{JBlCU9+$HEfcJyOk%}}?5%=IPnkJULUE1h+I4)0f! z4kUi~ad5c?5(Ux@BjHw^z>lLxgbKr4O92A7qc*zqF1)XEuOHiz?DTZ3D}-j;s1U>%u6Rcgi% z38WL&I@gtK;4wtFWMnWCIk5DklzlUNOWXRQja6Hu=&l)nfMiurRnVd3fWI%Zm_&4u zg{X!wM&CnSP5XbvcY3k<;!pc8sp0am2q-dW|MLlai`%Z0e>)#Pt^x_> zsjAQ(giZb!ef_m|4qxTKlIEDA=)&kisjh%ZPd2D-H+|H}$?x1Iip#? zu2s_sfvorkRgp>SzFWY*9fo1uDn)0S!@r!dQU%|W^%T+tZUq|$AZjn||Ec;Sci{Iu ze-IxP8<+oZxnO8=dv6IkV8v^c#prg&#bw*#`SrSmy4C8aC`Vxo9~`G)jHJmEc!$Uv1y^DxW)D-eHg*AoM#cj>FUs|Od?cZGgL)9da zU)}FkAXb$d0Vse1*CqO_K!ouV*&!KD%8(7{3UT#doE{48+VU$GeR0cAmsG4A04}J) z-MGSVm*9J@96KWe*ffyzA6aazzgw1F-9m=pXE;WtH{bj$ zz54Bjde^bayi+liMCy`%_Ed}hznRh19G{RQ&9g)%WvkLnsa8XJhQ1&!Dc6{ybEYL1q(&#`OVTp!`ZQy% zF&jvLob19hn?(xyIMbxIr|6T@p~kJt$TG(#q((Lwq}kRGOE#aAYTp)9lx8L-Aiq@OCG;>^4Zh<8; zD=W*KR+!*OFEraCS{*sb#vS=7&X|I%-8(bmvrLAVJZZ8$H9y&z=-S~jRvJrlD$+}& z`NsIl6m_Al(U!&Qi#G1ftIV-Q!#>YV%hub|?Z8(!(hA~BqRr7MnYk62d4{4mtEpI; z12qZ!D~l}7Ele)3R;3lE7bQ7TTqfJrqeZq@Q`+0MLaEhk%~s_W8s06<)?2c6+2E#> zBxReC-pMl~iK2&Zk(INt-eSphTAW6^G%hKBcbX01EyS(Pe|ziW&NgYbBhQ+rE;r{V z6{Y9cGxM_Sw!Fd|Cwz#aoV-k<%aCWtv!E7^#jJP5q^4y`GcpaPj4TsCAeq_hH~UQA zSh}aUxd3?6e^1S@Kf(o0x zSejQ8npLLCFS1z*x%{NcLMNB+IF{xzx{M7OIqAJli}wc0GdPoyGhI3LY4JvU7qcVR z2`|xQ%CQtwJ1qEKDY?en^n$G1bg45TE3wAtG*=W@lBBtCG_zIN$&SRb9F!l4GiPze z^rW10Q*5@Suk)doVXAtN&bUoR`u6mPQR=hzGKSch>F)A9HED=l_QezwX| zT2^2w!Oc{VQoRMzjb%AN5#YzRJCPKG(`nClRMiwF=ch)d z6zOyGG7IzaO3MpkOHE}ahp|YXnOo`1$(B~+=IM*liqonM=Gc6=#CbqG6y!LJ&p%5C z&Y+qoc%C%XUmV)M%3mA|jfM7&8n>_TqLMy#>WQwUKE^Q`u&mLZPM!KuAcs`ZGG@p)s#dRFn^&@qw?*efN2^AKk6t>N`#tOXHSfJ5#hHKp{utm- zR3ZGa9C<8gQ7xv6{l)9<1>(in-nhx2Qh1}<-i?ds3uKY}wSIEQ_=@&3pZ{B#C?P&F zJyH!GN;$B68^}gz?x#WBtFf@As*($7ZrF5E9i)*z+VAA1hLC2is~o}JU%~ar>bX>d$BSsRTmS>HHYjtxJ=Dl-em`OG>7mpvAVSIzV>l$x(V6jB{C$w z@3*pnZe*>XW}MVbj?& z{8wW{i?pGWUscJg`%T*Y+Udm{YA0z>ExLsv3$@W}Ra?a6Jx(Jj^>#EYW2o17Gu%XY`{3UrRR{490Z7%C*Z17O9_mI&ASc zp7x*q`qSx88Yb+XbZ&`s+1VQr->BvD`hEYe#?!ZX^3eO&{^k13)|}a#z6Zrp5X~eH zUGa6JVVzTA>k?DjJ$~+@5H9@(MMewi;z;?!*Pgr^tzvoZ;{l!&4S$P7*o0cc&Hu2;Z z9N76<88$4LvVF@I-ZKIXY}vAX$`VzNS0Mt&2(7dgat{c>A%yB_rNK)1PuEaE>y(6k z@1CUez7jG3FzG#xA-@=s53->`AgF(V613q~-0M;@@d;r2fE`iJaSv+87YhuC6%UCRjUr}Za7d~ot{*Rc&FzRXj#-P)vCtLo;_~ylDY$% zxt=n2xoG9F9ha}F$m0M^NXQdcFNdu<#tFZ9e)qQOQdgZl+uQ1|2vC0T+B2F!`^)6`c&Rs-cu%;^X~1<&`W?;KOUpJ**iAo-tiYulLg^uNWduu3-EOzCl3#Yl)k_0iHQZGftV3p&-{xh ze%ei36?m)oX;9N26`^naS5{i^6Qf-$|_3=Fj=IEU$(sbvMN9< zS4@7Id?f*xvGqqR$on+d9YJtXf?rAEmFr?7Czt9cc*Pk15cc50hFq&1T+Z8=RQ=tP z$Kz!i;1B+EK)ceND2^x(E!$c)qj6#N%3}IN>&Um(9+9p+5`FZz>U{O_BL}&IM=n<0 zP=9(oZ0Qc_3c0{@UE6Uqsya@3dd04#i&U!<*KOa( zg>BprzAQl+zkF5tdiAO`&XSG%hT?4%;kDtl5qqKz>dO;OZn^!W*>|lZHgj9faxQnc zd1;0!MWW9&HOrwKT^h?Q5`>O?7uH==5S%;P%T7F@}&F#|dH-AVX52=5=T~OV@cT`_!JihvHG&%IiyLOpyso z_z=USSo$$86Vaj|xfLrkBRe4@#e*UNFC;X&%3!I&_cj;P%sr?`7Uf zCe6MU5-%#TRMe_I$vy1K=gNxe^A4%sYPC5I@h*wEJ-b+BNeZ{DSFf|IFfTSs<@sjq zBFjQ`;-Vb;bG&WS=Im|izRJHX;7hW)1PtE0=RD|rjiN?3iz zd>Pv{pB*)d1zvl_;@XlJYno}_4)Ygp?!OCvfYsU6Jx>{MmyrtZ28hVW!KnY0TFB8A zWCcP^i4InPhUKgLySwo};#5Y&vH+MUOy$T5x`KHCMlf|9g@wGo2)C>l++7E#y#C!s z$wKm|473biQHFSD1jN&arj*D17##gY&?^GxB6Sw<$Nj0S2v=|i8%&S9P4sc ziYd<9<;T%wi0GLz}9N=7r#!n$f2=Q?jE2#X4-Gq&-Ki-im4q-en0{$ z(ru=1si}>wBO7taxq#-{2+L>44|A8oiC9S%p_V5S6EA&0f!aCld4>X8?Rm!Y48gPT zjPMEoj3$s_>!CP*n(G^(Ftrp!uc6o&q&n@t?UWTgF|!uoc9V(Vge;_ zNwAf)nk9*mN&2XmiJ$u7XVQp>*rO#1FQg5Df?3doNI~mcAOewsa(lA~o^ggPu#{5B zEWiP=YCxt7Xnirt?f@MKoi4Z@(Ch*x5Gx(yPPqGx!P=%Dj-qI*HBdL`5IV?Yjk_b7 z>B)Oxcfk5}C?hrZ{$yB}{_O&Aor>-bs9}1v9xd*F)bfROhW7Cm$iKe*tk_TJ!0ij} zt5(pS(!f9hX%#O)T7~wT7uJYDz#j8t07?Z8Zq#&lxj{eG!-9s&x~B^w?23C`!0%y^ zM%V#-#w~q$fA6H#lZweJ7M&He(Hcx_k?4MqxA$xVdf)f4oAn-!6k;cHH17A5VIjfc zTO(m1ig2%pLFkl8=ZqgRiT3xZuhafRZoE65r{l@P^i`ynUnZh0b-}yCnx#E^5e(_> z@cHVs4+0@eKUo~GWc)Luexai4D|wW5?MFuAA5{MtQ4Nk6|AMLrh;E&HfazW+zd z^be^BnB6H;o*i+05+VaRRxy!$aN`FH@9$&l2~(1DbR2nthH>%;`uc>YXRPDp`*RR& z`Alrh9hrG=FlQy72`40tw%vKv+&i_WFWym;hmV1D#d~&<&m;pOp9xRdts5P$W)l_;=&rMcN|sM*W{O1@cUYh?K`dN6%qH05Jn(WfYO5M#amZy z4d&zH(oku3bwhMx80Sida*aAA)s&9XoxjjuMCl0pr>Ky1ccpWUVbKk%)jM@i?Bllv zuiU!0uRfsw_XwPZ)BBF?YvIc)@=^Tt=#J{JMlRh|Xev?{71~{JEzv&~CyR(k+`bv5 zx4azoKRx{(P`U5o*J4a=@0A+F6q=`k3?*o%YJ|z2XyxTKEic8q9P#86bB6AEa@U-$ zUB6Y|x_0KK;}>C&ud8KmRZBV$lP&3$+cJWs!dd$3R1Fi8#KBsMCcuW$Dur~|CT&?oIv@gkAutV5Om|7&_fKhj{yhl zrk4bFklwXrwoF;mqB^+0iA$v1+KD}T)?|8`O_WB2dsi9++=@J7mCYSyX6DA z{|51S{9uk0b!Mi;lF54lo*|QjjUpScLk?9(7Q5Y&t1d6iFUjMD{r)~iXGvC>zR(Z!nGQB- zVlHIy%p^#+rvm#AkS_xdvC`v2+c^Z3hy_3Tu1@Sc`j^(iszz8?BCx$uz|9o{uFn=gyrubMD3WUPXms z$|I-wH(*%sj0ewQLO-Fjd9}ZVfulVl65^4nJu**!8sZuFJZ~{u%~`4{jmwFkH+TB{ z=>wmufB1}8G)3xSQZKvp&JXGzZsBdQx(IJS!`shKZ(e+!H#(i**-g;&xZI&ic4F=s zNmX`rc2!lirRwiPSv?I#2v365$HEL4F$nhDw<6sxpr1hSQ1rRAfympUOo6Csucikc zZ2L9%OK@O=pkdMzs3fN(5Xn6yBEdMS*PCTGuD$@Gn0bDPP@pbB2V7c&A(-kUCg1K> zMuvr=$PmCg;)wiZ_EsUkBky+W80c#NeeC$i8Ja3h+uexQt2C^-Md09|oio?3;NqgA z5n!A)Zr)RAR3xQw;xrvj6UnN7IeMpooN8GDbq7Ej0TSWP7woP z5IuEzhRp%C6!7&3iey1nuB?~|Ht0wf!U8BP%pwt8-ZHPqH|P>^S>Q^z-=I5CnUI_m z&jGj8C2oYJjQB+t)k&B?;X*BH=<)wfeurKi0Dx*&UY60pwc@*Y8@Xj@6(@ zW=*xTpn~@d!`{L$iN2!RP^0bztgT!hu_>BI>)9sAucHK`my)pqtI^2`yae6&Xjj|&U$E;57~@v2x({YL9k`Y-m@uU)yg8emuE9ZMlcrtV&49~P zfxHY1sD9lp2{@gtV4McwT{}3eReu4%xz7Or_kSVV9>ChTf5Y1T1E}pU&JrMP1md#n zXJ-HUBfI4Vc0$SlR48QI#H?^84@hQ@O9|66%_|q%4#yRtgDWz+4VvQmF|r;V3eRH7 zIU#FmmmGwl0juI64Fs`a5{lY-r#DPhU(3RGZ^KOYmzO;X$;+o+yAi?lRHCAiyHavv z*Qt(MDyG{EqOwa&UXk%Vt!prPOu`n77_4lU@Byht!0j&;5$?Hw5oCmqUbf4#GPjQE zls($<=oSJ%)aCQwHH(S%9`C*ApYmdv@REfPiSE9FyQ>|V7A~yxWl1FoT#z^+38hwp z7$v@pYe#Kd-1umvW4h-5$4>u`HeSF4ipEgcip&JZG>(x@Vc`Q0%jnU}#COBQPlLXu zx94m2>!IH8r*@)DZV)vQ#sLNw7StZE z(m*GWbpY5hfdb%5nLxpCcsAE$a+%hvR?s1lXHFMfP54Eif*_Vh>_M0sRjp_%JaBj@ z{d#)`ue#UgXS2v({C-8RYz5njnM>}jLJ(l;{UAWL!;YHpEC}E$zuRWdEdXmpN?yQE z&!PaZwiNEb(;6}s1^`wwp;d|FnS3a&I@*D-z_u0Mu)y6mZ(JZUGIqr_6|OHZ$-RL9 zF|eCY;30Mbz^Q=u)c2Y&3I8hm!mL-`D836G9XvTJL*b&6m`VhkSbkTJbK@;ekJqpR zbu7t?^;d$8_Y{LeaSJzzF_P>a4#Yhi$nN0|3F-3Q!=ZTB9@xv4G@-s{>) zSCa@j7}h4MmqU*Ws2!RxPm{Rj}CVm1ue9sQZ~>_q|hoMRM+8gVaH9d zg*W4OL{zL}vkXoqVm^TZ8t-lpwdd0q?0a`6A!2J?m;RD^?sZ!!2Oxa|k0$WRD?Jl?&6K)*q! zoPljVGrZfTc(-AhoypwPnVNz3{`8(xxQTOi>y)m{ytSIYo}_PwBJAL8zg@F@Iac~i zEVmiCOm$Y!cr@f!S>HBRgU867SYGHoTeWbL^`HwqU>!Q`ed}(;$zew@Ivzucdm#v^ z7yzXIbFkn+?bWLQ+k<27Pc_CA1=52>YQER&x+b zKmtxMh}{90A{6p9LLf-*-5m}#mGhc=9b05QKzoO}yOc0Qx;rp0fa}*NyVqg%S~xm{ z*xPW04i_)^VBJ?7<|~v#N7<}SiTva}pW!eVkW>ZL=1(im)J{S*ShWY>-rtCkBuKXO zpq*|lY}F330?C>r_Tn+wy;SQl5_k+kuTAXhb_yMx0|fA$m8{%2c?T5GP3&Ng3uWAJ zFfJW$x2V?rH3NyGh6hrqt)(AfkIyytT)j1^1=l5r!?}^%N6{59Y4CmjfyIek>@K0B z440vxDC?~w*B>%^eV-t7QOXSJ%&-f1eXfbc1pd2G6avNrIR#LW0aRa{|WWwFzl@8n9V3YrRPqzHPwkJ=Ccm_VrF2V9yu zOrbEK15t{&VUfL-bL@`0wf8hh3vDsDo!DOrES-=vq*&<%UzAjR5-&Q_%qh^x>1kI7E0g zf>KAy)R39@vmWBbzWj+_3lNnZfbW7^tXpvxca8V{K!g}G0yC{RB;lBv8Q-lXGuS3C(W zsV1$8YY&^TX9mQ3FyoUcG7m&c`t(rH(l@04srS$E0DJx^+SO9==3$tqcwjy+)Ck(k zxah)#^~!>lxV<3-!3A66^uf}Akf*0oAB3=;{@`v1uW#8}5uy*)$89SJmeR2&z=P>W zCa9tB_!J^8V^8p&bYaF=4eHfsQMAU}Ai1CXe@`L)PV+$dc`%V3 zzxfRh#k^O)A+i-@FqHo_Omo9Zz^cZgiGI6q74(^DY>WI}6EG`+kJ4purgJFKr~o{q zNJDjEOqIhW44VPh??V}m?7F`X7TrMXBY(VKzn-qY?C0+KP}cL8{r-K-Z!&r0roH)BN`bsP#**h{@Nqt(1&8e*LN$33C7i6 zCXV9PGr0IYFQdYw@oJ-xTA~1H5_*SEk zC>FH^Jav+eRLegH{rlCWbEz*cbV7;+HsB?q1W|@amo2%=N56GEt&MbOJRS)`$?is_ zd`&QzJSnT{Hyns&g^i|Y(!YHC}5+$=-@Ar8hE~928eI$(zT}`EnrDTqTNY0U`j+21} zQe05NI3N0mi9WHE%H~SR0ttEOB6<29GRPsNC{Wtr+4$i528THc5L}%vNy$yIr#PhN zAp7>nX*%3!1Ra({N^;6dvrE-v`1gw!5D8yoEHV{kO5w;8)dn)=y*o#wbhbp8E3DLDS z_)ATIFUFHCApAYgfrSi>feyO6LP|>7z&3;cZ35wz-5&7^^=Y9q!)d)G$(3AUl0wMa zYEu^$I122%vj`FXcgQAy%UI3S8sUa=#j3(LE&%a(oxD1KkEna81d8MzHO{+|Muepz zvb0cn_^sqO=ebaY)z@2wbyspialG0piH}c?Na1O;XQjvT+Pw7S^>3~76Z+A+V?9}- zwT9B2d(;KRxp^hLu$bt*C0jE}fSXtEDXl+j;KvGC!dPocD#SCb zzCGVUNN%PKfhL^on62&N&yto9X7q*V4K3S0pV? zSQaUj6Tv7s*L?8Z>ngMsBJ=LV^;`tLYGKHxInz{+e>t{Vc74;k3!Axm$&aUM$(R!y znTRj@sg3kVdyn*DGPUz#gur$IzU|joG62UUU*CTxPt*%Rr2LAEOxQrCVmM$iKcSK9 z_5MD;pwl0ReXtl%$gj!Q31x9bv4wu|AXo3A4Sk?Xpf|T}4a(lS&yUt)b4Gk&Y*AcU zf*)EX|D<2_VH!XF-~piV%<0AtK2~{p+}o7$zxPY6OsPmHqyHpd`SzkHCr*6;q0}x8 zn>tZ7v2p5YKq$YaUza6Rq*SJ|mdl9&oX1^&aMtG6tLtmMK+t+@$|x7P|1loj_q5_$ zAbT;KOt>P0dtzlanwDvZyA{k%JFG$G4N|O{F^JxI6hTmP4c`V3D|s5LB6MGrsHunu zJC?@PNDzXC{x4zv09ZDy-Vb#6;2{~`2>*9)_Kw}#SV_%oJHoeR^9?;N(YEZyaLB2@ zr)k{17hBve5ilsP2w`N6U#qF{!Sx#Q{#Tr z{ZAzw^a@Q97b6;dyOJ1G#BbPb`sBE|p&>-8X(>OTZhL#%QXU6(YT|N|Ia`ECD1g41 z3rV8Ei2A*b6j%m%6(?HUccKotfD?7#MC>eLoaO%`>^^(Em%-&yF-&*qJ|Jg}jaVN?D*@^!a>|{sjp3a?M7tw||E~|4F z;zSP@1x~ypTpPCCBn538IK&`oJ;6GQJs9C#zg&g2n|xxohGLq0WAfdY{AIbft9Ql0 zz@sW`x2vhRt_t!?Hq(yXdB-CUf}OG?q9y_u>N(woa56_8gh_KY`)bjzRK`)c=b+D3 zKK_+eVSM2B)C2pJ_bm4c?s7(R?%B*N#we5TN<~go8cb!X=~L_O0jfzHL8YQ3UB;a4 z*J}_YHqyY-#&X2a1t9O>GK%DiqW(&g-fKY4hCxWEP=`GZ7p8zO`y;9NtT&YO4> zJ?t_BX*<@qUq=*6FtJE#Rk|aaIk6-CjVB^-d^*_#?TwCjuma#laze~SR|${Uq~_G! zdqADh*~=$I(`sjNfBYe_{Vx12&R7%fDKJa9(P8*iV4k`+K~a!Ut}iGcxg=L{ea)S~ z`$^1o7&)Eo=Q~gRtgLZ92Wqv%ox4(YtFT+7D`bE{v`g&o5e2G{S5fDmC+B;`kj8}z@iXN{xkKS zJ%E0hrit|{*tk8GNi&(XX0TF-^N7&^qWG=EM};p^N_(syitoLTvb_c41foI6o_EF6 z+rNQ(37(ZWOG04=Pz8e}|6yg#&OvfJFDJ`n7X8IAAmFy(C9SCmWWm8ij+iStXX|&j-pe!2eY^#lPC4}MLg$N zTA!iLOw3DiMI`E(a}IF3kgsteVWylMv%&0IF1&l=+~u=pPP>8wD(NXeJNID$f^c{q zxr30L^bY-=d@sN6CcSRWV(W+^kho6#jrna7efJcQ|88L4B17pN((Fw3pg<6_gtWOK zF`|SojmY*(_MxA*w<*X&DU$Ewtyvvn4VlOwWrEkg7wN^41@3k)!Ak+-Md(;Abbi@S zK}I^$bM%}7x{c@X+*PO)dUcdAl7HG-*LJoAqdi)J{_UIsTb>h5pqDSnLbUL*dv&zz z(u#)5oI4u=3}!@6*r~WRnqaZO-L>D#4%-R)|L>-x68reCwh(^N{P*#`#J(3|-yO$^ zePgdL`-%G`mCM9~{U1U7NYpkX)8M-nyW8H_K4II(N{gW4U{y$$+gm98P@+qh(Kj!` z$#w~uCM`fM^0F_<^5c~xN@5qJD+L%?jMR;$kwb{Ey4ltVH|SX578#2dk}_bft&V_f zEg?s{L7&=V=otIQWK2C7AfZR4)2U#c zPs^>X@b$~wBxA(>U<|=e6`jTp1vLUvYes&%J8yHxjx(bYq=YMo#Z7s;xAVt$A zz2ZC!`KFKE!PK||NH~9y)BgN zgMn`nmyQU%!2|zmC~HVcPf8`b-3v-|d>p8NCXfkqZ4nb=NFaNhb4*z#9l01oAbDFt zFERqC^bE+Prl3Kg*gzNsHuNX7tH5{nBLxn7MrLyh{2%xn!GnV*Ou)9NDImS0hx&y`!MA$*L)d7GkKosSZO zu*8T+HT0n9YB#Bw?j!rUpAco0{&^wKwwY|#So<~mHFAw!6Y!AOtJ)DNeXFCkx8v4) zBfP1q+NZAybrmawJ8rV7GWN(3{XMUv@NV8$czDomdXHNkxAdgjty@sp6Dh@)ADy80 zTJ9?MdBeZqmM_;&IO^pJ{)_InZjo;KTOO{rJoL1ihX(+P-4#c??&*&nvGKN^3Vio& zQiq))ipUozFR|*`hX0-6b!73pJGe>2S;pl)X6mrT?(J>Jsex8alpkV)F?n~Az_oS8 zo}qIF)hRdv_)5h{s-rE_Hi5NNrq{-nAG?LayrU{FHpigHMF7fm^M*vT&OPJcWs*4A~0w-w3-iF)>*U zG}jG-Xdu#YfsWRxodY4Y5t}&t{xcA6rkfSQW?}Px4TKs}2@N0@BzI2X zx+=jn{m(N;;X}cLUAj~v3W3SK0uG}{*u$pe#cLq}c7Ps$1ei7+C7#KJMw5vgAO|1; zW-Lt31vh5<=PYeO#!YAuuz*w670SR_XNj=g+Uz)YFnZ%T~0wF4{OT4-M;<5W`ym)&sVxfm8R91t6aC4w-wi@ zgfOkMJxolynL2tNE!s1qJMPw3pft2;P-2NvcL?x6@h&rk4>iXEuLWjlx}aCU=kxhb zCq&Uf4K&plpB$f%#(>gJm##`m%F0XOQ}a*{x0HA*iT*MmZZ`lRk<}D$t1@%j%yns{ zQ6fk|oEjOBy*%jY?&~a4!5}t=5u_uyjNl%u3^6t*L9l5(i*%AnV&5afC4sCK>BIIx z7Rk*i+WL~kms=33YIl)_h9}@cP)8Vp3&jh;QxTJ2rm0X>l$lEqb8Qnm3(Jf(>Izq) zYG2fZphstR!X^SR-gt_sDNivqg-(TWtffL*6E9xTo{EyhD074=B1#j}LBH)8AEgbp zM7V}qDif+yRu^ff6As>${QrBWwl+lWD>P*>`5=abM0;VdF+%Mcu1*LKRl+_DEeNkv za~0|uV_6}ltTshSzPYRdv^MrI#5mtTEy(7%*4^gmjpzRysCWlP!Jhr>73Sp>64B*% zlI3XIK%!Y~URqvqb~0+llQS6I^w7~N5JmL;4K+i&@PV|bz*3aSR}m+pNo!8cbInaf zUAfA>TB_Zn+nL$O2yxQle>RaCO&R9YT-UtRq%3UWBP9c`kX}#7q#IXb462f}5_49` zelkj7%+s0D!C;k=lWb%R>0>JUs8G^mqVwsFk^Df2cS!p>Uy*8k^cxL+%q+3KL(*B_ z@r#rm`VqRJ3(40i^7hY-z?c>lgDARGl)=-4`2?RA%4=A-(Dq>KOW4`8MvG@2tY!xRs?YUN#qK1 zfeu>sOm-@`E&xnY(Ok$`OrTLb4ILswhadEH{>3gIBp&CWzRtFVh>Nv@|NAP*{hh3M z1p!doCh`|cQt5`fbnXp~_C86w9eS;N^5`PKRD;MnJ+aTcRD5(svmq}h+jN)oSLEhv zLFb;Hg>ZUTx_TQ!rsFtO03C=`05fHD<9YzJhtRo7nnl7!keSoLKlBB0UO8AvCB2po zgmgqtqBLkZh=gV)>F`KTOX&-)prk}Yj5#qo6`|;!B*B-V(`4Y`FF|Vz;L~KprwPvS z7_vs$t-T#q@OU5<`;w0V3GCr$>tQ>FPw^9}`eejmzZQnXPjr5{0K-4NFxSrShx7wi z&f|?9yLtPFLC*d9It!mjX_r9Sbs>eSw3GM=$z}h5rWV1q`;dM{#?UXA5Y1C>_B_vIwPt4YkoAz4@TxCV>efnYq z8vE3_uehW?AoN8%r10=?Tw#c%IFl{7FSm$Pud%{$P|VuuY^zzS95RCT;>1w`;Py7u zcmFbiDtV&mLCkbMnMunzy}cRNRQtb3i#r{NzQaIB6NXRNrQ^A$xSxsmsyqdwc=fu# zgD_%eKTBc8q5}ddOL#A^WDlW6+QCtS`zboEcWFG{N#_UQ9ZIDm z#CI|h#CP1K8ciCe{8aENWNLn*zba^#aqgtIbO(-&PQ%j;Krh(slK4!}1gLN}MID6Q z2qFQCxlu|!7T?SI=e@!Lk<6Qn7vI~03&)#=DVKVs=s+Fx@r_-(DiC%m?hi1!kzP@^Ygm|fsK_Z_= z$0ONbgj=n=Siad0jD~wr(W2MofW2Iwrn2{!MP?-WuTklZS}HMe{&bE+K8LK7?rPRG zt7x7~uEzmnOLhBN^m|k^3wyxpJSnjhl9^v`Bk84N=|>M~|0YJh?@{ZiI|;;y# zEO^eouk6E-C$hiD_uwSurwc(W>d&gnM|0$y>>;VHrL&NPLe;#~0Zaup1bh9ZNrg%I z8nX!dRA|hJrg#$rA~pjnw6y=jr;Aj+2oZwkFvZ!{Vi(sU)7h09K6vo?v3*Gh~si-pVta#;4K`%ktvWTU%O-tIwW zA$?E(tCN5Ct8o4ceI@_9E87UFLlbO1(#`1^I@O`m3`wTUVn(Mjv8OocpMYDq!rFa4 z06aVHwifCl+P$M;?2<&}AMwNmPwbwf#YAT!B2-XWF^TyRS25S+hdZTX%|uvFq^+Y5 z>u3RebhZ%hXR9ZA?C9t}ui85LSD-EVRZK%lg)Na}g)_9umtq|4>?P@%!9Bpb_9A>X zY+&mxZn*;c{1Mx@QBCJY8)(u+=LR=PjX^{-fPQhbqe#xSIdH4b=B;(jO?CCnV1k0h z1zBd=0`#5>LbxqMkoSO3%>Fg%Q6G*rNb?%aW=kbg`&Ip!d&=8-uPU9{$smaOU|d>s;(;AVcuogtKX{zDRa>w?NO#My+Pf`?c7sw`Z(f5 zHW#wS8EVf!9XAKo;rO?1_NfbO-U~#5-6Zne)0SJ}w^4v$S&K7~+1klK*3y{OP^dH> zjXM;u*Rl(p@73&z+7VKfb1UZj#@02*X4Q-`FzNC7Xw@gu7%A;TRVz192Yzn&f(RcS zvqcxM)ki!L-@2`!h}@O&oW6BnQM32XHQW97Y_KfIUu0RBKX3n9rX1rnKA7A00?q_~ z#j7hd=Hy0(G)Vt?_~~#MmfZ+Xx)4Xw^E_cr-amKjI&rxor2c}CLm(M_^YP_X zPx7xMUdq0bb~696`fS$a%UAA^KzVc9F56%d&-!X&qtxnbiyA3mT=bS~i>k~V_+0Lus6eZPHey6>)XR(S<>((6IR6 z2%e0YY1dq7mIYOAi{GZIEiJ6eq*zs$x@0H+HF5n` zwkM@7zKpAm4l3|fZ3#*UiQ?m(yHi~n5w3~e0;Gp*i#evU!cwx66B_I%kdVK*W~_dA!?2|Ct=72s(DCt#JnOGZs%Tk)-z6!k_cQEE)+(G6$>2bRB7%CQTNy!TP zJM4y(fOwomRB!@LFu0&PnvX9_sYmR&2MD?A3vuqHH3d6WJ8BX_%J{;l+(4Xr52%yT zx7oe2fS{1L5LHB+sWgR8&)1f~cRF~5R?FmF8HZSXGVD3E0oJLipwL`V#FOSLcBxF5 zNlwEVGok46le4#o^wzCsWa?btvV(=&>Kh8eyg9l_W?kQ&%n}CSm0;q;MSnm0%oGz-4liK7 zp3Z}CB9@WRaGjhqXHnE7CWJca5D8~+)liw9zFPxo%hE|-FS?z~MBo;kuP5_VD7Kuh zuYktg?Yv88%D!i+iIV{nolN;A#?8sj&Y;E9NwK7tv|?W6+{$^4!^%H1K|r{G|US~jE-EOWTF}iBAiY7zIB@KphipCJ1n*g)EQK5q% zflftp?4BtJhJ+lAt0u<+DNK?qZ7P8i3`0toV=mDvt%sn#V@_3P$E#?nbaPyISORai zyy+VgpjV;?^0d7R7hx$2Z5EprTC&Z#e2!UPm{LH05~xC_HyBhxwe92F0<1H;b|Y?> zBW<@xD1tTCd{&>50MO42{LI!iWO z+-y@;zKYD1))hv_0wL0!2J3Y=OeZ0g%}&;9(lqv=?VA-iG-Rd<>_IsitV?!HPD@IM zTQOG}7++S561O5D43Z2=eZe-NxAjY|)SO>Zt0D`emb~<2Q1V974|{f$ca=Gdnv|Gn z!_^T{YE*L~#F(N<%t%zJH60;FOG0I5h_L`AWE~;K@&q7`+Z1JL3*an*sR!w!Cqw*E zoD}}sK*o>qdiaffKuwJ0cFJ>=1HYU0OwELl z5E2etg$nLVxW1Z%@XsvYeN*up(@1#qP5K}$B7XhOT`pBSI|}`+P!D)QtAqsl4f%!a zmI!K^$2tCR7MV_`Gf1>D`U~Af2RxTh2bmBL1y`NSU@+(;2APl`>b%}^bNY$3 zi(NdS+k_-?S|TLT(=4jz&XDJHw-8Uhk=Wy{;0G38;Vq0v+a%q-CZoE*&KreH(Z2?> z0zihSb+WC)tUp?ePE8joSZfs>zk>{KuY&a2brQf@x6mh7NWbD7an31`~*M=KODb| zlpogvl1$T4p%jP*q%y>1hh#<|rgN+(fgEuVhOx)iwJckxlc zAWV{CTK@;%6kiil8&n%q5?tuR?CqZ0ZCxm%N)py3{?!PaWx! zL*8X_Uh7`HR*C`CT456DiN9Kxpv~^~L+wc7_H`G|_rQNq_||0Wj|rBZl?eT%5J3rJ z`;gHRdzrKk9W5Cu6;@kk2&>y?NRaC=b!3>pX!;lmKciqxh2t*=x3W_g;V}sjdR94F zPgy6h-wir3a~(H%v!2TD_}p0Y^0N9zhB#KRMYP)xNSSq0i@(f^G}0~o=Tnb<*hM}# zOU4W>rM(%FjEL;Kc^@T@*U%56=nw<_uxx^PxM|M0J*Tc)E||%J9mG>d76e>Y-_jgd z#GHOp&Kh<$onBdpK-O~m7(G2kmPaQkQe%q;77wf*?0R}2>E`=a6j|;=0xV?4?|+?+ zC5pP=7&6QD1)JTJwaXfsL4+Kg44#Wv9~-$+UNkN5QD7bvL4~sc$4+&(2rm=MaC| zn;h2@KhoQErzT`wD2yebB|_+^Ad2g6M6&nl;Ej<~HG_^&(+`UWSo+p}d|_jQ{%G>P z5Hc{342UL!Oqbf~PE;`8)Z8w(olC|RlZmNhr1$BVb78wzl!T`RriU`5~)Ii^F6I>W+j*qA?*)LkLnDNQI*ukt}mI z^2|nL7G0rDh|;2e_h+kPv-7nD$!1EB{Sfu%lEhX?Ab(8d=%03%WQ|tL zx+G>>QVK9PV0VCbVb^d#3M_dD)^#HnoiCw3Xk&}nAZ!3wSV6Kyoz0=#TdPU3yU@QC zV!cC>k~lhdmNy74^iOkgfi^$eH9tGoQlLc7=o5%B^oF$ialoRFLwy|$P*0JX!`WTP zpPIY`V`7?XVp@tCdT-*P0C$FFK%6DysV!+73c^7jgQVi$iX6ZSOrjVF$w9GiFlLHi za+6(H`sF_F%Z&Hsuv_<(-&S7Re}SuN+P&wi16%g_?DVN(_RpJMIZ@@cC^38%A2w@+ zI#3nnZ7%iz==c|73HJly+Z_4kbZZ8s+~o2!FHo-Rk5t2I$3Xq?yb zY0IYtkI{a3C~IfVw%q3Y=BnoAefzc_EI-PW9Wftlf#aJhs#;p72(_%feTw~r%sOSL z#7z?7)Q+Y7f^~|_<~xpk!?zEV+IafDq}ti(jks(dVdF*CFB{^9xc}E;tXvBpXC0>b zwT^AZa#Rt7l zpKd*PniD>io$@}ogtN6qv2O;o50lP6;&q<8DK*eY2{t-)`XDwUksxP}>}=He`j+h6 zkt64M8fQDj-XI@9-@=rV<(iV2q)ktm2EF6j`7?^9siw_{3!2YQBZ~CgBx6d3Yf8En z{J}Tq2MXG2+7Q6^M=5P1q-4|(bl>wEP6)Qgv8TOT7ccQ%wV3NX%FY8oXynN1mO~Yh z&&h)l;pmkE zozvzp@*WQ79nzP?dL}OkFl1Jkwlngs4(~abY72H48VwB@rO8nJP(w6ni|5qP&y!~) z&B@)eTU`(tqlJi6VUi`1kvj~RIuvg$TD>vS@P}WH?*$x!{9jD(YnO6OSN-clt10)= zXKzetm?^0u{BYd0+9NP})6=7wj^haLeRWLH0ZW7CM9u+pr>Qm!PDcyQv#Fxlh+#O7>gRbYZ7v^%1cVkrs|x63dWdO zTvA}l%G7_i0j#`T9eTdE#h?i`1T(?L!f=zS)DRP?$%spfyqMWwY%D&tSJ$koS*4rI zB%CQLkKhX9=fQC0EX^rRiG}0Rk_#7wrvxR%n2T%7HJZzw=}R*5J}lA}X?F+JrZEp= z<}A0&XXNiWWIGhhXf17_v-8wDH9Kg}diwslkFMtx8>+I+%{5Qg6UX(p!VZMjCz=li zogG~`hbbMKzd2|GQ=GB~LL%*q^(vbIXcZ^-aLRB<(t+@pHyP7%(h(<4)oM%gMK<8* z^bkfEN0+miP`*kuMrN%%T(OOjGhG}U@HH`A9UO9Vvm(n9i#3J0Sy2rAoNQq;H0egA zwkWv}Ni%e1OwTER_gayt3uR6qHk76ggL+INsr*LO#03@p?89guA&2%;q-9?1GmIzCeNNUi#pd-;Nxq{ zIU9X3sUdxDPOarceR2J=Qs117moganLMI1@7wP4HG-g+1R-TXjE&A0wGGWq>j9l&D z;56&{y7R#g!*3?u$hwyE$cwx?`HWZdl=9DY%!W;=aa(!H%#9sk>}wpHNxNG5B&?V* ze9e+Yivy|S#zB$Gd_yy4>7ooPN(!%jb)PDLB3p%%soL-m{4PTxmZeN+o>V@)00V8xu;@HR_s-a+8J0F%@QR)7ED+<&@=bFDu#;f0$Vr8?!N-+Z^dx z5*!u~-12$GvW$)ESC?++yevyM+)sNHO}YoSd7shV&nUQ06q$PryN$aI%>Mm)-2whl zMu7L}z#}0K%@yT!wclPkU5{&C?cmY2i%h;q-~G13=5i7qy^KYqwv;%*WpHu>&xDiw zuFcfU`c4`XHCz;8=y&>OD&_U2)SNU9h}2pE>UYpV10T2QDNWf;SDF_wbe`}Ro16jV z9SFW5I_GURd=ay$7C@`NwjRJy5n6VsCbIed3Ky-I5{ zV^sUWs^ErVoH-9niR2wRo=EXQT0Q7DYyh3phmNEJK1|u;L%tXT@SD#LGG|d?I@5m8 z8qLCe)AJw+hsHV-RQj>njA67l)qjK>-a7C{j?)w{`A5IXJ+6`?J4lAi>xU8r5^9fT zlMOWV2#pA2G^4v_{O-#xa}nW^(!*OXnabYPSQR``Vm8%Qeef;At|=WVy-q& zBugV-TX&PMfVOio3jr)$O_vR&3&AP1@CAAIHxgW>2iR~vBjAjZE?1TY(#oc zc&JJrqNg`EYz^ALt(9%4+q#F8)gkIoTN@CFTvy;$+CL+fiOq=G>Z{TR>8a1^#8jUE zP9M057SXF5*x?PCO4|d#UFsXHQ)|VRRUv*UJXu@^?U_2Co3w|j9ex>XR@!azM~hIT zyU5Mfs+`pnTAs|6C!a{!u^S_f5R;pyS6a*louz_|)q_J*T6*tLK5uRzj>6?#WG16` z+C*nkNBd>Xx{eFF#nwj7IRkCtg1^x&u9U#N2J^Ue*ykP<1AuN!q~FZGEET&5U-2m?D~0!r>g8O(y8-SEL@K|Hc_iQ zE){yTi=7)AifcV=OaMA0fkh~=3isI(!r5d_Kh(bkp>XW0K82SWh%59{~^64zvHBPL{Dq}A@c zeKh$6^|qJZ^d%p;3mY!kH(+V&dx^fndfH-rmEjCuwU8vR^ra9Gw9AjY^~V+0ho|nX z*}t5LF0Kv#O7&G;Woa?L|LDE_50<=~=||rR+QbMWX5w-OPp6yoe-Q5YraOsx8s+>{ zzROK=9FZS-gIe&oAufr9+`!{MOL0AvgJ}Z`&>E7fbS5z6BatwR;!#)-vS^@*{r_*xCL^_eD1qfJV6O-@bIXq5Di1-*9?sTf&s`v8_M+OpR-%CNIU5L0ShZurac_d8wQ!6&TrivL*=Wjf1)9NZR^qTo>vM@b2$UlL-Z9WGhV==YJit4zIs`?3 z$NU8-^xJgSDEftpzNUN0=kCblFD4nJ?0bG@uT8MH8ArdPkL{zB zq}7=mLy^QZ6nni7cpk0_&yL6zfH$5UX(W>rvdI8)nzYVB8%iR;Q#uN0n!zAs9pZk; zO`--q+vX4tegWsAPR7LxJ zDaD#lXV-hqL|idTKY+TxqY>rq!=#kiHnIsqNvmjNSP%pjLS5AbMQKGUQH2aK(>Wjj z*AoS1#aSGR48$7wDIhX@ThD{Aak+#zyJJ@%=iaE;d!zOlc^|G7DkH-HHYcCaKBNyI z7l)liy&9AyRz}$L^~t&2-DF#fgM5rvG`_JUtP*g{_(lu9Bo zX*S*`p){W46eBkylQluy2dj!pbvrmM8TQRKz4ChHWBSSSS&Y7I`AG|;LbD`9Wtc;p z^vX1o-!;q@eHi&Q3jN`VQ1T`2DQ7a`(DS$!sEUnw*@o=$46p(A>)?8uO6rMwccJI6 zWSQkASuAWK&aVk4C-<%6NH!bjJulL`VpT=_@%q-f1Lw+HqYgzDeYw?}c}Cu0HPKEwa1DLzutqr!W1roafXkN_HumA-i->8VGMNHeMW-I2W42(U zP068~^ETye+7-Ghk4US?yFNb-`|+bnD&I^U@wR$%`NrnN=EU9Q`OOH>IUgm%{UH?R zOnQh@kelSsZ{g+#Y+-TfI^hzYyn=YG1iMEcoW*Cb+ILDk)@+wP0hdSG)CK4a;3q==rPkMzpMN7cU+zhLx& zzJHMr&(R04IwsKX^h#rs{;oC$iKAFyrhNq&!J&%bp`f6ZdSyl`{UCKdE`7jog%$Q0 zbQ;%epDpCx(JNzm2M^jj@-v`y=a9Ab-mu$7fQhL202y=!M439e7M%5oIwmACDkKDY zZ#-!-V4(B_spMBUh6s9+cnj$qOp*e!?FPwf6MwfsFT?2;!c)&lGwVhN&5}~dBM=yJ zLJh5yA}&}dIV~j)$O}q%!Hqm~7Ve1ucqigC>Irq=+8;{6JTsg+@iWm6hz5I$8H;>i z;X!W&aOOYkR;cUm1F()WIp~ZT(^Fa!R|Kjok?JB-q`ClA);Ir9WsL;r0mJ`!pb?&T zfHQ$ifo0*IkdU5?B#0-HATf!W$Vg>`IjSTPl_OY@Y$-@DP>F-GD1i9?4#=#5T_PgY zVPLd?+Mx(Fsu-OA2JkqKykx1l6vTN!6lgObPCf@}m5lp_k0BpOXykY#M*L}-l3pkI z;2paTn$Qq3jwIdYgvEcc)ayeUC9IHCXu=9ZRrVFqSRkKJLg!+iDBVQ%NuFx%eD|cI zc4qpVRi8(3aM!{On&<813cswnkVX|SHze5}EQv60i?70L*+Gd9{Ax#4NDDxvEtnAJ z*q)IL1gqY*^`xamAlDsCT?Y11&HmyXd21CPK)MEyF8I%ow|qCB+o(zo zjNY=GUwY-_;p0b69CH2U(y7MgtcQ8W7nalRmDIgxTpr5vB{elm8dTewnr|NB54KgG z%G}Ld$_;5;q6!L1N!-exAT$1YNQR{mY5IvzQ)oX1*Hnn8S*|DHbWMZ^k_rR5B}^V9 z-v#71@G5k)bbve1kY4ymGh=um_ILN6e+QBV=)2K?tY!Y@O#CiOhJofcNPJ=^${I=CW7|q&#lin=2VmX+{5YNU-ml~Cgb1s1`hx5*xX_;EUy!lPK z_w%7uy+KPe$LPL!H7{?C&Wy>5=cZ^ECB!OY&m`Q|a`M~h@fq;$R~K$Bu&Nky;M&F zcGKj29CB38_59%Hn9xT1H8PEUU=>&CXY2jBVd%D7PXs%WoO6@Buo~F7*o?F|o{nGA z8=v=x6OvP9hrha@yfgF6md zq$EpxXXx>hbev>C`N<6zRd+63`K~ylIIW2HB;(1&*C*)&ymJcge1GZk_r+TAoh2yF z^f)UySFxk@lJef%a}&7sCR)VyCYQ;@zh8mlqMHzQ33rLf1{>aSvwP#4mX5Mv^4Pr- zW;Ro{Ev7VlTinlcep~$W9LD$1nayVrcIkYaJ=4775dZU~U(YR#w3fccA%9b?ux1_DQQ_^OsCI;HK1+K}qCLK+AD^Q0DqX3E>~+-hE#G<50pk@yC6!9L zkp|dLaP?eZDFcgp(%BIMZ8>HRIGSsnWj@;jcLU-0w{-XR`X*Fx;=Trj1x0a`X`yVR zKZ>5`R6AdiHTlnU zLN@mXL!czxkfBE$K%f40-#4$o*qD%(lo+p!HzgJzj`X0sDIsm|PQe0Cy6GEO+lPN1VhtJ8)H0ex>gwGUB+qUg#RUQi2yRnkXBdWcm z>*-c&Pr6Q#g|gpF6jNrs-Pb1WzaZO`UkE+~v%7UTS?*|k0Zs%EqOQT;YVsCYeU1F< zGI{$BCMEHHOWL#{ZKG=Q=4=xx$CcpU9zjzvo27yHB?Ds2sYnwUnB>hHQ#PqKZO*|) zDC)XErlFQ{KE0XHzEqLZ)Rf(%YHmtP-HEBf1-9vrq(pd&G-Cj01xu4PiKQh1pzxAt zgvSEuX%!+Rz9aw^UIh`CMP%TMIi9C^vXOX8aFZ$Nr{B``D*I%B37*?0+b08J@LZTI zEPyrmwJ`fw+U}G+eESy2^pN@k5Ga`e`nru>gx7fDPi8pU?g$b#IWJzHoXl+6G$qkf zRfl^sJM<~k+<2ELF+d}a@oaIj_zIO<+Xkt z_Otg0-6gJ-l?{bERhLhEIg2N@0Jhe7tTWe*+}%aq!M z(>{mH>@WbAhGBWm(e{Zj7{y9ZY)oeS{b#Cyyqam*?$39wN=eZt=B6-SN1mnEsp_6( z9XZ11=IZlPP`p%3hC{;InLL4nH4KA4+4W&QzA;=@tPzys2<*(54pUDP)c6YZ4>NxNC=h-u`FSIZ~lOWmK*?gDhIBs41u^X;AHJ@>#pq2Y*|3 z?$hz~lRaP1^glD6`Cnh*T2@w*U#B{K5VOD_%j)VU-H<|`nPo+ zyP!^TLRJ$|5fU5`5zNsYvYsQy^rT%zJtSQ?1VYI>N=S&mEe$S@sHv%_sNqPn?DgXx zU%!4lwigE$m~zhy@?G3W-~aP>*U@&!`ZY^Fm`|3Tkq|c-iKRp9kc(mnKU`#hoE<|mW;JJ2=l=g59kRg>{7S=&C3u9e#SoXA?Kd@0_eYh`5b z1h##iO#bLNxjTX0rQ?JK+ow{x*4`jC+lyxHDB+$!@8F$!+o!UB-og3&WPPtp5Xek? z=m*JWTx^@k3RJOIIoh@h1?&Uzx$}J<1A_;9A5S0f!dd$?7Ot`i0jiJJY{)6_fwY;7 zZeAy`z9+krb*uT*`CWTz4i+6_j0FV-a@Cc0+Fd|897f%$IH3 zf280D_yPXeTCkCs_|(dCBlZ`AV7>>5KahD5lw&fkx_8YM|pr>hf{^7quAl7Sa{ zD(4`A({Jup)YW|2WZ(?NWcFT3c~*W&nQ~iXad-lC_e%@sN>ie?hoim~Rj#~zklHWl z6Wxvl_LyFZsPx3>C}l)hOhuhA_4k5PoJpOlwj?vluOq@?Jfr%NIDdEbAa6mz9zbjc+ zpSF|RQ+~v--%K>8Q70sSO+qRTlpi!6Nl8+CNI#ABhDLx3bp#s2llEASY?nIRAo*67 zsPoE*JGZ6Eb@sGXpAFf(Iwmwad>zwx^`_;P>YMGE>MDMlrX+mNDh5DE8vJG`TSZ4m zQd;(bX|tgC^2NS1_OM@q#sU@?z2(5M&80r_Q1_4;kdk7ei}6_%UNSerY13w zkyj@tPyXVgq~Xc*z0|2!6Z5l5@^YD66Npw-X01Lwn-AW3EQ~m)h{Lzrt9SD9w&HvQ zkW-iqM8@XEq-f$(5>s`ViIq%cqNZ}8YGG7FSRlVORGo}8ki1$`m|0L(QdZJXTaUW+ z`XX(usicHGH+88dYK0&d;Hknj~*^RrO4zGQMHlQ|GNCmZM_ zRe%4&ZCiMG^|GeWlZKl{+?DUb^c`*>UPeG|ynaWW;C)zyAKy{Qcii7LYAG)cL|{w0 zPgZ}igBy8jY~|QfOPfBuKfet}q^AG!S+Ul4?2IoWJk~RFed*71m3^ktK1*<)N9dY$Ks=IUa zh{d81-%U&$H7bCB0gFmVl!9yT;62(}gdI|*dl zrm&+Q(08^|$6)5y*m1Y|s;K0nkEnFu)d^1{c^~?(I{LxW;SB)_n77z3@Ux@E)}p6} zS3?5py^iSb9y#KAWGs+d3W@~zy^ibptB*K zjm9$+1vdm7@zPK9@^bAwpTvBe2pwWc#BsZBB}}ucUN*Gshv_d=MDp}0k@8v_iYTQY zJ*AR9W2Ov%yU6UMJpzXh4-7!}c;NUXI8;0pPf$FVhK9~#bM4$wA`TII$j^WBq@J+8 zMCSUU@Vf_pVMa0SwhhMc^>r8h9_#D_!u36l*51M@)|jV0m}*Ql(zlMr6f&;OBp zG559VM``_zoSb?d!OFdNzuG%XaRS#S*>AfIu7p!y1aYurY@1Tzz$C7cfnkY~Z>%QSv!y?La)4_OdlURAB7yBL|Nj3Rz|c1?qT57AUqe_?+6}=! zL<&GcP2Lg_yok2p@s_jvt3O0S4D|b7WZFaAtDXIw+uLXh>)|Y)S}|ugIIf%)Im<^J z|J=Rvg@^OMm-5y3#iuTC6*~mG=5*?HUFwwUy40!Gg{ro(?jYZ>9cRabv=}esQ-%}M zo3{VIHi+EP6gTNYQJ^9WNlHX*t8GE-uHE``n|5#9wLrgd6X1wZ3cHh(MvKE+VNLp#DqWxA28K7g2uzDk zwC8WoNE%DnGYA179Po=hk|q71e6buOVV9--2GM>H!dQlTz3Z_*e&qzNmZe(yBO-Os zb$HCp-R*?o8fr@NM2v|Ll=WeO2*?&lhP(W@( z7r{hS!aGQ(L;TI^GMLERtsdbFQtP*V?4k2D zhf&MLfk12RsQJ`gCC_z0`rQdm_~+0ce+!rGQ~<_lFFFZjCOQpo|42Ig@E1=xxyC^w zbY(r3uk=XcNv`x(%7#OeRq~!5P>?EPr;u-M%fyn6$3n*AFUTO_Z!)O6o79&KlDE1^ zhaq-`Ii@S=g0P4RB57UlA53g8R>dqD))N(i-tCt57#1qoj(G5c$DjCqEhukWVq0Qb zVqdN$%+Z#YEiac7S-+M(`xIHFrN&Z`p0#6R-g*NtA|&YCA?7(rTy_AFz^;eKWONPl z+#PRD;>n;M;NZ=|*t3RaAx^XgiEpEpqr2>bB?fh(AyGAVVT}JW9?+W+68lsciTOwZ zHo&1f&|XHys!(Oo9|!GG%nP$nE`kus8pNZ3OGeCS^o^53+)<&&A$*LG`?-FWe0oIq zKzs$>WvB0L@31{blN;_2NB83Ff7|b~r0b|hv}=5vHY0(%=X=+0&qsa}U41|PXv4%t z-$K6v-vVatj>~JlRgtcb9zp)p=4L&|4s<57o$Wp{a+JO$soHy};Hb)M((52f6;5tR z$Z{j-6h@QfDoEUnfz>1?F2~TZ(6^z#(QFBIOQ5ozw5Ldl@9>1Y6Uj<$%FjiHce*G4E<4b|WsmEV6sCoAkas$a-6F zWbM<7r{wFE0V9{vu6u`-t={kTRk|=fP+_br5}YLV4}>3B`)4Jj=NQQ(`o7Ox1e1N{ z?pef<#ndW6h1wFFhM6M+K9bm)DaY#Rl;QMg3zq`m!e;u0#Mm8^FYPZ_+tL~0stiN!KmFwP5b6im^+Dc=b91n0o#^9+x{P`#oQx#Z@>$L zGYG1MP0~LwsY}Uxce2`D{O>|mq4K*yk1pM0JrR$^R=BSAp>Uf_!KSi5+~;a17a#Q* zpB|T-9Z53*G;}+XN)3YW%Xg($%en}A4xRjpsE+P_^6I*ywHiUB1f52cpi0z$ z1BQ<$sfGWGvG)Lr;%eWovug+DNBcCfrVXq z?*a;_2=-oL)Wj&Z6ia%nd1E=VoW=LM2hIC?f8YQ5uIul*?36QS&dixP<$3PszQtlD zCo3yECsP}t=kqPa4B127I32_`5@X}y`S^GQj6lFCEhA1y!0bL<)e&2$C6Q7jV5WFm zpUz|&OhyB5NHsu6&5&g1(#IGNL3dTQj!y(Rk`PL53TO`|UZ0v^ zP#aRy40@p$QhZktxnj`4V4{vsNQg)DqCed%l+pD}Tv~#`kcMP@C2?U$2GwzrF`h04 z(RN0>AubLD)bW8dsf0!`ae701x;ote9>xk11$_|%XVk?RV%4~k7$J}vN@ya$UGW(i z=?0^oFC&S}b>QBNI#5%oV`5`tgdiGGOmz%M%8ka143nNOAvy*mWpQuMdeGd7%ZxEb zN5z7>3kJpH5KA|{5C=r*Gh#BKK4r`VeqK7JRoup9MH{2En6Y%E++}g&^Kp8u-WUTb zg~^zOltn1PccOvI)VVs_iJnTjw88 zC3Lkpg3Hxrg@D;LM*kr?Ja?o_@`n~gzUWaKWL5NXk7 zQ!Nvw&yLJf=VfQ-Azd!fGGw)FxLFB2US_nxJ~bgOB_6i~btc3j(nS|7Pn1QrcT1=5 zr^5{us?QBCP#5Ip7T{p%@Lf#XlOhhVBPCJN&$euf33um-(H}PcwKP{fe_>>RlMoOS z7Za*_^RX->H=-bkmnK)0P@Gia)&2}t`d3opBu!}Wh0ZwqAto*oEtqwr0+_A>jL{-XXXd1f*IeoDDqVu(%UQ&RM)`qcEg z#L~!IIgZPWi8O>kh%=B43Jdd%6+-4_QtLX}$#1ON$o0cFPjH>*EuRv#E-@%gYlu%t(kG?r$|LRKO~81oFMjus%=lY)-AMY?5+P6Sa{tNp%j#2k z#f7OryXup9gq8wComCF>Ri?bjcZ_k4+I34({6@j6a7UqUu^dA~ORHrVm$&!G)m!K1 z_uH_+J6taIZW{tinm$FPwC01A59IQy@~ZQ&+D+bYz4}VgmwTtTEIPIUyRA(znX#EMQo?~D19yyc zlbcofoW5h`tix-IHg|ny;c9_&stk_DfJNeQeXS5DWRTwv`dAK12~s2M^|2{2ajG;nr9_{TBBgmI z&SQqZMm959I<9>nLr1b06Nkj->+%zG?GwwH1U5#851+IP(G+1If(fyc(u^|?WM)dU z=r$7`jPG6yfAI~;f@X6^+1|Le*K*&ma5OZ4iL!#3{hBoQoXWnUBaP99*tA&tl*E)o zeS$oN)tU0Li}=6ENM_n=QrB}13yfPm92J$!H@#RTr7f>+vpvb^*vz=}1fxA1)TwY# zC$WifVZo6?A3B=3)r;=!n9N7OT#nFp5|82(k?aVmH0|2A#qmdReiu&;do5bChYu%& z?Gx^~ogPa&sc5HVpAPrpBk(M2kjNk={?Utq3FDP$%YjU$w$hMUA{;C!Za%9z71ZQf z!e#eXsKKs@QKrNpwBByt6D1!#lGReIG9dJ&=Np$Ic$mA!gmDtQVK zf>sL@n00;(2=q1SscM(evs`tIZ_#%3B(Mf!z@wb*IDq~XxDcqxPzmM&US_KaFp3T! zRzHx=g^8eUS04ZJwI zeI^$kZpe%jc9bR@D65uV`M&R9k$j|SeiGNq}ayt2GWSH4qz zc2Vt=@v8A&Qzn<3d0oX~S7;?rC5e>(HMQZM>v0-)@ES zwWv+v^a%<21T}f65ojSTVus6z^n-XzaI(I;z}9ych*OZhfo*pGEn7DVxx)#1I!2qk z%c!*{Sj-A9PRz}+Kd~=2E45ggYY+OW1Wd>ivT_rP!?Wz2_l0K#Vf18gZl*+V%f8*pvXT2L zsvxl-E49#`@a7w-1=@m;RQm;)uqtR1L+mNvej_n7D-;CaUBxi6S^Sx#b~1;Md`u8Z zFq*we2bsJa*b$lBjA4&HJ6lEWqll&S zSJdbh7|+%ZWj*sO8g^u1DnF?p-Xp| z&B)Lhp)dlN?kxB{$M=EWbl;1DL)#UKG0AwMc?8uAa^)P1hwkcIXOG?acJ7h6OV|5u z*(`W9csF|1%ddUgT8#<92x317Z}K>5H;{fN(AKqx>h)32`eM!WXWU|opp`y(O=GQTbD$ou?nAnzlW;<9Tl=7%4xA`N#?S`6}%X1 zdCKAPKiYE+Bu?m|u=~{6sPpOzXEF;Q<-Pa ztIkKA4LOB;rIS-DglSS+u=IG)k8qS^-u5T{o$81`IC5c|WglQ(D9%D}KrN##@iZ9b z*2TmJinW(iQYZsHul@;XxI}zNHaT>GC&4nysD-qZQp+rrWvBQtCgMBs`52#_IE4c< zH>fnIM-d4G3u_p@AJmWQ22S7!DYIFBs_rIv4r&1x@H2G8@vhWU zad}Cx+>jcVgeh1doetb;K@{B&pglFUv;Y_c!^GO4Jy%;=dL*|rlc7>%+|cG0B{^k& z)0f+%-(=X5QSi`?_S;QuZV!DuZ>gP6t?!<|dbnSfxD&{yfOT&OsgJR@JQDxl{I5pb zxT(6CeWUCuKfXF=f5E<@di$k&n1z&e1&l;cN%LE~OO)l$?Fnw!)fm3t{$4eh!GEDM zxj;8x4xNoNm7@?06IHv$7U1jeiYIo&Eg-~zsK zKeyo+haKS8NR0Ioj?&o0k~ z>`C}UCfX-{hqubxu)_p-*szHu3-&H;1{X6DHEuZJeIe3*4UJ>sYWF0NpA~88wZa+_ zcOm;kO=C0C&@s)&_MR*G%ASUO&zPzV)itV``08j#=@*>W%WbvL;>q`cZ6Km{?FJH04l zqs#JWr)8I8n=vM_YB`pDT5!cg@`(RI=cPegSFSAeJcD72)#>8;;{us*i`x|+ny@QD zo*tTpF;4G!lllhnUhyH}9xAt^LDlj6y|CZB`>SZL!E32aFZy8vQQkb%{7osJD%)NV zS+z%1m%hI)7i$YkHa)zgBJyAF6L$Z;sNg;P;lnxk&4{*_U9gPhQY(_tgo_TcvgC@y zG9G#&N&deW<#XS8`1|s_v+&b3{Yu0Q# zc;sk9^RZ*~E^C4OISO_mj4r1kj%vLa3s~J$GPlP!u(B=(c;Y>PEI&akXMeIDt*Zyz zbl%E89*Dn}a-$}POrO;!>(^g?%Deu}lgN<(J|=JzJeQ3c>3Z_s{kkuIzt=F^kw>q3 zhx3^=Eyz(_yL@4O2MJbR46YaTyGn(>+=T?$N`LJFXVvl&m%}@F@cegjoj!|pQPE9g z>(itN(dxBWQcD=W^O4(aGb+8P^bh=cQT2!1`oDDtI>+^&PL=(DTmuZ*K`*_iKIu zTs~5i{oS_oMUQhYoL{tQUMTM<|1jTcbLL);df2Py=+QlW3_G*@_>C^>m#?3Lj%7Yx z+pqRp=E;3h%YrIX^vNme>eP~oq}|@+?lp1{(4VCJ=MNlf*e?&L+ZWM4+>{h>1{GjHcG#!w6f zh;yxKo5?%ZgHK9Nj4`V9?D_PQXG%}V4JoO48EQjf-sex~^lQ5?0b~+&$vPdci%-zS zt6h`)L%rhUTU;Y|Ekkcgj>O-7NCp;u{Uu+S*pOBpD|aWdXPyv*`JD{SdU#GSW`Q0g zEA-K@_@!sAT&llYch8V!hnQrYUf7x2JY>K6Y!T^NPex28{Ai*CiCLU6rM$4JN_BeY z$?Yu=yjn#fSC9oX@|peK@q_ae=2M_%Hcwu{_yS68RyP7SBeoWZxj)rmLnvZQg_u+`PIp|Jt~u+^2P zS}{#ZyWD9x(w%O=e<|%pQrc~<*zq>)=|(ASktD@&Xd%4{j}!XyPw02F93Fu+@WG5j zAFLEU2bEMhQ8FRF-3a+jT~?}3DHFnu#+(3$+ck_(Gs%a~TZEJK=5bOU7b^=?S`;e`ECWiv#nD%ZP#s9S~oM zaZ!@C_Zz3c$Vh*^pM8pNUSL_YD4^eKJKZ+C{pFh$hW<_6q@2AkU0YfD#GCX(P5mq$8*YW@*yQQ~5)S zhA0$r7C5sgj*r46!OU&Q>G|v&cYlDckZloK&N(4uZ6st(r9;k;@a|uaNu6JNF zFmm1Frn&(XpdPj?5UT zb`9U`J?8m=mL5WgNz5i{}KC#x<2fjW-^P{gO@XJ_T7$x7sVHW)oHTIIlvZ);Gu%Zpujx9iuKtdOL{jt{{$o-ygumdY*fA)f%dX9o_& zBmng3WD33?Y9MZ5^8iohpB#OE@L+%>6oVg=_l;miHS#o$bYa}KItMIMW9K7;xGEk$ zBJZC)5#Y8@Akt19-czHBypIqg1^&K09)FiPmo{w0@w5x0$LJ$DCOJkI8-r_*wlwTJ zQF<0$ZX{Pg^VD37;Y1szi%@Px%o2uX;~lJzl3|9+1_(XD)v9b2ziFGz<$CPe<`GV< z*AE}Q9X?|6)EL1dC#*4N&v~#q%kk-RUap+CC#Nwi$3xyWoroM}w28C7 z@vYdD?CWbke?D`zAANrhAWasqG9Zf6{vYlI@MVCd0e`!DkoTAUC0xE-QIXu_TVb!< zI{O>MtR*m8|Hb8GCznKI5C6?BqC>DSG9o!BJL0$D;KhQ5mfC0}BNZf+hH`IZ4L|$U zE;1)DIWmG=(fsh2mJQQLYO#Zx z-evIiEW&Fn!X*iLSuPO1I2-bXLVRW30yi`Lg(0B0?gZt&17r&$zO?R` z3yc4DXgk7rBf9&$%@`M)Ao5v^uj7R9vFfoCaw{Bxg}sI`_zC*m0dH!@3?(*B@CZ!N zg8)ZP${u>iAHRt zPD?bTt3nxTH9~>VmY1BUWE*zxZV(7($pXo*>+bE1JV2_JrX?EXC9D7Yu%8@9pdlBZ za9;x;dbd5ly#RLDyL0#mF)LHnSa+HHtp}G`O5L1oswgo_W)Z9*Kna4Rf}8kLO|s0=iUZy>Ij|*&glvL4n7jlJ z1_1}!KWiObAz1hw*zXZ-wd(kUA-aBSNX z_EqD0Dihj=$;em(S9jFy#ENaP@zO_bo+o?!`P~r^ftRcn_Ygp0f z=3KYt@+8uA5cy&%UDZC)JfWwSJdwxg;Wz$7RhW>Mke4W@z4dfix=Kr*m?ylZtIQ+G z7q>~*Czrp2W#Jc+-nN(Y?erW2rM_hD4g8T7@CB|5#4EHfU{ZZqv9~zupJn=;wWT*p zy{R{Yf!B9!dmXH6+Z$x0Z<{0M&^8)s74#r5nW18D>P@_52qQwm?^tn`IE(4}rv`-g zD>|EVVJOnqgj9Rvcx1cA1o_Gr&(tM@9AO=ej@HJ9C&na2>!VX(>dw?20e)iKjqD0T zVXm>nkb_>8)XPctN<(n1ceZ@Y9t><%L_wP))5FvO`XFt1!1i?!w13vX zRL^uD&{b?m zsE8{I$@fj4Tue`nby^w{66bFSlqY9~iq@99{MnH$Ik{yo5m=NYOpj%AVaH?z~S zjYT=8lB5dICjw*vBRdI%i=;*x%-LW}r=)*%=oLs_7Q_@nQK}uCwGBFJ8@A2HI=LO| zW*eaQB$K=eJ}naqbKd`JiB&RMqyU(-y_F*i6m3rMgyIyC$f;1+f;wJ$05XcxN=sF3 ztqT-yT5&$9op3N)vC24ug!YsvgEzcsCHZLkp?Q5D!^RpERcb0bzMT#_$oAMgXfx$- zm9R_qtU5+*sagJ`4Q+}mho8_ zbGeZ-80ZpVDthJdLIUFcVC^l(Y0Lg|TEMN+EuCOhd#$FgEuGNSU;|EGW;CW5z!vF3 zc99f#+Mu#?g`{BKgbhMGx=y1S(Q!Q_FHZ-3%Nc3BEZW!-Cq*9(P%EEn%qEM?=WiGP z?{y5OP29{SOJ>5{GjqxLZz017+dCT4Z_h8838)LiAj~GH(xRP~2w32@0ushVav((p z(2Yq(Tdi>t)b}mmfwlJ}Q1Dv^jH}`+O(s_VCb>OK4$Lz|h$xh32A{Wezz02Hmm)1MffEOA=EmAcJBCV z9V#tb%XcIc`d6z-8oRf;VsD0!l6QtYODkgbrejsz!V(a!qBFmDMaaFCdM)B2OqO7q zsOQL#$>6K#eTJ``GoWaL+VY6q;=X+=#LU7R+NLqv6H0g1U@*uUQ&ThaLjLnJ>qZMA!nZwtCM6f7}u(97v234Al5%M4brS!TxfpDS>9)N z?(z=I7szC^Sqhr*J*}0COWAp(jzX>jG`TVI{K%lpAhmdwnz^xLGr)yj00aaj(qUnA z;7$O06?Dl1>U@fBJx-wh{qY{6mOq0($1yg!a2zPEg|t_EpW>u$JTj~p?u_-7{9QsdcFNh+Bp!(G7(vFs`Avj& zTkeI~mLU_^Pugu6Isx6fndSVc5N7nw-JG>tXFtz-hmUuC;Q8&sqjiUzrmK>Gvtvfl z>3X^2jQqka0^Y(>E#rHtA?9oKk&{Ku)qy4RYJ~;0<4)**M~ki}P+A$MzI-w~VvitB z&IepiI?<u%IUUfEqE!2vu!er4ehS8HqUL z=$g~3nl>F~*U2eAb!#^QX^{ zVaHCMC-T#04tbs0e{$~yguEsw&-B0i%sf(j&Uxx~1^BBYVof zxgjUFP+b@2o*;<6uJ4jX#&jgB6O`S1mRO}pX~~UBZbR_)ox#z$)dvfAR}^K1`=G5{ z1BFm0IyQ-nWhSsLG!MZ}R*qJupa`@!jjm<(v)9QwPr8md%eIg_-1(kdlW)oDpy0%q z9ek`yast9MOr;ss>W&jtW`e8$OIC{$b&0xIULPHk9H(Bm%^Nz--K?y7x|jIXRumZv zb9r3=v)>5*1bu$iRYR>jr7$HYOGQ3A&vhJ~8Wy0BP%jAd-0YJRQWGweYSR*<08r6d zSw}?01%&QOHH7f7Ym*_;lbD^IxL18aS6y~YwL7wKM-K0onUtET$}*)FX65OU@_6Gh z=4adVI>w0w1*VmC0PT?&l&ne!NbrqTdFk_Z?N;Yxrx@}C;}J-i#_M3djWcAWXP!tu zAnax{PD0gmI(NjoX5F$)E2b~3^Z2T$C>7IJ(`hCuC?p|B?HQC)3vHs#tf3?&9||18 zP0r5%=krc|R%(_mOYY3Z&ehJ*&P@!rJIfXmTSG-{VtSRSEF)V^7Bz7l7nK^bJ=0I^ zxN_dmnfo?e%+Eywa+>l~sOjLR7I}I>(SP z{iO<76Br^@h|;lVH>;SATEU{+Dix=xQcJahp!1|yK_3IUPPGyYoK_26y;r&y`_)!T z)gegLk%8(+$thP*b3K)y73L1SN{1T~X!MRFapGpU)=-GpE>QJWXe)EeE16 z%oyou7*Uy~Ys1j1+_`@Kx0-*+SFzs1S4^0-aMq<2KY0I&)tbKNKf5ynP#!BQw9T`I zQDzhUNR1;C$OsMIr$llZ9z|x;tlxpp8t=GhAZRG%$JyP_&ir)q>zi}VjM_Z_tJ_KE zMNh}yLJrq{CrlIhNR7j!62POF0LGb)7x=RH^VJiWSq6X`-M`&3`+RtL9|X%GH0u56_?fAbltF z7Z7+hjdNo`9R7$=TFb4jv%gUPUx`0+o!t#(4DygHSV}*bMr6yVY&iK~nT%|<9Zu|- zXlg%?JY=Q(p0Kx?T^Bg}c&v^Rz}0H?lJ-OprFk-UbMeLLyn`rbr!QVKO>m%HWYaDz zYULedBHMc5B8=i<4JmJMJ-_G7+B56UtUPlR_SMyAPyalU42(UyjL4}RQ4QP3HtKlR z<;=csmY(a8e0|1UGP(5hmBU4sFNYN$xq9>pS$Ji|<-??NpW^-3mfVs@kR$31(^Kv)IA;lnwp zQM1C=H$>}?#v$>&XsnLAcAqURjP?`A!8Fb%5YfOBq}C5@u$9%9Kgx41xzoRi9>sK zlmYIjOlB}v@rGJigOi_@LyWHCBFNm>3c$tfh#UJSbpu1ypTv!!ZdYaEDY}pQW=#nQ zw5+Nq4URG8CGUZ|{S!t~bi}t2fsQ=kcW(KeY zWi0+M1wl4nip9lGi>4HTqyGx*-FqtjI3*4)h<8b8Ef~$Pb5#6H|Shv~JEQ!Hbfi=jR?l!JyQ3CxC!6zP)(PvcoR-zcmb>QgHQD(!H7Z&oy5czF zN}dkYGqn8j({E)r!Zt6_3&`W$lXFVe5LdP>hgT{(UWvuKvkPi!Rbr*(72<~V%s)@h z;Ip6-D<@tu%M^1UHCVgmmbi8>f&byeUELqG9peC3$5WhBv9Y)=m?d(cz-Qhnjg?*zFE-a7@+qCwx zQ3uxjBHZeD=TvNE$2;f3lCBiB?5LHVsl~su5>md249Fwz*D1uUWJsGAFcL?Bj0-b| zn_-;RR0TF3+uwMM2U2+;qBfehrnvJVY;1fÐT?>-5aYhU|+1c>&YMpPK5x#-mbV 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'NS^o{z1ZKlHsAybrl=JE7AP369ntV%vB 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 CDx5C> literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.eot b/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..c7b00d2ba8896fd29de846b19f89fcf0d56ad152 GIT binary patch literal 76518 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%0DyT{kunD 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⋙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 z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.ttf b/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e GIT binary patch literal 152796 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

=v_rA!CPE#mM^4@)}X7qf;At+v)G*FZd&; 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 ALjV8( literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff b/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e7483cf61b490c08ed644d6ef802c69472eb247 GIT binary patch literal 90412 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%0Ded40&XED0GYFoIh+AV*?9!MR5pBW?X_8Bp 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 IH>08b4`|GD*#H0l literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff2 b/vraptor/src/main/webapp/vendor/font-awesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7eb74fd127ee5eddf3b95fee6a20dc1684b0963b GIT binary patch literal 71896 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≠dR0E9ICQ{-tcR;@{R^I5P#1GUH!p=-{c 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 literal 0 HcmV?d00001 diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/animated.less b/vraptor/src/main/webapp/vendor/font-awesome/less/animated.less new file mode 100644 index 0000000000..66ad52a5ba --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/animated.less @@ -0,0 +1,34 @@ +// Animated Icons +// -------------------------- + +.@{fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.@{fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/bordered-pulled.less b/vraptor/src/main/webapp/vendor/font-awesome/less/bordered-pulled.less new file mode 100644 index 0000000000..f1c8ad75f5 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/bordered-pulled.less @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.@{fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em @fa-border-color; + border-radius: .1em; +} + +.@{fa-css-prefix}-pull-left { float: left; } +.@{fa-css-prefix}-pull-right { float: right; } + +.@{fa-css-prefix} { + &.@{fa-css-prefix}-pull-left { margin-right: .3em; } + &.@{fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.@{fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/core.less b/vraptor/src/main/webapp/vendor/font-awesome/less/core.less new file mode 100644 index 0000000000..c577ac84a6 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/core.less @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.@{fa-css-prefix} { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/fixed-width.less b/vraptor/src/main/webapp/vendor/font-awesome/less/fixed-width.less new file mode 100644 index 0000000000..110289f2f4 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/fixed-width.less @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.@{fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/font-awesome.less b/vraptor/src/main/webapp/vendor/font-awesome/less/font-awesome.less new file mode 100644 index 0000000000..c44e5f466a --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/font-awesome.less @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables.less"; +@import "mixins.less"; +@import "path.less"; +@import "core.less"; +@import "larger.less"; +@import "fixed-width.less"; +@import "list.less"; +@import "bordered-pulled.less"; +@import "animated.less"; +@import "rotated-flipped.less"; +@import "stacked.less"; +@import "icons.less"; +@import "screen-reader.less"; diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/icons.less b/vraptor/src/main/webapp/vendor/font-awesome/less/icons.less new file mode 100644 index 0000000000..ba21b222d6 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/icons.less @@ -0,0 +1,733 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.@{fa-css-prefix}-glass:before { content: @fa-var-glass; } +.@{fa-css-prefix}-music:before { content: @fa-var-music; } +.@{fa-css-prefix}-search:before { content: @fa-var-search; } +.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; } +.@{fa-css-prefix}-heart:before { content: @fa-var-heart; } +.@{fa-css-prefix}-star:before { content: @fa-var-star; } +.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; } +.@{fa-css-prefix}-user:before { content: @fa-var-user; } +.@{fa-css-prefix}-film:before { content: @fa-var-film; } +.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; } +.@{fa-css-prefix}-th:before { content: @fa-var-th; } +.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; } +.@{fa-css-prefix}-check:before { content: @fa-var-check; } +.@{fa-css-prefix}-remove:before, +.@{fa-css-prefix}-close:before, +.@{fa-css-prefix}-times:before { content: @fa-var-times; } +.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; } +.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; } +.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; } +.@{fa-css-prefix}-signal:before { content: @fa-var-signal; } +.@{fa-css-prefix}-gear:before, +.@{fa-css-prefix}-cog:before { content: @fa-var-cog; } +.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; } +.@{fa-css-prefix}-home:before { content: @fa-var-home; } +.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; } +.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; } +.@{fa-css-prefix}-road:before { content: @fa-var-road; } +.@{fa-css-prefix}-download:before { content: @fa-var-download; } +.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; } +.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; } +.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; } +.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; } +.@{fa-css-prefix}-rotate-right:before, +.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; } +.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; } +.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; } +.@{fa-css-prefix}-lock:before { content: @fa-var-lock; } +.@{fa-css-prefix}-flag:before { content: @fa-var-flag; } +.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } +.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; } +.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; } +.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; } +.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; } +.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; } +.@{fa-css-prefix}-tag:before { content: @fa-var-tag; } +.@{fa-css-prefix}-tags:before { content: @fa-var-tags; } +.@{fa-css-prefix}-book:before { content: @fa-var-book; } +.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; } +.@{fa-css-prefix}-print:before { content: @fa-var-print; } +.@{fa-css-prefix}-camera:before { content: @fa-var-camera; } +.@{fa-css-prefix}-font:before { content: @fa-var-font; } +.@{fa-css-prefix}-bold:before { content: @fa-var-bold; } +.@{fa-css-prefix}-italic:before { content: @fa-var-italic; } +.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; } +.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; } +.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; } +.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; } +.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; } +.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; } +.@{fa-css-prefix}-list:before { content: @fa-var-list; } +.@{fa-css-prefix}-dedent:before, +.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } +.@{fa-css-prefix}-indent:before { content: @fa-var-indent; } +.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; } +.@{fa-css-prefix}-photo:before, +.@{fa-css-prefix}-image:before, +.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; } +.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; } +.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; } +.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; } +.@{fa-css-prefix}-tint:before { content: @fa-var-tint; } +.@{fa-css-prefix}-edit:before, +.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; } +.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; } +.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; } +.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; } +.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; } +.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; } +.@{fa-css-prefix}-backward:before { content: @fa-var-backward; } +.@{fa-css-prefix}-play:before { content: @fa-var-play; } +.@{fa-css-prefix}-pause:before { content: @fa-var-pause; } +.@{fa-css-prefix}-stop:before { content: @fa-var-stop; } +.@{fa-css-prefix}-forward:before { content: @fa-var-forward; } +.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; } +.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; } +.@{fa-css-prefix}-eject:before { content: @fa-var-eject; } +.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; } +.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; } +.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; } +.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; } +.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; } +.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; } +.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; } +.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } +.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; } +.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; } +.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; } +.@{fa-css-prefix}-ban:before { content: @fa-var-ban; } +.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; } +.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; } +.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; } +.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; } +.@{fa-css-prefix}-mail-forward:before, +.@{fa-css-prefix}-share:before { content: @fa-var-share; } +.@{fa-css-prefix}-expand:before { content: @fa-var-expand; } +.@{fa-css-prefix}-compress:before { content: @fa-var-compress; } +.@{fa-css-prefix}-plus:before { content: @fa-var-plus; } +.@{fa-css-prefix}-minus:before { content: @fa-var-minus; } +.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; } +.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } +.@{fa-css-prefix}-gift:before { content: @fa-var-gift; } +.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; } +.@{fa-css-prefix}-fire:before { content: @fa-var-fire; } +.@{fa-css-prefix}-eye:before { content: @fa-var-eye; } +.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; } +.@{fa-css-prefix}-warning:before, +.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } +.@{fa-css-prefix}-plane:before { content: @fa-var-plane; } +.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } +.@{fa-css-prefix}-random:before { content: @fa-var-random; } +.@{fa-css-prefix}-comment:before { content: @fa-var-comment; } +.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; } +.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; } +.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; } +.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; } +.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } +.@{fa-css-prefix}-folder:before { content: @fa-var-folder; } +.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; } +.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; } +.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; } +.@{fa-css-prefix}-bar-chart-o:before, +.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; } +.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; } +.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; } +.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; } +.@{fa-css-prefix}-key:before { content: @fa-var-key; } +.@{fa-css-prefix}-gears:before, +.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; } +.@{fa-css-prefix}-comments:before { content: @fa-var-comments; } +.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; } +.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; } +.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; } +.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; } +.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; } +.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; } +.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; } +.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; } +.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; } +.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; } +.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; } +.@{fa-css-prefix}-upload:before { content: @fa-var-upload; } +.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; } +.@{fa-css-prefix}-phone:before { content: @fa-var-phone; } +.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; } +.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; } +.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; } +.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; } +.@{fa-css-prefix}-facebook-f:before, +.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; } +.@{fa-css-prefix}-github:before { content: @fa-var-github; } +.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } +.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } +.@{fa-css-prefix}-feed:before, +.@{fa-css-prefix}-rss:before { content: @fa-var-rss; } +.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } +.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } +.@{fa-css-prefix}-bell:before { content: @fa-var-bell; } +.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; } +.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; } +.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; } +.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; } +.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; } +.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; } +.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; } +.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; } +.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; } +.@{fa-css-prefix}-globe:before { content: @fa-var-globe; } +.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; } +.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; } +.@{fa-css-prefix}-filter:before { content: @fa-var-filter; } +.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; } +.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; } +.@{fa-css-prefix}-group:before, +.@{fa-css-prefix}-users:before { content: @fa-var-users; } +.@{fa-css-prefix}-chain:before, +.@{fa-css-prefix}-link:before { content: @fa-var-link; } +.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; } +.@{fa-css-prefix}-flask:before { content: @fa-var-flask; } +.@{fa-css-prefix}-cut:before, +.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; } +.@{fa-css-prefix}-copy:before, +.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; } +.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; } +.@{fa-css-prefix}-save:before, +.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; } +.@{fa-css-prefix}-square:before { content: @fa-var-square; } +.@{fa-css-prefix}-navicon:before, +.@{fa-css-prefix}-reorder:before, +.@{fa-css-prefix}-bars:before { content: @fa-var-bars; } +.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; } +.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; } +.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; } +.@{fa-css-prefix}-underline:before { content: @fa-var-underline; } +.@{fa-css-prefix}-table:before { content: @fa-var-table; } +.@{fa-css-prefix}-magic:before { content: @fa-var-magic; } +.@{fa-css-prefix}-truck:before { content: @fa-var-truck; } +.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } +.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; } +.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; } +.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; } +.@{fa-css-prefix}-money:before { content: @fa-var-money; } +.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } +.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; } +.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } +.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } +.@{fa-css-prefix}-columns:before { content: @fa-var-columns; } +.@{fa-css-prefix}-unsorted:before, +.@{fa-css-prefix}-sort:before { content: @fa-var-sort; } +.@{fa-css-prefix}-sort-down:before, +.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; } +.@{fa-css-prefix}-sort-up:before, +.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; } +.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; } +.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; } +.@{fa-css-prefix}-rotate-left:before, +.@{fa-css-prefix}-undo:before { content: @fa-var-undo; } +.@{fa-css-prefix}-legal:before, +.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; } +.@{fa-css-prefix}-dashboard:before, +.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; } +.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; } +.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; } +.@{fa-css-prefix}-flash:before, +.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; } +.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; } +.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } +.@{fa-css-prefix}-paste:before, +.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; } +.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; } +.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; } +.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; } +.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; } +.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; } +.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; } +.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; } +.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; } +.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; } +.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; } +.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; } +.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; } +.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; } +.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; } +.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; } +.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; } +.@{fa-css-prefix}-beer:before { content: @fa-var-beer; } +.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; } +.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; } +.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; } +.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; } +.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; } +.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; } +.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; } +.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; } +.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; } +.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; } +.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; } +.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; } +.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; } +.@{fa-css-prefix}-mobile-phone:before, +.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } +.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; } +.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; } +.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; } +.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; } +.@{fa-css-prefix}-circle:before { content: @fa-var-circle; } +.@{fa-css-prefix}-mail-reply:before, +.@{fa-css-prefix}-reply:before { content: @fa-var-reply; } +.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; } +.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; } +.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; } +.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; } +.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; } +.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; } +.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; } +.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; } +.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; } +.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; } +.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; } +.@{fa-css-prefix}-code:before { content: @fa-var-code; } +.@{fa-css-prefix}-mail-reply-all:before, +.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; } +.@{fa-css-prefix}-star-half-empty:before, +.@{fa-css-prefix}-star-half-full:before, +.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; } +.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; } +.@{fa-css-prefix}-crop:before { content: @fa-var-crop; } +.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; } +.@{fa-css-prefix}-unlink:before, +.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; } +.@{fa-css-prefix}-question:before { content: @fa-var-question; } +.@{fa-css-prefix}-info:before { content: @fa-var-info; } +.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; } +.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; } +.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; } +.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; } +.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; } +.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } +.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; } +.@{fa-css-prefix}-shield:before { content: @fa-var-shield; } +.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; } +.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } +.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; } +.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } +.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; } +.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; } +.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; } +.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; } +.@{fa-css-prefix}-html5:before { content: @fa-var-html5; } +.@{fa-css-prefix}-css3:before { content: @fa-var-css3; } +.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; } +.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; } +.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; } +.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; } +.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; } +.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; } +.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; } +.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; } +.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; } +.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; } +.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; } +.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; } +.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; } +.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; } +.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; } +.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; } +.@{fa-css-prefix}-compass:before { content: @fa-var-compass; } +.@{fa-css-prefix}-toggle-down:before, +.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; } +.@{fa-css-prefix}-toggle-up:before, +.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; } +.@{fa-css-prefix}-toggle-right:before, +.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; } +.@{fa-css-prefix}-euro:before, +.@{fa-css-prefix}-eur:before { content: @fa-var-eur; } +.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; } +.@{fa-css-prefix}-dollar:before, +.@{fa-css-prefix}-usd:before { content: @fa-var-usd; } +.@{fa-css-prefix}-rupee:before, +.@{fa-css-prefix}-inr:before { content: @fa-var-inr; } +.@{fa-css-prefix}-cny:before, +.@{fa-css-prefix}-rmb:before, +.@{fa-css-prefix}-yen:before, +.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; } +.@{fa-css-prefix}-ruble:before, +.@{fa-css-prefix}-rouble:before, +.@{fa-css-prefix}-rub:before { content: @fa-var-rub; } +.@{fa-css-prefix}-won:before, +.@{fa-css-prefix}-krw:before { content: @fa-var-krw; } +.@{fa-css-prefix}-bitcoin:before, +.@{fa-css-prefix}-btc:before { content: @fa-var-btc; } +.@{fa-css-prefix}-file:before { content: @fa-var-file; } +.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; } +.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; } +.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; } +.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; } +.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; } +.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; } +.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; } +.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; } +.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; } +.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; } +.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; } +.@{fa-css-prefix}-xing:before { content: @fa-var-xing; } +.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; } +.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; } +.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; } +.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; } +.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } +.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; } +.@{fa-css-prefix}-adn:before { content: @fa-var-adn; } +.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; } +.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; } +.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; } +.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; } +.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; } +.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; } +.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; } +.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; } +.@{fa-css-prefix}-apple:before { content: @fa-var-apple; } +.@{fa-css-prefix}-windows:before { content: @fa-var-windows; } +.@{fa-css-prefix}-android:before { content: @fa-var-android; } +.@{fa-css-prefix}-linux:before { content: @fa-var-linux; } +.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; } +.@{fa-css-prefix}-skype:before { content: @fa-var-skype; } +.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; } +.@{fa-css-prefix}-trello:before { content: @fa-var-trello; } +.@{fa-css-prefix}-female:before { content: @fa-var-female; } +.@{fa-css-prefix}-male:before { content: @fa-var-male; } +.@{fa-css-prefix}-gittip:before, +.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; } +.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; } +.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; } +.@{fa-css-prefix}-archive:before { content: @fa-var-archive; } +.@{fa-css-prefix}-bug:before { content: @fa-var-bug; } +.@{fa-css-prefix}-vk:before { content: @fa-var-vk; } +.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; } +.@{fa-css-prefix}-renren:before { content: @fa-var-renren; } +.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; } +.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; } +.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; } +.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; } +.@{fa-css-prefix}-toggle-left:before, +.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; } +.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; } +.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; } +.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; } +.@{fa-css-prefix}-turkish-lira:before, +.@{fa-css-prefix}-try:before { content: @fa-var-try; } +.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; } +.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; } +.@{fa-css-prefix}-slack:before { content: @fa-var-slack; } +.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; } +.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; } +.@{fa-css-prefix}-openid:before { content: @fa-var-openid; } +.@{fa-css-prefix}-institution:before, +.@{fa-css-prefix}-bank:before, +.@{fa-css-prefix}-university:before { content: @fa-var-university; } +.@{fa-css-prefix}-mortar-board:before, +.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; } +.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; } +.@{fa-css-prefix}-google:before { content: @fa-var-google; } +.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } +.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; } +.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; } +.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; } +.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; } +.@{fa-css-prefix}-digg:before { content: @fa-var-digg; } +.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } +.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } +.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; } +.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; } +.@{fa-css-prefix}-language:before { content: @fa-var-language; } +.@{fa-css-prefix}-fax:before { content: @fa-var-fax; } +.@{fa-css-prefix}-building:before { content: @fa-var-building; } +.@{fa-css-prefix}-child:before { content: @fa-var-child; } +.@{fa-css-prefix}-paw:before { content: @fa-var-paw; } +.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; } +.@{fa-css-prefix}-cube:before { content: @fa-var-cube; } +.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; } +.@{fa-css-prefix}-behance:before { content: @fa-var-behance; } +.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; } +.@{fa-css-prefix}-steam:before { content: @fa-var-steam; } +.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; } +.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } +.@{fa-css-prefix}-automobile:before, +.@{fa-css-prefix}-car:before { content: @fa-var-car; } +.@{fa-css-prefix}-cab:before, +.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; } +.@{fa-css-prefix}-tree:before { content: @fa-var-tree; } +.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; } +.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; } +.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; } +.@{fa-css-prefix}-database:before { content: @fa-var-database; } +.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; } +.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; } +.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; } +.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; } +.@{fa-css-prefix}-file-photo-o:before, +.@{fa-css-prefix}-file-picture-o:before, +.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; } +.@{fa-css-prefix}-file-zip-o:before, +.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; } +.@{fa-css-prefix}-file-sound-o:before, +.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; } +.@{fa-css-prefix}-file-movie-o:before, +.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; } +.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; } +.@{fa-css-prefix}-vine:before { content: @fa-var-vine; } +.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; } +.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; } +.@{fa-css-prefix}-life-bouy:before, +.@{fa-css-prefix}-life-buoy:before, +.@{fa-css-prefix}-life-saver:before, +.@{fa-css-prefix}-support:before, +.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; } +.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; } +.@{fa-css-prefix}-ra:before, +.@{fa-css-prefix}-resistance:before, +.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } +.@{fa-css-prefix}-ge:before, +.@{fa-css-prefix}-empire:before { content: @fa-var-empire; } +.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } +.@{fa-css-prefix}-git:before { content: @fa-var-git; } +.@{fa-css-prefix}-y-combinator-square:before, +.@{fa-css-prefix}-yc-square:before, +.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } +.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } +.@{fa-css-prefix}-qq:before { content: @fa-var-qq; } +.@{fa-css-prefix}-wechat:before, +.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; } +.@{fa-css-prefix}-send:before, +.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; } +.@{fa-css-prefix}-send-o:before, +.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } +.@{fa-css-prefix}-history:before { content: @fa-var-history; } +.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } +.@{fa-css-prefix}-header:before { content: @fa-var-header; } +.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } +.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; } +.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; } +.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; } +.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; } +.@{fa-css-prefix}-soccer-ball-o:before, +.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; } +.@{fa-css-prefix}-tty:before { content: @fa-var-tty; } +.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; } +.@{fa-css-prefix}-plug:before { content: @fa-var-plug; } +.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; } +.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; } +.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; } +.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; } +.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; } +.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } +.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; } +.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; } +.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; } +.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; } +.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; } +.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; } +.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; } +.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; } +.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; } +.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; } +.@{fa-css-prefix}-trash:before { content: @fa-var-trash; } +.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } +.@{fa-css-prefix}-at:before { content: @fa-var-at; } +.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; } +.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; } +.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; } +.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; } +.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; } +.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; } +.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; } +.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; } +.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; } +.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; } +.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; } +.@{fa-css-prefix}-bus:before { content: @fa-var-bus; } +.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; } +.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; } +.@{fa-css-prefix}-cc:before { content: @fa-var-cc; } +.@{fa-css-prefix}-shekel:before, +.@{fa-css-prefix}-sheqel:before, +.@{fa-css-prefix}-ils:before { content: @fa-var-ils; } +.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; } +.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } +.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; } +.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } +.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; } +.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; } +.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; } +.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } +.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; } +.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; } +.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; } +.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; } +.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; } +.@{fa-css-prefix}-ship:before { content: @fa-var-ship; } +.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; } +.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } +.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; } +.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; } +.@{fa-css-prefix}-venus:before { content: @fa-var-venus; } +.@{fa-css-prefix}-mars:before { content: @fa-var-mars; } +.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } +.@{fa-css-prefix}-intersex:before, +.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } +.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } +.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } +.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; } +.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; } +.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; } +.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } +.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } +.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } +.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } +.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } +.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } +.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } +.@{fa-css-prefix}-server:before { content: @fa-var-server; } +.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; } +.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; } +.@{fa-css-prefix}-hotel:before, +.@{fa-css-prefix}-bed:before { content: @fa-var-bed; } +.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; } +.@{fa-css-prefix}-train:before { content: @fa-var-train; } +.@{fa-css-prefix}-subway:before { content: @fa-var-subway; } +.@{fa-css-prefix}-medium:before { content: @fa-var-medium; } +.@{fa-css-prefix}-yc:before, +.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } +.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } +.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } +.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } +.@{fa-css-prefix}-battery-4:before, +.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } +.@{fa-css-prefix}-battery-3:before, +.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } +.@{fa-css-prefix}-battery-2:before, +.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } +.@{fa-css-prefix}-battery-1:before, +.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } +.@{fa-css-prefix}-battery-0:before, +.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } +.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } +.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } +.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } +.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } +.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } +.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } +.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } +.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } +.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } +.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } +.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } +.@{fa-css-prefix}-hourglass-1:before, +.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } +.@{fa-css-prefix}-hourglass-2:before, +.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } +.@{fa-css-prefix}-hourglass-3:before, +.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } +.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } +.@{fa-css-prefix}-hand-grab-o:before, +.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } +.@{fa-css-prefix}-hand-stop-o:before, +.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } +.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } +.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } +.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } +.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } +.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } +.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } +.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } +.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } +.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } +.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } +.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } +.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } +.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } +.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } +.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } +.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } +.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } +.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } +.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } +.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } +.@{fa-css-prefix}-tv:before, +.@{fa-css-prefix}-television:before { content: @fa-var-television; } +.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } +.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } +.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } +.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } +.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } +.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } +.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } +.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } +.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } +.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } +.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } +.@{fa-css-prefix}-map:before { content: @fa-var-map; } +.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } +.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } +.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } +.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } +.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } +.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } +.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; } +.@{fa-css-prefix}-edge:before { content: @fa-var-edge; } +.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; } +.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; } +.@{fa-css-prefix}-modx:before { content: @fa-var-modx; } +.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; } +.@{fa-css-prefix}-usb:before { content: @fa-var-usb; } +.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; } +.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } +.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; } +.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; } +.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; } +.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; } +.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; } +.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } +.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } +.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } +.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; } +.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; } +.@{fa-css-prefix}-percent:before { content: @fa-var-percent; } +.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; } +.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; } +.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; } +.@{fa-css-prefix}-envira:before { content: @fa-var-envira; } +.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } +.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; } +.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; } +.@{fa-css-prefix}-blind:before { content: @fa-var-blind; } +.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; } +.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; } +.@{fa-css-prefix}-braille:before { content: @fa-var-braille; } +.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; } +.@{fa-css-prefix}-asl-interpreting:before, +.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; } +.@{fa-css-prefix}-deafness:before, +.@{fa-css-prefix}-hard-of-hearing:before, +.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } +.@{fa-css-prefix}-glide:before { content: @fa-var-glide; } +.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; } +.@{fa-css-prefix}-signing:before, +.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; } +.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; } +.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; } +.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; } +.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; } +.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; } +.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; } +.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; } +.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } +.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; } +.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; } +.@{fa-css-prefix}-google-plus-circle:before, +.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; } +.@{fa-css-prefix}-fa:before, +.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/larger.less b/vraptor/src/main/webapp/vendor/font-awesome/less/larger.less new file mode 100644 index 0000000000..c9d646770e --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/larger.less @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.@{fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.@{fa-css-prefix}-2x { font-size: 2em; } +.@{fa-css-prefix}-3x { font-size: 3em; } +.@{fa-css-prefix}-4x { font-size: 4em; } +.@{fa-css-prefix}-5x { font-size: 5em; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/list.less b/vraptor/src/main/webapp/vendor/font-awesome/less/list.less new file mode 100644 index 0000000000..0b440382f6 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/list.less @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.@{fa-css-prefix}-ul { + padding-left: 0; + margin-left: @fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.@{fa-css-prefix}-li { + position: absolute; + left: -@fa-li-width; + width: @fa-li-width; + top: (2em / 14); + text-align: center; + &.@{fa-css-prefix}-lg { + left: (-@fa-li-width + (4em / 14)); + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/mixins.less b/vraptor/src/main/webapp/vendor/font-awesome/less/mixins.less new file mode 100644 index 0000000000..beef231d0e --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/mixins.less @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +.fa-icon() { + display: inline-block; + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +.fa-icon-rotate(@degrees, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; + -webkit-transform: rotate(@degrees); + -ms-transform: rotate(@degrees); + transform: rotate(@degrees); +} + +.fa-icon-flip(@horiz, @vert, @rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; + -webkit-transform: scale(@horiz, @vert); + -ms-transform: scale(@horiz, @vert); + transform: scale(@horiz, @vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +.sr-only() { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +.sr-only-focusable() { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/path.less b/vraptor/src/main/webapp/vendor/font-awesome/less/path.less new file mode 100644 index 0000000000..835be41f81 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/path.less @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); + src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), + url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), + url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), + url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), + url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); + // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/rotated-flipped.less b/vraptor/src/main/webapp/vendor/font-awesome/less/rotated-flipped.less new file mode 100644 index 0000000000..f6ba81475b --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/rotated-flipped.less @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } +.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } +.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } + +.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } +.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .@{fa-css-prefix}-rotate-90, +:root .@{fa-css-prefix}-rotate-180, +:root .@{fa-css-prefix}-rotate-270, +:root .@{fa-css-prefix}-flip-horizontal, +:root .@{fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/screen-reader.less b/vraptor/src/main/webapp/vendor/font-awesome/less/screen-reader.less new file mode 100644 index 0000000000..11c188196d --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/screen-reader.less @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { .sr-only(); } +.sr-only-focusable { .sr-only-focusable(); } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/stacked.less b/vraptor/src/main/webapp/vendor/font-awesome/less/stacked.less new file mode 100644 index 0000000000..fc53fb0e7a --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/stacked.less @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.@{fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.@{fa-css-prefix}-stack-1x { line-height: inherit; } +.@{fa-css-prefix}-stack-2x { font-size: 2em; } +.@{fa-css-prefix}-inverse { color: @fa-inverse; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/less/variables.less b/vraptor/src/main/webapp/vendor/font-awesome/less/variables.less new file mode 100644 index 0000000000..2b3381975e --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/less/variables.less @@ -0,0 +1,744 @@ +// Variables +// -------------------------- + +@fa-font-path: "../fonts"; +@fa-font-size-base: 14px; +@fa-line-height-base: 1; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts"; // for referencing Bootstrap CDN font files directly +@fa-css-prefix: fa; +@fa-version: "4.6.3"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: (30em / 14); + +@fa-var-500px: "\f26e"; +@fa-var-adjust: "\f042"; +@fa-var-adn: "\f170"; +@fa-var-align-center: "\f037"; +@fa-var-align-justify: "\f039"; +@fa-var-align-left: "\f036"; +@fa-var-align-right: "\f038"; +@fa-var-amazon: "\f270"; +@fa-var-ambulance: "\f0f9"; +@fa-var-american-sign-language-interpreting: "\f2a3"; +@fa-var-anchor: "\f13d"; +@fa-var-android: "\f17b"; +@fa-var-angellist: "\f209"; +@fa-var-angle-double-down: "\f103"; +@fa-var-angle-double-left: "\f100"; +@fa-var-angle-double-right: "\f101"; +@fa-var-angle-double-up: "\f102"; +@fa-var-angle-down: "\f107"; +@fa-var-angle-left: "\f104"; +@fa-var-angle-right: "\f105"; +@fa-var-angle-up: "\f106"; +@fa-var-apple: "\f179"; +@fa-var-archive: "\f187"; +@fa-var-area-chart: "\f1fe"; +@fa-var-arrow-circle-down: "\f0ab"; +@fa-var-arrow-circle-left: "\f0a8"; +@fa-var-arrow-circle-o-down: "\f01a"; +@fa-var-arrow-circle-o-left: "\f190"; +@fa-var-arrow-circle-o-right: "\f18e"; +@fa-var-arrow-circle-o-up: "\f01b"; +@fa-var-arrow-circle-right: "\f0a9"; +@fa-var-arrow-circle-up: "\f0aa"; +@fa-var-arrow-down: "\f063"; +@fa-var-arrow-left: "\f060"; +@fa-var-arrow-right: "\f061"; +@fa-var-arrow-up: "\f062"; +@fa-var-arrows: "\f047"; +@fa-var-arrows-alt: "\f0b2"; +@fa-var-arrows-h: "\f07e"; +@fa-var-arrows-v: "\f07d"; +@fa-var-asl-interpreting: "\f2a3"; +@fa-var-assistive-listening-systems: "\f2a2"; +@fa-var-asterisk: "\f069"; +@fa-var-at: "\f1fa"; +@fa-var-audio-description: "\f29e"; +@fa-var-automobile: "\f1b9"; +@fa-var-backward: "\f04a"; +@fa-var-balance-scale: "\f24e"; +@fa-var-ban: "\f05e"; +@fa-var-bank: "\f19c"; +@fa-var-bar-chart: "\f080"; +@fa-var-bar-chart-o: "\f080"; +@fa-var-barcode: "\f02a"; +@fa-var-bars: "\f0c9"; +@fa-var-battery-0: "\f244"; +@fa-var-battery-1: "\f243"; +@fa-var-battery-2: "\f242"; +@fa-var-battery-3: "\f241"; +@fa-var-battery-4: "\f240"; +@fa-var-battery-empty: "\f244"; +@fa-var-battery-full: "\f240"; +@fa-var-battery-half: "\f242"; +@fa-var-battery-quarter: "\f243"; +@fa-var-battery-three-quarters: "\f241"; +@fa-var-bed: "\f236"; +@fa-var-beer: "\f0fc"; +@fa-var-behance: "\f1b4"; +@fa-var-behance-square: "\f1b5"; +@fa-var-bell: "\f0f3"; +@fa-var-bell-o: "\f0a2"; +@fa-var-bell-slash: "\f1f6"; +@fa-var-bell-slash-o: "\f1f7"; +@fa-var-bicycle: "\f206"; +@fa-var-binoculars: "\f1e5"; +@fa-var-birthday-cake: "\f1fd"; +@fa-var-bitbucket: "\f171"; +@fa-var-bitbucket-square: "\f172"; +@fa-var-bitcoin: "\f15a"; +@fa-var-black-tie: "\f27e"; +@fa-var-blind: "\f29d"; +@fa-var-bluetooth: "\f293"; +@fa-var-bluetooth-b: "\f294"; +@fa-var-bold: "\f032"; +@fa-var-bolt: "\f0e7"; +@fa-var-bomb: "\f1e2"; +@fa-var-book: "\f02d"; +@fa-var-bookmark: "\f02e"; +@fa-var-bookmark-o: "\f097"; +@fa-var-braille: "\f2a1"; +@fa-var-briefcase: "\f0b1"; +@fa-var-btc: "\f15a"; +@fa-var-bug: "\f188"; +@fa-var-building: "\f1ad"; +@fa-var-building-o: "\f0f7"; +@fa-var-bullhorn: "\f0a1"; +@fa-var-bullseye: "\f140"; +@fa-var-bus: "\f207"; +@fa-var-buysellads: "\f20d"; +@fa-var-cab: "\f1ba"; +@fa-var-calculator: "\f1ec"; +@fa-var-calendar: "\f073"; +@fa-var-calendar-check-o: "\f274"; +@fa-var-calendar-minus-o: "\f272"; +@fa-var-calendar-o: "\f133"; +@fa-var-calendar-plus-o: "\f271"; +@fa-var-calendar-times-o: "\f273"; +@fa-var-camera: "\f030"; +@fa-var-camera-retro: "\f083"; +@fa-var-car: "\f1b9"; +@fa-var-caret-down: "\f0d7"; +@fa-var-caret-left: "\f0d9"; +@fa-var-caret-right: "\f0da"; +@fa-var-caret-square-o-down: "\f150"; +@fa-var-caret-square-o-left: "\f191"; +@fa-var-caret-square-o-right: "\f152"; +@fa-var-caret-square-o-up: "\f151"; +@fa-var-caret-up: "\f0d8"; +@fa-var-cart-arrow-down: "\f218"; +@fa-var-cart-plus: "\f217"; +@fa-var-cc: "\f20a"; +@fa-var-cc-amex: "\f1f3"; +@fa-var-cc-diners-club: "\f24c"; +@fa-var-cc-discover: "\f1f2"; +@fa-var-cc-jcb: "\f24b"; +@fa-var-cc-mastercard: "\f1f1"; +@fa-var-cc-paypal: "\f1f4"; +@fa-var-cc-stripe: "\f1f5"; +@fa-var-cc-visa: "\f1f0"; +@fa-var-certificate: "\f0a3"; +@fa-var-chain: "\f0c1"; +@fa-var-chain-broken: "\f127"; +@fa-var-check: "\f00c"; +@fa-var-check-circle: "\f058"; +@fa-var-check-circle-o: "\f05d"; +@fa-var-check-square: "\f14a"; +@fa-var-check-square-o: "\f046"; +@fa-var-chevron-circle-down: "\f13a"; +@fa-var-chevron-circle-left: "\f137"; +@fa-var-chevron-circle-right: "\f138"; +@fa-var-chevron-circle-up: "\f139"; +@fa-var-chevron-down: "\f078"; +@fa-var-chevron-left: "\f053"; +@fa-var-chevron-right: "\f054"; +@fa-var-chevron-up: "\f077"; +@fa-var-child: "\f1ae"; +@fa-var-chrome: "\f268"; +@fa-var-circle: "\f111"; +@fa-var-circle-o: "\f10c"; +@fa-var-circle-o-notch: "\f1ce"; +@fa-var-circle-thin: "\f1db"; +@fa-var-clipboard: "\f0ea"; +@fa-var-clock-o: "\f017"; +@fa-var-clone: "\f24d"; +@fa-var-close: "\f00d"; +@fa-var-cloud: "\f0c2"; +@fa-var-cloud-download: "\f0ed"; +@fa-var-cloud-upload: "\f0ee"; +@fa-var-cny: "\f157"; +@fa-var-code: "\f121"; +@fa-var-code-fork: "\f126"; +@fa-var-codepen: "\f1cb"; +@fa-var-codiepie: "\f284"; +@fa-var-coffee: "\f0f4"; +@fa-var-cog: "\f013"; +@fa-var-cogs: "\f085"; +@fa-var-columns: "\f0db"; +@fa-var-comment: "\f075"; +@fa-var-comment-o: "\f0e5"; +@fa-var-commenting: "\f27a"; +@fa-var-commenting-o: "\f27b"; +@fa-var-comments: "\f086"; +@fa-var-comments-o: "\f0e6"; +@fa-var-compass: "\f14e"; +@fa-var-compress: "\f066"; +@fa-var-connectdevelop: "\f20e"; +@fa-var-contao: "\f26d"; +@fa-var-copy: "\f0c5"; +@fa-var-copyright: "\f1f9"; +@fa-var-creative-commons: "\f25e"; +@fa-var-credit-card: "\f09d"; +@fa-var-credit-card-alt: "\f283"; +@fa-var-crop: "\f125"; +@fa-var-crosshairs: "\f05b"; +@fa-var-css3: "\f13c"; +@fa-var-cube: "\f1b2"; +@fa-var-cubes: "\f1b3"; +@fa-var-cut: "\f0c4"; +@fa-var-cutlery: "\f0f5"; +@fa-var-dashboard: "\f0e4"; +@fa-var-dashcube: "\f210"; +@fa-var-database: "\f1c0"; +@fa-var-deaf: "\f2a4"; +@fa-var-deafness: "\f2a4"; +@fa-var-dedent: "\f03b"; +@fa-var-delicious: "\f1a5"; +@fa-var-desktop: "\f108"; +@fa-var-deviantart: "\f1bd"; +@fa-var-diamond: "\f219"; +@fa-var-digg: "\f1a6"; +@fa-var-dollar: "\f155"; +@fa-var-dot-circle-o: "\f192"; +@fa-var-download: "\f019"; +@fa-var-dribbble: "\f17d"; +@fa-var-dropbox: "\f16b"; +@fa-var-drupal: "\f1a9"; +@fa-var-edge: "\f282"; +@fa-var-edit: "\f044"; +@fa-var-eject: "\f052"; +@fa-var-ellipsis-h: "\f141"; +@fa-var-ellipsis-v: "\f142"; +@fa-var-empire: "\f1d1"; +@fa-var-envelope: "\f0e0"; +@fa-var-envelope-o: "\f003"; +@fa-var-envelope-square: "\f199"; +@fa-var-envira: "\f299"; +@fa-var-eraser: "\f12d"; +@fa-var-eur: "\f153"; +@fa-var-euro: "\f153"; +@fa-var-exchange: "\f0ec"; +@fa-var-exclamation: "\f12a"; +@fa-var-exclamation-circle: "\f06a"; +@fa-var-exclamation-triangle: "\f071"; +@fa-var-expand: "\f065"; +@fa-var-expeditedssl: "\f23e"; +@fa-var-external-link: "\f08e"; +@fa-var-external-link-square: "\f14c"; +@fa-var-eye: "\f06e"; +@fa-var-eye-slash: "\f070"; +@fa-var-eyedropper: "\f1fb"; +@fa-var-fa: "\f2b4"; +@fa-var-facebook: "\f09a"; +@fa-var-facebook-f: "\f09a"; +@fa-var-facebook-official: "\f230"; +@fa-var-facebook-square: "\f082"; +@fa-var-fast-backward: "\f049"; +@fa-var-fast-forward: "\f050"; +@fa-var-fax: "\f1ac"; +@fa-var-feed: "\f09e"; +@fa-var-female: "\f182"; +@fa-var-fighter-jet: "\f0fb"; +@fa-var-file: "\f15b"; +@fa-var-file-archive-o: "\f1c6"; +@fa-var-file-audio-o: "\f1c7"; +@fa-var-file-code-o: "\f1c9"; +@fa-var-file-excel-o: "\f1c3"; +@fa-var-file-image-o: "\f1c5"; +@fa-var-file-movie-o: "\f1c8"; +@fa-var-file-o: "\f016"; +@fa-var-file-pdf-o: "\f1c1"; +@fa-var-file-photo-o: "\f1c5"; +@fa-var-file-picture-o: "\f1c5"; +@fa-var-file-powerpoint-o: "\f1c4"; +@fa-var-file-sound-o: "\f1c7"; +@fa-var-file-text: "\f15c"; +@fa-var-file-text-o: "\f0f6"; +@fa-var-file-video-o: "\f1c8"; +@fa-var-file-word-o: "\f1c2"; +@fa-var-file-zip-o: "\f1c6"; +@fa-var-files-o: "\f0c5"; +@fa-var-film: "\f008"; +@fa-var-filter: "\f0b0"; +@fa-var-fire: "\f06d"; +@fa-var-fire-extinguisher: "\f134"; +@fa-var-firefox: "\f269"; +@fa-var-first-order: "\f2b0"; +@fa-var-flag: "\f024"; +@fa-var-flag-checkered: "\f11e"; +@fa-var-flag-o: "\f11d"; +@fa-var-flash: "\f0e7"; +@fa-var-flask: "\f0c3"; +@fa-var-flickr: "\f16e"; +@fa-var-floppy-o: "\f0c7"; +@fa-var-folder: "\f07b"; +@fa-var-folder-o: "\f114"; +@fa-var-folder-open: "\f07c"; +@fa-var-folder-open-o: "\f115"; +@fa-var-font: "\f031"; +@fa-var-font-awesome: "\f2b4"; +@fa-var-fonticons: "\f280"; +@fa-var-fort-awesome: "\f286"; +@fa-var-forumbee: "\f211"; +@fa-var-forward: "\f04e"; +@fa-var-foursquare: "\f180"; +@fa-var-frown-o: "\f119"; +@fa-var-futbol-o: "\f1e3"; +@fa-var-gamepad: "\f11b"; +@fa-var-gavel: "\f0e3"; +@fa-var-gbp: "\f154"; +@fa-var-ge: "\f1d1"; +@fa-var-gear: "\f013"; +@fa-var-gears: "\f085"; +@fa-var-genderless: "\f22d"; +@fa-var-get-pocket: "\f265"; +@fa-var-gg: "\f260"; +@fa-var-gg-circle: "\f261"; +@fa-var-gift: "\f06b"; +@fa-var-git: "\f1d3"; +@fa-var-git-square: "\f1d2"; +@fa-var-github: "\f09b"; +@fa-var-github-alt: "\f113"; +@fa-var-github-square: "\f092"; +@fa-var-gitlab: "\f296"; +@fa-var-gittip: "\f184"; +@fa-var-glass: "\f000"; +@fa-var-glide: "\f2a5"; +@fa-var-glide-g: "\f2a6"; +@fa-var-globe: "\f0ac"; +@fa-var-google: "\f1a0"; +@fa-var-google-plus: "\f0d5"; +@fa-var-google-plus-circle: "\f2b3"; +@fa-var-google-plus-official: "\f2b3"; +@fa-var-google-plus-square: "\f0d4"; +@fa-var-google-wallet: "\f1ee"; +@fa-var-graduation-cap: "\f19d"; +@fa-var-gratipay: "\f184"; +@fa-var-group: "\f0c0"; +@fa-var-h-square: "\f0fd"; +@fa-var-hacker-news: "\f1d4"; +@fa-var-hand-grab-o: "\f255"; +@fa-var-hand-lizard-o: "\f258"; +@fa-var-hand-o-down: "\f0a7"; +@fa-var-hand-o-left: "\f0a5"; +@fa-var-hand-o-right: "\f0a4"; +@fa-var-hand-o-up: "\f0a6"; +@fa-var-hand-paper-o: "\f256"; +@fa-var-hand-peace-o: "\f25b"; +@fa-var-hand-pointer-o: "\f25a"; +@fa-var-hand-rock-o: "\f255"; +@fa-var-hand-scissors-o: "\f257"; +@fa-var-hand-spock-o: "\f259"; +@fa-var-hand-stop-o: "\f256"; +@fa-var-hard-of-hearing: "\f2a4"; +@fa-var-hashtag: "\f292"; +@fa-var-hdd-o: "\f0a0"; +@fa-var-header: "\f1dc"; +@fa-var-headphones: "\f025"; +@fa-var-heart: "\f004"; +@fa-var-heart-o: "\f08a"; +@fa-var-heartbeat: "\f21e"; +@fa-var-history: "\f1da"; +@fa-var-home: "\f015"; +@fa-var-hospital-o: "\f0f8"; +@fa-var-hotel: "\f236"; +@fa-var-hourglass: "\f254"; +@fa-var-hourglass-1: "\f251"; +@fa-var-hourglass-2: "\f252"; +@fa-var-hourglass-3: "\f253"; +@fa-var-hourglass-end: "\f253"; +@fa-var-hourglass-half: "\f252"; +@fa-var-hourglass-o: "\f250"; +@fa-var-hourglass-start: "\f251"; +@fa-var-houzz: "\f27c"; +@fa-var-html5: "\f13b"; +@fa-var-i-cursor: "\f246"; +@fa-var-ils: "\f20b"; +@fa-var-image: "\f03e"; +@fa-var-inbox: "\f01c"; +@fa-var-indent: "\f03c"; +@fa-var-industry: "\f275"; +@fa-var-info: "\f129"; +@fa-var-info-circle: "\f05a"; +@fa-var-inr: "\f156"; +@fa-var-instagram: "\f16d"; +@fa-var-institution: "\f19c"; +@fa-var-internet-explorer: "\f26b"; +@fa-var-intersex: "\f224"; +@fa-var-ioxhost: "\f208"; +@fa-var-italic: "\f033"; +@fa-var-joomla: "\f1aa"; +@fa-var-jpy: "\f157"; +@fa-var-jsfiddle: "\f1cc"; +@fa-var-key: "\f084"; +@fa-var-keyboard-o: "\f11c"; +@fa-var-krw: "\f159"; +@fa-var-language: "\f1ab"; +@fa-var-laptop: "\f109"; +@fa-var-lastfm: "\f202"; +@fa-var-lastfm-square: "\f203"; +@fa-var-leaf: "\f06c"; +@fa-var-leanpub: "\f212"; +@fa-var-legal: "\f0e3"; +@fa-var-lemon-o: "\f094"; +@fa-var-level-down: "\f149"; +@fa-var-level-up: "\f148"; +@fa-var-life-bouy: "\f1cd"; +@fa-var-life-buoy: "\f1cd"; +@fa-var-life-ring: "\f1cd"; +@fa-var-life-saver: "\f1cd"; +@fa-var-lightbulb-o: "\f0eb"; +@fa-var-line-chart: "\f201"; +@fa-var-link: "\f0c1"; +@fa-var-linkedin: "\f0e1"; +@fa-var-linkedin-square: "\f08c"; +@fa-var-linux: "\f17c"; +@fa-var-list: "\f03a"; +@fa-var-list-alt: "\f022"; +@fa-var-list-ol: "\f0cb"; +@fa-var-list-ul: "\f0ca"; +@fa-var-location-arrow: "\f124"; +@fa-var-lock: "\f023"; +@fa-var-long-arrow-down: "\f175"; +@fa-var-long-arrow-left: "\f177"; +@fa-var-long-arrow-right: "\f178"; +@fa-var-long-arrow-up: "\f176"; +@fa-var-low-vision: "\f2a8"; +@fa-var-magic: "\f0d0"; +@fa-var-magnet: "\f076"; +@fa-var-mail-forward: "\f064"; +@fa-var-mail-reply: "\f112"; +@fa-var-mail-reply-all: "\f122"; +@fa-var-male: "\f183"; +@fa-var-map: "\f279"; +@fa-var-map-marker: "\f041"; +@fa-var-map-o: "\f278"; +@fa-var-map-pin: "\f276"; +@fa-var-map-signs: "\f277"; +@fa-var-mars: "\f222"; +@fa-var-mars-double: "\f227"; +@fa-var-mars-stroke: "\f229"; +@fa-var-mars-stroke-h: "\f22b"; +@fa-var-mars-stroke-v: "\f22a"; +@fa-var-maxcdn: "\f136"; +@fa-var-meanpath: "\f20c"; +@fa-var-medium: "\f23a"; +@fa-var-medkit: "\f0fa"; +@fa-var-meh-o: "\f11a"; +@fa-var-mercury: "\f223"; +@fa-var-microphone: "\f130"; +@fa-var-microphone-slash: "\f131"; +@fa-var-minus: "\f068"; +@fa-var-minus-circle: "\f056"; +@fa-var-minus-square: "\f146"; +@fa-var-minus-square-o: "\f147"; +@fa-var-mixcloud: "\f289"; +@fa-var-mobile: "\f10b"; +@fa-var-mobile-phone: "\f10b"; +@fa-var-modx: "\f285"; +@fa-var-money: "\f0d6"; +@fa-var-moon-o: "\f186"; +@fa-var-mortar-board: "\f19d"; +@fa-var-motorcycle: "\f21c"; +@fa-var-mouse-pointer: "\f245"; +@fa-var-music: "\f001"; +@fa-var-navicon: "\f0c9"; +@fa-var-neuter: "\f22c"; +@fa-var-newspaper-o: "\f1ea"; +@fa-var-object-group: "\f247"; +@fa-var-object-ungroup: "\f248"; +@fa-var-odnoklassniki: "\f263"; +@fa-var-odnoklassniki-square: "\f264"; +@fa-var-opencart: "\f23d"; +@fa-var-openid: "\f19b"; +@fa-var-opera: "\f26a"; +@fa-var-optin-monster: "\f23c"; +@fa-var-outdent: "\f03b"; +@fa-var-pagelines: "\f18c"; +@fa-var-paint-brush: "\f1fc"; +@fa-var-paper-plane: "\f1d8"; +@fa-var-paper-plane-o: "\f1d9"; +@fa-var-paperclip: "\f0c6"; +@fa-var-paragraph: "\f1dd"; +@fa-var-paste: "\f0ea"; +@fa-var-pause: "\f04c"; +@fa-var-pause-circle: "\f28b"; +@fa-var-pause-circle-o: "\f28c"; +@fa-var-paw: "\f1b0"; +@fa-var-paypal: "\f1ed"; +@fa-var-pencil: "\f040"; +@fa-var-pencil-square: "\f14b"; +@fa-var-pencil-square-o: "\f044"; +@fa-var-percent: "\f295"; +@fa-var-phone: "\f095"; +@fa-var-phone-square: "\f098"; +@fa-var-photo: "\f03e"; +@fa-var-picture-o: "\f03e"; +@fa-var-pie-chart: "\f200"; +@fa-var-pied-piper: "\f2ae"; +@fa-var-pied-piper-alt: "\f1a8"; +@fa-var-pied-piper-pp: "\f1a7"; +@fa-var-pinterest: "\f0d2"; +@fa-var-pinterest-p: "\f231"; +@fa-var-pinterest-square: "\f0d3"; +@fa-var-plane: "\f072"; +@fa-var-play: "\f04b"; +@fa-var-play-circle: "\f144"; +@fa-var-play-circle-o: "\f01d"; +@fa-var-plug: "\f1e6"; +@fa-var-plus: "\f067"; +@fa-var-plus-circle: "\f055"; +@fa-var-plus-square: "\f0fe"; +@fa-var-plus-square-o: "\f196"; +@fa-var-power-off: "\f011"; +@fa-var-print: "\f02f"; +@fa-var-product-hunt: "\f288"; +@fa-var-puzzle-piece: "\f12e"; +@fa-var-qq: "\f1d6"; +@fa-var-qrcode: "\f029"; +@fa-var-question: "\f128"; +@fa-var-question-circle: "\f059"; +@fa-var-question-circle-o: "\f29c"; +@fa-var-quote-left: "\f10d"; +@fa-var-quote-right: "\f10e"; +@fa-var-ra: "\f1d0"; +@fa-var-random: "\f074"; +@fa-var-rebel: "\f1d0"; +@fa-var-recycle: "\f1b8"; +@fa-var-reddit: "\f1a1"; +@fa-var-reddit-alien: "\f281"; +@fa-var-reddit-square: "\f1a2"; +@fa-var-refresh: "\f021"; +@fa-var-registered: "\f25d"; +@fa-var-remove: "\f00d"; +@fa-var-renren: "\f18b"; +@fa-var-reorder: "\f0c9"; +@fa-var-repeat: "\f01e"; +@fa-var-reply: "\f112"; +@fa-var-reply-all: "\f122"; +@fa-var-resistance: "\f1d0"; +@fa-var-retweet: "\f079"; +@fa-var-rmb: "\f157"; +@fa-var-road: "\f018"; +@fa-var-rocket: "\f135"; +@fa-var-rotate-left: "\f0e2"; +@fa-var-rotate-right: "\f01e"; +@fa-var-rouble: "\f158"; +@fa-var-rss: "\f09e"; +@fa-var-rss-square: "\f143"; +@fa-var-rub: "\f158"; +@fa-var-ruble: "\f158"; +@fa-var-rupee: "\f156"; +@fa-var-safari: "\f267"; +@fa-var-save: "\f0c7"; +@fa-var-scissors: "\f0c4"; +@fa-var-scribd: "\f28a"; +@fa-var-search: "\f002"; +@fa-var-search-minus: "\f010"; +@fa-var-search-plus: "\f00e"; +@fa-var-sellsy: "\f213"; +@fa-var-send: "\f1d8"; +@fa-var-send-o: "\f1d9"; +@fa-var-server: "\f233"; +@fa-var-share: "\f064"; +@fa-var-share-alt: "\f1e0"; +@fa-var-share-alt-square: "\f1e1"; +@fa-var-share-square: "\f14d"; +@fa-var-share-square-o: "\f045"; +@fa-var-shekel: "\f20b"; +@fa-var-sheqel: "\f20b"; +@fa-var-shield: "\f132"; +@fa-var-ship: "\f21a"; +@fa-var-shirtsinbulk: "\f214"; +@fa-var-shopping-bag: "\f290"; +@fa-var-shopping-basket: "\f291"; +@fa-var-shopping-cart: "\f07a"; +@fa-var-sign-in: "\f090"; +@fa-var-sign-language: "\f2a7"; +@fa-var-sign-out: "\f08b"; +@fa-var-signal: "\f012"; +@fa-var-signing: "\f2a7"; +@fa-var-simplybuilt: "\f215"; +@fa-var-sitemap: "\f0e8"; +@fa-var-skyatlas: "\f216"; +@fa-var-skype: "\f17e"; +@fa-var-slack: "\f198"; +@fa-var-sliders: "\f1de"; +@fa-var-slideshare: "\f1e7"; +@fa-var-smile-o: "\f118"; +@fa-var-snapchat: "\f2ab"; +@fa-var-snapchat-ghost: "\f2ac"; +@fa-var-snapchat-square: "\f2ad"; +@fa-var-soccer-ball-o: "\f1e3"; +@fa-var-sort: "\f0dc"; +@fa-var-sort-alpha-asc: "\f15d"; +@fa-var-sort-alpha-desc: "\f15e"; +@fa-var-sort-amount-asc: "\f160"; +@fa-var-sort-amount-desc: "\f161"; +@fa-var-sort-asc: "\f0de"; +@fa-var-sort-desc: "\f0dd"; +@fa-var-sort-down: "\f0dd"; +@fa-var-sort-numeric-asc: "\f162"; +@fa-var-sort-numeric-desc: "\f163"; +@fa-var-sort-up: "\f0de"; +@fa-var-soundcloud: "\f1be"; +@fa-var-space-shuttle: "\f197"; +@fa-var-spinner: "\f110"; +@fa-var-spoon: "\f1b1"; +@fa-var-spotify: "\f1bc"; +@fa-var-square: "\f0c8"; +@fa-var-square-o: "\f096"; +@fa-var-stack-exchange: "\f18d"; +@fa-var-stack-overflow: "\f16c"; +@fa-var-star: "\f005"; +@fa-var-star-half: "\f089"; +@fa-var-star-half-empty: "\f123"; +@fa-var-star-half-full: "\f123"; +@fa-var-star-half-o: "\f123"; +@fa-var-star-o: "\f006"; +@fa-var-steam: "\f1b6"; +@fa-var-steam-square: "\f1b7"; +@fa-var-step-backward: "\f048"; +@fa-var-step-forward: "\f051"; +@fa-var-stethoscope: "\f0f1"; +@fa-var-sticky-note: "\f249"; +@fa-var-sticky-note-o: "\f24a"; +@fa-var-stop: "\f04d"; +@fa-var-stop-circle: "\f28d"; +@fa-var-stop-circle-o: "\f28e"; +@fa-var-street-view: "\f21d"; +@fa-var-strikethrough: "\f0cc"; +@fa-var-stumbleupon: "\f1a4"; +@fa-var-stumbleupon-circle: "\f1a3"; +@fa-var-subscript: "\f12c"; +@fa-var-subway: "\f239"; +@fa-var-suitcase: "\f0f2"; +@fa-var-sun-o: "\f185"; +@fa-var-superscript: "\f12b"; +@fa-var-support: "\f1cd"; +@fa-var-table: "\f0ce"; +@fa-var-tablet: "\f10a"; +@fa-var-tachometer: "\f0e4"; +@fa-var-tag: "\f02b"; +@fa-var-tags: "\f02c"; +@fa-var-tasks: "\f0ae"; +@fa-var-taxi: "\f1ba"; +@fa-var-television: "\f26c"; +@fa-var-tencent-weibo: "\f1d5"; +@fa-var-terminal: "\f120"; +@fa-var-text-height: "\f034"; +@fa-var-text-width: "\f035"; +@fa-var-th: "\f00a"; +@fa-var-th-large: "\f009"; +@fa-var-th-list: "\f00b"; +@fa-var-themeisle: "\f2b2"; +@fa-var-thumb-tack: "\f08d"; +@fa-var-thumbs-down: "\f165"; +@fa-var-thumbs-o-down: "\f088"; +@fa-var-thumbs-o-up: "\f087"; +@fa-var-thumbs-up: "\f164"; +@fa-var-ticket: "\f145"; +@fa-var-times: "\f00d"; +@fa-var-times-circle: "\f057"; +@fa-var-times-circle-o: "\f05c"; +@fa-var-tint: "\f043"; +@fa-var-toggle-down: "\f150"; +@fa-var-toggle-left: "\f191"; +@fa-var-toggle-off: "\f204"; +@fa-var-toggle-on: "\f205"; +@fa-var-toggle-right: "\f152"; +@fa-var-toggle-up: "\f151"; +@fa-var-trademark: "\f25c"; +@fa-var-train: "\f238"; +@fa-var-transgender: "\f224"; +@fa-var-transgender-alt: "\f225"; +@fa-var-trash: "\f1f8"; +@fa-var-trash-o: "\f014"; +@fa-var-tree: "\f1bb"; +@fa-var-trello: "\f181"; +@fa-var-tripadvisor: "\f262"; +@fa-var-trophy: "\f091"; +@fa-var-truck: "\f0d1"; +@fa-var-try: "\f195"; +@fa-var-tty: "\f1e4"; +@fa-var-tumblr: "\f173"; +@fa-var-tumblr-square: "\f174"; +@fa-var-turkish-lira: "\f195"; +@fa-var-tv: "\f26c"; +@fa-var-twitch: "\f1e8"; +@fa-var-twitter: "\f099"; +@fa-var-twitter-square: "\f081"; +@fa-var-umbrella: "\f0e9"; +@fa-var-underline: "\f0cd"; +@fa-var-undo: "\f0e2"; +@fa-var-universal-access: "\f29a"; +@fa-var-university: "\f19c"; +@fa-var-unlink: "\f127"; +@fa-var-unlock: "\f09c"; +@fa-var-unlock-alt: "\f13e"; +@fa-var-unsorted: "\f0dc"; +@fa-var-upload: "\f093"; +@fa-var-usb: "\f287"; +@fa-var-usd: "\f155"; +@fa-var-user: "\f007"; +@fa-var-user-md: "\f0f0"; +@fa-var-user-plus: "\f234"; +@fa-var-user-secret: "\f21b"; +@fa-var-user-times: "\f235"; +@fa-var-users: "\f0c0"; +@fa-var-venus: "\f221"; +@fa-var-venus-double: "\f226"; +@fa-var-venus-mars: "\f228"; +@fa-var-viacoin: "\f237"; +@fa-var-viadeo: "\f2a9"; +@fa-var-viadeo-square: "\f2aa"; +@fa-var-video-camera: "\f03d"; +@fa-var-vimeo: "\f27d"; +@fa-var-vimeo-square: "\f194"; +@fa-var-vine: "\f1ca"; +@fa-var-vk: "\f189"; +@fa-var-volume-control-phone: "\f2a0"; +@fa-var-volume-down: "\f027"; +@fa-var-volume-off: "\f026"; +@fa-var-volume-up: "\f028"; +@fa-var-warning: "\f071"; +@fa-var-wechat: "\f1d7"; +@fa-var-weibo: "\f18a"; +@fa-var-weixin: "\f1d7"; +@fa-var-whatsapp: "\f232"; +@fa-var-wheelchair: "\f193"; +@fa-var-wheelchair-alt: "\f29b"; +@fa-var-wifi: "\f1eb"; +@fa-var-wikipedia-w: "\f266"; +@fa-var-windows: "\f17a"; +@fa-var-won: "\f159"; +@fa-var-wordpress: "\f19a"; +@fa-var-wpbeginner: "\f297"; +@fa-var-wpforms: "\f298"; +@fa-var-wrench: "\f0ad"; +@fa-var-xing: "\f168"; +@fa-var-xing-square: "\f169"; +@fa-var-y-combinator: "\f23b"; +@fa-var-y-combinator-square: "\f1d4"; +@fa-var-yahoo: "\f19e"; +@fa-var-yc: "\f23b"; +@fa-var-yc-square: "\f1d4"; +@fa-var-yelp: "\f1e9"; +@fa-var-yen: "\f157"; +@fa-var-yoast: "\f2b1"; +@fa-var-youtube: "\f167"; +@fa-var-youtube-play: "\f16a"; +@fa-var-youtube-square: "\f166"; + diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_animated.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_animated.scss new file mode 100644 index 0000000000..8a020dbfff --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_animated.scss @@ -0,0 +1,34 @@ +// Spinning Icons +// -------------------------- + +.#{$fa-css-prefix}-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} + +.#{$fa-css-prefix}-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_bordered-pulled.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_bordered-pulled.scss new file mode 100644 index 0000000000..d4b85a02f2 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_bordered-pulled.scss @@ -0,0 +1,25 @@ +// Bordered & Pulled +// ------------------------- + +.#{$fa-css-prefix}-border { + padding: .2em .25em .15em; + border: solid .08em $fa-border-color; + border-radius: .1em; +} + +.#{$fa-css-prefix}-pull-left { float: left; } +.#{$fa-css-prefix}-pull-right { float: right; } + +.#{$fa-css-prefix} { + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ +.pull-right { float: right; } +.pull-left { float: left; } + +.#{$fa-css-prefix} { + &.pull-left { margin-right: .3em; } + &.pull-right { margin-left: .3em; } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_core.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_core.scss new file mode 100644 index 0000000000..7425ef85fc --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_core.scss @@ -0,0 +1,12 @@ +// Base Class Definition +// ------------------------- + +.#{$fa-css-prefix} { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_fixed-width.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_fixed-width.scss new file mode 100644 index 0000000000..b221c98133 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_fixed-width.scss @@ -0,0 +1,6 @@ +// Fixed Width Icons +// ------------------------- +.#{$fa-css-prefix}-fw { + width: (18em / 14); + text-align: center; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_icons.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_icons.scss new file mode 100644 index 0000000000..2944344350 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_icons.scss @@ -0,0 +1,733 @@ +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + +.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; } +.#{$fa-css-prefix}-music:before { content: $fa-var-music; } +.#{$fa-css-prefix}-search:before { content: $fa-var-search; } +.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; } +.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; } +.#{$fa-css-prefix}-star:before { content: $fa-var-star; } +.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; } +.#{$fa-css-prefix}-user:before { content: $fa-var-user; } +.#{$fa-css-prefix}-film:before { content: $fa-var-film; } +.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; } +.#{$fa-css-prefix}-th:before { content: $fa-var-th; } +.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; } +.#{$fa-css-prefix}-check:before { content: $fa-var-check; } +.#{$fa-css-prefix}-remove:before, +.#{$fa-css-prefix}-close:before, +.#{$fa-css-prefix}-times:before { content: $fa-var-times; } +.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; } +.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; } +.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; } +.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; } +.#{$fa-css-prefix}-gear:before, +.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; } +.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; } +.#{$fa-css-prefix}-home:before { content: $fa-var-home; } +.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; } +.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; } +.#{$fa-css-prefix}-road:before { content: $fa-var-road; } +.#{$fa-css-prefix}-download:before { content: $fa-var-download; } +.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; } +.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; } +.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; } +.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; } +.#{$fa-css-prefix}-rotate-right:before, +.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; } +.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; } +.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; } +.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; } +.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; } +.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; } +.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; } +.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; } +.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; } +.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; } +.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; } +.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; } +.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; } +.#{$fa-css-prefix}-book:before { content: $fa-var-book; } +.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; } +.#{$fa-css-prefix}-print:before { content: $fa-var-print; } +.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; } +.#{$fa-css-prefix}-font:before { content: $fa-var-font; } +.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; } +.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; } +.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; } +.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; } +.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; } +.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; } +.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; } +.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; } +.#{$fa-css-prefix}-list:before { content: $fa-var-list; } +.#{$fa-css-prefix}-dedent:before, +.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; } +.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; } +.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; } +.#{$fa-css-prefix}-photo:before, +.#{$fa-css-prefix}-image:before, +.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; } +.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; } +.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; } +.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; } +.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; } +.#{$fa-css-prefix}-edit:before, +.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; } +.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; } +.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; } +.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; } +.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; } +.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; } +.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; } +.#{$fa-css-prefix}-play:before { content: $fa-var-play; } +.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; } +.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; } +.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; } +.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; } +.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; } +.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; } +.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; } +.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; } +.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; } +.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; } +.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; } +.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; } +.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; } +.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; } +.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; } +.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; } +.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; } +.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; } +.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; } +.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; } +.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; } +.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; } +.#{$fa-css-prefix}-mail-forward:before, +.#{$fa-css-prefix}-share:before { content: $fa-var-share; } +.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; } +.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; } +.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; } +.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; } +.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; } +.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; } +.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; } +.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; } +.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; } +.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; } +.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; } +.#{$fa-css-prefix}-warning:before, +.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; } +.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; } +.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; } +.#{$fa-css-prefix}-random:before { content: $fa-var-random; } +.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; } +.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; } +.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; } +.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; } +.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; } +.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; } +.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; } +.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; } +.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; } +.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; } +.#{$fa-css-prefix}-bar-chart-o:before, +.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; } +.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; } +.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; } +.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; } +.#{$fa-css-prefix}-key:before { content: $fa-var-key; } +.#{$fa-css-prefix}-gears:before, +.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; } +.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; } +.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; } +.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; } +.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; } +.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; } +.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; } +.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; } +.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; } +.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; } +.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; } +.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; } +.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; } +.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; } +.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; } +.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; } +.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; } +.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; } +.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; } +.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; } +.#{$fa-css-prefix}-facebook-f:before, +.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; } +.#{$fa-css-prefix}-github:before { content: $fa-var-github; } +.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } +.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-feed:before, +.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } +.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } +.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } +.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; } +.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; } +.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; } +.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; } +.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; } +.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; } +.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; } +.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; } +.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; } +.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; } +.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; } +.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; } +.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; } +.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; } +.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; } +.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; } +.#{$fa-css-prefix}-group:before, +.#{$fa-css-prefix}-users:before { content: $fa-var-users; } +.#{$fa-css-prefix}-chain:before, +.#{$fa-css-prefix}-link:before { content: $fa-var-link; } +.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; } +.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; } +.#{$fa-css-prefix}-cut:before, +.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; } +.#{$fa-css-prefix}-copy:before, +.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; } +.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; } +.#{$fa-css-prefix}-save:before, +.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; } +.#{$fa-css-prefix}-square:before { content: $fa-var-square; } +.#{$fa-css-prefix}-navicon:before, +.#{$fa-css-prefix}-reorder:before, +.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; } +.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; } +.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; } +.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; } +.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; } +.#{$fa-css-prefix}-table:before { content: $fa-var-table; } +.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; } +.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; } +.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; } +.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; } +.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; } +.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; } +.#{$fa-css-prefix}-money:before { content: $fa-var-money; } +.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; } +.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; } +.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; } +.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; } +.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; } +.#{$fa-css-prefix}-unsorted:before, +.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; } +.#{$fa-css-prefix}-sort-down:before, +.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; } +.#{$fa-css-prefix}-sort-up:before, +.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; } +.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; } +.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; } +.#{$fa-css-prefix}-rotate-left:before, +.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; } +.#{$fa-css-prefix}-legal:before, +.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; } +.#{$fa-css-prefix}-dashboard:before, +.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; } +.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; } +.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; } +.#{$fa-css-prefix}-flash:before, +.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; } +.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; } +.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; } +.#{$fa-css-prefix}-paste:before, +.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; } +.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; } +.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; } +.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; } +.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; } +.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; } +.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; } +.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; } +.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; } +.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; } +.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; } +.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; } +.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; } +.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; } +.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; } +.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; } +.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; } +.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; } +.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; } +.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; } +.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; } +.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; } +.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; } +.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; } +.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; } +.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; } +.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; } +.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; } +.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; } +.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; } +.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; } +.#{$fa-css-prefix}-mobile-phone:before, +.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; } +.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; } +.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; } +.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; } +.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; } +.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; } +.#{$fa-css-prefix}-mail-reply:before, +.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; } +.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; } +.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; } +.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; } +.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; } +.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; } +.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; } +.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; } +.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; } +.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; } +.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; } +.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; } +.#{$fa-css-prefix}-code:before { content: $fa-var-code; } +.#{$fa-css-prefix}-mail-reply-all:before, +.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; } +.#{$fa-css-prefix}-star-half-empty:before, +.#{$fa-css-prefix}-star-half-full:before, +.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; } +.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; } +.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; } +.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; } +.#{$fa-css-prefix}-unlink:before, +.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; } +.#{$fa-css-prefix}-question:before { content: $fa-var-question; } +.#{$fa-css-prefix}-info:before { content: $fa-var-info; } +.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; } +.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; } +.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; } +.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; } +.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; } +.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; } +.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; } +.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; } +.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; } +.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; } +.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; } +.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; } +.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; } +.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; } +.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; } +.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; } +.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; } +.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; } +.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; } +.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; } +.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; } +.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; } +.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; } +.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; } +.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; } +.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; } +.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; } +.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; } +.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; } +.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; } +.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; } +.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; } +.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; } +.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; } +.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; } +.#{$fa-css-prefix}-toggle-down:before, +.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; } +.#{$fa-css-prefix}-toggle-up:before, +.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; } +.#{$fa-css-prefix}-toggle-right:before, +.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; } +.#{$fa-css-prefix}-euro:before, +.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; } +.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; } +.#{$fa-css-prefix}-dollar:before, +.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; } +.#{$fa-css-prefix}-rupee:before, +.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; } +.#{$fa-css-prefix}-cny:before, +.#{$fa-css-prefix}-rmb:before, +.#{$fa-css-prefix}-yen:before, +.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; } +.#{$fa-css-prefix}-ruble:before, +.#{$fa-css-prefix}-rouble:before, +.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; } +.#{$fa-css-prefix}-won:before, +.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; } +.#{$fa-css-prefix}-bitcoin:before, +.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; } +.#{$fa-css-prefix}-file:before { content: $fa-var-file; } +.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; } +.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; } +.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; } +.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; } +.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; } +.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; } +.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; } +.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; } +.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; } +.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; } +.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; } +.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; } +.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; } +.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; } +.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; } +.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; } +.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; } +.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; } +.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; } +.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; } +.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; } +.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; } +.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; } +.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; } +.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; } +.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; } +.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; } +.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; } +.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; } +.#{$fa-css-prefix}-android:before { content: $fa-var-android; } +.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; } +.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; } +.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; } +.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; } +.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; } +.#{$fa-css-prefix}-female:before { content: $fa-var-female; } +.#{$fa-css-prefix}-male:before { content: $fa-var-male; } +.#{$fa-css-prefix}-gittip:before, +.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; } +.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; } +.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; } +.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; } +.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; } +.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; } +.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; } +.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; } +.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; } +.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; } +.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; } +.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; } +.#{$fa-css-prefix}-toggle-left:before, +.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; } +.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; } +.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; } +.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; } +.#{$fa-css-prefix}-turkish-lira:before, +.#{$fa-css-prefix}-try:before { content: $fa-var-try; } +.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; } +.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; } +.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; } +.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; } +.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; } +.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; } +.#{$fa-css-prefix}-institution:before, +.#{$fa-css-prefix}-bank:before, +.#{$fa-css-prefix}-university:before { content: $fa-var-university; } +.#{$fa-css-prefix}-mortar-board:before, +.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; } +.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; } +.#{$fa-css-prefix}-google:before { content: $fa-var-google; } +.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; } +.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; } +.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; } +.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; } +.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; } +.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; } +.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; } +.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; } +.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; } +.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; } +.#{$fa-css-prefix}-language:before { content: $fa-var-language; } +.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; } +.#{$fa-css-prefix}-building:before { content: $fa-var-building; } +.#{$fa-css-prefix}-child:before { content: $fa-var-child; } +.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; } +.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; } +.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; } +.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; } +.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; } +.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; } +.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; } +.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; } +.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; } +.#{$fa-css-prefix}-automobile:before, +.#{$fa-css-prefix}-car:before { content: $fa-var-car; } +.#{$fa-css-prefix}-cab:before, +.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; } +.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; } +.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; } +.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; } +.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; } +.#{$fa-css-prefix}-database:before { content: $fa-var-database; } +.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; } +.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; } +.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; } +.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; } +.#{$fa-css-prefix}-file-photo-o:before, +.#{$fa-css-prefix}-file-picture-o:before, +.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; } +.#{$fa-css-prefix}-file-zip-o:before, +.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; } +.#{$fa-css-prefix}-file-sound-o:before, +.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; } +.#{$fa-css-prefix}-file-movie-o:before, +.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; } +.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; } +.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; } +.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; } +.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; } +.#{$fa-css-prefix}-life-bouy:before, +.#{$fa-css-prefix}-life-buoy:before, +.#{$fa-css-prefix}-life-saver:before, +.#{$fa-css-prefix}-support:before, +.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; } +.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; } +.#{$fa-css-prefix}-ra:before, +.#{$fa-css-prefix}-resistance:before, +.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; } +.#{$fa-css-prefix}-ge:before, +.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } +.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } +.#{$fa-css-prefix}-git:before { content: $fa-var-git; } +.#{$fa-css-prefix}-y-combinator-square:before, +.#{$fa-css-prefix}-yc-square:before, +.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } +.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } +.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } +.#{$fa-css-prefix}-wechat:before, +.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; } +.#{$fa-css-prefix}-send:before, +.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; } +.#{$fa-css-prefix}-send-o:before, +.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } +.#{$fa-css-prefix}-history:before { content: $fa-var-history; } +.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } +.#{$fa-css-prefix}-header:before { content: $fa-var-header; } +.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } +.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; } +.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; } +.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; } +.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; } +.#{$fa-css-prefix}-soccer-ball-o:before, +.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; } +.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; } +.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; } +.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; } +.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; } +.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; } +.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; } +.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; } +.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; } +.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; } +.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; } +.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; } +.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; } +.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; } +.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; } +.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; } +.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; } +.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; } +.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; } +.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; } +.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; } +.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; } +.#{$fa-css-prefix}-at:before { content: $fa-var-at; } +.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; } +.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; } +.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; } +.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; } +.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; } +.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; } +.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; } +.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; } +.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; } +.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; } +.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; } +.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; } +.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; } +.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; } +.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; } +.#{$fa-css-prefix}-shekel:before, +.#{$fa-css-prefix}-sheqel:before, +.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; } +.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; } +.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; } +.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; } +.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; } +.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; } +.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; } +.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; } +.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; } +.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; } +.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; } +.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; } +.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; } +.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; } +.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; } +.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; } +.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; } +.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; } +.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; } +.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } +.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } +.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } +.#{$fa-css-prefix}-intersex:before, +.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } +.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } +.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } +.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; } +.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; } +.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; } +.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } +.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } +.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } +.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } +.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } +.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } +.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } +.#{$fa-css-prefix}-server:before { content: $fa-var-server; } +.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; } +.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; } +.#{$fa-css-prefix}-hotel:before, +.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; } +.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; } +.#{$fa-css-prefix}-train:before { content: $fa-var-train; } +.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } +.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } +.#{$fa-css-prefix}-yc:before, +.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } +.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } +.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } +.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } +.#{$fa-css-prefix}-battery-4:before, +.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } +.#{$fa-css-prefix}-battery-3:before, +.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } +.#{$fa-css-prefix}-battery-2:before, +.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } +.#{$fa-css-prefix}-battery-1:before, +.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } +.#{$fa-css-prefix}-battery-0:before, +.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } +.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } +.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } +.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } +.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } +.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } +.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } +.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } +.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } +.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } +.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } +.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } +.#{$fa-css-prefix}-hourglass-1:before, +.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } +.#{$fa-css-prefix}-hourglass-2:before, +.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } +.#{$fa-css-prefix}-hourglass-3:before, +.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } +.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } +.#{$fa-css-prefix}-hand-grab-o:before, +.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } +.#{$fa-css-prefix}-hand-stop-o:before, +.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } +.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } +.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } +.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } +.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } +.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } +.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } +.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } +.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } +.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } +.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } +.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } +.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } +.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } +.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } +.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } +.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } +.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } +.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } +.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } +.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } +.#{$fa-css-prefix}-tv:before, +.#{$fa-css-prefix}-television:before { content: $fa-var-television; } +.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } +.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } +.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } +.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } +.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } +.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } +.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } +.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } +.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } +.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } +.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } +.#{$fa-css-prefix}-map:before { content: $fa-var-map; } +.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } +.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } +.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } +.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } +.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } +.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } +.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; } +.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; } +.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; } +.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; } +.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; } +.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; } +.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; } +.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; } +.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; } +.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; } +.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; } +.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; } +.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; } +.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; } +.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; } +.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; } +.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; } +.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; } +.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; } +.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; } +.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; } +.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; } +.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; } +.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; } +.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; } +.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; } +.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; } +.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; } +.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; } +.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; } +.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; } +.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; } +.#{$fa-css-prefix}-asl-interpreting:before, +.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; } +.#{$fa-css-prefix}-deafness:before, +.#{$fa-css-prefix}-hard-of-hearing:before, +.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; } +.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; } +.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; } +.#{$fa-css-prefix}-signing:before, +.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; } +.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; } +.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; } +.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; } +.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; } +.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; } +.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; } +.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; } +.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; } +.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; } +.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; } +.#{$fa-css-prefix}-google-plus-circle:before, +.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; } +.#{$fa-css-prefix}-fa:before, +.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_larger.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_larger.scss new file mode 100644 index 0000000000..41e9a8184a --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_larger.scss @@ -0,0 +1,13 @@ +// Icon Sizes +// ------------------------- + +/* makes the font 33% larger relative to the icon container */ +.#{$fa-css-prefix}-lg { + font-size: (4em / 3); + line-height: (3em / 4); + vertical-align: -15%; +} +.#{$fa-css-prefix}-2x { font-size: 2em; } +.#{$fa-css-prefix}-3x { font-size: 3em; } +.#{$fa-css-prefix}-4x { font-size: 4em; } +.#{$fa-css-prefix}-5x { font-size: 5em; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_list.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_list.scss new file mode 100644 index 0000000000..7d1e4d54d6 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_list.scss @@ -0,0 +1,19 @@ +// List Icons +// ------------------------- + +.#{$fa-css-prefix}-ul { + padding-left: 0; + margin-left: $fa-li-width; + list-style-type: none; + > li { position: relative; } +} +.#{$fa-css-prefix}-li { + position: absolute; + left: -$fa-li-width; + width: $fa-li-width; + top: (2em / 14); + text-align: center; + &.#{$fa-css-prefix}-lg { + left: -$fa-li-width + (4em / 14); + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_mixins.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_mixins.scss new file mode 100644 index 0000000000..c3bbd5745d --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_mixins.scss @@ -0,0 +1,60 @@ +// Mixins +// -------------------------- + +@mixin fa-icon() { + display: inline-block; + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration + font-size: inherit; // can't have font-size inherit on line above, so need to override + text-rendering: auto; // optimizelegibility throws things off #1094 + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} + +@mixin fa-icon-rotate($degrees, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; + -webkit-transform: rotate($degrees); + -ms-transform: rotate($degrees); + transform: rotate($degrees); +} + +@mixin fa-icon-flip($horiz, $vert, $rotation) { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; + -webkit-transform: scale($horiz, $vert); + -ms-transform: scale($horiz, $vert); + transform: scale($horiz, $vert); +} + + +// Only display content to screen readers. A la Bootstrap 4. +// +// See: http://a11yproject.com/posts/how-to-hide-content/ + +@mixin sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + border: 0; +} + +// Use in conjunction with .sr-only to only display content when it's focused. +// +// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 +// +// Credit: HTML5 Boilerplate + +@mixin sr-only-focusable { + &:active, + &:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; + } +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_path.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_path.scss new file mode 100644 index 0000000000..bb457c23a8 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_path.scss @@ -0,0 +1,15 @@ +/* FONT PATH + * -------------------------- */ + +@font-face { + font-family: 'FontAwesome'; + src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); + src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), + url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), + url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), + url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), + url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); +// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts + font-weight: normal; + font-style: normal; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_rotated-flipped.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_rotated-flipped.scss new file mode 100644 index 0000000000..a3558fd09c --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_rotated-flipped.scss @@ -0,0 +1,20 @@ +// Rotated & Flipped Icons +// ------------------------- + +.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } +.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } +.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } + +.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } +.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } + +// Hook for IE8-9 +// ------------------------- + +:root .#{$fa-css-prefix}-rotate-90, +:root .#{$fa-css-prefix}-rotate-180, +:root .#{$fa-css-prefix}-rotate-270, +:root .#{$fa-css-prefix}-flip-horizontal, +:root .#{$fa-css-prefix}-flip-vertical { + filter: none; +} diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_screen-reader.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_screen-reader.scss new file mode 100644 index 0000000000..637426f0da --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_screen-reader.scss @@ -0,0 +1,5 @@ +// Screen Readers +// ------------------------- + +.sr-only { @include sr-only(); } +.sr-only-focusable { @include sr-only-focusable(); } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_stacked.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_stacked.scss new file mode 100644 index 0000000000..aef7403660 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_stacked.scss @@ -0,0 +1,20 @@ +// Stacked Icons +// ------------------------- + +.#{$fa-css-prefix}-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.#{$fa-css-prefix}-stack-1x { line-height: inherit; } +.#{$fa-css-prefix}-stack-2x { font-size: 2em; } +.#{$fa-css-prefix}-inverse { color: $fa-inverse; } diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/_variables.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/_variables.scss new file mode 100644 index 0000000000..a5a89ef97b --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/_variables.scss @@ -0,0 +1,744 @@ +// Variables +// -------------------------- + +$fa-font-path: "../fonts" !default; +$fa-font-size-base: 14px !default; +$fa-line-height-base: 1 !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-css-prefix: fa !default; +$fa-version: "4.6.3" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: (30em / 14) !default; + +$fa-var-500px: "\f26e"; +$fa-var-adjust: "\f042"; +$fa-var-adn: "\f170"; +$fa-var-align-center: "\f037"; +$fa-var-align-justify: "\f039"; +$fa-var-align-left: "\f036"; +$fa-var-align-right: "\f038"; +$fa-var-amazon: "\f270"; +$fa-var-ambulance: "\f0f9"; +$fa-var-american-sign-language-interpreting: "\f2a3"; +$fa-var-anchor: "\f13d"; +$fa-var-android: "\f17b"; +$fa-var-angellist: "\f209"; +$fa-var-angle-double-down: "\f103"; +$fa-var-angle-double-left: "\f100"; +$fa-var-angle-double-right: "\f101"; +$fa-var-angle-double-up: "\f102"; +$fa-var-angle-down: "\f107"; +$fa-var-angle-left: "\f104"; +$fa-var-angle-right: "\f105"; +$fa-var-angle-up: "\f106"; +$fa-var-apple: "\f179"; +$fa-var-archive: "\f187"; +$fa-var-area-chart: "\f1fe"; +$fa-var-arrow-circle-down: "\f0ab"; +$fa-var-arrow-circle-left: "\f0a8"; +$fa-var-arrow-circle-o-down: "\f01a"; +$fa-var-arrow-circle-o-left: "\f190"; +$fa-var-arrow-circle-o-right: "\f18e"; +$fa-var-arrow-circle-o-up: "\f01b"; +$fa-var-arrow-circle-right: "\f0a9"; +$fa-var-arrow-circle-up: "\f0aa"; +$fa-var-arrow-down: "\f063"; +$fa-var-arrow-left: "\f060"; +$fa-var-arrow-right: "\f061"; +$fa-var-arrow-up: "\f062"; +$fa-var-arrows: "\f047"; +$fa-var-arrows-alt: "\f0b2"; +$fa-var-arrows-h: "\f07e"; +$fa-var-arrows-v: "\f07d"; +$fa-var-asl-interpreting: "\f2a3"; +$fa-var-assistive-listening-systems: "\f2a2"; +$fa-var-asterisk: "\f069"; +$fa-var-at: "\f1fa"; +$fa-var-audio-description: "\f29e"; +$fa-var-automobile: "\f1b9"; +$fa-var-backward: "\f04a"; +$fa-var-balance-scale: "\f24e"; +$fa-var-ban: "\f05e"; +$fa-var-bank: "\f19c"; +$fa-var-bar-chart: "\f080"; +$fa-var-bar-chart-o: "\f080"; +$fa-var-barcode: "\f02a"; +$fa-var-bars: "\f0c9"; +$fa-var-battery-0: "\f244"; +$fa-var-battery-1: "\f243"; +$fa-var-battery-2: "\f242"; +$fa-var-battery-3: "\f241"; +$fa-var-battery-4: "\f240"; +$fa-var-battery-empty: "\f244"; +$fa-var-battery-full: "\f240"; +$fa-var-battery-half: "\f242"; +$fa-var-battery-quarter: "\f243"; +$fa-var-battery-three-quarters: "\f241"; +$fa-var-bed: "\f236"; +$fa-var-beer: "\f0fc"; +$fa-var-behance: "\f1b4"; +$fa-var-behance-square: "\f1b5"; +$fa-var-bell: "\f0f3"; +$fa-var-bell-o: "\f0a2"; +$fa-var-bell-slash: "\f1f6"; +$fa-var-bell-slash-o: "\f1f7"; +$fa-var-bicycle: "\f206"; +$fa-var-binoculars: "\f1e5"; +$fa-var-birthday-cake: "\f1fd"; +$fa-var-bitbucket: "\f171"; +$fa-var-bitbucket-square: "\f172"; +$fa-var-bitcoin: "\f15a"; +$fa-var-black-tie: "\f27e"; +$fa-var-blind: "\f29d"; +$fa-var-bluetooth: "\f293"; +$fa-var-bluetooth-b: "\f294"; +$fa-var-bold: "\f032"; +$fa-var-bolt: "\f0e7"; +$fa-var-bomb: "\f1e2"; +$fa-var-book: "\f02d"; +$fa-var-bookmark: "\f02e"; +$fa-var-bookmark-o: "\f097"; +$fa-var-braille: "\f2a1"; +$fa-var-briefcase: "\f0b1"; +$fa-var-btc: "\f15a"; +$fa-var-bug: "\f188"; +$fa-var-building: "\f1ad"; +$fa-var-building-o: "\f0f7"; +$fa-var-bullhorn: "\f0a1"; +$fa-var-bullseye: "\f140"; +$fa-var-bus: "\f207"; +$fa-var-buysellads: "\f20d"; +$fa-var-cab: "\f1ba"; +$fa-var-calculator: "\f1ec"; +$fa-var-calendar: "\f073"; +$fa-var-calendar-check-o: "\f274"; +$fa-var-calendar-minus-o: "\f272"; +$fa-var-calendar-o: "\f133"; +$fa-var-calendar-plus-o: "\f271"; +$fa-var-calendar-times-o: "\f273"; +$fa-var-camera: "\f030"; +$fa-var-camera-retro: "\f083"; +$fa-var-car: "\f1b9"; +$fa-var-caret-down: "\f0d7"; +$fa-var-caret-left: "\f0d9"; +$fa-var-caret-right: "\f0da"; +$fa-var-caret-square-o-down: "\f150"; +$fa-var-caret-square-o-left: "\f191"; +$fa-var-caret-square-o-right: "\f152"; +$fa-var-caret-square-o-up: "\f151"; +$fa-var-caret-up: "\f0d8"; +$fa-var-cart-arrow-down: "\f218"; +$fa-var-cart-plus: "\f217"; +$fa-var-cc: "\f20a"; +$fa-var-cc-amex: "\f1f3"; +$fa-var-cc-diners-club: "\f24c"; +$fa-var-cc-discover: "\f1f2"; +$fa-var-cc-jcb: "\f24b"; +$fa-var-cc-mastercard: "\f1f1"; +$fa-var-cc-paypal: "\f1f4"; +$fa-var-cc-stripe: "\f1f5"; +$fa-var-cc-visa: "\f1f0"; +$fa-var-certificate: "\f0a3"; +$fa-var-chain: "\f0c1"; +$fa-var-chain-broken: "\f127"; +$fa-var-check: "\f00c"; +$fa-var-check-circle: "\f058"; +$fa-var-check-circle-o: "\f05d"; +$fa-var-check-square: "\f14a"; +$fa-var-check-square-o: "\f046"; +$fa-var-chevron-circle-down: "\f13a"; +$fa-var-chevron-circle-left: "\f137"; +$fa-var-chevron-circle-right: "\f138"; +$fa-var-chevron-circle-up: "\f139"; +$fa-var-chevron-down: "\f078"; +$fa-var-chevron-left: "\f053"; +$fa-var-chevron-right: "\f054"; +$fa-var-chevron-up: "\f077"; +$fa-var-child: "\f1ae"; +$fa-var-chrome: "\f268"; +$fa-var-circle: "\f111"; +$fa-var-circle-o: "\f10c"; +$fa-var-circle-o-notch: "\f1ce"; +$fa-var-circle-thin: "\f1db"; +$fa-var-clipboard: "\f0ea"; +$fa-var-clock-o: "\f017"; +$fa-var-clone: "\f24d"; +$fa-var-close: "\f00d"; +$fa-var-cloud: "\f0c2"; +$fa-var-cloud-download: "\f0ed"; +$fa-var-cloud-upload: "\f0ee"; +$fa-var-cny: "\f157"; +$fa-var-code: "\f121"; +$fa-var-code-fork: "\f126"; +$fa-var-codepen: "\f1cb"; +$fa-var-codiepie: "\f284"; +$fa-var-coffee: "\f0f4"; +$fa-var-cog: "\f013"; +$fa-var-cogs: "\f085"; +$fa-var-columns: "\f0db"; +$fa-var-comment: "\f075"; +$fa-var-comment-o: "\f0e5"; +$fa-var-commenting: "\f27a"; +$fa-var-commenting-o: "\f27b"; +$fa-var-comments: "\f086"; +$fa-var-comments-o: "\f0e6"; +$fa-var-compass: "\f14e"; +$fa-var-compress: "\f066"; +$fa-var-connectdevelop: "\f20e"; +$fa-var-contao: "\f26d"; +$fa-var-copy: "\f0c5"; +$fa-var-copyright: "\f1f9"; +$fa-var-creative-commons: "\f25e"; +$fa-var-credit-card: "\f09d"; +$fa-var-credit-card-alt: "\f283"; +$fa-var-crop: "\f125"; +$fa-var-crosshairs: "\f05b"; +$fa-var-css3: "\f13c"; +$fa-var-cube: "\f1b2"; +$fa-var-cubes: "\f1b3"; +$fa-var-cut: "\f0c4"; +$fa-var-cutlery: "\f0f5"; +$fa-var-dashboard: "\f0e4"; +$fa-var-dashcube: "\f210"; +$fa-var-database: "\f1c0"; +$fa-var-deaf: "\f2a4"; +$fa-var-deafness: "\f2a4"; +$fa-var-dedent: "\f03b"; +$fa-var-delicious: "\f1a5"; +$fa-var-desktop: "\f108"; +$fa-var-deviantart: "\f1bd"; +$fa-var-diamond: "\f219"; +$fa-var-digg: "\f1a6"; +$fa-var-dollar: "\f155"; +$fa-var-dot-circle-o: "\f192"; +$fa-var-download: "\f019"; +$fa-var-dribbble: "\f17d"; +$fa-var-dropbox: "\f16b"; +$fa-var-drupal: "\f1a9"; +$fa-var-edge: "\f282"; +$fa-var-edit: "\f044"; +$fa-var-eject: "\f052"; +$fa-var-ellipsis-h: "\f141"; +$fa-var-ellipsis-v: "\f142"; +$fa-var-empire: "\f1d1"; +$fa-var-envelope: "\f0e0"; +$fa-var-envelope-o: "\f003"; +$fa-var-envelope-square: "\f199"; +$fa-var-envira: "\f299"; +$fa-var-eraser: "\f12d"; +$fa-var-eur: "\f153"; +$fa-var-euro: "\f153"; +$fa-var-exchange: "\f0ec"; +$fa-var-exclamation: "\f12a"; +$fa-var-exclamation-circle: "\f06a"; +$fa-var-exclamation-triangle: "\f071"; +$fa-var-expand: "\f065"; +$fa-var-expeditedssl: "\f23e"; +$fa-var-external-link: "\f08e"; +$fa-var-external-link-square: "\f14c"; +$fa-var-eye: "\f06e"; +$fa-var-eye-slash: "\f070"; +$fa-var-eyedropper: "\f1fb"; +$fa-var-fa: "\f2b4"; +$fa-var-facebook: "\f09a"; +$fa-var-facebook-f: "\f09a"; +$fa-var-facebook-official: "\f230"; +$fa-var-facebook-square: "\f082"; +$fa-var-fast-backward: "\f049"; +$fa-var-fast-forward: "\f050"; +$fa-var-fax: "\f1ac"; +$fa-var-feed: "\f09e"; +$fa-var-female: "\f182"; +$fa-var-fighter-jet: "\f0fb"; +$fa-var-file: "\f15b"; +$fa-var-file-archive-o: "\f1c6"; +$fa-var-file-audio-o: "\f1c7"; +$fa-var-file-code-o: "\f1c9"; +$fa-var-file-excel-o: "\f1c3"; +$fa-var-file-image-o: "\f1c5"; +$fa-var-file-movie-o: "\f1c8"; +$fa-var-file-o: "\f016"; +$fa-var-file-pdf-o: "\f1c1"; +$fa-var-file-photo-o: "\f1c5"; +$fa-var-file-picture-o: "\f1c5"; +$fa-var-file-powerpoint-o: "\f1c4"; +$fa-var-file-sound-o: "\f1c7"; +$fa-var-file-text: "\f15c"; +$fa-var-file-text-o: "\f0f6"; +$fa-var-file-video-o: "\f1c8"; +$fa-var-file-word-o: "\f1c2"; +$fa-var-file-zip-o: "\f1c6"; +$fa-var-files-o: "\f0c5"; +$fa-var-film: "\f008"; +$fa-var-filter: "\f0b0"; +$fa-var-fire: "\f06d"; +$fa-var-fire-extinguisher: "\f134"; +$fa-var-firefox: "\f269"; +$fa-var-first-order: "\f2b0"; +$fa-var-flag: "\f024"; +$fa-var-flag-checkered: "\f11e"; +$fa-var-flag-o: "\f11d"; +$fa-var-flash: "\f0e7"; +$fa-var-flask: "\f0c3"; +$fa-var-flickr: "\f16e"; +$fa-var-floppy-o: "\f0c7"; +$fa-var-folder: "\f07b"; +$fa-var-folder-o: "\f114"; +$fa-var-folder-open: "\f07c"; +$fa-var-folder-open-o: "\f115"; +$fa-var-font: "\f031"; +$fa-var-font-awesome: "\f2b4"; +$fa-var-fonticons: "\f280"; +$fa-var-fort-awesome: "\f286"; +$fa-var-forumbee: "\f211"; +$fa-var-forward: "\f04e"; +$fa-var-foursquare: "\f180"; +$fa-var-frown-o: "\f119"; +$fa-var-futbol-o: "\f1e3"; +$fa-var-gamepad: "\f11b"; +$fa-var-gavel: "\f0e3"; +$fa-var-gbp: "\f154"; +$fa-var-ge: "\f1d1"; +$fa-var-gear: "\f013"; +$fa-var-gears: "\f085"; +$fa-var-genderless: "\f22d"; +$fa-var-get-pocket: "\f265"; +$fa-var-gg: "\f260"; +$fa-var-gg-circle: "\f261"; +$fa-var-gift: "\f06b"; +$fa-var-git: "\f1d3"; +$fa-var-git-square: "\f1d2"; +$fa-var-github: "\f09b"; +$fa-var-github-alt: "\f113"; +$fa-var-github-square: "\f092"; +$fa-var-gitlab: "\f296"; +$fa-var-gittip: "\f184"; +$fa-var-glass: "\f000"; +$fa-var-glide: "\f2a5"; +$fa-var-glide-g: "\f2a6"; +$fa-var-globe: "\f0ac"; +$fa-var-google: "\f1a0"; +$fa-var-google-plus: "\f0d5"; +$fa-var-google-plus-circle: "\f2b3"; +$fa-var-google-plus-official: "\f2b3"; +$fa-var-google-plus-square: "\f0d4"; +$fa-var-google-wallet: "\f1ee"; +$fa-var-graduation-cap: "\f19d"; +$fa-var-gratipay: "\f184"; +$fa-var-group: "\f0c0"; +$fa-var-h-square: "\f0fd"; +$fa-var-hacker-news: "\f1d4"; +$fa-var-hand-grab-o: "\f255"; +$fa-var-hand-lizard-o: "\f258"; +$fa-var-hand-o-down: "\f0a7"; +$fa-var-hand-o-left: "\f0a5"; +$fa-var-hand-o-right: "\f0a4"; +$fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-paper-o: "\f256"; +$fa-var-hand-peace-o: "\f25b"; +$fa-var-hand-pointer-o: "\f25a"; +$fa-var-hand-rock-o: "\f255"; +$fa-var-hand-scissors-o: "\f257"; +$fa-var-hand-spock-o: "\f259"; +$fa-var-hand-stop-o: "\f256"; +$fa-var-hard-of-hearing: "\f2a4"; +$fa-var-hashtag: "\f292"; +$fa-var-hdd-o: "\f0a0"; +$fa-var-header: "\f1dc"; +$fa-var-headphones: "\f025"; +$fa-var-heart: "\f004"; +$fa-var-heart-o: "\f08a"; +$fa-var-heartbeat: "\f21e"; +$fa-var-history: "\f1da"; +$fa-var-home: "\f015"; +$fa-var-hospital-o: "\f0f8"; +$fa-var-hotel: "\f236"; +$fa-var-hourglass: "\f254"; +$fa-var-hourglass-1: "\f251"; +$fa-var-hourglass-2: "\f252"; +$fa-var-hourglass-3: "\f253"; +$fa-var-hourglass-end: "\f253"; +$fa-var-hourglass-half: "\f252"; +$fa-var-hourglass-o: "\f250"; +$fa-var-hourglass-start: "\f251"; +$fa-var-houzz: "\f27c"; +$fa-var-html5: "\f13b"; +$fa-var-i-cursor: "\f246"; +$fa-var-ils: "\f20b"; +$fa-var-image: "\f03e"; +$fa-var-inbox: "\f01c"; +$fa-var-indent: "\f03c"; +$fa-var-industry: "\f275"; +$fa-var-info: "\f129"; +$fa-var-info-circle: "\f05a"; +$fa-var-inr: "\f156"; +$fa-var-instagram: "\f16d"; +$fa-var-institution: "\f19c"; +$fa-var-internet-explorer: "\f26b"; +$fa-var-intersex: "\f224"; +$fa-var-ioxhost: "\f208"; +$fa-var-italic: "\f033"; +$fa-var-joomla: "\f1aa"; +$fa-var-jpy: "\f157"; +$fa-var-jsfiddle: "\f1cc"; +$fa-var-key: "\f084"; +$fa-var-keyboard-o: "\f11c"; +$fa-var-krw: "\f159"; +$fa-var-language: "\f1ab"; +$fa-var-laptop: "\f109"; +$fa-var-lastfm: "\f202"; +$fa-var-lastfm-square: "\f203"; +$fa-var-leaf: "\f06c"; +$fa-var-leanpub: "\f212"; +$fa-var-legal: "\f0e3"; +$fa-var-lemon-o: "\f094"; +$fa-var-level-down: "\f149"; +$fa-var-level-up: "\f148"; +$fa-var-life-bouy: "\f1cd"; +$fa-var-life-buoy: "\f1cd"; +$fa-var-life-ring: "\f1cd"; +$fa-var-life-saver: "\f1cd"; +$fa-var-lightbulb-o: "\f0eb"; +$fa-var-line-chart: "\f201"; +$fa-var-link: "\f0c1"; +$fa-var-linkedin: "\f0e1"; +$fa-var-linkedin-square: "\f08c"; +$fa-var-linux: "\f17c"; +$fa-var-list: "\f03a"; +$fa-var-list-alt: "\f022"; +$fa-var-list-ol: "\f0cb"; +$fa-var-list-ul: "\f0ca"; +$fa-var-location-arrow: "\f124"; +$fa-var-lock: "\f023"; +$fa-var-long-arrow-down: "\f175"; +$fa-var-long-arrow-left: "\f177"; +$fa-var-long-arrow-right: "\f178"; +$fa-var-long-arrow-up: "\f176"; +$fa-var-low-vision: "\f2a8"; +$fa-var-magic: "\f0d0"; +$fa-var-magnet: "\f076"; +$fa-var-mail-forward: "\f064"; +$fa-var-mail-reply: "\f112"; +$fa-var-mail-reply-all: "\f122"; +$fa-var-male: "\f183"; +$fa-var-map: "\f279"; +$fa-var-map-marker: "\f041"; +$fa-var-map-o: "\f278"; +$fa-var-map-pin: "\f276"; +$fa-var-map-signs: "\f277"; +$fa-var-mars: "\f222"; +$fa-var-mars-double: "\f227"; +$fa-var-mars-stroke: "\f229"; +$fa-var-mars-stroke-h: "\f22b"; +$fa-var-mars-stroke-v: "\f22a"; +$fa-var-maxcdn: "\f136"; +$fa-var-meanpath: "\f20c"; +$fa-var-medium: "\f23a"; +$fa-var-medkit: "\f0fa"; +$fa-var-meh-o: "\f11a"; +$fa-var-mercury: "\f223"; +$fa-var-microphone: "\f130"; +$fa-var-microphone-slash: "\f131"; +$fa-var-minus: "\f068"; +$fa-var-minus-circle: "\f056"; +$fa-var-minus-square: "\f146"; +$fa-var-minus-square-o: "\f147"; +$fa-var-mixcloud: "\f289"; +$fa-var-mobile: "\f10b"; +$fa-var-mobile-phone: "\f10b"; +$fa-var-modx: "\f285"; +$fa-var-money: "\f0d6"; +$fa-var-moon-o: "\f186"; +$fa-var-mortar-board: "\f19d"; +$fa-var-motorcycle: "\f21c"; +$fa-var-mouse-pointer: "\f245"; +$fa-var-music: "\f001"; +$fa-var-navicon: "\f0c9"; +$fa-var-neuter: "\f22c"; +$fa-var-newspaper-o: "\f1ea"; +$fa-var-object-group: "\f247"; +$fa-var-object-ungroup: "\f248"; +$fa-var-odnoklassniki: "\f263"; +$fa-var-odnoklassniki-square: "\f264"; +$fa-var-opencart: "\f23d"; +$fa-var-openid: "\f19b"; +$fa-var-opera: "\f26a"; +$fa-var-optin-monster: "\f23c"; +$fa-var-outdent: "\f03b"; +$fa-var-pagelines: "\f18c"; +$fa-var-paint-brush: "\f1fc"; +$fa-var-paper-plane: "\f1d8"; +$fa-var-paper-plane-o: "\f1d9"; +$fa-var-paperclip: "\f0c6"; +$fa-var-paragraph: "\f1dd"; +$fa-var-paste: "\f0ea"; +$fa-var-pause: "\f04c"; +$fa-var-pause-circle: "\f28b"; +$fa-var-pause-circle-o: "\f28c"; +$fa-var-paw: "\f1b0"; +$fa-var-paypal: "\f1ed"; +$fa-var-pencil: "\f040"; +$fa-var-pencil-square: "\f14b"; +$fa-var-pencil-square-o: "\f044"; +$fa-var-percent: "\f295"; +$fa-var-phone: "\f095"; +$fa-var-phone-square: "\f098"; +$fa-var-photo: "\f03e"; +$fa-var-picture-o: "\f03e"; +$fa-var-pie-chart: "\f200"; +$fa-var-pied-piper: "\f2ae"; +$fa-var-pied-piper-alt: "\f1a8"; +$fa-var-pied-piper-pp: "\f1a7"; +$fa-var-pinterest: "\f0d2"; +$fa-var-pinterest-p: "\f231"; +$fa-var-pinterest-square: "\f0d3"; +$fa-var-plane: "\f072"; +$fa-var-play: "\f04b"; +$fa-var-play-circle: "\f144"; +$fa-var-play-circle-o: "\f01d"; +$fa-var-plug: "\f1e6"; +$fa-var-plus: "\f067"; +$fa-var-plus-circle: "\f055"; +$fa-var-plus-square: "\f0fe"; +$fa-var-plus-square-o: "\f196"; +$fa-var-power-off: "\f011"; +$fa-var-print: "\f02f"; +$fa-var-product-hunt: "\f288"; +$fa-var-puzzle-piece: "\f12e"; +$fa-var-qq: "\f1d6"; +$fa-var-qrcode: "\f029"; +$fa-var-question: "\f128"; +$fa-var-question-circle: "\f059"; +$fa-var-question-circle-o: "\f29c"; +$fa-var-quote-left: "\f10d"; +$fa-var-quote-right: "\f10e"; +$fa-var-ra: "\f1d0"; +$fa-var-random: "\f074"; +$fa-var-rebel: "\f1d0"; +$fa-var-recycle: "\f1b8"; +$fa-var-reddit: "\f1a1"; +$fa-var-reddit-alien: "\f281"; +$fa-var-reddit-square: "\f1a2"; +$fa-var-refresh: "\f021"; +$fa-var-registered: "\f25d"; +$fa-var-remove: "\f00d"; +$fa-var-renren: "\f18b"; +$fa-var-reorder: "\f0c9"; +$fa-var-repeat: "\f01e"; +$fa-var-reply: "\f112"; +$fa-var-reply-all: "\f122"; +$fa-var-resistance: "\f1d0"; +$fa-var-retweet: "\f079"; +$fa-var-rmb: "\f157"; +$fa-var-road: "\f018"; +$fa-var-rocket: "\f135"; +$fa-var-rotate-left: "\f0e2"; +$fa-var-rotate-right: "\f01e"; +$fa-var-rouble: "\f158"; +$fa-var-rss: "\f09e"; +$fa-var-rss-square: "\f143"; +$fa-var-rub: "\f158"; +$fa-var-ruble: "\f158"; +$fa-var-rupee: "\f156"; +$fa-var-safari: "\f267"; +$fa-var-save: "\f0c7"; +$fa-var-scissors: "\f0c4"; +$fa-var-scribd: "\f28a"; +$fa-var-search: "\f002"; +$fa-var-search-minus: "\f010"; +$fa-var-search-plus: "\f00e"; +$fa-var-sellsy: "\f213"; +$fa-var-send: "\f1d8"; +$fa-var-send-o: "\f1d9"; +$fa-var-server: "\f233"; +$fa-var-share: "\f064"; +$fa-var-share-alt: "\f1e0"; +$fa-var-share-alt-square: "\f1e1"; +$fa-var-share-square: "\f14d"; +$fa-var-share-square-o: "\f045"; +$fa-var-shekel: "\f20b"; +$fa-var-sheqel: "\f20b"; +$fa-var-shield: "\f132"; +$fa-var-ship: "\f21a"; +$fa-var-shirtsinbulk: "\f214"; +$fa-var-shopping-bag: "\f290"; +$fa-var-shopping-basket: "\f291"; +$fa-var-shopping-cart: "\f07a"; +$fa-var-sign-in: "\f090"; +$fa-var-sign-language: "\f2a7"; +$fa-var-sign-out: "\f08b"; +$fa-var-signal: "\f012"; +$fa-var-signing: "\f2a7"; +$fa-var-simplybuilt: "\f215"; +$fa-var-sitemap: "\f0e8"; +$fa-var-skyatlas: "\f216"; +$fa-var-skype: "\f17e"; +$fa-var-slack: "\f198"; +$fa-var-sliders: "\f1de"; +$fa-var-slideshare: "\f1e7"; +$fa-var-smile-o: "\f118"; +$fa-var-snapchat: "\f2ab"; +$fa-var-snapchat-ghost: "\f2ac"; +$fa-var-snapchat-square: "\f2ad"; +$fa-var-soccer-ball-o: "\f1e3"; +$fa-var-sort: "\f0dc"; +$fa-var-sort-alpha-asc: "\f15d"; +$fa-var-sort-alpha-desc: "\f15e"; +$fa-var-sort-amount-asc: "\f160"; +$fa-var-sort-amount-desc: "\f161"; +$fa-var-sort-asc: "\f0de"; +$fa-var-sort-desc: "\f0dd"; +$fa-var-sort-down: "\f0dd"; +$fa-var-sort-numeric-asc: "\f162"; +$fa-var-sort-numeric-desc: "\f163"; +$fa-var-sort-up: "\f0de"; +$fa-var-soundcloud: "\f1be"; +$fa-var-space-shuttle: "\f197"; +$fa-var-spinner: "\f110"; +$fa-var-spoon: "\f1b1"; +$fa-var-spotify: "\f1bc"; +$fa-var-square: "\f0c8"; +$fa-var-square-o: "\f096"; +$fa-var-stack-exchange: "\f18d"; +$fa-var-stack-overflow: "\f16c"; +$fa-var-star: "\f005"; +$fa-var-star-half: "\f089"; +$fa-var-star-half-empty: "\f123"; +$fa-var-star-half-full: "\f123"; +$fa-var-star-half-o: "\f123"; +$fa-var-star-o: "\f006"; +$fa-var-steam: "\f1b6"; +$fa-var-steam-square: "\f1b7"; +$fa-var-step-backward: "\f048"; +$fa-var-step-forward: "\f051"; +$fa-var-stethoscope: "\f0f1"; +$fa-var-sticky-note: "\f249"; +$fa-var-sticky-note-o: "\f24a"; +$fa-var-stop: "\f04d"; +$fa-var-stop-circle: "\f28d"; +$fa-var-stop-circle-o: "\f28e"; +$fa-var-street-view: "\f21d"; +$fa-var-strikethrough: "\f0cc"; +$fa-var-stumbleupon: "\f1a4"; +$fa-var-stumbleupon-circle: "\f1a3"; +$fa-var-subscript: "\f12c"; +$fa-var-subway: "\f239"; +$fa-var-suitcase: "\f0f2"; +$fa-var-sun-o: "\f185"; +$fa-var-superscript: "\f12b"; +$fa-var-support: "\f1cd"; +$fa-var-table: "\f0ce"; +$fa-var-tablet: "\f10a"; +$fa-var-tachometer: "\f0e4"; +$fa-var-tag: "\f02b"; +$fa-var-tags: "\f02c"; +$fa-var-tasks: "\f0ae"; +$fa-var-taxi: "\f1ba"; +$fa-var-television: "\f26c"; +$fa-var-tencent-weibo: "\f1d5"; +$fa-var-terminal: "\f120"; +$fa-var-text-height: "\f034"; +$fa-var-text-width: "\f035"; +$fa-var-th: "\f00a"; +$fa-var-th-large: "\f009"; +$fa-var-th-list: "\f00b"; +$fa-var-themeisle: "\f2b2"; +$fa-var-thumb-tack: "\f08d"; +$fa-var-thumbs-down: "\f165"; +$fa-var-thumbs-o-down: "\f088"; +$fa-var-thumbs-o-up: "\f087"; +$fa-var-thumbs-up: "\f164"; +$fa-var-ticket: "\f145"; +$fa-var-times: "\f00d"; +$fa-var-times-circle: "\f057"; +$fa-var-times-circle-o: "\f05c"; +$fa-var-tint: "\f043"; +$fa-var-toggle-down: "\f150"; +$fa-var-toggle-left: "\f191"; +$fa-var-toggle-off: "\f204"; +$fa-var-toggle-on: "\f205"; +$fa-var-toggle-right: "\f152"; +$fa-var-toggle-up: "\f151"; +$fa-var-trademark: "\f25c"; +$fa-var-train: "\f238"; +$fa-var-transgender: "\f224"; +$fa-var-transgender-alt: "\f225"; +$fa-var-trash: "\f1f8"; +$fa-var-trash-o: "\f014"; +$fa-var-tree: "\f1bb"; +$fa-var-trello: "\f181"; +$fa-var-tripadvisor: "\f262"; +$fa-var-trophy: "\f091"; +$fa-var-truck: "\f0d1"; +$fa-var-try: "\f195"; +$fa-var-tty: "\f1e4"; +$fa-var-tumblr: "\f173"; +$fa-var-tumblr-square: "\f174"; +$fa-var-turkish-lira: "\f195"; +$fa-var-tv: "\f26c"; +$fa-var-twitch: "\f1e8"; +$fa-var-twitter: "\f099"; +$fa-var-twitter-square: "\f081"; +$fa-var-umbrella: "\f0e9"; +$fa-var-underline: "\f0cd"; +$fa-var-undo: "\f0e2"; +$fa-var-universal-access: "\f29a"; +$fa-var-university: "\f19c"; +$fa-var-unlink: "\f127"; +$fa-var-unlock: "\f09c"; +$fa-var-unlock-alt: "\f13e"; +$fa-var-unsorted: "\f0dc"; +$fa-var-upload: "\f093"; +$fa-var-usb: "\f287"; +$fa-var-usd: "\f155"; +$fa-var-user: "\f007"; +$fa-var-user-md: "\f0f0"; +$fa-var-user-plus: "\f234"; +$fa-var-user-secret: "\f21b"; +$fa-var-user-times: "\f235"; +$fa-var-users: "\f0c0"; +$fa-var-venus: "\f221"; +$fa-var-venus-double: "\f226"; +$fa-var-venus-mars: "\f228"; +$fa-var-viacoin: "\f237"; +$fa-var-viadeo: "\f2a9"; +$fa-var-viadeo-square: "\f2aa"; +$fa-var-video-camera: "\f03d"; +$fa-var-vimeo: "\f27d"; +$fa-var-vimeo-square: "\f194"; +$fa-var-vine: "\f1ca"; +$fa-var-vk: "\f189"; +$fa-var-volume-control-phone: "\f2a0"; +$fa-var-volume-down: "\f027"; +$fa-var-volume-off: "\f026"; +$fa-var-volume-up: "\f028"; +$fa-var-warning: "\f071"; +$fa-var-wechat: "\f1d7"; +$fa-var-weibo: "\f18a"; +$fa-var-weixin: "\f1d7"; +$fa-var-whatsapp: "\f232"; +$fa-var-wheelchair: "\f193"; +$fa-var-wheelchair-alt: "\f29b"; +$fa-var-wifi: "\f1eb"; +$fa-var-wikipedia-w: "\f266"; +$fa-var-windows: "\f17a"; +$fa-var-won: "\f159"; +$fa-var-wordpress: "\f19a"; +$fa-var-wpbeginner: "\f297"; +$fa-var-wpforms: "\f298"; +$fa-var-wrench: "\f0ad"; +$fa-var-xing: "\f168"; +$fa-var-xing-square: "\f169"; +$fa-var-y-combinator: "\f23b"; +$fa-var-y-combinator-square: "\f1d4"; +$fa-var-yahoo: "\f19e"; +$fa-var-yc: "\f23b"; +$fa-var-yc-square: "\f1d4"; +$fa-var-yelp: "\f1e9"; +$fa-var-yen: "\f157"; +$fa-var-yoast: "\f2b1"; +$fa-var-youtube: "\f167"; +$fa-var-youtube-play: "\f16a"; +$fa-var-youtube-square: "\f166"; + diff --git a/vraptor/src/main/webapp/vendor/font-awesome/scss/font-awesome.scss b/vraptor/src/main/webapp/vendor/font-awesome/scss/font-awesome.scss new file mode 100644 index 0000000000..2308b14ca7 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/font-awesome/scss/font-awesome.scss @@ -0,0 +1,18 @@ +/*! + * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ + +@import "variables"; +@import "mixins"; +@import "path"; +@import "core"; +@import "larger"; +@import "fixed-width"; +@import "list"; +@import "bordered-pulled"; +@import "animated"; +@import "rotated-flipped"; +@import "stacked"; +@import "icons"; +@import "screen-reader"; diff --git a/vraptor/src/main/webapp/vendor/jquery/jquery.js b/vraptor/src/main/webapp/vendor/jquery/jquery.js new file mode 100644 index 0000000000..7fc60fca78 --- /dev/null +++ b/vraptor/src/main/webapp/vendor/jquery/jquery.js @@ -0,0 +1,11008 @@ +/*! + * jQuery JavaScript Library v1.12.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-05-20T17:17Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var deletedIds = []; + +var document = window.document; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.12.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type( obj ) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + } catch ( e ) { + + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( !support.ownFirst ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[ j ] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // init accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt( 0 ) === "<" && + selector.charAt( selector.length - 1 ) === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[ 2 ] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof root.ready !== "undefined" ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[ 0 ], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.uniqueSort( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = true; + if ( !memory ) { + self.disable(); + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +} ); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || + window.event.type === "load" || + document.readyState === "complete" ) { + + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE6-10 + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + + // If IE event model is used + } else { + + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch ( e ) {} + + if ( top && top.doScroll ) { + ( function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll( "left" ); + } catch ( e ) { + return window.setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + } )(); + } + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownFirst = i === "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery( function() { + + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== "undefined" ) { + + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +} ); + + +( function() { + var div = document.createElement( "div" ); + + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch ( e ) { + support.deleteExpando = false; + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); +var acceptData = function( elem ) { + var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute( "classid" ) === noData; +}; + + + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && + data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } else { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[ i ] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, undefined + } else { + cache[ id ] = undefined; + } +} + +jQuery.extend( { + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + jQuery.data( this, key ); + } ); + } + + return arguments.length > 1 ? + + // Sets one value + this.each( function() { + jQuery.data( this, key, value ); + } ) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each( function() { + jQuery.removeData( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, + // or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); + + +( function() { + var shrinkWrapBlocksVal; + + support.shrinkWrapBlocks = function() { + if ( shrinkWrapBlocksVal != null ) { + return shrinkWrapBlocksVal; + } + + // Will be changed later if needed. + shrinkWrapBlocksVal = false; + + // Minified: var b,c,d + var div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Test fired too early or in an unsupported environment, exit. + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + if ( typeof div.style.zoom !== "undefined" ) { + + // Reset CSS: box-sizing; display; margin; border + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;" + + "padding:1px;width:1px;zoom:1"; + div.appendChild( document.createElement( "div" ) ).style.width = "5px"; + shrinkWrapBlocksVal = div.offsetWidth !== 3; + } + + body.removeChild( container ); + + return shrinkWrapBlocksVal; + }; + +} )(); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( + elems[ i ], + key, + raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[ 0 ], key ) : emptyGet; +}; +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + +var rleadingWhitespace = ( /^\s+/ ); + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + + +( function() { + var div = document.createElement( "div" ), + fragment = document.createDocumentFragment(), + input = document.createElement( "input" ); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input = document.createElement( "input" ); + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ + support.noCloneEvent = !!div.addEventListener; + + // Support: IE<9 + // Since attributes and properties are the same in IE, + // cleanData must set properties to undefined rather than use removeAttribute + div[ jQuery.expando ] = 1; + support.attributes = !div.getAttribute( jQuery.expando ); +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + option: [ 1, "" ], + legend: [ 1, "

", "
" ], + area: [ 1, "", "" ], + + // Support: IE8 + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] +}; + +// Support: IE8-IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; + ( elem = elems[ i ] ) != null; + i++ + ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + jQuery._data( + elem, + "globalEval", + !refElements || jQuery._data( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/, + rtbody = / from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[ 1 ] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && + !tbody.childNodes.length ) { + + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; +} + + +( function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) + for ( i in { submit: true, change: true, focusin: true } ) { + eventName = "on" + i; + + if ( !( support[ i ] = eventName in window ) ) { + + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && + ( !e || jQuery.event.triggered !== e.type ) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + + // Add elem as a property of the handle fn to prevent a memory leak + // with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && + jQuery._data( cur, "handle" ); + + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( + ( !special._default || + special._default.apply( eventPath.pop(), data ) === false + ) && acceptData( elem ) + ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Safari 6-8+ + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY fromElement offsetX offsetY " + + "pageX pageY screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? + original.toElement : + fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // Guard for simulated events was moved to jQuery.event.stopPropagation function + // since `originalEvent` should point to the original event for the + // constancy with other events and for more focused logic + } + ); + + jQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, + // to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( !e || this.isSimulated ) { + return; + } + + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +// IE submit delegation +if ( !support.submit ) { + + jQuery.event.special.submit = { + setup: function() { + + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? + + // Support: IE <=8 + // We use jQuery.prop instead of elem.form + // to allow fixing the IE8 delegated submit issue (gh-2332) + // by 3rd party polyfills/workarounds. + jQuery.prop( elem, "form" ) : + undefined; + + if ( form && !jQuery._data( form, "submit" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submitBubble = true; + } ); + jQuery._data( form, "submit", true ); + } + } ); + + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + + // If form was submitted by the user, bubble the event up the tree + if ( event._submitBubble ) { + delete event._submitBubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event ); + } + } + }, + + teardown: function() { + + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.change ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._justChanged = true; + } + } ); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._justChanged && !event.isTrigger ) { + this._justChanged = false; + } + + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event ); + } ); + } + return false; + } + + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event ); + } + } ); + jQuery._data( elem, "change", true ); + } + } ); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || + ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { + + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Support: Firefox +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome, Safari +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + } ); +} + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + }, + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + return elem; +} + +function cloneCopyEvent( src, dest ) { + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( + ( node.text || node.textContent || node.innerHTML || "" ) + .replace( rcleanScript, "" ) + ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + elems = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = elems[ i ] ) != null; i++ ) { + + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc( elem ) || + !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( ( !support.noCloneEvent || !support.noCloneChecked ) && + ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { + + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[ i ] ) { + fixCloneNodeIssues( node, destElements[ i ] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { + cloneCopyEvent( node, destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + cleanData: function( elems, /* internal */ forceAcceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + attributes = support.attributes, + special = jQuery.event.special; + + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + if ( forceAcceptData || acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // Support: IE<9 + // IE does not allow us to delete expando properties from nodes + // IE creates expando attributes along with the property + // IE does not have a removeAttribute function on Document nodes + if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { + elem.removeAttribute( internalKey ); + + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + } else { + elem[ internalKey ] = undefined; + } + + deletedIds.push( id ); + } + } + } + } + } +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( + ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) + ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + + // Remove element nodes and prevent memory leaks + elem = this[ i ] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( "