diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..02a74c8 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,17 @@ +name: Hprofile Actions +on: workflow_dispatch +jobs: + Testing: + runs-on: ubuntu-latest + steps: + - name: Code checkout + uses: actions/checkout@v6 + + # running maven command + - name: Maven Test + run: mvn test + + - name: Checkstyle + run: mvn checkstyle:checkstyle + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64b7eee --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/vprofile-project-cicdaws/vprofile-project +/vprofile-project-cicd-awsjenkins diff --git a/hprofile-project-github-actions/hprofile-main/Dockerfile b/hprofile-project-github-actions/hprofile-main/Dockerfile new file mode 100644 index 0000000..267c057 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/Dockerfile @@ -0,0 +1,13 @@ +FROM openjdk:11 AS BUILD_IMAGE +RUN apt update && apt install maven -y +COPY ./ vprofile-project +RUN cd vprofile-project && mvn install + +FROM tomcat:9-jre11 +LABEL "Project"="Vprofile" +LABEL "Author"="Imran" +RUN rm -rf /usr/local/tomcat/webapps/* +COPY --from=BUILD_IMAGE vprofile-project/target/vprofile-v2.war /usr/local/tomcat/webapps/ROOT.war + +EXPOSE 8080 +CMD ["catalina.sh", "run"] diff --git a/hprofile-project-github-actions/hprofile-main/Jenkinsfile b/hprofile-project-github-actions/hprofile-main/Jenkinsfile new file mode 100644 index 0000000..7fecd3c --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/Jenkinsfile @@ -0,0 +1,122 @@ +pipeline { + + agent any +/* + tools { + maven "maven3" + + } +*/ + environment { + NEXUS_VERSION = "nexus3" + NEXUS_PROTOCOL = "http" + NEXUS_URL = "172.31.40.209:8081" + NEXUS_REPOSITORY = "vprofile-release" + NEXUS_REPO_ID = "vprofile-release" + NEXUS_CREDENTIAL_ID = "nexuslogin" + ARTVERSION = "${env.BUILD_ID}" + } + + stages{ + + stage('BUILD'){ + steps { + sh 'mvn clean install -DskipTests' + } + post { + success { + echo 'Now Archiving...' + archiveArtifacts artifacts: '**/target/*.war' + } + } + } + + stage('UNIT TEST'){ + steps { + sh 'mvn test' + } + } + + stage('INTEGRATION TEST'){ + steps { + sh 'mvn verify -DskipUnitTests' + } + } + + stage ('CODE ANALYSIS WITH CHECKSTYLE'){ + steps { + sh 'mvn checkstyle:checkstyle' + } + post { + success { + echo 'Generated Analysis Result' + } + } + } + + stage('CODE ANALYSIS with SONARQUBE') { + + environment { + scannerHome = tool 'sonarscanner4' + } + + steps { + withSonarQubeEnv('sonar-pro') { + sh '''${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=vprofile \ + -Dsonar.projectName=vprofile-repo \ + -Dsonar.projectVersion=1.0 \ + -Dsonar.sources=src/ \ + -Dsonar.java.binaries=target/test-classes/com/visualpathit/account/controllerTest/ \ + -Dsonar.junit.reportsPath=target/surefire-reports/ \ + -Dsonar.jacoco.reportsPath=target/jacoco.exec \ + -Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml''' + } + + timeout(time: 10, unit: 'MINUTES') { + waitForQualityGate abortPipeline: true + } + } + } + + stage("Publish to Nexus Repository Manager") { + steps { + script { + pom = readMavenPom file: "pom.xml"; + filesByGlob = findFiles(glob: "target/*.${pom.packaging}"); + echo "${filesByGlob[0].name} ${filesByGlob[0].path} ${filesByGlob[0].directory} ${filesByGlob[0].length} ${filesByGlob[0].lastModified}" + artifactPath = filesByGlob[0].path; + artifactExists = fileExists artifactPath; + if(artifactExists) { + echo "*** File: ${artifactPath}, group: ${pom.groupId}, packaging: ${pom.packaging}, version ${pom.version} ARTVERSION"; + nexusArtifactUploader( + nexusVersion: NEXUS_VERSION, + protocol: NEXUS_PROTOCOL, + nexusUrl: NEXUS_URL, + groupId: pom.groupId, + version: ARTVERSION, + repository: NEXUS_REPOSITORY, + credentialsId: NEXUS_CREDENTIAL_ID, + artifacts: [ + [artifactId: pom.artifactId, + classifier: '', + file: artifactPath, + type: pom.packaging], + [artifactId: pom.artifactId, + classifier: '', + file: "pom.xml", + type: "pom"] + ] + ); + } + else { + error "*** File: ${artifactPath}, could not be found"; + } + } + } + } + + + } + + +} diff --git a/hprofile-project-github-actions/hprofile-main/README.md b/hprofile-project-github-actions/hprofile-main/README.md new file mode 100644 index 0000000..dc93c30 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/README.md @@ -0,0 +1,23 @@ +# Prerequisites +##### +- JDK 11 +- Maven 3 +- MySQL 8 + +# Technologies +- Spring MVC +- Spring Security +- Spring Data JPA +- Maven +- JSP +- MySQL +# Database +Here,we used Mysql DB +MSQL DB Installation Steps for Linux ubuntu 14.04: +- $ sudo apt-get update +- $ sudo apt-get install mysql-server + +Then look for the file : +- /src/main/resources/db_backup.sql +- db_backup.sql file is a mysql dump file.we have to import this dump to mysql db server +- > mysql -u -p accounts < db_backup.sql diff --git a/hprofile-project-github-actions/hprofile-main/ansible/ansible.cfg b/hprofile-project-github-actions/hprofile-main/ansible/ansible.cfg new file mode 100644 index 0000000..6d2dcd6 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/ansible.cfg @@ -0,0 +1,3 @@ +[defaults] +host_key_checking = False +timeout = 30 diff --git a/hprofile-project-github-actions/hprofile-main/ansible/site.yml b/hprofile-project-github-actions/hprofile-main/ansible/site.yml new file mode 100644 index 0000000..89616a1 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/site.yml @@ -0,0 +1,5 @@ +--- +- import_playbook: tomcat_setup.yml +- import_playbook: vpro-app-setup.yml + +### diff --git a/hprofile-project-github-actions/hprofile-main/ansible/templates/application.j2 b/hprofile-project-github-actions/hprofile-main/ansible/templates/application.j2 new file mode 100644 index 0000000..d930446 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/templates/application.j2 @@ -0,0 +1,25 @@ +#JDBC Configutation for Database Connection +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.url=jdbc:mysql://dbhost:3306/accounts?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull +jdbc.username=db_user +jdbc.password=db_password + +#Memcached Configuration For Active and StandBy Host +#For Active Host +memcached.active.host=127.0.0.1 +memcached.active.port=11211 +#For StandBy Host +memcached.standBy.host=127.0.0.2 +memcached.standBy.port=11211 + +#RabbitMq Configuration +rabbitmq.address=18.220.62.126 +rabbitmq.port=5672 +rabbitmq.username=test +rabbitmq.password=test + +#Elasticesearch Configuration +elasticsearch.host =192.168.1.85 +elasticsearch.port =9300 +elasticsearch.cluster=vprofile +elasticsearch.node=vprofilenode diff --git a/hprofile-project-github-actions/hprofile-main/ansible/templates/epel6-svcfile.j2 b/hprofile-project-github-actions/hprofile-main/ansible/templates/epel6-svcfile.j2 new file mode 100644 index 0000000..379d551 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/templates/epel6-svcfile.j2 @@ -0,0 +1,38 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: tomcat7 +# Required-Start: $network +# Required-Stop: $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/Stop Tomcat server +### END INIT INFO + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +start() { +sh /usr/local/tomcat8/bin/startup.sh +} + +stop() { +sh /usr/local/tomcat8/bin/shutdown.sh +} + +status() { +pid=$(ps -fe | grep '/usr/local/tomcat8' | grep -v grep | tr -s " " | cut -d" " -f2) + if [ -n "$pid" ]; then + echo -e "\e[00;32mTomcat is running with pid: $pid\e[00m" + else + echo -e "\e[00;31mTomcat is not running\e[00m" + fi +} + +case $1 in +start|stop|status) $1;; +restart) stop; start;; +*) echo "Run as $0 "; exit 1;; +esac +exit 0 + + diff --git a/hprofile-project-github-actions/hprofile-main/ansible/templates/epel7-svcfile.j2 b/hprofile-project-github-actions/hprofile-main/ansible/templates/epel7-svcfile.j2 new file mode 100644 index 0000000..feb317c --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/templates/epel7-svcfile.j2 @@ -0,0 +1,18 @@ +[Unit] +Description=Tomcat +After=network.target + +[Service] +User=tomcat +WorkingDirectory=/usr/local/tomcat8 +Environment=JRE_HOME=/usr/lib/jvm/jre +Environment=JAVA_HOME=/usr/lib/jvm/jre +Environment=CATALINA_HOME=/usr/local/tomcat8 +Environment=CATALINE_BASE=/usr/local/tomcat8 +ExecStart=/usr/local/tomcat8/bin/catalina.sh run +ExecStop=/usr/local/tomcat8/bin/shutdown.sh +SyslogIdentifier=tomcat-%i + +[Install] +WantedBy=multi-user.target + diff --git a/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu14_15-svcfile.j2 b/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu14_15-svcfile.j2 new file mode 100644 index 0000000..379d551 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu14_15-svcfile.j2 @@ -0,0 +1,38 @@ +#!/bin/bash + +### BEGIN INIT INFO +# Provides: tomcat7 +# Required-Start: $network +# Required-Stop: $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start/Stop Tomcat server +### END INIT INFO + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +start() { +sh /usr/local/tomcat8/bin/startup.sh +} + +stop() { +sh /usr/local/tomcat8/bin/shutdown.sh +} + +status() { +pid=$(ps -fe | grep '/usr/local/tomcat8' | grep -v grep | tr -s " " | cut -d" " -f2) + if [ -n "$pid" ]; then + echo -e "\e[00;32mTomcat is running with pid: $pid\e[00m" + else + echo -e "\e[00;31mTomcat is not running\e[00m" + fi +} + +case $1 in +start|stop|status) $1;; +restart) stop; start;; +*) echo "Run as $0 "; exit 1;; +esac +exit 0 + + diff --git a/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu16-svcfile.j2 b/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu16-svcfile.j2 new file mode 100644 index 0000000..423b00d --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/templates/ubuntu16-svcfile.j2 @@ -0,0 +1,18 @@ +[Unit] +Description=Tomcat +After=network.target + +[Service] +User=tomcat +WorkingDirectory=/usr/local/tomcat8 +Environment=JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre +Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre +Environment=CATALINA_HOME=/usr/local/tomcat8 +Environment=CATALINE_BASE=/usr/local/tomcat8 +ExecStart=/usr/local/tomcat8/bin/catalina.sh run +ExecStop=/usr/local/tomcat8/bin/shutdown.sh +SyslogIdentifier=tomcat-%i + +[Install] +WantedBy=multi-user.target + diff --git a/hprofile-project-github-actions/hprofile-main/ansible/tomcat_setup.yml b/hprofile-project-github-actions/hprofile-main/ansible/tomcat_setup.yml new file mode 100644 index 0000000..66dff89 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/tomcat_setup.yml @@ -0,0 +1,113 @@ +- name: Common tool setup on all the servers + hosts: appsrvgrp + become: yes + vars: + tom_url: https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz + + tasks: + - name: Install JDK on Centos 6/7 + yum: + name: java-1.8.0-openjdk.x86_64 + state: present + when: ansible_distribution == 'CentOS' + + - name: Install JDK on Ubuntu 14/15/16/18 + apt: + name: openjdk-8-jdk + state: present + update_cache: yes + when: ansible_distribution == 'Ubuntu' + + - name: Download Tomcat Tar Ball/Binaries + get_url: + url: "{{tom_url}}" + dest: /tmp/tomcat-8.tar.gz + + - name: Add tomcat group + group: + name: tomcat + state: present + + - name: Add tomcat user + user: + name: tomcat + group: tomcat + shell: /bin/nologin + home: /usr/local/tomcat8 + + - file: + path: /tmp/tomcat8 + state: directory + + - name: Extract tomcat + unarchive: + src: /tmp/tomcat-8.tar.gz + dest: /tmp/tomcat8/ + remote_src: yes + list_files: yes + register: unarchive_info + + - debug: + msg: "{{unarchive_info.files[0].split('/')[0]}}" + + - name: Synchronize /tmp/tomcat8/tomcat_cont /usr/local/tomcat8. + synchronize: + src: "/tmp/tomcat8/{{unarchive_info.files[0].split('/')[0]}}/" + dest: /usr/local/tomcat8/ + delegate_to: "{{ inventory_hostname }}" + + - name: Change ownership of /usr/local/tomcat8 + file: + path: /usr/local/tomcat8 + owner: tomcat + group: tomcat + recurse: yes + + - name: Setup tomcat SVC file on Centos 7 + template: + src: templates/epel7-svcfile.j2 + dest: /etc/systemd/system/tomcat.service + mode: "a+x" + when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '7' + + - name: Setup tomcat SVC file on Centos 6 + template: + src: templates/epel6-svcfile.j2 + dest: /etc/init.d/tomcat + mode: "a+x" + when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '6' + + - name: Setup tomcat SVC file on ubuntu 14/15 + template: + src: templates/ubuntu14_15-svcfile.j2 + dest: /etc/init.d/tomcat + mode: "a+x" + when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version < '16' + + - name: Setup tomcat SVC file on ubuntu 16 and 18 + template: + src: templates/ubuntu16-svcfile.j2 + dest: /etc/systemd/system/tomcat.service + mode: "a+x" + when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version >= '16' + + - name: Reload tomcat svc config in ubuntu 14/15 + command: update-rc.d tomcat defaults + when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version < '16' + + - name: Reload tomcat svc config in Centos 6 + command: chkconfig --add tomcat + when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '6' + + - name: just force systemd to reread configs (2.4 and above) + systemd: + daemon_reload: yes + when: ansible_distribution_major_version > '6' or ansible_distribution_major_version > '15' + + - name: Start & Enable TOmcat 8 + service: + name: tomcat + state: started + enabled: yes + + diff --git a/hprofile-project-github-actions/hprofile-main/ansible/vpro-app-setup.yml b/hprofile-project-github-actions/hprofile-main/ansible/vpro-app-setup.yml new file mode 100644 index 0000000..0c3f5d4 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/ansible/vpro-app-setup.yml @@ -0,0 +1,105 @@ + +- name: Setup Tomcat8 & Deploy Artifact + hosts: appsrvgrp + become: yes + vars: + timestamp: "{{ansible_date_time.date}}_{{ansible_date_time.hour}}_{{ansible_date_time.minute}}" + tasks: + - name: Download latest VProfile.war from nexus + get_url: + url: "http://{{USER}}:{{PASS}}@{{nexusip}}:8081/repository/{{reponame}}/{{groupid}}/{{time}}/{{build}}/{{vprofile_version}}" + dest: "/tmp/vproapp-{{vprofile_version}}" + register: wardeploy + tags: + - deploy + + - stat: + path: /usr/local/tomcat8/webapps/ROOT + register: artifact_stat + tags: + - deploy + + - name: Stop tomcat svc + service: + name: tomcat + state: stopped + tags: + - deploy + + - name: Try Backup and Deploy + block: + - name: Archive ROOT dir with timestamp + archive: + path: /usr/local/tomcat8/webapps/ROOT + dest: "/opt/ROOT_{{timestamp}}.tgz" + when: artifact_stat.stat.exists + register: archive_info + tags: + - deploy + + - name: copy ROOT dir with old_ROOT name + shell: cp -r ROOT old_ROOT + args: + chdir: /usr/local/tomcat8/webapps/ + + - name: Delete current artifact + file: + path: "{{item}}" + state: absent + when: archive_info.changed + loop: + - /usr/local/tomcat8/webapps/ROOT + - /usr/local/tomcat8/webapps/ROOT.war + tags: + - deploy + + - name: Try deploy artifact else restore from previos old_ROOT + block: + - name: Deploy vprofile artifact + copy: + src: "/tmp/vproapp-{{vprofile_version}}" + dest: /usr/local/tomcat8/webapps/ROOT.war + remote_src: yes + register: deploy_info + tags: + - deploy + rescue: + - shell: cp -r old_ROOT ROOT + args: + chdir: /usr/local/tomcat8/webapps/ + + rescue: + - name: Start tomcat svc + service: + name: tomcat + state: started + + - name: Start tomcat svc + service: + name: tomcat + state: started + when: deploy_info.changed + tags: + - deploy + + - name: Wait until ROOT.war is extracted to ROOT directory + wait_for: + path: /usr/local/tomcat8/webapps/ROOT + tags: + - deploy + +# - name: Deploy web configuration file +# template: +# src: templates/application.j2 +# dest: /usr/local/tomcat8/webapps/ROOT/WEB-INF/classes/application.properties +# force: yes +# notify: +# - Restart Tomcat +# tags: +# - deploy + + handlers: + - name: Restart Tomcat + service: + name: tomcat + state: restarted diff --git a/hprofile-project-github-actions/hprofile-main/aws-files/taskdeffile.json b/hprofile-project-github-actions/hprofile-main/aws-files/taskdeffile.json new file mode 100644 index 0000000..a0fcaed --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/aws-files/taskdeffile.json @@ -0,0 +1,52 @@ +{ + "family": "vproappstagetask", + "containerDefinitions": [ + { + "name": "vproapp", + "image": "716657688884.dkr.ecr.us-east-2.amazonaws.com/actapp:latest", + "cpu": 0, + "portMappings": [ + { + "name": "vproapp-8080-tcp", + "containerPort": 8080, + "hostPort": 8080, + "protocol": "tcp", + "appProtocol": "http" + } + ], + "essential": true, + "environment": [], + "environmentFiles": [], + "mountPoints": [], + "volumesFrom": [], + "ulimits": [], + "logConfiguration": { + "logDriver": "awslogs", + "options": { + "awslogs-create-group": "true", + "awslogs-group": "/ecs/vproappstagetask", + "awslogs-region": "us-east-2", + "awslogs-stream-prefix": "ecs" + }, + "secretOptions": [] + } + } + ], + "executionRoleArn": "arn:aws:iam::716657688884:role/ecsTaskExecutionRole", + "networkMode": "awsvpc", + "requiresCompatibilities": [ + "FARGATE" + ], + "cpu": "1024", + "memory": "2048", + "runtimePlatform": { + "cpuArchitecture": "X86_64", + "operatingSystemFamily": "LINUX" + }, + "tags": [ + { + "key": "Name", + "value": "vprofileappstagtaskdef" + } + ] +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/files/context.xml b/hprofile-project-github-actions/hprofile-main/files/context.xml new file mode 100644 index 0000000..15000d0 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/files/context.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/files/tomcat-users.xml b/hprofile-project-github-actions/hprofile-main/files/tomcat-users.xml new file mode 100644 index 0000000..aef66d0 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/files/tomcat-users.xml @@ -0,0 +1,44 @@ + + + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/pom.xml b/hprofile-project-github-actions/hprofile-main/pom.xml new file mode 100644 index 0000000..df25e83 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/pom.xml @@ -0,0 +1,211 @@ + + 4.0.0 + com.visualpathit + vprofile + war + v2 + Visualpathit VProfile Webapp + http://maven.apache.org + + 4.2.0.RELEASE + 4.0.2.RELEASE + 1.8.2.RELEASE + 4.3.11.Final + 5.2.1.Final + 8.0.33 + 1.4 + 1.2 + 4.10 + 1.1.3 + 1.8 + 1.8 + + + + + org.springframework + spring-web + ${spring.version} + + + + org.springframework + spring-webmvc + ${spring.version} + + + + org.springframework.security + spring-security-web + ${spring-security.version} + + + + org.springframework.security + spring-security-config + ${spring-security.version} + + + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + + + org.springframework.data + spring-data-jpa + ${spring-data-jpa.version} + + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + + mysql + mysql-connector-java + ${mysql-connector.version} + + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + + + + javax.servlet + jstl + ${jstl.version} + + + + junit + junit + ${junit.version} + test + + + org.mockito + mockito-core + 1.9.5 + test + + + org.springframework + spring-test + 3.2.3.RELEASE + test + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + ch.qos.logback + logback-classic + ${logback.version} + + + org.hamcrest + hamcrest-all + 1.3 + test + + + commons-fileupload + commons-fileupload + 1.3.1 + + + + net.spy + spymemcached + 2.12.3 + + + commons-io + commons-io + 2.4 + + + + org.springframework.amqp + spring-rabbit + 1.7.1.RELEASE + + + + com.rabbitmq + amqp-client + 4.0.2 + + + + org.elasticsearch + elasticsearch + 5.6.4 + + + + org.elasticsearch.client + transport + 5.6.4 + + + + com.google.code.gson + gson + 2.8.2 + + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.2.11.v20150529 + + 10 + + / + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.2.2 + + + org.jacoco + jacoco-maven-plugin + 0.8.4 + + + jacoco-initialize + process-resources + + prepare-agent + + + + jacoco-site + post-integration-test + + report + + + + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/beans/Components.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/beans/Components.java new file mode 100644 index 0000000..f58b21f --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/beans/Components.java @@ -0,0 +1,111 @@ +package com.visualpathit.account.beans; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class Components { + + @Value("${memcached.active.host}") + private String activeHost; + @Value("${memcached.active.port}") + private String activePort; + @Value("${memcached.standBy.host}") + private String standByHost; + @Value("${memcached.standBy.port}") + private String standByPort; + + @Value("${rabbitmq.address}") + private String rabbitMqHost; + @Value("${rabbitmq.port}") + private String rabbitMqPort; + @Value("${rabbitmq.username}") + private String rabbitMqUser; + @Value("${rabbitmq.password}") + private String rabbitMqPassword; + + @Value("${elasticsearch.host}") + private String elasticsearchHost; + @Value("${elasticsearch.port}") + private String elasticsearchPort; + @Value("${elasticsearch.cluster}") + private String elasticsearchCluster; + @Value("${elasticsearch.node}") + private String elasticsearchNode; + + + public String getActiveHost() { + return activeHost; + } + public String getActivePort() { + return activePort; + } + public String getStandByHost() { + return standByHost; + } + public String getStandByPort() { + return standByPort; + } + public void setActiveHost(String activeHost) { + this.activeHost = activeHost; + } + public void setActivePort(String activePort) { + this.activePort = activePort; + } + public void setStandByHost(String standByHost) { + this.standByHost = standByHost; + } + public void setStandByPort(String standByPort) { + this.standByPort = standByPort; + } + public String getRabbitMqHost() { + return rabbitMqHost; + } + public void setRabbitMqHost(String rabbitMqHost) { + this.rabbitMqHost = rabbitMqHost; + } + public String getRabbitMqPort() { + return rabbitMqPort; + } + public void setRabbitMqPort(String rabbitMqPort) { + this.rabbitMqPort = rabbitMqPort; + } + public String getRabbitMqUser() { + return rabbitMqUser; + } + public void setRabbitMqUser(String rabbitMqUser) { + this.rabbitMqUser = rabbitMqUser; + } + public String getRabbitMqPassword() { + return rabbitMqPassword; + } + public void setRabbitMqPassword(String rabbitMqPassword) { + this.rabbitMqPassword = rabbitMqPassword; + } + public String getElasticsearchHost() { + return elasticsearchHost; + } + public void setElasticsearchHost(String elasticsearchHost) { + this.elasticsearchHost = elasticsearchHost; + } + public String getElasticsearchPort() { + return elasticsearchPort; + } + public void setElasticsearchPort(String elasticsearchPort) { + this.elasticsearchPort = elasticsearchPort; + } + public String getElasticsearchCluster() { + return elasticsearchCluster; + } + public void setElasticsearchCluster(String elasticsearchCluster) { + this.elasticsearchCluster = elasticsearchCluster; + } + public String getElasticsearchNode() { + return elasticsearchNode; + } + public void setElasticsearchNode(String elasticsearchNode) { + this.elasticsearchNode = elasticsearchNode; + } + + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/ElasticSearchController.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/ElasticSearchController.java new file mode 100644 index 0000000..6fe7f41 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/ElasticSearchController.java @@ -0,0 +1,138 @@ +package com.visualpathit.account.controller; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; +import org.elasticsearch.action.delete.DeleteResponse; +import org.elasticsearch.action.get.GetResponse; +import org.elasticsearch.action.index.IndexRequest; +import org.elasticsearch.action.index.IndexResponse; +import org.elasticsearch.action.update.UpdateRequest; +import org.elasticsearch.action.update.UpdateResponse; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.google.gson.Gson; +import com.visualpathit.account.model.User; +import com.visualpathit.account.service.UserService; +import com.visualpathit.account.utils.ElasticsearchUtil; + +import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; + +@Controller +public class ElasticSearchController { + @Autowired + private UserService userService; + + @RequestMapping(value="/user/elasticsearch", method=RequestMethod.GET) + public String insert(final Model model) throws IOException { + List users = userService.getList(); + //contextMapping(); + + /* for (User user : users) { + //IndexRequest indexRequest = new IndexRequest("users","user", String.valueOf(user.getId())); + //indexRequest.source(new Gson().toJson(user)); + //IndexResponse response = ElasticsearchUtil.trannsportClient().index(indexRequest).actionGet(); + System.out.println("User" +new Gson().toJson(user)); + }*/ + String result =""; + for (User user : users) { + IndexResponse response = ElasticsearchUtil.trannsportClient().prepareIndex("users","user", String.valueOf(user.getId())) + .setSource(jsonBuilder() + .startObject() + .field("name", user.getUsername()) + .field("DOB",user.getDateOfBirth()) + .field("fatherName",user.getFatherName()) + .field("motherName",user.getMotherName()) + .field("gender",user.getGender()) + .field("nationality",user.getNationality()) + .field("phoneNumber", user.getPhoneNumber()) + .endObject() + ) + .get(); + String res =response.getResult().toString(); + System.out.println(res); + result="Users"; + } + model.addAttribute(result); + return "elasticeSearchRes"; + + } + + @RequestMapping(value="/rest/users/view/{id}", method=RequestMethod.GET) + public String view(@PathVariable final String id,final Model model) { + GetResponse getResponse = ElasticsearchUtil.trannsportClient().prepareGet("users", "user", id).get(); + System.out.println(getResponse.getSource()); + + model.addAttribute("res", getResponse.getSource().get("name")); + + return "elasticeSearchRes"; + } + /*@RequestMapping(value = "/get_user_list", method = RequestMethod.GET) + public @ResponseBody List getTagList(@RequestParam("term") String query) { + List users = userService.getList(); + List tagList = null; + for (User user : users) { + GetResponse getResponse = ElasticsearchUtil.trannsportClient().prepareGet("users", "user" ,String.valueOf(user.getId())).get(); + System.out.println(getResponse.getSource()); + + tagList.add(getResponse.getSource()); + } + return tagList; + }*/ + + @RequestMapping(value="/rest/users/update/{id}", method=RequestMethod.GET) + public String update(@PathVariable final String id,final Model model) throws IOException { + + UpdateRequest updateRequest = new UpdateRequest(); + updateRequest.index("employee") + .type("id") + .id(id) + .doc(jsonBuilder() + .startObject() + .field("gender", "male") + .endObject()); + try { + UpdateResponse updateResponse = ElasticsearchUtil.trannsportClient().update(updateRequest).get(); + System.out.println(updateResponse.status()); + model.addAttribute("res", updateResponse.status()); + return "elasticeSearchRes"; + } catch (InterruptedException | ExecutionException e) { + System.out.println(e); + } + return "elasticeSearchRes"; + } + @RequestMapping(value="/rest/users/delete/{id}", method=RequestMethod.GET) + public String delete(@PathVariable final String id,final Model model) { + + DeleteResponse deleteResponse =ElasticsearchUtil.trannsportClient().prepareDelete("employee", "id", id).get(); + System.out.println(deleteResponse.getResult().toString()); + model.addAttribute("res", deleteResponse.getResult().toString()); + return "elasticeSearchRes"; + } + /*public void contextMapping() throws IOException{ + String json ="{" + + "\"mappings\":{" + + "\"users\":\" {" + + "\"properties\" : {" + + "\"name\" : { \"type\" : \"string\" }," + + " \"city\" : { \"type\" : \"string\" }," + + "\"name_suggest\" : {" + + "\"type\" : \"completion\"" + + "}}" + + "}"; + IndexResponse response = ElasticsearchUtil.trannsportClient().prepareIndex("users", "data") + .setSource(json).execute().actionGet(); + + }*/ +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/FileUploadController.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/FileUploadController.java new file mode 100644 index 0000000..0de040a --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/FileUploadController.java @@ -0,0 +1,80 @@ +package com.visualpathit.account.controller; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.visualpathit.account.model.User; +import com.visualpathit.account.service.UserService; + +@Controller +public class FileUploadController { + @Autowired + private UserService userService; + private static final Logger logger = LoggerFactory + .getLogger(FileUploadController.class); + + /** + * Upload single file using Spring Controller + */ + @RequestMapping(value = { "/upload"} , method = RequestMethod.GET) + public final String upload(final Model model) { + return "upload"; + } + @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) + public @ResponseBody + String uploadFileHandler(@RequestParam("name") String name,@RequestParam("userName") String userName, + @RequestParam("file") MultipartFile file) { + + System.out.println("Called the upload file :::" ); + if (!file.isEmpty()) { + try { + byte[] bytes = file.getBytes(); + + // Creating the directory to store file + String rootPath = System.getProperty("catalina.home"); + System.out.println("Path ::::" +rootPath); + File dir = new File(rootPath + File.separator + "tmpFiles"); + if (!dir.exists()) + dir.mkdirs(); + + // Create the file on server + File serverFile = new File(dir.getAbsolutePath() + + File.separator + name+".png"); + //image saving + User user = userService.findByUsername(userName); + user.setProfileImg(name +".png"); + user.setProfileImgPath(serverFile.getAbsolutePath()); + userService.save(user); + + BufferedOutputStream stream = new BufferedOutputStream( + new FileOutputStream(serverFile)); + stream.write(bytes); + stream.close(); + + logger.info("Server File Location=" + + serverFile.getAbsolutePath()); + + return "You successfully uploaded file=" + name +".png"; + } catch (Exception e) { + return "You failed to upload " + name +".png" + " => " + e.getMessage(); + } + } else { + return "You failed to upload " + name +".png" + + " because the file was empty."; + } + } + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/UserController.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/UserController.java new file mode 100644 index 0000000..c370682 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/controller/UserController.java @@ -0,0 +1,174 @@ +package com.visualpathit.account.controller; + +import com.visualpathit.account.model.User; +import com.visualpathit.account.service.ProducerService; +import com.visualpathit.account.service.SecurityService; +import com.visualpathit.account.service.UserService; +import com.visualpathit.account.utils.MemcachedUtils; +import com.visualpathit.account.validator.UserValidator; + +import java.util.List; +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +/**{@author imrant}*/ +@Controller +public class UserController { + @Autowired + private UserService userService; + + @Autowired + private SecurityService securityService; + + @Autowired + private UserValidator userValidator; + + @Autowired + private ProducerService producerService; + + /** {@inheritDoc} */ + @RequestMapping(value = "/registration", method = RequestMethod.GET) + public final String registration(final Model model) { + model.addAttribute("userForm", new User()); + return "registration"; + } + /** {@inheritDoc} */ + @RequestMapping(value = "/registration", method = RequestMethod.POST) + public final String registration(final @ModelAttribute("userForm") User userForm, + final BindingResult bindingResult, final Model model) { + + userValidator.validate(userForm, bindingResult); + if (bindingResult.hasErrors()) { + return "registration"; + } + System.out.println("User PWD:"+userForm.getPassword()); + userService.save(userForm); + + securityService.autologin(userForm.getUsername(), userForm.getPasswordConfirm()); + + return "redirect:/welcome"; + } + /** {@inheritDoc} */ + @RequestMapping(value = "/login", method = RequestMethod.GET) + public final String login(final Model model, final String error, final String logout) { + System.out.println("Model data"+model.toString()); + if (error != null){ + model.addAttribute("error", "Your username and password is invalid."); + } + if (logout != null){ + model.addAttribute("message", "You have been logged out successfully."); + } + return "login"; + } + /** {@inheritDoc} */ + @RequestMapping(value = { "/", "/welcome"}, method = RequestMethod.GET) + public final String welcome(final Model model) { + return "welcome"; + } + /** {@inheritDoc} */ + @RequestMapping(value = { "/index"} , method = RequestMethod.GET) + public final String indexHome(final Model model) { + return "index_home"; + } + @RequestMapping(value = "/users", method = RequestMethod.GET) + public String getAllUsers(Model model) + { + + List users = userService.getList(); + //JSONObject jsonObject + System.out.println("All User Data:::" + users); + model.addAttribute("users", users); + return "userList"; + } + + @RequestMapping(value = "/users/{id}", method = RequestMethod.GET) + public String getOneUser(@PathVariable(value="id") String id,Model model) + { + String Result =""; + try{ + if( id != null && MemcachedUtils.memcachedGetData(id)!= null){ + User userData = MemcachedUtils.memcachedGetData(id); + Result ="Data is From Cache"; + System.out.println("--------------------------------------------"); + System.out.println("Data is From Cache !!"); + System.out.println("--------------------------------------------"); + System.out.println("Father ::: "+userData.getFatherName()); + model.addAttribute("user", userData); + model.addAttribute("Result", Result); + } + else{ + User user = userService.findById(Long.parseLong(id)); + Result = MemcachedUtils.memcachedSetData(user,id); + if(Result == null ){ + Result ="Memcached Connection Failure !!"; + } + System.out.println("--------------------------------------------"); + System.out.println("Data is From Database"); + System.out.println("--------------------------------------------"); + System.out.println("Result ::: "+ Result); + model.addAttribute("user", user); + model.addAttribute("Result", Result); + } + } catch (Exception e) { + System.out.println( e.getMessage() ); + } + return "user"; + } + + /** {@inheritDoc} */ + @RequestMapping(value = { "/user/{username}"} , method = RequestMethod.GET) + public final String userUpdate(@PathVariable(value="username") String username,final Model model) { + User user = userService.findByUsername(username); + System.out.println("User Data:::" + user); + model.addAttribute("user", user); + return "userUpdate"; + } + @RequestMapping(value = { "/user/{username}"} , method = RequestMethod.POST) + public final String userUpdateProfile(@PathVariable(value="username") String username,final @ModelAttribute("user") User userForm,final Model model) { + User user = userService.findByUsername(username); + user.setUsername(userForm.getUsername()); + user.setUserEmail(userForm.getUserEmail()); + user.setDateOfBirth(userForm.getDateOfBirth()); + user.setFatherName(userForm.getFatherName()); + user.setMotherName(userForm.getMotherName()); + user.setGender(userForm.getGender()); + user.setLanguage(userForm.getLanguage()); + user.setMaritalStatus(userForm.getMaritalStatus()); + user.setNationality(userForm.getNationality()); + user.setPermanentAddress(userForm.getPermanentAddress()); + user.setTempAddress(userForm.getTempAddress()); + user.setPhoneNumber(userForm.getPhoneNumber()); + user.setSecondaryPhoneNumber(userForm.getSecondaryPhoneNumber()); + user.setPrimaryOccupation(userForm.getPrimaryOccupation()); + user.setSecondaryOccupation(userForm.getSecondaryOccupation()); + user.setSkills(userForm.getSkills()); + user.setWorkingExperience(userForm.getWorkingExperience()); + userService.save(user); + /*model.addAttribute("user", user);*/ + return "welcome"; + } + + @RequestMapping(value={"/user/rabbit"}, method={RequestMethod.GET}) + public String rabbitmqSetUp() { + System.out.println("Rabbit mq method is callled!!!"); + for (int i = 0; i < 20; i++) { + producerService.produceMessage(generateString()); + } + return "rabbitmq"; + } + + private static String generateString() { + String uuid = UUID.randomUUID().toString(); + return "uuid = " + uuid; + } + + + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/Role.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/Role.java new file mode 100644 index 0000000..af821ad --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/Role.java @@ -0,0 +1,54 @@ +package com.visualpathit.account.model; + +import javax.persistence.*; +import java.util.Set; +/**{@author imrant} !*/ +@Entity +@Table(name = "role") +public class Role { + /** the id field !*/ + private Long id; + /** the name field !*/ + private String name; + /** the user field !*/ + private Set users; + /** {@inheritDoc}} !*/ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + /** + * {@link Role#id} + !*/ + public Long getId() { + return id; + } + /** {@inheritDoc}} !*/ + public void setId(final Long id) { + this.id = id; + } + /** + * {@link Role#name} + !*/ + public String getName() { + return name; + } + /** {@inheritDoc}} !*/ + public void setName(final String name) { + this.name = name; + } + /** + * {@inheritDoc}} + !*/ + @ManyToMany(fetch = FetchType.EAGER, mappedBy = "roles",cascade = CascadeType.ALL) + /** + * {@link Role#id} + !*/ + public Set getUsers() { + return users; + } + /** + * {@inheritDoc}} + !*/ + public final void setUsers(Set users) { + this.users = users; + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/User.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/User.java new file mode 100644 index 0000000..23050ce --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/model/User.java @@ -0,0 +1,215 @@ +package com.visualpathit.account.model; + + +import javax.persistence.*; + +import java.io.Serializable; +import java.util.Set; +/**{@author imrant} !*/ +@Entity +@Table(name = "user") +public class User implements Serializable { + /** the id field !*/ + private Long id; + /** the user name field !*/ + private String username; + /** the password field !*/ + private String password; + /** the userEmail field !*/ + private String userEmail; + /** the passwordConfirm field !*/ + private String passwordConfirm; + /** the profileImg field !*/ + private String profileImg; + /** the profileImgPath field !*/ + private String profileImgPath; + private String dateOfBirth; + private String fatherName; + private String motherName; + private String gender; + private String maritalStatus; + private String permanentAddress; + private String tempAddress; + private String primaryOccupation; + private String secondaryOccupation; + private String skills; + private String phoneNumber; + private String secondaryPhoneNumber; + private String nationality; + private String language; + private String workingExperience; + + + /** the roles field !*/ + private Set roles; + /** {@inheritDoc}} !*/ + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + /** {@link User#id} */ + public Long getId() { + return id; + } + /** {@inheritDoc}} !*/ + public void setId(final Long id) { + this.id = id; + } + /**{@inheritDoc}} !*/ + public String getUsername() { + return username; + } + /** {@inheritDoc}} !*/ + public void setUsername(final String username) { + this.username = username; + } + /** + * {@link User#password} + * @return The {@link String} instance representing password + !*/ + public String getPassword() { + return password; + } + /** + * {@inheritDoc}} + !*/ + public void setPassword(final String password) { + this.password = password; + } + /** + * {@link User#userEmail} + * @return The {@link String} instance representing userEmail. + !*/ + public String getUserEmail() { + return userEmail; + } + /** {@inheritDoc}} !*/ + public void setUserEmail(final String userEmail) { + this.userEmail = userEmail; + } + + /** {@inheritDoc}} !*/ + @Transient + /** + * {@link User#passwordConfirm} + !*/ + public String getPasswordConfirm() { + return passwordConfirm; + } + /** {@inheritDoc}} !*/ + public void setPasswordConfirm(final String passwordConfirm) { + this.passwordConfirm = passwordConfirm; + } + /** {@inheritDoc}} !*/ + @ManyToMany + @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) + public Set getRoles() { + return roles; + } + /** {@inheritDoc}} !*/ + public void setRoles(final Set roles) { + this.roles = roles; + } + public String getProfileImg() { + return profileImg; + } + public void setProfileImg(String profileImg) { + this.profileImg = profileImg; + } + public String getProfileImgPath() { + return profileImgPath; + } + public void setProfileImgPath(String profileImgPath) { + this.profileImgPath = profileImgPath; + } + public String getDateOfBirth() { + return dateOfBirth; + } + public void setDateOfBirth(String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + public String getFatherName() { + return fatherName; + } + public void setFatherName(String fatherName) { + this.fatherName = fatherName; + } + public String getMotherName() { + return motherName; + } + public void setMotherName(String motherName) { + this.motherName = motherName; + } + public String getGender() { + return gender; + } + public void setGender(String gender) { + this.gender = gender; + } + public String getMaritalStatus() { + return maritalStatus; + } + public void setMaritalStatus(String maritalStatus) { + this.maritalStatus = maritalStatus; + } + public String getPermanentAddress() { + return permanentAddress; + } + public void setPermanentAddress(String permanentAddress) { + this.permanentAddress = permanentAddress; + } + public String getTempAddress() { + return tempAddress; + } + public void setTempAddress(String tempAddress) { + this.tempAddress = tempAddress; + } + public String getPrimaryOccupation() { + return primaryOccupation; + } + public void setPrimaryOccupation(String primaryOccupation) { + this.primaryOccupation = primaryOccupation; + } + public String getSecondaryOccupation() { + return secondaryOccupation; + } + public void setSecondaryOccupation(String secondaryOccupation) { + this.secondaryOccupation = secondaryOccupation; + } + public String getSkills() { + return skills; + } + public void setSkills(String skills) { + this.skills = skills; + } + public String getPhoneNumber() { + return phoneNumber; + } + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + public String getSecondaryPhoneNumber() { + return secondaryPhoneNumber; + } + public void setSecondaryPhoneNumber(String secondaryPhoneNumber) { + this.secondaryPhoneNumber = secondaryPhoneNumber; + } + public String getNationality() { + return nationality; + } + public void setNationality(String nationality) { + this.nationality = nationality; + } + public String getLanguage() { + return language; + } + public void setLanguage(String language) { + this.language = language; + } + public String getWorkingExperience() { + return workingExperience; + } + public void setWorkingExperience(String workingExperience) { + this.workingExperience = workingExperience; + } + + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/RoleRepository.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/RoleRepository.java new file mode 100644 index 0000000..c091709 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/RoleRepository.java @@ -0,0 +1,8 @@ +package com.visualpathit.account.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.visualpathit.account.model.Role; + +public interface RoleRepository extends JpaRepository{ +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/UserRepository.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/UserRepository.java new file mode 100644 index 0000000..149b656 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/repository/UserRepository.java @@ -0,0 +1,14 @@ +package com.visualpathit.account.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.visualpathit.account.model.User; + +public interface UserRepository extends JpaRepository { + User findByUsername(String username); + User findById(long id); + /*public void updateUser(User user)*/; + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerService.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerService.java new file mode 100644 index 0000000..a638bf0 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerService.java @@ -0,0 +1,6 @@ +package com.visualpathit.account.service; + +public interface ConsumerService { + + void consumerMessage(byte[] data); +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerServiceImpl.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerServiceImpl.java new file mode 100644 index 0000000..ecbd1b6 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ConsumerServiceImpl.java @@ -0,0 +1,29 @@ +package com.visualpathit.account.service; + +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Service; + +@Service +public class ConsumerServiceImpl implements ConsumerService { + + /** + The name of the exchange. + */ + private static final String EXCHANGE_NAME = "messages"; + + /** + * The function that consumes messages from the broker(RabbitMQ) + * @param data + */ + @Override + @RabbitListener(bindings = @QueueBinding( value = @Queue(), + exchange = @Exchange(value = EXCHANGE_NAME, type = ExchangeTypes.FANOUT))) + public void consumerMessage(byte[] data) { + String consumedMessage = new String(data); + System.out.println(" [x] Consumed '" + consumedMessage + "'"); + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerService.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerService.java new file mode 100644 index 0000000..ac89af2 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerService.java @@ -0,0 +1,6 @@ +package com.visualpathit.account.service; + +public interface ProducerService { + + public String produceMessage(String message); +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerServiceImpl.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerServiceImpl.java new file mode 100644 index 0000000..46970e6 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/ProducerServiceImpl.java @@ -0,0 +1,56 @@ +package com.visualpathit.account.service; + +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.visualpathit.account.utils.RabbitMqUtil; + +import org.springframework.stereotype.Service; +import com.rabbitmq.client.Channel; + +import java.io.IOException; +import java.util.concurrent.TimeoutException; + +@Service +public class ProducerServiceImpl implements ProducerService { + + /** + * The name of the Exchange + */ + private static final String EXCHANGE_NAME = "messages"; + + /** + * This method publishes a message + * @param message + */ + @Override + public String produceMessage(String message) { + try { + ConnectionFactory factory = new ConnectionFactory(); + /** + * System.out.println("Rabitmq host: ::" + RabbitMqUtil.getRabbitMqHost()); + * System.out.println("Rabitmq port: ::" + RabbitMqUtil.getRabbitMqPort()); + * System.out.println("Rabitmq user: ::" + RabbitMqUtil.getRabbitMqUser()); + * System.out.println("Rabitmq password: ::" + RabbitMqUtil.getRabbitMqPassword()); + **/ + factory.setHost(RabbitMqUtil.getRabbitMqHost()); + factory.setPort(Integer.parseInt(RabbitMqUtil.getRabbitMqPort())); + factory.setUsername(RabbitMqUtil.getRabbitMqUser()); + factory.setPassword(RabbitMqUtil.getRabbitMqPassword()); + Connection connection = factory.newConnection(); + System.out.println("Connection open status"+connection.isOpen()); + Channel channel = connection.createChannel(); + channel.exchangeDeclare(EXCHANGE_NAME, "fanout"); + channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes()); + System.out.println(" [x] Sent '" + message + "'"); + channel.close(); + connection.close(); + } catch (IOException io) { + System.out.println("IOException"); + io.printStackTrace(); + } catch (TimeoutException toe) { + System.out.println("TimeoutException : " + toe.getMessage()); + toe.printStackTrace(); + } + return "response"; + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityService.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityService.java new file mode 100644 index 0000000..dbd4d9b --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityService.java @@ -0,0 +1,9 @@ +package com.visualpathit.account.service; + +/** method for finding already added user !*/ +public interface SecurityService { + /** {@inheritDoc}} !*/ + String findLoggedInUsername(); + + void autologin(String username, String password); +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityServiceImpl.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityServiceImpl.java new file mode 100644 index 0000000..14fee64 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/SecurityServiceImpl.java @@ -0,0 +1,52 @@ +package com.visualpathit.account.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication + .UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Service; +/** {@author imrant} !*/ +@Service +public class SecurityServiceImpl implements SecurityService { + /** authenticationManager !*/ + @Autowired + private AuthenticationManager authenticationManager; + /** userDetailsService !*/ + @Autowired + private UserDetailsService userDetailsService; + + /** Logger creation !*/ + private static final Logger logger = LoggerFactory + .getLogger(SecurityServiceImpl.class); + + @Override + public String findLoggedInUsername() { + Object userDetails = SecurityContextHolder.getContext() + .getAuthentication().getDetails(); + if (userDetails instanceof UserDetails) { + return ((UserDetails) userDetails).getUsername(); + } + + return null; + } + + @Override + public void autologin(final String username, final String password) { + UserDetails userDetails = userDetailsService.loadUserByUsername(username); + UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = + new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities()); + + authenticationManager.authenticate(usernamePasswordAuthenticationToken); + + if (usernamePasswordAuthenticationToken.isAuthenticated()) { + SecurityContextHolder.getContext() + .setAuthentication(usernamePasswordAuthenticationToken); + logger.debug(String.format("Auto login %s successfully!", username)); + } + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserDetailsServiceImpl.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000..04c68ae --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserDetailsServiceImpl.java @@ -0,0 +1,37 @@ +package com.visualpathit.account.service; + +import com.visualpathit.account.model.Role; +import com.visualpathit.account.model.User; +import com.visualpathit.account.repository.UserRepository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashSet; +import java.util.Set; +/** {@author imrant} !*/ +public class UserDetailsServiceImpl implements UserDetailsService { + @Autowired + /** userRepository !*/ + private UserRepository userRepository; + + @Override + @Transactional(readOnly = true) + public UserDetails loadUserByUsername(final String username) + throws UsernameNotFoundException { + User user = userRepository.findByUsername(username); + + Set grantedAuthorities = new HashSet<>(); + for (Role role : user.getRoles()) { + grantedAuthorities.add(new SimpleGrantedAuthority(role.getName())); + } + + return new org.springframework.security.core + .userdetails.User(user.getUsername(), user.getPassword(), grantedAuthorities); + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserService.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserService.java new file mode 100644 index 0000000..c85351e --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserService.java @@ -0,0 +1,16 @@ +package com.visualpathit.account.service; + +import java.util.List; + +import com.visualpathit.account.model.User; + +/** {@author imrant}!*/ +public interface UserService { + /** {@inheritDoc}} !*/ + void save(User user); + /** {@inheritDoc}} !*/ + User findByUsername(String username); + User findById(long id); + /*public void updateUser(User user);*/ + public List getList(); +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserServiceImpl.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserServiceImpl.java new file mode 100644 index 0000000..2426b85 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/service/UserServiceImpl.java @@ -0,0 +1,47 @@ +package com.visualpathit.account.service; + +import com.visualpathit.account.model.User; +import com.visualpathit.account.repository.RoleRepository; +import com.visualpathit.account.repository.UserRepository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.List; + +/** {@author imrant}!*/ +@Service +public class UserServiceImpl implements UserService { + @Autowired + /** userRepository !*/ + private UserRepository userRepository; + @Autowired + /** roleRepository !*/ + private RoleRepository roleRepository; + @Autowired + /** bCryptPasswordEncoder !*/ + private BCryptPasswordEncoder bCryptPasswordEncoder; + + @Override + public void save(final User user) { + user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); + user.setRoles(new HashSet<>(roleRepository.findAll())); + userRepository.save(user); + } + + @Override + public User findByUsername(final String username) { + return userRepository.findByUsername(username); + } + + @Override + public List getList() { + return userRepository.findAll(); + } + @Override + public User findById(long id){ + return userRepository.findOne(id); + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/ElasticsearchUtil.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/ElasticsearchUtil.java new file mode 100644 index 0000000..838fa53 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/ElasticsearchUtil.java @@ -0,0 +1,48 @@ +package com.visualpathit.account.utils; + +import java.net.InetSocketAddress; + +import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.transport.InetSocketTransportAddress; +import org.elasticsearch.transport.client.PreBuiltTransportClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.visualpathit.account.beans.Components; +@Service +public class ElasticsearchUtil { + + private static Components object; + @Autowired + public void setComponents(Components object){ + ElasticsearchUtil.object = object; + + } + public static TransportClient trannsportClient() { + System.out.println(" elasticsearch client"); + String elasticsearchHost =object.getElasticsearchHost(); + String elasticsearchPort =object.getElasticsearchPort(); + String elasticsearchCluster =object.getElasticsearchCluster(); + String elasticsearchNode =object.getElasticsearchNode(); + System.out.println(" elasticsearchHost ........"+ elasticsearchHost); + System.out.println(" elasticsearchHost ........"+ elasticsearchPort); + TransportClient client = null; + try { + Settings settings = Settings.builder() + .put("cluster.name",elasticsearchCluster) + .put("node.name",elasticsearchNode) + .build(); + client = new PreBuiltTransportClient(settings) + .addTransportAddress( + new InetSocketTransportAddress( + new InetSocketAddress(elasticsearchHost, Integer.parseInt(elasticsearchPort)))); + + + } + catch (Exception e) { + e.printStackTrace(); + } + return client; + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/MemcachedUtils.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/MemcachedUtils.java new file mode 100644 index 0000000..98e5391 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/MemcachedUtils.java @@ -0,0 +1,134 @@ +package com.visualpathit.account.utils; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.concurrent.Future; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.visualpathit.account.beans.Components; +import com.visualpathit.account.model.User; + +import net.spy.memcached.MemcachedClient; +@Service +public class MemcachedUtils { + + private static Components object; + @Autowired + public void setComponents(Components object){ + MemcachedUtils.object = object; + } + public static String memcachedSetData(User user,String key){ + String Result = ""; + int expireTime = 900; + try{ + MemcachedClient mactiveClient = memcachedConnection(); + System.out.println("--------------------------------------------"); + System.out.println("Client is ::"+ mactiveClient.getStats()); + System.out.println("--------------------------------------------"); + Future future = mactiveClient.set(key,expireTime, user); + System.out.println("set status:" + future.get()); + Result =" Data is From DB and Data Inserted In Cache !!"; + mactiveClient.shutdown(); + + + } catch (Exception e) { + System.out.println( e.getMessage() ); + } + return Result; + } + public static User memcachedGetData(String key){ + String Result = ""; + User userData = null; + try{ + MemcachedClient mclient = memcachedConnection(); + System.out.println("--------------------------------------------"); + System.out.println("Client Status :: "+mclient.getStats()); + System.out.println("--------------------------------------------"); + userData = (User) mclient.get(key); + System.out.println("user value in cache - " + mclient.get(key)); + Result =" Data Retrieval From Cache !!"; + System.out.println(Result); + mclient.shutdown(); + + } catch (Exception e) { + System.out.println( e.getMessage() ); + } + return userData; + } + public static MemcachedClient memcachedConnection(){ + MemcachedClient mcconn = null; + boolean active = true; + String key="pid"; + String port = ""; + String activeHost =object.getActiveHost(); + String activePort =object.getActivePort(); + try{ + if(!activeHost.isEmpty() && !activePort.isEmpty() && active){ + mcconn = new MemcachedClient(new InetSocketAddress(activeHost,Integer.parseInt(activePort))); + for(SocketAddress innerKey:mcconn.getStats().keySet()){ + System.out.println("Connection SocketAddress ::" + innerKey); + //System.out.println("Connection port ::" + mcconn.getStats().get(innerKey).get(key)); + port = mcconn.getStats().get(innerKey).get(key); + } + if(port == null){ + System.out.println("Port::"+ port); + mcconn.shutdown(); + System.out.println("--------------------------------------------"); + System.out.println("Connection Failure By Active Host ::" + activeHost); + System.out.println("--------------------------------------------"); + mcconn = null; + active =false; + return mcconn = standByMemcachedConn(); + } + if(!port.isEmpty()){ + System.out.println("--------------------------------------------"); + System.out.println("Connection to server sucessfull for active Host ::"+activeHost); + System.out.println("--------------------------------------------"); + active =true; + return mcconn; + } + }else if(!activeHost.isEmpty() && !activePort.isEmpty() && !active){ + return mcconn = standByMemcachedConn(); + }else { + System.out.println("--------------------------------------------"); + System.out.println("Connection to Failure Due to Incorrect or Empty Host:: "); + System.out.println("--------------------------------------------"); + } + } + catch (Exception e) { + System.out.println( e.getMessage() ); + } + return mcconn; + } + public static MemcachedClient standByMemcachedConn(){ + MemcachedClient mcconn = null; + String port = ""; + String key="pid"; + String standByHost = object.getStandByHost(); + String standByPort = object.getStandByPort(); + try{ + if(!standByHost.isEmpty() && !standByPort.isEmpty() && mcconn == null && port.isEmpty()){ + mcconn = new MemcachedClient(new InetSocketAddress(standByHost,Integer.parseInt(standByPort))); + for(SocketAddress innerKey:mcconn.getStats().keySet()){ + port = mcconn.getStats().get(innerKey).get(key); + } + if(!port.isEmpty()){ + System.out.println("--------------------------------------------"); + System.out.println("Connection to server sucessful by StandBy Host::" + standByHost); + System.out.println("--------------------------------------------"); + return mcconn; + }else { + mcconn.shutdown(); + System.out.println("--------------------------------------------"); + System.out.println("Connection Failure By StandBy Host ::" +standByHost); + System.out.println("--------------------------------------------"); + } + } + }catch (Exception e) { + System.out.println( e.getMessage() ); + } + return mcconn; + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/RabbitMqUtil.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/RabbitMqUtil.java new file mode 100644 index 0000000..cbef391 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/utils/RabbitMqUtil.java @@ -0,0 +1,30 @@ +package com.visualpathit.account.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.visualpathit.account.beans.Components; + +@Service +public class RabbitMqUtil { + private static Components object; + + public RabbitMqUtil() {} + + @Autowired + public void setComponents(Components object) { + RabbitMqUtil.object = object; + } + + public static String getRabbitMqHost() { return object.getRabbitMqHost(); } + + public static String getRabbitMqPort() { + return object.getRabbitMqPort(); + } + + public static String getRabbitMqUser() { return object.getRabbitMqUser(); } + + public static String getRabbitMqPassword() { + return object.getRabbitMqPassword(); + } +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/validator/UserValidator.java b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/validator/UserValidator.java new file mode 100644 index 0000000..a6185b3 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/java/com/visualpathit/account/validator/UserValidator.java @@ -0,0 +1,43 @@ +package com.visualpathit.account.validator; + +import com.visualpathit.account.model.User; +import com.visualpathit.account.service.UserService; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; +import org.springframework.validation.Validator; + +@Component +public class UserValidator implements Validator { + @Autowired + private UserService userService; + + @Override + public boolean supports(Class aClass) { + return User.class.equals(aClass); + } + + @Override + public void validate(Object o, Errors errors) { + User user = (User) o; + + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "NotEmpty"); + if (user.getUsername().length() < 6 || user.getUsername().length() > 32) { + errors.rejectValue("username", "Size.userForm.username"); + } + if (userService.findByUsername(user.getUsername()) != null) { + errors.rejectValue("username", "Duplicate.userForm.username"); + } + + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "NotEmpty"); + if (user.getPassword().length() < 8 || user.getPassword().length() > 32) { + errors.rejectValue("password", "Size.userForm.password"); + } + + if (!user.getPasswordConfirm().equals(user.getPassword())) { + errors.rejectValue("passwordConfirm", "Diff.userForm.passwordConfirm"); + } + } +} diff --git a/hprofile-project-github-actions/hprofile-main/src/main/resources/accountsdb.sql b/hprofile-project-github-actions/hprofile-main/src/main/resources/accountsdb.sql new file mode 100644 index 0000000..d224d81 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/resources/accountsdb.sql @@ -0,0 +1,104 @@ +-- MySQL dump 10.13 Distrib 5.7.18, for Linux (x86_64) +-- +-- Host: localhost Database: accounts +-- ------------------------------------------------------ +-- Server version 5.7.18-0ubuntu0.16.10.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!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' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ROLE_USER'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(255) DEFAULT NULL, + `userEmail` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +INSERT INTO `user` VALUES (4,'admin_vp','admin@visualpathit.com','$2a$11$DSEIKJNrgPjG.iCYUwErvOkREtC67mqzQ.ogkZbc/KOW1OPOpZfY6'); +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_role` +-- + +DROP TABLE IF EXISTS `user_role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_role` ( + `user_id` int(11) NOT NULL, + `role_id` int(11) NOT NULL, + PRIMARY KEY (`user_id`,`role_id`), + KEY `fk_user_role_roleid_idx` (`role_id`), + CONSTRAINT `fk_user_role_roleid` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_user_role_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_role` +-- + +LOCK TABLES `user_role` WRITE; +/*!40000 ALTER TABLE `user_role` DISABLE KEYS */; +INSERT INTO `user_role` VALUES (4,1); +/*!40000 ALTER TABLE `user_role` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2017-08-28 10:50:51 diff --git a/hprofile-project-github-actions/hprofile-main/src/main/resources/application.properties b/hprofile-project-github-actions/hprofile-main/src/main/resources/application.properties new file mode 100644 index 0000000..c04343d --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/resources/application.properties @@ -0,0 +1,25 @@ +#JDBC Configutation for Database Connection +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.url=jdbc:mysql://db01:3306/accounts?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull +jdbc.username=admin +jdbc.password=admin123 + +#Memcached Configuration For Active and StandBy Host +#For Active Host +memcached.active.host=mc01 +memcached.active.port=11211 +#For StandBy Host +memcached.standBy.host=127.0.0.2 +memcached.standBy.port=11211 + +#RabbitMq Configuration +rabbitmq.address=rmq01 +rabbitmq.port=5672 +rabbitmq.username=test +rabbitmq.password=test + +#Elasticesearch Configuration +elasticsearch.host =192.168.1.85 +elasticsearch.port =9300 +elasticsearch.cluster=vprofile +elasticsearch.node=vprofilenode diff --git a/hprofile-project-github-actions/hprofile-main/src/main/resources/db_backup.sql b/hprofile-project-github-actions/hprofile-main/src/main/resources/db_backup.sql new file mode 100644 index 0000000..2f17a4d --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/resources/db_backup.sql @@ -0,0 +1,133 @@ +-- MySQL dump 10.13 Distrib 5.7.18, for Linux (x86_64) +-- +-- Host: localhost Database: accounts +-- ------------------------------------------------------ +-- Server version 5.7.18-0ubuntu0.16.10.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!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' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,'ROLE_USER'); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(255) DEFAULT NULL, + `userEmail` varchar(255) DEFAULT NULL, + `profileImg` varchar(255) DEFAULT NULL, + `profileImgPath` varchar(255) DEFAULT NULL, + `dateOfBirth` varchar(255) DEFAULT NULL, + `fatherName` varchar(255) DEFAULT NULL, + `motherName` varchar(255) DEFAULT NULL, + `gender` varchar(255) DEFAULT NULL, + `maritalStatus` varchar(255) DEFAULT NULL, + `permanentAddress` varchar(255) DEFAULT NULL, + `tempAddress` varchar(255) DEFAULT NULL, + `primaryOccupation` varchar(255) DEFAULT NULL, + `secondaryOccupation` varchar(255) DEFAULT NULL, + `skills` varchar(255) DEFAULT NULL, + `phoneNumber` varchar(255) DEFAULT NULL, + `secondaryPhoneNumber` varchar(255) DEFAULT NULL, + `nationality` varchar(255) DEFAULT NULL, + `language` varchar(255) DEFAULT NULL, + `workingExperience` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; + +INSERT INTO `user` VALUES (7,'admin_vp','admin@hkhinfo.com',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$11$0a7VdTr4rfCQqtsvpng6GuJnzUmQ7gZiHXgzGPgm5hkRa3avXgBLK') +,(8,'Abrar Nirban','abrar.nirban74@gmail.com',NULL,NULL,'27/01/2002','A nirban','T nirban','male','unMarried','Dubai,UAE','Dubai,UAE','Software Engineer','Software Engineer','Java HTML CSS ','8888888888','8888888888','Indian','english','2 ','$2a$11$UgG9TkHcgl02LxlqxRHYhOf7Xv4CxFmFEgS0FpUdk42OeslI.6JAW'), +(9,'Amayra Fatima','amayra@gmail.com',NULL,NULL,'20/06/1993','K','L','female','unMarried','Dubai,UAE','Dubai,UAE','Software Engineer','Software Engineer','Java HTML CSS ','9999999999','9999999999','India','english','5','$2a$11$gwvsvUrFU.YirMM1Yb7NweFudLUM91AzH5BDFnhkNzfzpjG.FplYO'), +(10,'Aron','aron.DSilva@gmail.com',NULL,NULL,'27/01/2002','M nirban','R nirban','male','unMarried','Dubai,UAE','Dubai,UAE','Software Engineer','Software Engineer','Java HTML CSS ','7777777777','777777777','India','english','7','$2a$11$6oZEgfGGQAH23EaXLVZ2WOSKxcEJFnBSw2N2aghab0s2kcxSQwjhC'), +(11,'Kiran Kumar','kiran@gmail.com',NULL,NULL,'8/12/1993','K K','RK','male','unMarried','SanFrancisco','James Street','Software Engineer','Software Engineer','Java HTML CSS ','1010101010','1010101010','India','english','10','$2a$11$EXwpna1MlFFlKW5ut1iVi.AoeIulkPPmcOHFO8pOoQt1IYU9COU0m'), +(12,'Balbir Singh','balbir@gmail.com',NULL,NULL,'20/06/1993','balbir RK','balbir AK','male','unMarried','SanFrancisco','US','Software Engineer','Software Engineer','Java HTML CSS AWS','8888888111','8888888111','India','english','8','$2a$11$pzWNzzR.HUkHzz2zhAgqOeCl0WaTgY33NxxJ7n0l.rnEqjB9JO7vy'), +(4,'Hibo Prince','hibo.prince@gmail.com',NULL,NULL,'6/09/2000','Abara','Queen','male','unMarried','Electronic City,UAE','Electronic City,UAE','Tester','Freelancing','Python PHP ','9146389863','9146389871','Indian','hindi','3 ','$2a$11$UgG9TkHcgl02LxlqxRHYhOf7Xv4CxFmFEgS0FpUdk42OeslI.6JAR'), +(5,'Aejaaz Habeeb','aejaaz.habeeb@gmail.com',NULL,NULL,'16/02/2001','Imran','Ziya','male','unMarried','AbuDhabi,UAE','AbuDhabi,UAE','Developer','Developer','Azure Devops ','9566489863','9566489863','Indian','hindi','4 ','$2a$11$UgG9TkHcgl02LxlqxRHYhOf7Xv4CxFmFEgS0FpUdk42OeslI.6JAR'), +(6,'Jackie','jackie.chan@gmail.com',NULL,NULL,'28/09/1992','Charles','Chan','male','Married','HongKong,China','HongKong,China','MartialArtist','MartialArtist','KungFu ','9246488863','9246488863','Chinese','Mandrian','1 ','$2a$11$UgG9TkHcgl02LxlqxRHYhOf7Xv4CxFmFEgS0FpUdk42OeslI.6RAR'), +(13,'Srinath Goud','sgoud@gmail.com',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$11$6BSmYPrT8I8b9yHmx.uTRu/QxnQM2vhZYQa8mR33aReWA4WFihyGK'); + + +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_role` +-- + +DROP TABLE IF EXISTS `user_role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `user_role` ( + `user_id` int(11) NOT NULL, + `role_id` int(11) NOT NULL, + PRIMARY KEY (`user_id`,`role_id`), + KEY `fk_user_role_roleid_idx` (`role_id`), + CONSTRAINT `fk_user_role_roleid` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `fk_user_role_userid` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_role` +-- + +LOCK TABLES `user_role` WRITE; +/*!40000 ALTER TABLE `user_role` DISABLE KEYS */; +INSERT INTO `user_role` VALUES (4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1),(11,1),(12,1),(13,1); +/*!40000 ALTER TABLE `user_role` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2023-21-06 05:49:31 diff --git a/hprofile-project-github-actions/hprofile-main/src/main/resources/logback.xml b/hprofile-project-github-actions/hprofile-main/src/main/resources/logback.xml new file mode 100644 index 0000000..35b81df --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/resources/logback.xml @@ -0,0 +1,24 @@ + + + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %logger{15}#%line %msg\n + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/resources/validation.properties b/hprofile-project-github-actions/hprofile-main/src/main/resources/validation.properties new file mode 100644 index 0000000..0453cdd --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/resources/validation.properties @@ -0,0 +1,5 @@ +NotEmpty=This field is required. +Size.userForm.username=Please use between 6 and 32 characters. +Duplicate.userForm.username= User has already taken this Username. +Size.userForm.password=Try one with at least 8 characters. +Diff.userForm.passwordConfirm=These passwords don't match. \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-data.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-data.xml new file mode 100644 index 0000000..7be0032 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-data.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + org.hibernate.dialect.MySQL5Dialect + true + + + + + + + + + + + + + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-mvc.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-mvc.xml new file mode 100644 index 0000000..58f404d --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-mvc.xml @@ -0,0 +1,32 @@ + + + + + + + + + + classpath:validation + + + + + + /WEB-INF/views/ + + + .jsp + + + + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-rabbitmq.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-rabbitmq.xml new file mode 100644 index 0000000..989faec --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-rabbitmq.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-root.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-root.xml new file mode 100644 index 0000000..064cc5e --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-root.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-security.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-security.xml new file mode 100644 index 0000000..5e2acf1 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/appconfig-security.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/elasticeSearchRes.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/elasticeSearchRes.jsp new file mode 100644 index 0000000..7a31616 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/elasticeSearchRes.jsp @@ -0,0 +1,19 @@ + +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + +vp-elasticsearch + + +

Data is ${result} into Elasticsearch

+

Please go to elastic search dash board and verify link ip:9200/users/user/id

+ + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/index_home.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/index_home.jsp new file mode 100644 index 0000000..4579f61 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/index_home.jsp @@ -0,0 +1,156 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + +
+
+ +
+
+ +
+ Architecture +
+

DevOps

+
+
+
+

+

Keep Learning ..

+

Learning is a Treasure that will follow it's Owner Everywhere..

+
+ +
+ + +
+

TECHNOLOGIES

+
+ +
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+ +
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+
+ DevOps +
+
+
+ + +
+

ABOUT

+
+

VisualPath is an IT Educational Institute.Established in 2001,and Institute offers world class quality of education and wide range of courses.VisualPath Institute has a dedicated placement team to help students get job placement in various IT job roles with major companies. +

+

Address: Flat no: 205, 2nd Floor,NILGIRI Block,Aditya Encalve,Ameerpet, Hyderabad-16

+

Ph No: +91-9704455959,9618245689

+

E-Mail ID : visualpath999@gmail.com

+
+
+ + +
+

CONTACT

+

Lets get in touch and talk about your and our next project.

+
+ + + + + +
+
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/login.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 0000000..0a41ac1 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,95 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + LOGIN + + + + + + + + Welcome + + + + + + + + +
+
+ +
+
+
+ + + +
+ + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/rabbitmq.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/rabbitmq.jsp new file mode 100644 index 0000000..2220694 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/rabbitmq.jsp @@ -0,0 +1,14 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +Rabbitmq + + +

Rabbitmq initiated

+

Generated 2 Connections

+

6 Chanels 1 Exchage and 2 Que

+ + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/registration.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/registration.jsp new file mode 100644 index 0000000..be726cc --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/registration.jsp @@ -0,0 +1,112 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + SIGNUP + + + + + + + + + + + + +
+
+ +
+
+ +
+ + + +
+ + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/upload.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/upload.jsp new file mode 100644 index 0000000..3e52f83 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/upload.jsp @@ -0,0 +1,56 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page session="false" %> + + + +Upload File Request Page + + + + + + +
+
+

Upload Image

+
+ ${pageContext.request.userPrincipal.name}
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/user.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/user.jsp new file mode 100644 index 0000000..480bf6e --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/user.jsp @@ -0,0 +1,163 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + +UserData + + + + + + + + + + + +
+
+ +
+
+ + +
+
+

${{Result}} Back

+

User Primary Details

+ + + + + + + + + + + + + + + + + +
IdNameFather's NameMother's NameEmailPhone Number
+ + + + + + + + + + + +
+

User Extra Details

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Date Of BirthGenderMarital StatusPermanent AddressTemporary AddressPrimary OccupationSecondary OccupationSkillsSecondary PhoneNumberNationalityLanguageWorking Experience
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userList.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userList.jsp new file mode 100644 index 0000000..1973e91 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userList.jsp @@ -0,0 +1,93 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + allUser + + + + + + + + + + + + +
+
+ +
+
+ +
+
+

Users List

+ + + + + + + + + + + + +
User NameUser Id
+ + + +
+
+
+ + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userUpdate.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userUpdate.jsp new file mode 100644 index 0000000..7ae3816 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/userUpdate.jsp @@ -0,0 +1,314 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + + + + + + + + + + + update user + + + + + + + + + +
+
+
+ +
+ +
+ + Name : +
+
+
+ +
+ +
+
+
+
+
+ + Email : +
+
+
+ +
+ +
+
+
+
+
+ + Date Of Birth : +
+
+
+ +
+ +
+
+
+
+
+ + Father's Name : +
+
+
+ +
+ +
+
+
+
+
+ + Mother's Name : +
+
+
+ +
+ +
+
+
+
+
+ + Gender +
+ + + Male + + + + Female + + + + Other + +
+
+
+
+ + Marital Status: +
+ + + Married + + + + Unmarried + +
+
+
+ +
+ + Permanent Address : +
+
+
+ +
+ +
+
+
+
+
+ + Temporary Address : +
+
+
+ +
+ +
+
+
+
+
+ + Primary Occupation : +
+
+
+ +
+ +
+
+
+
+
+ + Secondary Occupation : +
+
+
+ +
+ +
+
+
+
+
+ + Skills : +
+
+
+ +
+ +
+
+
+
+
+ + Phone Number : +
+
+
+ +
+ +
+
+
+
+
+ + Secondary PhoneNumber : +
+
+
+ +
+ +
+
+
+
+
+ + Nationality : +
+
+
+ +
+ +
+
+
+
+
+ + Mother Tongue +
+ + + English + + + + Spanish + + + + German + + + + Hindi + + + + Other + +
+
+
+
+ + Work Experience : +
+
+
+ +
+ +
+
+
+
+
+ +
+ + Cancel +
+
+
+
+
+
+
+ + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/welcome.jsp b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/welcome.jsp new file mode 100644 index 0000000..1d5d193 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/views/welcome.jsp @@ -0,0 +1,486 @@ +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + Welcome + + + + + + + +
+
+ +
.
+ +
+
+
+ +

${pageContext.request.userPrincipal.name}   ${pageContext.request.userPrincipal.name}@visualpath.co.in

+ +
+

+ #DevOps #Continuous Integration #Continuous Delivery #Automation + + All Users + + + RabbitMq + + + Elasticsearch + +


+ + Posts + Photos 42 + Contacts 42 + + + + + + +
+
+
+ +
+
+
+ + + +
+

${pageContext.request.userPrincipal.name} 42 minutes ago

+ + + +
+
+

"The Key to DevOps Success."

+

The Key to DevOps Success" Collaboration". Collaboration is essential to DevOps,yet how to do it is often unclear with many teams falling back on ineffective conference calls, instant messaging, documents, and SharePoint sites. In this keynote,we will share a vision for a next generation DevOps where collaboration, continuous documentation, and knowledge capture are combined with automation toolchains to enable rapid innovation and deployment.

+
+
+
+ +
+

Public

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

${pageContext.request.userPrincipal.name} 42 minutes ago

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

Abrar nirban about 10 hours ago

+
+
+

What are DevOps skills?

+

Our respondents identified the top three skill areas for DevOps staff:

+

1) Coding or scripting 2)Process re-engineering 3)Communicating and collaborating with others Extensive knowledge of software build cycles 4)Experience deploying code 5)Experience in software architecture 6)Familiarity with application programming 7)Database management 8)System design.

+

These skills all point to a growing recognition that software is not written in the old way anymore. Where software used to be written from scratch in a highly complex and lengthy process, creating new products is now often a matter of choosing open source components and stitching them together with code. The complexity of todays software lies less in the authoring, and more in ensuring that the new software will work across a diverse set of operating systems and platforms right away. Likewise, testing and deployment are now done much more frequently. That is, they can be more frequent,if developers communicate early and regularly with the operations team, and if ops people bring their knowledge of the production environment to design of testing and staging environments.

+

Demand for people with DevOps skills is growing rapidly because businesses get great results from DevOps. Organizations using DevOps practices are overwhelmingly high-functioning: They deploy code up to 30 times more frequently than their competitors.

+
+
+
+
+
+
+ +
+

Public

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

${pageContext.request.userPrincipal.name} 42 minutes ago

+ + + +
+
+

" Manager Reaction On Your Work without DevOps "

+ +


# I want DevOps # DevOps..

+
+
+
+ +
+

Public via mobile

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

${pageContext.request.userPrincipal.name} 42 minutes ago

+ + + +
+
+

"Feeling Happy to be a DevOps."

+
+
+
+ +
+

Limited

+
+
+
+
+
+ Show 12 more comments +
+
+
+
+
+ + + +
+

Kiran Kumar

+
+
+

DevOps has significant importance to any company delivering software or technical services today.Defining DevOps is trickier than you would think, primarily because of its wide usage. It is essentially shorthand, and nothing more than that, for a lean approach to software delivery.

+
12 minutes ago +
+
+
+
+
+
+
+
+
+ + + +
+

Mi Chleen

+
+
+

The secret to DevOps maturity is not technology or process, but people. It takes engaged leadership and all for one cooperation to achieve the kind of results that lead companies to superior IT performance. High-performing DevOps teams can recover 168 times faster from failures and have 60 times fewer failures due to changes, according to the 2015 State of DevOps Report by Puppet Labs. High-performing teams also release code at significantly increasing velocity as their teams grow in size, approaching three deploys per day per developer, for teams of around 1000 developers.

+
9 minutes ago +
+
+
+
+
+
+
+
+
+ + + +
+

${pageContext.request.userPrincipal.name}

+
+
+

At a time when the speed of application development is vital to commercial success, the DevOps methodology based on communication, collaboration, integration and automation has become one of the biggest IT moves around. However, it is more than just a business philosophy;to do it right requires genuine infrastructure investment and development.

+
2 minutes ago +
+
+
+
+
+
+
+ + + +
+
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+ + + + + + diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/web.xml b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..0f82cbd --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,32 @@ + + + Account Registration Web Application + + contextConfigLocation + /WEB-INF/appconfig-root.xml + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + dispatcher + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + + + 1 + + + dispatcher + / + + + org.springframework.web.context.ContextLoaderListener + + \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/background.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/background.png new file mode 100644 index 0000000..e2d5dd3 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/background.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/header.jpg b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/header.jpg new file mode 100644 index 0000000..702a1c3 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/header.jpg differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/hkh-infotech-logo.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/hkh-infotech-logo.png new file mode 100644 index 0000000..81e4ff1 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/hkh-infotech-logo.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/login-background.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/login-background.png new file mode 100644 index 0000000..284d84a Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/login-background.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Ansible_logo.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Ansible_logo.png new file mode 100644 index 0000000..c72d308 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Ansible_logo.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Vagrant.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Vagrant.png new file mode 100644 index 0000000..8636216 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/Vagrant.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/aws.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/aws.png new file mode 100644 index 0000000..205c991 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/aws.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/docker.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/docker.png new file mode 100644 index 0000000..580f2a1 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/docker.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/git.jpg b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/git.jpg new file mode 100644 index 0000000..037bb9a Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/git.jpg differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/jenkins.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/jenkins.png new file mode 100644 index 0000000..356ec31 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/jenkins.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/puppet.jpg b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/puppet.jpg new file mode 100644 index 0000000..e4d3fed Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/puppet.jpg differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/python-logo.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/python-logo.png new file mode 100644 index 0000000..738f6ed Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/technologies/python-logo.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user.png new file mode 100644 index 0000000..6a3c4e2 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/giphy.gif b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/giphy.gif new file mode 100644 index 0000000..8cf166f Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/giphy.gif differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/logo.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/logo.png new file mode 100644 index 0000000..c18fc6e Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/logo.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user.png new file mode 100644 index 0000000..6a3c4e2 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user2.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user2.png new file mode 100644 index 0000000..9c600c3 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user2.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user3.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user3.png new file mode 100644 index 0000000..079ecba Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/user/user3.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpath.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpath.png new file mode 100644 index 0000000..9c86edd Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpath.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo2.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo2.png new file mode 100644 index 0000000..4bd9e01 Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo2.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo3.png b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo3.png new file mode 100644 index 0000000..16ce5de Binary files /dev/null and b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/Images/visualpathlogo3.png differ diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/bootstrap.min.css b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/bootstrap.min.css new file mode 100644 index 0000000..5fd698e --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/bootstrap.min.css @@ -0,0 +1,7199 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -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: "\2a" +} + +.glyphicon-plus:before { + content: "\2b" +} + +.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: thin dotted; + 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: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555 +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #999 +} + +.form-control::-webkit-input-placeholder { + color: #999 +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1 +} + +.form-control[disabled], fieldset[disabled] .form-control { + cursor: not-allowed +} + +textarea.form-control { + height: auto +} + +input[type=search] { + -webkit-appearance: none +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type=date].form-control, input[type=time].form-control, input[type=datetime-local].form-control, input[type=month].form-control { + line-height: 34px + } + + .input-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: 14.33px; + 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: thin dotted; + 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, .btn-default.disabled.active, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled:focus, .btn-default.disabled:hover, .btn-default[disabled], .btn-default[disabled].active, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled]:focus, .btn-default[disabled]:hover, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default.active, fieldset[disabled] .btn-default.focus, fieldset[disabled] .btn-default:active, 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, .btn-primary.disabled.active, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled:focus, .btn-primary.disabled:hover, .btn-primary[disabled], .btn-primary[disabled].active, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled]:focus, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary.active, fieldset[disabled] .btn-primary.focus, fieldset[disabled] .btn-primary:active, 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, .btn-success.disabled.active, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled:focus, .btn-success.disabled:hover, .btn-success[disabled], .btn-success[disabled].active, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled]:focus, .btn-success[disabled]:hover, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success.active, fieldset[disabled] .btn-success.focus, fieldset[disabled] .btn-success:active, 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, .btn-info.disabled.active, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled:focus, .btn-info.disabled:hover, .btn-info[disabled], .btn-info[disabled].active, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled]:focus, .btn-info[disabled]:hover, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info.active, fieldset[disabled] .btn-info.focus, fieldset[disabled] .btn-info:active, 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, .btn-warning.disabled.active, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled:focus, .btn-warning.disabled:hover, .btn-warning[disabled], .btn-warning[disabled].active, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled]:focus, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning.active, fieldset[disabled] .btn-warning.focus, fieldset[disabled] .btn-warning:active, 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, .btn-danger.disabled.active, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled:focus, .btn-danger.disabled:hover, .btn-danger[disabled], .btn-danger[disabled].active, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled]:focus, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger.active, fieldset[disabled] .btn-danger.focus, fieldset[disabled] .btn-danger:active, 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-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate +} + +.btn-group-justified > .btn, .btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1% +} + +.btn-group-justified > .btn-group .btn { + width: 100% +} + +.btn-group-justified > .btn-group .dropdown-menu { + left: auto +} + +[data-toggle=buttons] > .btn input[type=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-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: 3; + 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: 2; + 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 { + 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 { + min-height: 16.43px; + padding: 15px; + border-bottom: 1px solid #e5e5e5 +} + +.modal-header .close { + margin-top: -2px +} + +.modal-title { + margin: 0; + line-height: 1.42857143 +} + +.modal-body { + position: relative; + padding: 15px +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5 +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0 +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5) + } + + .modal-sm { + width: 300px + } +} + +@media (min-width: 992px) { + .modal-lg { + width: 900px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-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); + 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: -15px; + font-size: 30px + } + + .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { + margin-left: -15px + } + + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { + margin-right: -15px + } + + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px + } + + .carousel-indicators { + bottom: 20px + } +} + +.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, .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, .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 + } +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/common.css b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/common.css new file mode 100644 index 0000000..e5e835f --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/common.css @@ -0,0 +1,75 @@ +body { + padding-top: 100px; + padding-bottom: 50px; + background-color: #ffffff; + +} +form { + border: 3px solid #204a87; +} + +img.logo { + display: block; + margin-left: auto; + margin-right: auto; + width: 300px; + height: 70px; + + } +.form-signin { + max-width: 330px; + padding: 15px; + margin: 0 auto; +} +.btn-custom,.btn-custom:hover, .btn-custom:focus, .btn-custom:active { + border-radius: 0; + color: #ffffff; + background-color: #ef2929; + border-color: #ef2929; + +} +.btn-custom-LOGIN { + border-radius: 0; + color: #ffffff; + height:3em; + background-color: #26C6DA; + border-color: #ef2929; + +} + +.form-signin .form-signin-heading, +.form-signin .checkbox { + margin-bottom: 10px; +} + +.form-signin .checkbox { + font-weight: normal; +} + +.form-signin .form-control { + position: relative; + height: auto; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + font-size: 16px; +} + +.form-signin .form-control:focus { + z-index: 2; +} + +.form-signin input { + margin-top: 10px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.form-signin button { + margin-top: 10px; +} + +.has-error { + color: red +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/profile.css b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/profile.css new file mode 100644 index 0000000..41e4a12 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/profile.css @@ -0,0 +1,244 @@ +.mainbody { + background:#f0f0f0; +} +/* Special class on .container surrounding .navbar, used for positioning it into place. */ +.navbar-wrapper { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 20; + margin-left: -15px; + margin-right: -15px; + //background-color:#1C3B47; +} +.navbar-custom { + background-color: #1C3B47; + border-color: #E7E7E7; + +} + +/* Flip around the padding for proper display in narrow viewports */ +.navbar-wrapper .container { + padding-left: 0; + padding-right: 0; +} +.navbar-wrapper .navbar { + padding-left: 15px; + padding-right: 15px; +} + +.navbar-content +{ + width:320px; + padding: 15px; + padding-bottom:0px; +} +.navbar-content:before, .navbar-content:after +{ + display: table; + content: ""; + line-height: 0; +} +.navbar-nav.navbar-right:last-child { + margin-right: 15px !important; +} +.navbar-footer +{ + background-color:#DDD; +} +.navbar-brand,.navbar-toggle,.brand_network{ + color: #FFFFFF; + font-weight: bold; + +} +.navbar-custom .navbar-nav > li > a { + color:#FFFFFF; + font-weight: bold; +} +.navbar-custom .navbar-toggle{ + color: #f57900; + background: #f57900; +} +.navbar-footer-content { padding:15px 15px 15px 15px; } +.dropdown-menu { +padding: 0px; +overflow: hidden; +} + +.brand_network { + color: #9D9D9D; + float: left; + position: absolute; + left: 70px; + top: 30px; + font-size: smaller; +} + +.post-content { + margin-left:58px; +} + +.badge-important { + margin-top: 3px; + margin-left: 25px; + position: absolute; +} + +body { + background-color: #e8e8e8; +} +//contact forms + +.container { + max-width:700px; + width:100%; + margin:0 auto; + position:relative; +} + +#contact input[type="text"], #contact input[type="email"], #contact input[type="tel"], #contact input[type="url"], #contact textarea, #contact button[type="submit"] { font:400 12px/16px "Open Sans", Helvetica, Arial, sans-serif; } + +#contact,#technologies,#about { + background:#F9F9F9; + padding:25px; + margin:50px 0; +} + +#contact h3,#technologies h3,#about h3 { + color: #F96; + display: block; + font-size: 30px; + font-weight: 400; +} + +#contact h4,#technologies h4,#about h4 { + margin:5px 0 15px; + display:block; + font-size:13px; +} + +fieldset { + border: medium none !important; + margin: 0 0 10px; + min-width: 100%; + padding: 0; + width: 100%; +} + +#contact input[type="text"], #contact input[type="email"], #contact input[type="tel"], #contact input[type="url"], #contact textarea { + width:100%; + border:1px solid #CCC; + background:#FFF; + margin:0 0 5px; + padding:10px; +} + +#contact input[type="text"]:hover, #contact input[type="email"]:hover, #contact input[type="tel"]:hover, #contact input[type="url"]:hover, #contact textarea:hover { + -webkit-transition:border-color 0.3s ease-in-out; + -moz-transition:border-color 0.3s ease-in-out; + transition:border-color 0.3s ease-in-out; + border:1px solid #AAA; +} + +#contact textarea { + height:100px; + max-width:100%; + resize:none; +} + +#contact button[type="submit"] { + cursor:pointer; + width:100%; + border:none; + background:#0CF; + color:#FFF; + margin:0 0 5px; + padding:10px; + font-size:15px; +} + +#contact button[type="submit"]:hover { + background:#09C; + -webkit-transition:background 0.3s ease-in-out; + -moz-transition:background 0.3s ease-in-out; + transition:background-color 0.3s ease-in-out; +} + +#contact button[type="submit"]:active { box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.5); } + +#contact input:focus, #contact textarea:focus { + outline:0; + border:1px solid #999; +} +::-webkit-input-placeholder { + color:#888; +} +:-moz-placeholder { + color:#888; +} +::-moz-placeholder { + color:#888; +} +:-ms-input-placeholder { + color:#888; +} +blockquote{ + display:block; + background: #fff; + padding: 15px 20px 15px 45px; + margin: 0 0 20px; + position: relative; + + /*Font*/ + font-family: Georgia, serif; + font-size: 16px; + line-height: 1.2; + color: #666; + text-align: justify; + + /*Borders - (Optional)*/ + border-left: 15px solid #c76c0c; + border-right: 2px solid #c76c0c; + + /*Box Shadow - (Optional)*/ + -moz-box-shadow: 2px 2px 15px #ccc; + -webkit-box-shadow: 2px 2px 15px #ccc; + box-shadow: 2px 2px 15px #ccc; +} + +blockquote::before{ + //content: "\201C"; /*Unicode for Left Double Quote*/ + + /*Font*/ + font-family: Verdana,sans-serif; + font-size: 60px; + font-weight: bold; + color: #1C3B47; + + /*Positioning*/ + position: absolute; + left: 25px; + top:5px; +} + +blockquote::after{ + /*Reset to make sure*/ + content: ""; +} + +blockquote a{ + text-decoration: none; + background: #eee; + cursor: pointer; + padding: 0 4px; + color: #c76c0c; +} + +blockquote a:hover{ + color: #1C3B47; +} + +blockquote em{ + font-style: italic; +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/w3.css b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/w3.css new file mode 100644 index 0000000..9fda92c --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/css/w3.css @@ -0,0 +1,231 @@ +/* W3.CSS 4.06 November 2017 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent;-webkit-text-decoration-skip:objects} +a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}svg:not(:root){overflow:hidden} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-input-placeholder{color:inherit;opacity:0.54} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.w3-image{max-width:100%;height:auto}img{margin-bottom:-5px}a{color:inherit} +.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} +.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} +.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} +.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} +.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} +.w3-btn,.w3-button{border:none;display:inline-block;outline:0;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} +.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} +.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} +.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} +.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} +.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} +.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} +.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} +.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.w3-dropdown-hover:hover .w3-dropdown-content{display:block;z-index:1} +.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} +.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} +.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0} +.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} +.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} +.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} +.w3-main,#main{transition:margin-left .4s} +.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} +.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;outline:none;display:block} +.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} +.w3-bar .w3-button{white-space:normal} +.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;outline:none;white-space:normal;float:none} +.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} +.w3-responsive{display:block;overflow-x:auto} +.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, +.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} +.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} +.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} +.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} +.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} +@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%} +.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} +.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} +@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} +.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} +.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} +.w3-content{max-width:980px;margin:auto}.w3-rest{overflow:hidden} +.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} +.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} +.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} +@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} +.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} +.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} +.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} +@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} +@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} +@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}} +.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} +.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} +.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} +.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} +.w3-display-position{position:absolute} +.w3-circle{border-radius:50%} +.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} +.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} +.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} +.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} +.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} +.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} +.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} +.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} +.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} +.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} +.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} +.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} +.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} +.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} +.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} +.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} +.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} +.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} +.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} +.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} +.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} +.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} +.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px 8px 50px}.w3-padding-large{padding:12px 24px!important} +.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} +.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} +.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} +.w3-left{float:left!important}.w3-right{float:right!important} +.w3-button:hover{color:#000!important;background-color:#ccc!important} +.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} +.w3-hover-none:hover{box-shadow:none!important} +/* Colors */ +.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} +.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} +.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} +.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} +.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} +.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} +.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important} +.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} +.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} +.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} +.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} +.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} +.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} +.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} +.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} +.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} +.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} +.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} +.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} +.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important} +.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} +.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} +.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} +.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} +.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} +.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} +.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} +.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} +.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} +.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} +.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} +.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} +.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} +.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} +.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} +.w3-text-black,.w3-hover-text-black:hover{color:#000!important} +.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} +.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} +.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} +.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} +.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} +.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} +.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} +.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} +.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} +.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important} +.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} +.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} +.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} +.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} +.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} +.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} +.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} +.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} +.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} +.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} +.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} +.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} +.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} +.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} +.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} +.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} +.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important} +.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important} +.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important} +.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} +.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/js/bootstrap.min.js b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/js/bootstrap.min.js new file mode 100644 index 0000000..f363824 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/main/webapp/resources/js/bootstrap.min.js @@ -0,0 +1,784 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 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)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher") +}(jQuery), +function (a) { + "use strict"; + function b() { + var a = document.createElement("bootstrap"), b = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd otransitionend", + transition: "transitionend" + }; + for (var c in b)if (void 0 !== a.style[c])return {end: b[c]}; + return !1 + } + + a.fn.emulateTransitionEnd = function (b) { + var c = !1, d = this; + a(this).one("bsTransitionEnd", function () { + c = !0 + }); + var e = function () { + c || a(d).trigger(a.support.transition.end) + }; + return setTimeout(e, b), this + }, a(function () { + a.support.transition = b(), a.support.transition && (a.event.special.bsTransitionEnd = { + bindType: a.support.transition.end, + delegateType: a.support.transition.end, + handle: function (b) { + return a(b.target).is(this) ? b.handleObj.handler.apply(this, arguments) : void 0 + } + }) + }) +}(jQuery), +function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var c = a(this), e = c.data("bs.alert"); + e || c.data("bs.alert", e = new d(this)), "string" == typeof b && e[b].call(c) + }) + } + + var c = '[data-dismiss="alert"]', d = function (b) { + a(b).on("click", c, this.close) + }; + d.VERSION = "3.3.5", 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); + 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.5", 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)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c)) + }, this), 0) + }, c.prototype.toggle = function () { + var a = !0, b = this.$element.closest('[data-toggle="buttons"]'); + if (b.length) { + var c = this.$element.find("input"); + "radio" == c.prop("type") ? (c.prop("checked") && (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); + d.hasClass("btn") || (d = d.closest(".btn")), b.call(d, "toggle"), a(c.target).is('input[type="radio"]') || a(c.target).is('input[type="checkbox"]') || c.preventDefault() + }).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.5", 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")); + return a > this.$items.length - 1 || 0 > a ? void 0 : 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 () { + return this.sliding ? void 0 : this.slide("next") + }, c.prototype.prev = function () { + return this.sliding ? void 0 : this.slide("prev") + }, c.prototype.slide = function (b, 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.5", 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("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.5", 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("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 && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).trigger("focus") + } + } + } + }; + var h = a.fn.dropdown; + a.fn.dropdown = d, a.fn.dropdown.Constructor = g, a.fn.dropdown.noConflict = function () { + return a.fn.dropdown = h, this + }, a(document).on("click.bs.dropdown.data-api", c).on("click.bs.dropdown.data-api", ".dropdown form", function (a) { + a.stopPropagation() + }).on("click.bs.dropdown.data-api", f, g.prototype.toggle).on("keydown.bs.dropdown.data-api", f, g.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", g.prototype.keydown) +}(jQuery), +function (a) { + "use strict"; + function b(b, d) { + return this.each(function () { + var e = a(this), f = e.data("bs.modal"), g = a.extend({}, c.DEFAULTS, e.data(), "object" == typeof b && b); + f || e.data("bs.modal", f = new c(this, g)), "string" == typeof b ? f[b](d) : g.show && f.show(d) + }) + } + + var c = function (b, c) { + this.options = c, this.$body = a(document.body), this.$element = a(b), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function () { + this.$element.trigger("loaded.bs.modal") + }, this)) + }; + c.VERSION = "3.3.5", c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150, c.DEFAULTS = { + backdrop: !0, + keyboard: !0, + show: !0 + }, c.prototype.toggle = function (a) { + return this.isShown ? this.hide() : this.show(a) + }, c.prototype.show = function (b) { + var d = this, e = a.Event("show.bs.modal", {relatedTarget: b}); + this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function () { + d.$element.one("mouseup.dismiss.bs.modal", function (b) { + a(b.target).is(d.$element) && (d.ignoreBackdropClick = !0) + }) + }), this.backdrop(function () { + var e = a.support.transition && d.$element.hasClass("fade"); + d.$element.parent().length || d.$element.appendTo(d.$body), d.$element.show().scrollTop(0), d.adjustDialog(), e && d.$element[0].offsetWidth, d.$element.addClass("in"), d.enforceFocus(); + var f = a.Event("shown.bs.modal", {relatedTarget: b}); + e ? d.$dialog.one("bsTransitionEnd", function () { + d.$element.trigger("focus").trigger(f) + }).emulateTransitionEnd(c.TRANSITION_DURATION) : d.$element.trigger("focus").trigger(f) + })) + }, c.prototype.hide = function (b) { + b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), a(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"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", a.proxy(this.hideModal, this)).emulateTransitionEnd(c.TRANSITION_DURATION) : this.hideModal()) + }, c.prototype.enforceFocus = function () { + a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) { + this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.trigger("focus") + }, this)) + }, c.prototype.escape = function () { + this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", a.proxy(function (a) { + 27 == a.which && this.hide() + }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal") + }, c.prototype.resize = function () { + this.isShown ? a(window).on("resize.bs.modal", a.proxy(this.handleUpdate, this)) : a(window).off("resize.bs.modal") + }, c.prototype.hideModal = function () { + var a = this; + this.$element.hide(), this.backdrop(function () { + a.$body.removeClass("modal-open"), a.resetAdjustments(), a.resetScrollbar(), a.$element.trigger("hidden.bs.modal") + }) + }, c.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove(), this.$backdrop = null + }, c.prototype.backdrop = function (b) { + var d = this, e = this.$element.hasClass("fade") ? "fade" : ""; + if (this.isShown && this.options.backdrop) { + var f = a.support.transition && e; + if (this.$backdrop = a(document.createElement("div")).addClass("modal-backdrop " + e).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", a.proxy(function (a) { + return this.ignoreBackdropClick ? void(this.ignoreBackdropClick = !1) : void(a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide())) + }, this)), f && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b)return; + f ? this.$backdrop.one("bsTransitionEnd", b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : b() + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass("in"); + var g = function () { + d.removeBackdrop(), b && b() + }; + a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION) : g() + } else b && b() + }, c.prototype.handleUpdate = function () { + this.adjustDialog() + }, c.prototype.adjustDialog = function () { + var a = this.$element[0].scrollHeight > document.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 < a, this.scrollbarWidth = this.measureScrollbar() + }, c.prototype.setScrollbar = function () { + var a = parseInt(this.$body.css("padding-right") || 0, 10); + this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", a + this.scrollbarWidth) + }, c.prototype.resetScrollbar = function () { + this.$body.css("padding-right", this.originalBodyPad) + }, c.prototype.measureScrollbar = function () { + var a = document.createElement("div"); + a.className = "modal-scrollbar-measure", this.$body.append(a); + var b = a.offsetWidth - a.clientWidth; + return this.$body[0].removeChild(a), b + }; + var d = a.fn.modal; + a.fn.modal = b, a.fn.modal.Constructor = c, a.fn.modal.noConflict = function () { + return a.fn.modal = d, this + }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (c) { + var d = a(this), e = d.attr("href"), f = a(d.attr("data-target") || e && e.replace(/.*(?=#[^\s]+$)/, "")), g = f.data("bs.modal") ? "toggle" : a.extend({remote: !/#/.test(e) && e}, f.data(), d.data()); + d.is("a") && c.preventDefault(), f.one("show.bs.modal", function (a) { + a.isDefaultPrevented() || f.one("hidden.bs.modal", function () { + d.is(":visible") && d.trigger("focus") + }) + }), b.call(f, g, this) + }) +}(jQuery), +function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), e = d.data("bs.tooltip"), f = "object" == typeof b && b; + (e || !/destroy|hide/.test(b)) && (e || d.data("bs.tooltip", e = new c(this, f)), "string" == typeof b && e[b]()) + }) + } + + var c = function (a, b) { + this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", a, b) + }; + c.VERSION = "3.3.5", c.TRANSITION_DURATION = 150, c.DEFAULTS = { + animation: !0, + placement: "top", + selector: !1, + template: '', + 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); + return 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() ? void 0 : (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 - m < o.top ? "bottom" : "right" == h && k.right + l > o.width ? "left" : "left" == h && k.left - l < o.left ? "right" : h, f.removeClass(n).addClass(h) + } + var p = this.getCalculatedOffset(h, k, l, m); + this.applyPlacement(p, h); + var q = function () { + var a = e.hoverState; + e.$element.trigger("shown.bs." + e.type), e.hoverState = null, "out" == a && e.leave(e) + }; + a.support.transition && this.$tip.hasClass("fade") ? f.one("bsTransitionEnd", q).emulateTransitionEnd(c.TRANSITION_DURATION) : q() + } + }, c.prototype.applyPlacement = function (b, c) { + var d = this.tip(), e = d[0].offsetWidth, f = d[0].offsetHeight, g = parseInt(d.css("margin-top"), 10), h = parseInt(d.css("margin-left"), 10); + isNaN(g) && (g = 0), isNaN(h) && (h = 0), b.top += g, b.left += h, a.offset.setOffset(d[0], a.extend({ + using: function (a) { + d.css({top: Math.round(a.top), left: Math.round(a.left)}) + } + }, b), 0), d.addClass("in"); + var i = d[0].offsetWidth, j = d[0].offsetHeight; + "top" == c && j != f && (b.top = b.top + f - j); + var k = this.getViewportAdjustedDelta(c, b, i, j); + k.left ? b.left += k.left : b.top += k.top; + var l = /top|bottom/.test(c), m = l ? 2 * k.left - e + i : 2 * k.top - f + j, n = l ? "offsetWidth" : "offsetHeight"; + d.offset(b), this.replaceArrow(m, d[0][n], l) + }, c.prototype.replaceArrow = function (a, b, c) { + this.arrow().css(c ? "left" : "top", 50 * (1 - a / b) + "%").css(c ? "top" : "left", "") + }, c.prototype.setContent = function () { + var a = this.tip(), b = this.getTitle(); + a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right") + }, c.prototype.hide = function (b) { + function d() { + "in" != e.hoverState && f.detach(), e.$element.removeAttr("aria-describedby").trigger("hidden.bs." + e.type), b && b() + } + + var e = this, f = a(this.$tip), g = a.Event("hide.bs." + this.type); + return this.$element.trigger(g), g.isDefaultPrevented() ? void 0 : (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one("bsTransitionEnd", d).emulateTransitionEnd(c.TRANSITION_DURATION) : d(), this.hoverState = null, this) + }, c.prototype.fixTitle = function () { + var a = this.$element; + (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "") + }, c.prototype.hasContent = function () { + return this.getTitle() + }, c.prototype.getPosition = function (b) { + b = b || this.$element; + var c = b[0], d = "BODY" == c.tagName, e = c.getBoundingClientRect(); + null == e.width && (e = a.extend({}, e, {width: e.right - e.left, height: e.bottom - e.top})); + var f = d ? { + top: 0, + left: 0 + } : b.offset(), g = {scroll: d ? document.documentElement.scrollTop || document.body.scrollTop : b.scrollTop()}, h = d ? { + width: a(window).width(), + height: a(window).height() + } : null; + return a.extend({}, e, g, h, f) + }, c.prototype.getCalculatedOffset = function (a, b, c, d) { + return "bottom" == a ? { + top: b.top + b.height, + left: b.left + b.width / 2 - c / 2 + } : "top" == a ? { + top: b.top - d, + left: b.left + b.width / 2 - c / 2 + } : "left" == a ? {top: b.top + b.height / 2 - d / 2, left: b.left - c} : { + top: b.top + b.height / 2 - d / 2, + left: b.left + b.width + } + }, c.prototype.getViewportAdjustedDelta = function (a, b, c, d) { + var e = {top: 0, left: 0}; + if (!this.$viewport)return e; + var f = this.options.viewport && this.options.viewport.padding || 0, g = this.getPosition(this.$viewport); + if (/right|left/.test(a)) { + var h = b.top - f - g.scroll, i = b.top + f - g.scroll + d; + h < g.top ? e.top = g.top - h : i > g.top + g.height && (e.top = g.top + g.height - i) + } else { + var j = b.left - f, k = b.left + f + c; + j < g.left ? e.left = g.left - j : k > g.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 + }) + }; + 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.5", 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.5", 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[0])return this.activeTarget = null, this.clear(); + for (a = e.length; a--;)g != f[a] && b >= e[a] && (void 0 === e[a + 1] || b < e[a + 1]) && this.activate(f[a]) + }, b.prototype.activate = function (b) { + this.activeTarget = b, this.clear(); + var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', d = a(c).parents("li").addClass("active"); + d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), + d.trigger("activate.bs.scrollspy") + }, b.prototype.clear = function () { + a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active") + }; + var d = a.fn.scrollspy; + a.fn.scrollspy = c, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () { + return a.fn.scrollspy = d, this + }, a(window).on("load.bs.scrollspy.data-api", function () { + a('[data-spy="scroll"]').each(function () { + var b = a(this); + c.call(b, b.data()) + }) + }) +}(jQuery), +function (a) { + "use strict"; + function b(b) { + return this.each(function () { + var d = a(this), e = d.data("bs.tab"); + e || d.data("bs.tab", e = new c(this)), "string" == typeof b && e[b]() + }) + } + + var c = function (b) { + this.element = a(b) + }; + c.VERSION = "3.3.5", c.TRANSITION_DURATION = 150, c.prototype.show = function () { + var b = this.element, c = b.closest("ul:not(.dropdown-menu)"), d = b.data("target"); + if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) { + var e = c.find(".active:last a"), f = a.Event("hide.bs.tab", {relatedTarget: b[0]}), g = a.Event("show.bs.tab", {relatedTarget: e[0]}); + if (e.trigger(f), b.trigger(g), !g.isDefaultPrevented() && !f.isDefaultPrevented()) { + var h = a(d); + this.activate(b.closest("li"), c), this.activate(h, h.parent(), function () { + e.trigger({type: "hidden.bs.tab", relatedTarget: b[0]}), b.trigger({ + type: "shown.bs.tab", + relatedTarget: e[0] + }) + }) + } + } + }, c.prototype.activate = function (b, d, e) { + function f() { + g.removeClass("active").find("> .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.5", 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 c > e ? "top" : !1; + if ("bottom" == this.affixed)return null != c ? e + this.unpin <= f.top ? !1 : "bottom" : a - d >= e + g ? !1 : "bottom"; + var h = null == this.affixed, i = h ? e : f.top, j = h ? g : b; + return null != c && c >= e ? "top" : null != d && i + j >= a - d ? "bottom" : !1 + }, 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/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/SampleTest.java b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/SampleTest.java new file mode 100644 index 0000000..5513889 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/SampleTest.java @@ -0,0 +1,13 @@ +package com.visualpathit.account.controllerTest; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class SampleTest { + @Test + public void SampleTestHappyFlow(){ + assertEquals("Hello".length(), 5); + } + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/UserControllerTest.java b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/UserControllerTest.java new file mode 100644 index 0000000..3097f1a --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/controllerTest/UserControllerTest.java @@ -0,0 +1,109 @@ +package com.visualpathit.account.controllerTest; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import com.visualpathit.account.controller.UserController; +import com.visualpathit.account.model.User; +import com.visualpathit.account.service.UserService; +import com.visualpathit.account.setup.StandaloneMvcTestViewResolver; + + +public class UserControllerTest { + + @Mock + private UserService controllerSer; + @InjectMocks + private UserController controller; + private MockMvc mockMvc; + + @Before + public void setup(){ + MockitoAnnotations.initMocks(this); + + /*InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); + viewResolver.setPrefix("/WEB-INF/views/"); + viewResolver.setSuffix(".jsp"); + */ + mockMvc = MockMvcBuilders.standaloneSetup(controller) + .setViewResolvers(new StandaloneMvcTestViewResolver()).build(); + } + + @Test + public void registrationTestforHappyFlow() throws Exception{ + User user = new User(); + mockMvc.perform(get("/registration")) + .andExpect(status().isOk()) + .andExpect(view().name("registration")) + .andExpect(forwardedUrl("registration")); + + } + @Test + public void registrationTestforNullValueHappyFlow() throws Exception{ + mockMvc.perform(get("/registration")) + .andExpect(status().isOk()) + .andExpect(view().name("registration")) + .andExpect(forwardedUrl("registration")); + + } + /*@Test + public void registrationTestforPostValueHappyFlow() throws Exception{ + String description =new String("Error String"); + UserValidator userValidator; + BindingResult bindingResult; + when(userValidator.validate(new User(),bindingResult)) + .thenThrow(bindingResult.hasErrors()); + mockMvc.perform(post("/registration").contentType(MediaType.APPLICATION_FORM_URLENCODED) + .param("userForm","userForm")) + + .andExpect(status().isOk()); + //.andExpect(view().name("redirect:/welcome")) + //.andExpect(forwardedUrl("redirect:/welcome")); + + }*/ + @Test + public void loginTestHappyFlow() throws Exception{ + String error = "Your username and password is invalid"; + mockMvc.perform(get("/login").param(error, error)) + .andExpect(status().isOk()) + .andExpect(view().name("login")) + .andExpect(forwardedUrl("login")); + + } + @Test + public void welcomeTestHappyFlow() throws Exception{ + mockMvc.perform(get("/welcome")) + .andExpect(status().isOk()) + .andExpect(view().name("welcome")) + .andExpect(forwardedUrl("welcome")); + + } + @Test + public void welcomeAfterDirectLoginTestHappyFlow() throws Exception{ + mockMvc.perform(get("/")) + .andExpect(status().isOk()) + .andExpect(view().name("welcome")) + .andExpect(forwardedUrl("welcome")); + + } + @Test + public void indexTestHappyFlow() throws Exception{ + mockMvc.perform(get("/index")) + .andExpect(status().isOk()) + .andExpect(view().name("index_home")) + .andExpect(forwardedUrl("index_home")); + + } + +} diff --git a/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/RoleTest.java b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/RoleTest.java new file mode 100644 index 0000000..07cede5 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/RoleTest.java @@ -0,0 +1,51 @@ +package com.visualpathit.account.modelTest; + +import junit.framework.Assert; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.visualpathit.account.model.Role; +import com.visualpathit.account.model.User; + +/** {@author imrant} !*/ +public class RoleTest { + + public static final Long EXPECTED_ID = 1L; + public static final String EXPECTED_ROLENAME = "Admin"; + public static final int EXPECTED_SIZE = 1; + private Role role; + @Before + public void setUp() throws Exception { + User user = new User(); + user.setId(1L); + user.setUsername("Wahidkhan74"); + user.setPassword("Wahidkhan74"); + user.setUserEmail("XXXXX@gmail.com"); + + Set users = new HashSet(); + users.add(user); + role = new Role(); + role.setId(1L); + role.setName("Admin"); + role.setUsers(users); + } + + @After + public void tearDown() throws Exception { + System.out.println("Test Completed"); + + } + + @Test + public void testUserDetailsHappyFlow() throws Exception { + Assert.assertEquals(EXPECTED_ID, role.getId()); + Assert.assertEquals(EXPECTED_ROLENAME, role.getName()); + Assert.assertEquals(EXPECTED_SIZE,role.getUsers().size()); + + } +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/UserTest.java b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/UserTest.java new file mode 100644 index 0000000..a569500 --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/modelTest/UserTest.java @@ -0,0 +1,56 @@ +package com.visualpathit.account.modelTest; + +import junit.framework.Assert; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.visualpathit.account.model.Role; +import com.visualpathit.account.model.User; + +/** {@author imrant} !*/ +public class UserTest { + + public static final Long EXPECTED_ID = 1L; + public static final int EXPECTED_SIZE = 1; + public static final String EXPECTED_USERNAME = "Wahidkhan74"; + public static final String EXPECTED_PASSWD = "Wahidkhan74"; + public static final String EXPECTED_USEREMAIL = "XXXXX@gmail.com"; + private User user; + @Before + public void setUp() throws Exception { + + Role role = new Role(); + role.setId(1L); + role.setName("Admin"); + Set roles = new HashSet(); + roles.add(role); + + user = new User(); + user.setId(1L); + user.setUsername("Wahidkhan74"); + user.setPassword("Wahidkhan74"); + user.setUserEmail("XXXXX@gmail.com"); + user.setRoles(roles); + } + + @After + public void tearDown() throws Exception { + System.out.println("Test Completed"); + + } + + @Test + public void testUserDetailsHappyFlow() throws Exception { + Assert.assertEquals(EXPECTED_ID, user.getId()); + Assert.assertEquals(EXPECTED_USERNAME, user.getUsername()); + Assert.assertEquals(EXPECTED_PASSWD, user.getPassword()); + Assert.assertEquals(EXPECTED_USEREMAIL, user.getUserEmail()); + Assert.assertEquals(EXPECTED_SIZE,user.getRoles().size()); + + } +} \ No newline at end of file diff --git a/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/setup/StandaloneMvcTestViewResolver.java b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/setup/StandaloneMvcTestViewResolver.java new file mode 100644 index 0000000..f282b2a --- /dev/null +++ b/hprofile-project-github-actions/hprofile-main/src/test/java/com/visualpathit/account/setup/StandaloneMvcTestViewResolver.java @@ -0,0 +1,20 @@ +package com.visualpathit.account.setup; + +import org.springframework.web.servlet.view.AbstractUrlBasedView; +import org.springframework.web.servlet.view.InternalResourceView; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +public class StandaloneMvcTestViewResolver extends InternalResourceViewResolver { + + public StandaloneMvcTestViewResolver() { + super(); + } + + @Override + protected AbstractUrlBasedView buildView(final String viewName) throws Exception { + final InternalResourceView view = (InternalResourceView) super.buildView(viewName); + // prevent checking for circular view paths + view.setPreventDispatchLoop(false); + return view; + } +}