diff --git a/.env b/.env new file mode 100644 index 00000000..e6fa0b62 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +LOCAL_VIVO_HOME=./vivo-home +RESET_HOME=false +RESET_CORE=false +VERBOSE=no diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d11d273f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Convert to LF line endings on checkout. +*.sh text eol=lf diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..5202564a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment (please complete the following information):** + - OS: [e.g. Windows, Linux] + - Browser [e.g. chrome, safari] + - Tomcat version [e.g. 8, 9] + - VIVO version [e.g. 1.11.0, 1.12.0] + - Apache Solr or ElasticSearch version + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0d0ac84f..8eddc16e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ **Thank you for submitting a pull request! Title this pull request with a brief description of what the pull request fixes/improves/changes. Please describe the pull request in detail using the template below.** * * * -**[JIRA Issue](https://jira.duraspace.org/projects/VIVO)**: (please link to issue) +**[JIRA Issue](https://jira.lyrasis.org/projects/VIVO)**: (please link to issue) * Other Relevant Links (Mailing list discussion, related pull requests, etc.) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..a2515869 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,31 @@ +name: Build + +on: [ push, pull_request, workflow_dispatch ] + +jobs: + build: + runs-on: ubuntu-latest + + env: + MAVEN_OPTS: -Xmx1024M + + steps: + - uses: actions/checkout@v2 + + - name: Clone Vitro + run: git clone https://github.com/vivo-project/Vitro.git ../Vitro + + - name: Maven Cache + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-cache-m2- + + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 11 + + - name: Maven Build + run: mvn clean package -s installer/example-settings.xml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..82012b89 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,41 @@ +name: Deploy + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + env: + MAVEN_OPTS: -Xmx1024M + + steps: + - uses: actions/checkout@v2 + + - name: Clone Vitro + run: git clone https://github.com/vivo-project/Vitro.git ../Vitro + + - name: Maven Cache + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-cache-m2- + + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 11 + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + + - name: Maven Deploy + run: mvn --batch-mode deploy -Pskip + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..26a2cf4a --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,59 @@ +name: Docker + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + docker: + runs-on: ubuntu-latest + + env: + MAVEN_OPTS: -Xmx1024M + + steps: + - uses: actions/checkout@v2 + + - name: Clone Vitro + run: git clone https://github.com/vivo-project/Vitro.git ../Vitro + + - name: Maven Cache + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-cache-m2- + + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: 11 + + - name: Maven Build + run: mvn clean package -s installer/example-settings.xml + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + push: true + tags: vivoweb/vivo:latest + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.gitignore b/.gitignore index 425a6cfb..7a359805 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,8 @@ utilities/rdbmigration/.work **/.classpath **/.project **/bin/ + +vivo-home/ + +.fake +.ionide \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6e4a4255..00000000 --- a/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -language: java -dist: trusty -sudo: false - -jdk: - - openjdk8 - - oraclejdk8 - -env: - # Give Maven 1GB of memory to work with - - MAVEN_OPTS=-Xmx1024M - -cache: - directories: - - .autoconf - - $HOME/.m2 - -install: - - git clone https://github.com/vivo-project/Vitro.git ../Vitro - -script: - - "mvn clean package -Dmaven.test.skip=false" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6632d8b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM tomcat:9-jdk11-openjdk + +ARG SOLR_URL=http://localhost:8983/solr/vivocore +ARG VIVO_DIR=/usr/local/vivo/home +ARG TDB_FILE_MODE=direct + +ENV SOLR_URL=${SOLR_URL} +ENV JAVA_OPTS="${JAVA_OPTS} -Dtdb:fileMode=$TDB_FILE_MODE" + +RUN mkdir /usr/local/vivo +RUN mkdir /usr/local/vivo/home + +COPY ./installer/home/target/vivo /vivo-home +COPY ./installer/webapp/target/vivo.war /usr/local/tomcat/webapps/ROOT.war + +COPY start.sh /start.sh + +EXPOSE 8080 + +CMD ["/bin/bash", "/start.sh"] diff --git a/LICENSE b/LICENSE index 361eead5..3f840177 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018, Cornell University +Copyright (c) 2021, Cornell University All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/README.md b/README.md index b7f894a6..7085ef2b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # VIVO: Connect, Share, Discover -[![Build Status](https://travis-ci.org/vivo-project/VIVO.png?branch=develop)](https://travis-ci.org/vivo-project/VIVO) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2639714.svg)](https://doi.org/10.5281/zenodo.2639713) +[![Build](https://github.com/vivo-project/VIVO/workflows/Build/badge.svg)](https://github.com/vivo-project/VIVO/actions?query=workflow%3ABuild) [![Deploy](https://github.com/vivo-project/VIVO/workflows/Deploy/badge.svg)](https://github.com/vivo-project/VIVO/actions?query=workflow%3ADeploy) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2639714.svg)](https://doi.org/10.5281/zenodo.2639713) VIVO is an open source semantic web tool for research discovery -- finding people and the research they do. @@ -14,12 +14,60 @@ desired information across disciplines. http://vivoweb.org/ ### VIVO Project Wiki -https://wiki.duraspace.org/display/VIVO/ +https://wiki.lyrasis.org/display/VIVO/ ### Installation Instructions Installation instructions for the latest release can be found at this location on the wiki: -https://wiki.duraspace.org/display/VIVODOC110x/Installing+VIVO +https://wiki.lyrasis.org/display/VIVODOC112x/Installing+VIVO + +### Docker + +VIVO docker container is available at [vivoweb/vivo](https://hub.docker.com/repository/docker/vivoweb/vivo) with accompanying [vivoweb/vivo-solr](https://hub.docker.com/repository/docker/vivoweb/vivo-solr). These can be used independently or with docker-compose. + +### Docker Compose + +Docker Compose environment variables: + +.env defaults +``` +LOCAL_VIVO_HOME=./vivo-home +RESET_HOME=false +RESET_CORE=false +``` + +- `LOCAL_VIVO_HOME`: VIVO home directory on your host machine which will mount to volume in docker container. Set this environment variable to persist your VIVO data on your host machine. +- `RESET_HOME`: Convenience to reset VIVO home when starting container. **Caution**, will delete local configuration, content, and configuration model. +- `RESET_CORE`: Convenience to reset VIVO Solr core when starting container. **Caution**, will require complete reindex. + +Before building VIVO, you will also need to clone (and switch to the same branch, if other than main) of [Vitro](https://github.com/vivo-project/Vitro). The Vitro project must be cloned to a sibling directory next to VIVO so that it can be found during the build. You will also need to clone (and switch to the appropriate branch) of [Vitro-languages](https://github.com/vivo-project/Vitro-languages) and [VIVO-languages](https://github.com/vivo-project/VIVO-languages). + +Build and start VIVO. + +1. In Vitro-languages, run: +``` +mvn install +``` + +2. In VIVO-languages, run: +``` +mvn install +``` + +3. In VIVO (with Vitro cloned alongside it), run: +``` +mvn clean package -s installer/example-settings.xml +docker-compose up +``` + +### Docker Image + +To build and run local Docker image. + +``` +docker build -t vivoweb/vivo:development . +docker run -p 8080:8080 vivoweb/vivo:development +``` ## Contact us There are several ways to contact the VIVO community. @@ -44,7 +92,7 @@ development, implementation, and testing. ## Contributing Code If you would like to contribute code to the VIVO project, please open a ticket -in our [JIRA](https://jira.duraspace.org/projects/VIVO), and prepare a +in our [JIRA](https://jira.lyrasis.org/projects/VIVO), and prepare a pull request that references your ticket. Contributors welcome! ## Citing VIVO diff --git a/api/pom.xml b/api/pom.xml index de5b278d..20bd479e 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -7,13 +7,13 @@ org.vivoweb vivo-api - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT jar org.vivoweb vivo-project - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT .. @@ -83,7 +83,7 @@ junit junit - 4.11 + 4.13.1 test diff --git a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/AgrovocService.java b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/AgrovocService.java index 0a61876d..1f3ddcea 100644 --- a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/AgrovocService.java +++ b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/AgrovocService.java @@ -58,7 +58,7 @@ public class AgrovocService implements ExternalConceptService { protected final String dbpedia_endpoint = " http://dbpedia.org/sparql"; // URL to get all the information for a concept - protected final String conceptSkosMosBase = "http://agrovoc.uniroma2.it/agrovoc/rest/v1/"; + protected final String conceptSkosMosBase = "https://agrovoc.uniroma2.it/agrovoc/rest/v1/"; protected final String conceptsSkosMosSearch = conceptSkosMosBase + "search?"; protected final String conceptSkosMosURL = conceptSkosMosBase + "data?"; @Override diff --git a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/LCSHService.java b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/LCSHService.java index 32327ebc..7b42cfb9 100644 --- a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/LCSHService.java +++ b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/LCSHService.java @@ -35,7 +35,7 @@ public class LCSHService implements ExternalConceptService { protected final Log log = LogFactory.getLog(getClass()); private final String skosSuffix = ".skos.rdf"; - private final String hostUri = "http://id.loc.gov"; + private final String hostUri = "https://id.loc.gov"; private final String schemeUri = hostUri + "/authorities/subjects"; private final String baseUri = hostUri + "/search/"; @@ -94,7 +94,7 @@ public class LCSHService implements ExternalConceptService { bestMatch = "false"; } log.debug("-" + uri + "-"); - //This is the URL for retrieving the concept - the pattern is http://id.loc.gov/authorities/subjects/sh85014203.skos.rdf + //This is the URL for retrieving the concept - the pattern is https://id.loc.gov/authorities/subjects/sh85014203.skos.rdf //This is not the URI itself which would be http://id.loc.gov/authorities/subjects/sh85014203 String conceptURLString = getSKOSURL(uri); String baseConceptURI = uri; @@ -152,7 +152,7 @@ public class LCSHService implements ExternalConceptService { private String getSKOSURL(String uri) { - String skosURI = uri + skosSuffix; + String skosURI = uri.replaceFirst("http://", "https://") + skosSuffix; return skosURI; } diff --git a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java index 59653f3f..040f7904 100644 --- a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java +++ b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java @@ -4,12 +4,18 @@ package edu.cornell.mannlib.semservices.service.impl; import java.io.IOException; import java.io.InputStream; +import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpVersion; +import org.apache.http.client.fluent.Form; +import org.apache.http.client.fluent.Request; +import org.apache.http.client.utils.URIBuilder; +import org.springframework.util.StringUtils; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -18,11 +24,6 @@ import edu.cornell.mannlib.semservices.bo.Concept; import edu.cornell.mannlib.semservices.exceptions.ConceptsNotFoundException; import edu.cornell.mannlib.semservices.service.ExternalConceptService; import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils; -import org.apache.http.HttpVersion; -import org.apache.http.client.fluent.Form; -import org.apache.http.client.fluent.Request; -import org.apache.http.client.utils.URIBuilder; -import org.springframework.util.StringUtils; /** * @author jaf30 @@ -54,11 +55,13 @@ public class UMLSService implements ExternalConceptService { private static String UMLS_AUTH_USER_URL = "https://utslogin.nlm.nih.gov/cas/v1/tickets"; private static String UMLS_AUTH_KEY_URL = "https://utslogin.nlm.nih.gov/cas/v1/api-key"; private static String UTS_SERVICE_URL = "http://umlsks.nlm.nih.gov"; + private static final String UMLS_PROPERTIES = "/umls.properties"; + private static final Log log = LogFactory.getLog(UMLSService.class); { if (username == null || apikey == null) { final Properties properties = new Properties(); - try (InputStream stream = getClass().getResourceAsStream("/umls.properties")) { + try (InputStream stream = getClass().getResourceAsStream(UMLS_PROPERTIES)) { properties.load(stream); username = properties.getProperty("username"); password = properties.getProperty("password"); @@ -73,11 +76,18 @@ public class UMLSService implements ExternalConceptService { } } } catch (Exception e) { + log.error(e, e); } } catch (IOException e) { + log.error(e, e); } } } + + public static boolean configurationFileExists() { + URL config = UMLSService.class.getResource(UMLS_PROPERTIES); + return (config != null); + } public boolean isConfigured() { return !(StringUtils.isEmpty(username) && StringUtils.isEmpty(apikey)); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java index d1e6ff1c..dd836679 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java @@ -69,7 +69,7 @@ public class ManagePublicationsForIndividualController extends FreemarkerHttpSer + "PREFIX core: \n" + "PREFIX rdfs: \n" + "PREFIX vitro: \n" - + "SELECT DISTINCT ?subclass ?authorship (str(?label) as ?title) ?pub ?hideThis WHERE { \n" + + "SELECT DISTINCT ?subclass ?authorship (?label as ?title) ?pub ?hideThis WHERE { \n" + " ?subject core:relatedBy ?authorship . \n" + " ?authorship a core:Authorship . \n" + " OPTIONAL { \n " diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/FirstAndLastNameValidator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/FirstAndLastNameValidator.java index 6cf29654..93f074ba 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/FirstAndLastNameValidator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/FirstAndLastNameValidator.java @@ -11,15 +11,18 @@ import org.apache.jena.rdf.model.Literal; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.N3ValidatorVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission; +import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle; public class FirstAndLastNameValidator implements N3ValidatorVTwo { - private static String MISSING_FIRST_NAME_ERROR = "You must enter a value in the First Name field."; - private static String MISSING_LAST_NAME_ERROR = "You must enter a value in the Last Name field."; - private static String MALFORMED_LAST_NAME_ERROR = "The last name field may not contain a comma. Please enter first name in First Name field."; + private static String MISSING_FIRST_NAME_ERROR = "first_name_empty_msg"; + private static String MISSING_LAST_NAME_ERROR = "last_name_empty_msg"; + private static String MALFORMED_LAST_NAME_ERROR = "malformed_last_name_msg"; + private I18nBundle i18n; private String uriReceiver; - public FirstAndLastNameValidator(String uriReceiver) { + public FirstAndLastNameValidator(String uriReceiver, I18nBundle i18n) { + this.i18n = i18n; this.uriReceiver = uriReceiver; } @@ -68,14 +71,14 @@ public class FirstAndLastNameValidator implements N3ValidatorVTwo { } if (lastName == null) { - errors.put("lastName", MISSING_LAST_NAME_ERROR); + errors.put("lastName", i18n.text(MISSING_LAST_NAME_ERROR)); // Don't reject space in the last name: de Vries, etc. } else if (lastNameValue.contains(",")) { - errors.put("lastName", MALFORMED_LAST_NAME_ERROR); + errors.put("lastName", i18n.text(MALFORMED_LAST_NAME_ERROR)); } if (firstName == null) { - errors.put("firstName", MISSING_FIRST_NAME_ERROR); + errors.put("firstName", i18n.text(MISSING_FIRST_NAME_ERROR)); } return errors.size() != 0 ? errors : null; diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAttendeeRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAttendeeRoleToPersonGenerator.java index 69ad7422..5ee95eb8 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAttendeeRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAttendeeRoleToPersonGenerator.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -21,28 +22,28 @@ public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGen /** Editor role involves hard-coded options for the "right side" of the role or activity. */ @Override FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "", "Select type", - "http://purl.org/NET/c4dm/event.owl#Event", "Event", - "http://vivoweb.org/ontology/core#Competition", "Competition", - "http://purl.org/ontology/bibo/Conference", "Conference", - "http://vivoweb.org/ontology/core#Course", "Course", - "http://vivoweb.org/ontology/core#Exhibit", "Exhibit", - "http://purl.org/ontology/bibo/Hearing", "Hearing", - "http://purl.org/ontology/bibo/Interview", "Interview", - "http://vivoweb.org/ontology/core#Meeting", "Meeting", - "http://purl.org/ontology/bibo/Performance", "Performance", - "http://vivoweb.org/ontology/core#Presentation", "Presentation", - "http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", - "http://purl.org/ontology/bibo/Workshop", "Workshop", - "http://vivoweb.org/ontology/core#EventSeries", "Event Series", - "http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", - "http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", - "http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series" - ); + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://purl.org/NET/c4dm/event.owl#Event", + "http://vivoweb.org/ontology/core#Competition", + "http://purl.org/ontology/bibo/Conference", + "http://vivoweb.org/ontology/core#Course", + "http://vivoweb.org/ontology/core#Exhibit", + "http://purl.org/ontology/bibo/Hearing", + "http://purl.org/ontology/bibo/Interview", + "http://vivoweb.org/ontology/core#Meeting", + "http://purl.org/ontology/bibo/Performance", + "http://vivoweb.org/ontology/core#Presentation", + "http://vivoweb.org/ontology/core#InvitedTalk", + "http://purl.org/ontology/bibo/Workshop", + "http://vivoweb.org/ontology/core#EventSeries", + "http://vivoweb.org/ontology/core#ConferenceSeries", + "http://vivoweb.org/ontology/core#SeminarSeries", + "http://vivoweb.org/ontology/core#WorkshopSeries" + ); } - @Override boolean isShowRoleLabelField() { return false; } @@ -65,3 +66,4 @@ public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGen } */ } + diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddClinicalRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddClinicalRoleToPersonGenerator.java index 1586860f..12f3b183 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddClinicalRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddClinicalRoleToPersonGenerator.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddClinicalRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -22,22 +23,21 @@ public class AddClinicalRoleToPersonGenerator extends AddRoleToPersonTwoStageGen } /** Clinical role involves hard-coded options for the "right side" of the role or activity. */ - @Override - FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "", "Select one", - "http://vivoweb.org/ontology/core#Project", "Project", - "http://purl.obolibrary.org/obo/ERO_0000005", "Service" - ); + @Override + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#Project", + "http://purl.obolibrary.org/obo/ERO_0000005" /* Service */ + ); } - //isShowRoleLabelField remains true for this so doesn't need to be overwritten @Override - boolean isShowRoleLabelField(){ + boolean isShowRoleLabelField(){ return true; } - /* * Use the methods below to change the date/time precision in the * custom form associated with this generator. When not used, the diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorRoleToPersonGenerator.java index fcfc66a8..b3abf45a 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorRoleToPersonGenerator.java @@ -5,6 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; +import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle; /** * Generates the edit configuration for adding a Role to a Person. @@ -46,8 +48,13 @@ public class AddEditorRoleToPersonGenerator extends AddRoleToPersonTwoStageGener @Override FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + // UQAM-Linguistic-Management Managing linguistic context + I18nBundle i18n = I18n.bundle(vreq); + String i18nSelectType = i18n.text("select_type"); + String selectType = (i18nSelectType == null || i18nSelectType.isEmpty()) ? "Select type" : i18nSelectType ; + return new ChildVClassesOptions(OPTION_CLASS_URI) - .setDefaultOptionLabel("Select type"); + .setDefaultOptionLabel(selectType); } /** Do not show the role label field for the AddEditorRoleToPerson form */ diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorsToInformationResourceGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorsToInformationResourceGenerator.java index a7946517..9653eeb7 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorsToInformationResourceGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorsToInformationResourceGenerator.java @@ -32,6 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUti import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; /** * This is a slightly unusual generator that is used by Manage Editors on @@ -83,7 +84,7 @@ public class AddEditorsToInformationResourceGenerator extends VivoBaseGenerator //template file editConfiguration.setTemplate("addEditorsToInformationResource.ftl"); //add validators - editConfiguration.addValidator(new FirstAndLastNameValidator("personUri")); + editConfiguration.addValidator(new FirstAndLastNameValidator("personUri", I18n.bundle(vreq))); //Adding additional data, specifically edit mode addFormSpecificData(editConfiguration, vreq); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorshipToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorshipToPersonGenerator.java index 41cea139..c206c857 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorshipToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddEditorshipToPersonGenerator.java @@ -23,9 +23,10 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; @@ -108,8 +109,8 @@ public class AddEditorshipToPersonGenerator extends VivoBaseGenerator implements conf.addField( new FieldVTwo(). setName("documentType"). setValidators( list("nonempty") ). - setOptions( new ConstantFieldOptions("documentType", getDocumentTypeLiteralOptions() )) - ); + // UQAM-Linguistic-Management vreq for linguistic context + setOptions( getDocumentTypeLiteralOptions(vreq) ) ); conf.addField( new FieldVTwo(). setName("documentLabel"). @@ -203,21 +204,22 @@ public class AddEditorshipToPersonGenerator extends VivoBaseGenerator implements return null; } - private List> getDocumentTypeLiteralOptions() { - List> literalOptions = new ArrayList>(); - literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book")); - literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter")); - literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book")); - literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film")); - literalOptions.add(list("http://purl.org/ontology/bibo/Magazine", "Magazine")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter")); - literalOptions.add(list("http://purl.org/ontology/bibo/Newspaper", "Newspaper")); - literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release")); - literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video")); - literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage")); - literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website")); - return literalOptions; + private FieldOptions getDocumentTypeLiteralOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://purl.org/ontology/bibo/Book", + "http://purl.org/ontology/bibo/Chapter", + "http://purl.org/ontology/bibo/EditedBook", + "http://purl.org/ontology/bibo/Film", + "http://purl.org/ontology/bibo/Magazine", + "http://vivoweb.org/ontology/core#Newsletter", + "http://purl.org/ontology/bibo/Newspaper", + "http://vivoweb.org/ontology/core#NewsRelease", + "http://purl.org/ontology/bibo/Report", + "http://vivoweb.org/ontology/core#Video", + "http://purl.org/ontology/bibo/Webpage", + "http://purl.org/ontology/bibo/Website"); } } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddHeadOfRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddHeadOfRoleToPersonGenerator.java index 8afed1e4..0c375af0 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddHeadOfRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddHeadOfRoleToPersonGenerator.java @@ -5,6 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; +import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle; public class AddHeadOfRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -25,10 +27,14 @@ public class AddHeadOfRoleToPersonGenerator extends AddRoleToPersonTwoStageGener /** Head Of role involves hard-coded options for the "right side" of the role or activity */ @Override FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + // UQAM-Linguistic-Management Taking into account the linguistic context + I18nBundle i18n = I18n.bundle(vreq); + String i18nSelectType = i18n.text("select_type"); + String selectType = (i18nSelectType == null || i18nSelectType.isEmpty()) ? "Select type" : i18nSelectType ; return new ChildVClassesOptions(OPTION_CLASS_URI) - .setDefaultOptionLabel("Select type"); + .setDefaultOptionLabel(selectType); } @Override diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddMemberRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddMemberRoleToPersonGenerator.java index ba79af35..fed25fb3 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddMemberRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddMemberRoleToPersonGenerator.java @@ -2,9 +2,28 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.apache.jena.query.Query; +import org.apache.jena.query.QueryExecution; +import org.apache.jena.query.QueryExecutionFactory; +import org.apache.jena.query.QueryFactory; +import org.apache.jena.query.QuerySolution; +import org.apache.jena.query.ResultSet; +import org.apache.jena.rdf.model.AnonId; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; + import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; +import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle; +import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; +import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; public class AddMemberRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -20,44 +39,45 @@ public class AddMemberRoleToPersonGenerator extends AddRoleToPersonTwoStageGener return "http://vivoweb.org/ontology/core#MemberRole"; } - @Override - FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "","Select type", - "http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", - "http://vivoweb.org/ontology/core#Association","Association", - "http://vivoweb.org/ontology/core#Center","Center", - "http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", - "http://vivoweb.org/ontology/core#College","College", - "http://vivoweb.org/ontology/core#Committee","Committee", - "http://vivoweb.org/ontology/core#Company","Company", - "http://vivoweb.org/ontology/core#Consortium","Consortium", - "http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", - "http://vivoweb.org/ontology/core#Department","Department", - "http://vivoweb.org/ontology/core#Division","Division", - "http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", - "http://vivoweb.org/ontology/core#Foundation","Foundation", - "http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", - "http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", - "http://xmlns.com/foaf/0.1/Group","Group", - "http://vivoweb.org/ontology/core#Hospital","Hospital", - "http://vivoweb.org/ontology/core#Institute","Institute", - "http://vivoweb.org/ontology/core#Laboratory","Laboratory", - "http://vivoweb.org/ontology/core#Library","Library", - "http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", - "http://vivoweb.org/ontology/core#Museum","Museum", - "http://xmlns.com/foaf/0.1/Organization","Organization", - "http://vivoweb.org/ontology/core#PrivateCompany","Private Company", - "http://vivoweb.org/ontology/core#Program","Program", - "http://vivoweb.org/ontology/core#Publisher","Publisher", - "http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", - "http://vivoweb.org/ontology/core#School","School", - "http://vivoweb.org/ontology/core#Team","Team", - "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", - "http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", - "http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", - "http://vivoweb.org/ontology/core#University","University"); - } + + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#AcademicDepartment", + "http://vivoweb.org/ontology/core#Association", + "http://vivoweb.org/ontology/core#Center", + "http://vivoweb.org/ontology/core#ClinicalOrganization", + "http://vivoweb.org/ontology/core#College", + "http://vivoweb.org/ontology/core#Committee", + "http://vivoweb.org/ontology/core#Company", + "http://vivoweb.org/ontology/core#Consortium", + "http://vivoweb.org/ontology/core#CoreLaboratory", + "http://vivoweb.org/ontology/core#Department", + "http://vivoweb.org/ontology/core#Division", + "http://vivoweb.org/ontology/core#ExtensionUnit", + "http://vivoweb.org/ontology/core#Foundation", + "http://vivoweb.org/ontology/core#FundingOrganization", + "http://vivoweb.org/ontology/core#GovernmentAgency", + "http://xmlns.com/foaf/0.1/Group", + "http://vivoweb.org/ontology/core#Hospital", + "http://vivoweb.org/ontology/core#Institute", + "http://vivoweb.org/ontology/core#Laboratory", + "http://vivoweb.org/ontology/core#Library", + "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */, + "http://vivoweb.org/ontology/core#Museum", + "http://xmlns.com/foaf/0.1/Organization", + "http://vivoweb.org/ontology/core#PrivateCompany", + "http://vivoweb.org/ontology/core#Program", + "http://vivoweb.org/ontology/core#Publisher", + "http://vivoweb.org/ontology/core#ResearchOrganization", + "http://vivoweb.org/ontology/core#School", + "http://vivoweb.org/ontology/core#Team", + "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory", + "http://vivoweb.org/ontology/core#StudentOrganization", + "http://purl.obolibrary.org/obo/ERO_0000565" /* Technology Transfer Office */, + "http://vivoweb.org/ontology/core#University"); + } @Override boolean isShowRoleLabelField(){return true;} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOrganizerRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOrganizerRoleToPersonGenerator.java index 1dec78f5..4e1f41d4 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOrganizerRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOrganizerRoleToPersonGenerator.java @@ -3,8 +3,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddOrganizerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -22,26 +22,27 @@ public class AddOrganizerRoleToPersonGenerator extends AddRoleToPersonTwoStageGe } //Organizer role involves hard-coded options for the "right side" of the role or activity - @Override - FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "","Select type", - "http://vivoweb.org/ontology/core#Competition", "Competition", - "http://purl.org/ontology/bibo/Conference", "Conference", - "http://vivoweb.org/ontology/core#Course", "Course", - "http://purl.org/NET/c4dm/event.owl#Event", "Event", - "http://vivoweb.org/ontology/core#Exhibit", "Exhibit", - "http://purl.org/ontology/bibo/Hearing", "Hearing", - "http://purl.org/ontology/bibo/Interview", "Interview", - "http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", - "http://vivoweb.org/ontology/core#Meeting", "Meeting", - "http://purl.org/ontology/bibo/Performance", "Performance", - "http://vivoweb.org/ontology/core#Presentation", "Presentation", - "http://purl.org/ontology/bibo/Workshop", "Workshop", - "http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", - "http://vivoweb.org/ontology/core#EventSeries", "Event Series", - "http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", - "http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), + "", I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#Competition", + "http://purl.org/ontology/bibo/Conference", + "http://vivoweb.org/ontology/core#Course", + "http://purl.org/NET/c4dm/event.owl#Event", + "http://vivoweb.org/ontology/core#Exhibit", + "http://purl.org/ontology/bibo/Hearing", + "http://purl.org/ontology/bibo/Interview", + "http://vivoweb.org/ontology/core#InvitedTalk", + "http://vivoweb.org/ontology/core#Meeting", + "http://purl.org/ontology/bibo/Performance", + "http://vivoweb.org/ontology/core#Presentation", + "http://purl.org/ontology/bibo/Workshop", + "http://vivoweb.org/ontology/core#ConferenceSeries", + "http://vivoweb.org/ontology/core#EventSeries", + "http://vivoweb.org/ontology/core#SeminarSeries", + "http://vivoweb.org/ontology/core#WorkshopSeries"); } @Override diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOutreachProviderRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOutreachProviderRoleToPersonGenerator.java index 0a69623e..4ee44601 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOutreachProviderRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddOutreachProviderRoleToPersonGenerator.java @@ -3,8 +3,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddOutreachProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -22,59 +22,60 @@ public class AddOutreachProviderRoleToPersonGenerator extends AddRoleToPersonTwo } //Outreach Provider role involves hard-coded options for the "right side" of the role or activity - @Override - FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "","Select type", - "http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", - "http://vivoweb.org/ontology/core#Association","Association", - "http://vivoweb.org/ontology/core#Center","Center", - "http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", - "http://vivoweb.org/ontology/core#College","College", - "http://vivoweb.org/ontology/core#Committee","Committee", - "http://vivoweb.org/ontology/core#Company","Company", - "http://vivoweb.org/ontology/core#Competition", "Competition", - "http://purl.org/ontology/bibo/Conference", "Conference", - "http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", - "http://vivoweb.org/ontology/core#Consortium","Consortium", - "http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", - "http://vivoweb.org/ontology/core#Course", "Course", - "http://vivoweb.org/ontology/core#Department","Department", - "http://vivoweb.org/ontology/core#Division","Division", - "http://purl.org/NET/c4dm/event.owl#Event","Event", - "http://vivoweb.org/ontology/core#EventSeries", "Event Series", - "http://vivoweb.org/ontology/core#Exhibit", "Exhibit", - "http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", - "http://vivoweb.org/ontology/core#Foundation","Foundation", - "http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", - "http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", - "http://xmlns.com/foaf/0.1/Group","Group", - "http://purl.org/ontology/bibo/Hearing", "Hearing", - "http://vivoweb.org/ontology/core#Hospital","Hospital", - "http://vivoweb.org/ontology/core#Institute","Institute", - "http://purl.org/ontology/bibo/Interview", "Interview", - "http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", - "http://vivoweb.org/ontology/core#Laboratory","Laboratory", - "http://vivoweb.org/ontology/core#Library","Library", - "http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", - "http://vivoweb.org/ontology/core#Meeting", "Meeting", - "http://vivoweb.org/ontology/core#Museum","Museum", - "http://xmlns.com/foaf/0.1/Organization","Organization", - "http://purl.org/ontology/bibo/Performance", "Performance", - "http://vivoweb.org/ontology/core#Presentation", "Presentation", - "http://vivoweb.org/ontology/core#PrivateCompany","Private Company", - "http://vivoweb.org/ontology/core#Program","Program", - "http://vivoweb.org/ontology/core#Publisher","Publisher", - "http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", - "http://vivoweb.org/ontology/core#School","School", - "http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", - "http://vivoweb.org/ontology/core#Team","Team", - "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", - "http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", - "http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", - "http://vivoweb.org/ontology/core#University","University", - "http://purl.org/ontology/bibo/Workshop", "Workshop", - "http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); + @Override + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#AcademicDepartment", + "http://vivoweb.org/ontology/core#Association", + "http://vivoweb.org/ontology/core#Center", + "http://vivoweb.org/ontology/core#ClinicalOrganization", + "http://vivoweb.org/ontology/core#College", + "http://vivoweb.org/ontology/core#Committee", + "http://vivoweb.org/ontology/core#Company", + "http://vivoweb.org/ontology/core#Competition", + "http://purl.org/ontology/bibo/Conference", + "http://vivoweb.org/ontology/core#ConferenceSeries", + "http://vivoweb.org/ontology/core#Consortium", + "http://vivoweb.org/ontology/core#CoreLaboratory", + "http://vivoweb.org/ontology/core#Course", + "http://vivoweb.org/ontology/core#Department", + "http://vivoweb.org/ontology/core#Division", + "http://purl.org/NET/c4dm/event.owl#Event", + "http://vivoweb.org/ontology/core#EventSeries", + "http://vivoweb.org/ontology/core#Exhibit", + "http://vivoweb.org/ontology/core#ExtensionUnit", + "http://vivoweb.org/ontology/core#Foundation", + "http://vivoweb.org/ontology/core#FundingOrganization", + "http://vivoweb.org/ontology/core#GovernmentAgency", + "http://xmlns.com/foaf/0.1/Group", + "http://purl.org/ontology/bibo/Hearing", + "http://vivoweb.org/ontology/core#Hospital", + "http://vivoweb.org/ontology/core#Institute", + "http://purl.org/ontology/bibo/Interview", + "http://vivoweb.org/ontology/core#InvitedTalk", + "http://vivoweb.org/ontology/core#Laboratory", + "http://vivoweb.org/ontology/core#Library", + "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */, + "http://vivoweb.org/ontology/core#Meeting", + "http://vivoweb.org/ontology/core#Museum", + "http://xmlns.com/foaf/0.1/Organization", + "http://purl.org/ontology/bibo/Performance", + "http://vivoweb.org/ontology/core#Presentation", + "http://vivoweb.org/ontology/core#PrivateCompany", + "http://vivoweb.org/ontology/core#Program", + "http://vivoweb.org/ontology/core#Publisher", + "http://vivoweb.org/ontology/core#ResearchOrganization", + "http://vivoweb.org/ontology/core#School", + "http://vivoweb.org/ontology/core#SeminarSeries", + "http://vivoweb.org/ontology/core#Team", + "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory", + "http://vivoweb.org/ontology/core#StudentOrganization", + "http://purl.obolibrary.org/obo/ERO_0000565" /*Technology Transfer Office*/, + "http://vivoweb.org/ontology/core#University", + "http://purl.org/ontology/bibo/Workshop", + "http://vivoweb.org/ontology/core#WorkshopSeries"); } @Override diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java index e1bb91f8..2f998291 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddPublicationToPersonGenerator.java @@ -29,8 +29,10 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisio import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; @@ -624,7 +626,8 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq) throws Exception { setTitleField(editConfiguration); - setPubTypeField(editConfiguration); + //UQAM-Linguistic-Management needs for getting appropriated value in the linguistic context + setPubTypeField(editConfiguration, vreq); setPubUriField(editConfiguration); setCollectionLabelField(editConfiguration); setCollectionDisplayField(editConfiguration); @@ -664,13 +667,14 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement setRangeDatatypeUri(stringDatatypeUri)); } - private void setPubTypeField(EditConfigurationVTwo editConfiguration) throws Exception { - editConfiguration.addField(new FieldVTwo(). - setName("pubType"). - setValidators( list("nonempty") ). - setOptions( new ConstantFieldOptions("pubType", getPublicationTypeLiteralOptions() )) - ); - } + //UQAM-Linguistic-Management add vreq to get linguistic context + private void setPubTypeField(EditConfigurationVTwo editConfiguration, VitroRequest vreq) throws Exception { + editConfiguration.addField(new FieldVTwo(). + setName("pubType"). + setValidators( list("nonempty") ). + setOptions( getPublicationTypeLiteralOptions(vreq) ) + ); + } private void setPubUriField(EditConfigurationVTwo editConfiguration) { editConfiguration.addField(new FieldVTwo(). @@ -886,39 +890,40 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement ); } - private List> getPublicationTypeLiteralOptions() { - List> literalOptions = new ArrayList>(); - literalOptions.add(list("http://vivoweb.org/ontology/core#Abstract", "Abstract")); - literalOptions.add(list("http://purl.org/ontology/bibo/AcademicArticle", "Academic Article")); - literalOptions.add(list("http://purl.org/ontology/bibo/Article", "Article")); - literalOptions.add(list("http://purl.org/ontology/bibo/AudioDocument", "Audio Document")); - literalOptions.add(list("http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting")); - literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book")); - literalOptions.add(list("http://vivoweb.org/ontology/core#CaseStudy", "Case Study")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Catalog", "Catalog")); - literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter")); - literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper")); - literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Database", "Database")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Dataset", "Dataset")); - literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book")); - literalOptions.add(list("http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article")); - literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter")); - literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release")); - literalOptions.add(list("http://purl.org/ontology/bibo/Patent", "Patent")); - literalOptions.add(list("http://purl.obolibrary.org/obo/OBI_0000272", "Protocol")); - literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report")); - literalOptions.add(list("http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Review", "Review")); - literalOptions.add(list("http://purl.obolibrary.org/obo/ERO_0000071 ", "Software")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Speech", "Speech")); - literalOptions.add(list("http://purl.org/ontology/bibo/Thesis", "Thesis")); - literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video")); - literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage")); - literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website")); - literalOptions.add(list("http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper")); - return literalOptions; + private FieldOptions getPublicationTypeLiteralOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#Abstract", + "http://purl.org/ontology/bibo/AcademicArticle", + "http://purl.org/ontology/bibo/Article", + "http://purl.org/ontology/bibo/AudioDocument", + "http://vivoweb.org/ontology/core#BlogPosting", + "http://purl.org/ontology/bibo/Book", + "http://vivoweb.org/ontology/core#CaseStudy", + "http://vivoweb.org/ontology/core#Catalog", + "http://purl.org/ontology/bibo/Chapter", + "http://vivoweb.org/ontology/core#ConferencePaper", + "http://vivoweb.org/ontology/core#ConferencePoster", + "http://vivoweb.org/ontology/core#Database", + "http://vivoweb.org/ontology/core#Dataset", + "http://purl.org/ontology/bibo/EditedBook", + "http://vivoweb.org/ontology/core#EditorialArticle", + "http://purl.org/ontology/bibo/Film", + "http://vivoweb.org/ontology/core#Newsletter", + "http://vivoweb.org/ontology/core#NewsRelease", + "http://purl.org/ontology/bibo/Patent", + "http://purl.obolibrary.org/obo/OBI_0000272", + "http://purl.org/ontology/bibo/Report", + "http://vivoweb.org/ontology/core#ResearchProposal", + "http://vivoweb.org/ontology/core#Review", + "http://purl.obolibrary.org/obo/ERO_0000071 ", + "http://vivoweb.org/ontology/core#Speech", + "http://purl.org/ontology/bibo/Thesis", + "http://vivoweb.org/ontology/core#Video", + "http://purl.org/ontology/bibo/Webpage", + "http://purl.org/ontology/bibo/Website", + "http://vivoweb.org/ontology/core#WorkingPaper"); } //Form specific data diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddResearcherRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddResearcherRoleToPersonGenerator.java index ae3bd262..59efadaa 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddResearcherRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddResearcherRoleToPersonGenerator.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddResearcherRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -23,12 +24,13 @@ public class AddResearcherRoleToPersonGenerator extends AddRoleToPersonTwoStageG /** Researcher role involves hard-coded options for the "right side" of the role or activity. */ @Override FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "", "Select one", - "http://vivoweb.org/ontology/core#Grant", "Grant", - "http://purl.obolibrary.org/obo/ERO_0000015", "Human Study", - "http://vivoweb.org/ontology/core#Project", "Project", - "http://purl.obolibrary.org/obo/ERO_0000014", "Research Project"); + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://vivoweb.org/ontology/core#Grant", + "http://purl.obolibrary.org/obo/ERO_0000015" /* Human Study" */, + "http://vivoweb.org/ontology/core#Project", + "http://purl.obolibrary.org/obo/ERO_0000014" /* Research Project */); } @Override diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddReviewerRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddReviewerRoleToPersonGenerator.java index b12452d7..b8d07a44 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddReviewerRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddReviewerRoleToPersonGenerator.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddReviewerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -32,80 +33,80 @@ public class AddReviewerRoleToPersonGenerator extends AddRoleToPersonTwoStageGen * Each subclass generator will return its own type of option here: * whether literal hardcoded, based on class group, or subclasses of a specific class */ - @Override - FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "", "Select type", - "http://purl.org/ontology/bibo/AcademicArticle", "Academic Article", - "http://purl.org/ontology/bibo/Article", "Article", - "http://purl.org/ontology/bibo/AudioDocument", "Audio Document", - "http://purl.org/ontology/bibo/AudioVisualDocument", "Audio-Visual Document", - "http://purl.org/ontology/bibo/Bill", "Bill", - "http://vivoweb.org/ontology/core#Blog", "Blog", - "http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting", - "http://purl.org/ontology/bibo/Book", "Book", - "http://purl.org/ontology/bibo/BookSection", "Book Section", - "http://purl.org/ontology/bibo/Brief", "Brief", - "http://vivoweb.org/ontology/core#CaseStudy", "Case Study", - "http://vivoweb.org/ontology/core#Catalog", "Catalog", - "http://purl.org/ontology/bibo/Chapter", "Chapter", - "http://purl.org/spar/fabio/ClinicalGuideline", "Clinical Guideline", - "http://purl.org/ontology/bibo/Code", "Code", - "http://purl.org/ontology/bibo/CollectedDocument", "Collected Document", - "http://purl.org/spar/fabio/Comment", "Comment", - "http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper", - "http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster", - "http://purl.org/ontology/bibo/CourtReporter", "Court Reporter", - "http://vivoweb.org/ontology/core#Database", "Database", - "http://purl.org/ontology/bibo/LegalDecision", "Decision", - "http://purl.org/ontology/bibo/DocumentPart", "Document Part", - "http://purl.org/ontology/bibo/EditedBook", "Edited Book", - "http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article", - "http://purl.org/spar/fabio/Erratum", "Erratum", - "http://purl.org/ontology/bibo/Excerpt", "Excerpt", - "http://purl.org/ontology/bibo/Film", "Film", - "http://purl.org/ontology/bibo/Image", "Image", - "http://purl.org/ontology/bibo/Issue", "Issue", - "http://purl.org/ontology/bibo/Journal", "Journal", - "http://purl.obolibrary.org/obo/IAO_0000013", "Journal Article", - "http://purl.org/ontology/bibo/LegalCaseDocument", "Legal Case Document", - "http://purl.org/ontology/bibo/LegalDocument", "Legal Document", - "http://purl.org/ontology/bibo/Legislation", "Legislation", - "http://purl.org/ontology/bibo/Letter", "Letter", - "http://purl.org/ontology/bibo/Magazine", "Magazine", - "http://purl.org/ontology/bibo/Manual", "Manual", - "http://purl.org/ontology/bibo/Manuscript", "Manuscript", - "http://purl.org/ontology/bibo/Map", "Map", - "http://vivoweb.org/ontology/core#Newsletter", "Newsletter", - "http://purl.org/ontology/bibo/Newspaper", "Newspaper", - "http://vivoweb.org/ontology/core#NewsRelease", "News Release", - "http://purl.org/ontology/bibo/Note", "Note", - "http://purl.org/ontology/bibo/Patent", "Patent", - "http://purl.org/ontology/bibo/Periodical", "Periodical", - "http://purl.org/ontology/bibo/PersonalCommunicationDocument", "Personal Communication Document", - "http://purl.org/ontology/bibo/Proceedings", "Proceedings", - "http://purl.obolibrary.org/obo/OBI_0000272", "protocol", - "http://purl.org/ontology/bibo/Quote", "Quote", - "http://purl.org/ontology/bibo/ReferenceSource", "Reference Source", - "http://purl.org/ontology/bibo/Report", "Report", - "http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal", - "http://vivoweb.org/ontology/core#Review", "Review", - "http://vivoweb.org/ontology/core#Score", "Score", - "http://vivoweb.org/ontology/core#Screenplay", "Screenplay", - "http://purl.org/ontology/bibo/Series", "Series", - "http://purl.org/ontology/bibo/Slide", "Slide", - "http://purl.org/ontology/bibo/Slideshow", "Slideshow", - "http://vivoweb.org/ontology/core#Speech", "Speech", - "http://purl.org/ontology/bibo/Standard", "Standard", - "http://purl.org/ontology/bibo/Statute", "Statute", - "http://purl.org/ontology/bibo/Thesis", "Thesis", - "http://vivoweb.org/ontology/core#Translation", "Translation", - "http://vivoweb.org/ontology/core#Video", "Video", - "http://purl.org/ontology/bibo/Webpage", "Webpage", - "http://purl.org/ontology/bibo/Website", "Website", - "http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper" - ); - } + @Override + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "http://purl.org/ontology/bibo/AcademicArticle", + "http://purl.org/ontology/bibo/Article", + "http://purl.org/ontology/bibo/AudioDocument", + "http://purl.org/ontology/bibo/AudioVisualDocument", + "http://purl.org/ontology/bibo/Bill", + "http://vivoweb.org/ontology/core#Blog", + "http://vivoweb.org/ontology/core#BlogPosting", + "http://purl.org/ontology/bibo/Book", + "http://purl.org/ontology/bibo/BookSection", + "http://purl.org/ontology/bibo/Brief", + "http://vivoweb.org/ontology/core#CaseStudy", + "http://vivoweb.org/ontology/core#Catalog", + "http://purl.org/ontology/bibo/Chapter", + "http://purl.org/spar/fabio/ClinicalGuideline", + "http://purl.org/ontology/bibo/Code", + "http://purl.org/ontology/bibo/CollectedDocument", + "http://purl.org/spar/fabio/Comment", + "http://vivoweb.org/ontology/core#ConferencePaper", + "http://vivoweb.org/ontology/core#ConferencePoster", + "http://purl.org/ontology/bibo/CourtReporter", + "http://vivoweb.org/ontology/core#Database", + "http://purl.org/ontology/bibo/LegalDecision", + "http://purl.org/ontology/bibo/DocumentPart", + "http://purl.org/ontology/bibo/EditedBook", + "http://vivoweb.org/ontology/core#EditorialArticle", + "http://purl.org/spar/fabio/Erratum", + "http://purl.org/ontology/bibo/Excerpt", + "http://purl.org/ontology/bibo/Film", + "http://purl.org/ontology/bibo/Image", + "http://purl.org/ontology/bibo/Issue", + "http://purl.org/ontology/bibo/Journal", + "http://purl.obolibrary.org/obo/IAO_0000013" /* "Journal Article" */, + "http://purl.org/ontology/bibo/LegalCaseDocument", + "http://purl.org/ontology/bibo/LegalDocument", + "http://purl.org/ontology/bibo/Legislation", + "http://purl.org/ontology/bibo/Letter", + "http://purl.org/ontology/bibo/Magazine", + "http://purl.org/ontology/bibo/Manual", + "http://purl.org/ontology/bibo/Manuscript", + "http://purl.org/ontology/bibo/Map", + "http://vivoweb.org/ontology/core#Newsletter", + "http://purl.org/ontology/bibo/Newspaper", + "http://vivoweb.org/ontology/core#NewsRelease", + "http://purl.org/ontology/bibo/Note", + "http://purl.org/ontology/bibo/Patent", + "http://purl.org/ontology/bibo/Periodical", + "http://purl.org/ontology/bibo/PersonalCommunicationDocument", + "http://purl.org/ontology/bibo/Proceedings", + "http://purl.obolibrary.org/obo/OBI_0000272" /* Protocol" */, + "http://purl.org/ontology/bibo/Quote", + "http://purl.org/ontology/bibo/ReferenceSource", + "http://purl.org/ontology/bibo/Report", + "http://vivoweb.org/ontology/core#ResearchProposal", + "http://vivoweb.org/ontology/core#Review", + "http://vivoweb.org/ontology/core#Score", + "http://vivoweb.org/ontology/core#Screenplay", + "http://purl.org/ontology/bibo/Series", + "http://purl.org/ontology/bibo/Slide", + "http://purl.org/ontology/bibo/Slideshow", + "http://vivoweb.org/ontology/core#Speech", + "http://purl.org/ontology/bibo/Standard", + "http://purl.org/ontology/bibo/Statute", + "http://purl.org/ontology/bibo/Thesis", + "http://vivoweb.org/ontology/core#Translation", + "http://vivoweb.org/ontology/core#Video", + "http://purl.org/ontology/bibo/Webpage", + "http://purl.org/ontology/bibo/Website", + "http://vivoweb.org/ontology/core#WorkingPaper"); + } //isShowRoleLabelField remains true for this so doesn't need to be overwritten public boolean isShowRoleLabelField() { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRoleToPersonTwoStageGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRoleToPersonTwoStageGenerator.java index d29a437c..8e7c6757 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRoleToPersonTwoStageGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRoleToPersonTwoStageGenerator.java @@ -415,7 +415,7 @@ public abstract class AddRoleToPersonTwoStageGenerator extends BaseEditConfigura //make list of type URIs from options, this can be called with null since //ConstantFieldOptions doesn't use any of the arguments. - Map options = fieldOptions.getOptions(null, null, null) ; + Map options = fieldOptions.getOptions(null, null, null, null) ; if (options != null && options.size() > 0) { List typeUris = new ArrayList(); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRubricToELENPHArticleGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRubricToELENPHArticleGenerator.java deleted file mode 100644 index 59dd0144..00000000 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRubricToELENPHArticleGenerator.java +++ /dev/null @@ -1,649 +0,0 @@ -/* $This file is distributed under the terms of the license in LICENSE$ */ - -package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; - -import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames.DISPLAY; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpSession; - -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.JspToGeneratorMapping; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.apache.jena.ontology.OntModel; -import org.apache.jena.query.QuerySolution; -import org.apache.jena.query.ResultSet; -import org.apache.jena.rdf.model.Literal; - -import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils; -import edu.cornell.mannlib.vitro.webapp.beans.Individual; -import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; -import edu.cornell.mannlib.vitro.webapp.beans.VClass; -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; -import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils; -import edu.cornell.mannlib.vitro.webapp.dao.vclassgroup.ProhibitedFromSearch; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaObjectPropetyOptions; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; -import edu.cornell.mannlib.vitro.webapp.i18n.I18n; -import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; -import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine; -import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngineException; -import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchQuery; -import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResponse; -import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResultDocumentList; -import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames; -import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils; -import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; - -/** - * Generates the edit configuration for a default property form. - * This handles the default object property auto complete. - * - * If a default property form is request and the number of indivdiuals - * found in the range is too large, the the auto complete setup and - * template will be used instead. - */ -public class AddRubricToELENPHArticleGenerator implements EditConfigurationGenerator { - - private Log log = LogFactory.getLog(AddRubricToELENPHArticleGenerator.class); - private String subjectUri = null; - private String predicateUri = null; - private String objectUri = null; - - private String objectPropertyTemplate = "defaultPropertyForm.ftl"; - private String acObjectPropertyTemplate = "autoCompleteObjectPropForm.ftl"; - - private ArrayList excerptIDs= new ArrayList(); - - protected boolean doAutoComplete = false; - protected boolean tooManyRangeIndividuals = false; - - protected long maxNonACRangeIndividualCount = 300; - protected String customErrorMessages = null; - - @Override - public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, - HttpSession session) throws Exception { - - if(!EditConfigurationUtils.isObjectProperty(EditConfigurationUtils.getPredicateUri(vreq), vreq)) { - throw new Exception("DefaultObjectPropertyFormGenerator does not handle data properties."); - } - - //Custom error can also be represented as an exception above, but in this case - //we would like the page to enable the user to go back to the profile page - - customErrorMessages = getCustomErrorMessages(vreq); - if(customErrorMessages != null) { - return this.getCustomErrorEditConfiguration(vreq, session); - } - - if( tooManyRangeOptions( vreq, session ) ){ - tooManyRangeIndividuals = true; - doAutoComplete = true; - } - - //Check if create new and return specific edit configuration from that generator. - if(DefaultAddMissingIndividualFormGenerator.isCreateNewIndividual(vreq, session)) { - EditConfigurationGenerator generator = JspToGeneratorMapping.createFor("defaultAddMissingIndividualForm.jsp", DefaultAddMissingIndividualFormGenerator.class); - return generator.getEditConfiguration(vreq, session); - } - - //TODO: Add a generator for delete: based on command being delete - propDelete.jsp - //Generate a edit configuration for the default object property form and return it. - //if(DefaultDeleteGenerator.isDelete( vreq,session)){ - // return (new DefaultDeleteGenerator()).getEditConfiguration(vreq,session); - - return getDefaultObjectEditConfiguration(vreq, session); - } - - private String getCustomErrorMessages(VitroRequest vreq) { - String errorMessages = null; - String rangeUri = vreq.getParameter("rangeUri"); - VClass rangeVClass = null; - if(rangeUri != null && !rangeUri.isEmpty()) { - WebappDaoFactory ctxDaoFact = vreq.getLanguageNeutralWebappDaoFactory(); - rangeVClass = ctxDaoFact.getVClassDao().getVClassByURI(rangeUri); - if(rangeVClass == null) { - errorMessages = I18n.text(vreq,"the_range_class_does_not_exist"); - } - } - - return errorMessages; - } - - protected List getRangeTypes(VitroRequest vreq) { - // This first part needs a WebappDaoFactory with no filtering/RDFService - // funny business because it needs to be able to retrieve anonymous union - // classes by their "pseudo-bnode URIs". - // Someday we'll need to figure out a different way of doing this. - //WebappDaoFactory ctxDaoFact = ModelAccess.on( - // vreq.getSession().getServletContext()).getWebappDaoFactory(); - WebappDaoFactory ctxDaoFact = vreq.getLanguageNeutralWebappDaoFactory(); - - List types = new ArrayList(); - Individual subject = EditConfigurationUtils.getSubjectIndividual(vreq); - String predicateUri = EditConfigurationUtils.getPredicateUri(vreq); - String rangeUri = EditConfigurationUtils.getRangeUri(vreq); - if (rangeUri != null && !rangeUri.isEmpty()) { - VClass rangeVClass = ctxDaoFact.getVClassDao().getVClassByURI(rangeUri); - if(rangeVClass != null) { - if (!rangeVClass.isUnion()) { - types.add(rangeVClass); - } else { - types.addAll(rangeVClass.getUnionComponents()); - } - return types; - } else { - log.error("Range VClass does not exist for " + rangeUri); - } - } - WebappDaoFactory wDaoFact = vreq.getWebappDaoFactory(); - //Get all vclasses applicable to subject - if(subject != null) { - List vClasses = subject.getVClasses(); - HashMap typesHash = new HashMap(); - for(VClass vclass: vClasses) { - List rangeVclasses = wDaoFact.getVClassDao().getVClassesForProperty(vclass.getURI(),predicateUri); - if(rangeVclasses != null) { - for(VClass range: rangeVclasses) { - //a hash will keep a unique list of types and so prevent duplicates - typesHash.put(range.getURI(), range); - } - } - } - types.addAll(typesHash.values()); - } else { - log.error("Subject individual was null for"); - } - return types; - } - - private boolean tooManyRangeOptions(VitroRequest vreq, HttpSession session ) throws SearchEngineException { - List rangeTypes = getRangeTypes(vreq); - SearchEngine searchEngine = ApplicationUtils.instance().getSearchEngine(); - - List types = new ArrayList(); - for (VClass vclass : rangeTypes) { - if (vclass.getURI() != null) { - types.add(vclass.getURI()); - } - } - - //empty list means the range is not set to anything, force Thing - if(types.size() == 0 ){ - types.add(VitroVocabulary.OWL_THING); - } - - long count = 0; - for( String type:types){ - //search query for type count. - SearchQuery query = searchEngine.createQuery(); - if( VitroVocabulary.OWL_THING.equals( type )){ - query.setQuery( "*:*" ); - }else{ - query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type); - } - query.setRows(0); - SearchResponse rsp = searchEngine.query(query); - SearchResultDocumentList docs = rsp.getResults(); - long found = docs.getNumFound(); - count = count + found; - if( count > maxNonACRangeIndividualCount ) - break; - } - - return count > maxNonACRangeIndividualCount ; - } - - - private EditConfigurationVTwo getDefaultObjectEditConfiguration(VitroRequest vreq, HttpSession session) throws Exception { - EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo(); - - //process subject, predicate, object parameters - this.initProcessParameters(vreq, session, editConfiguration); - - //Assumes this is a simple case of subject predicate var - editConfiguration.setN3Required(this.generateN3Required(vreq)); - - //n3 optional - editConfiguration.setN3Optional(this.generateN3Optional()); - - //Todo: what do new resources depend on here? - //In original form, these variables start off empty - editConfiguration.setNewResources(new HashMap()); - //In scope - this.setUrisAndLiteralsInScope(editConfiguration); - - //on Form - this.setUrisAndLiteralsOnForm(editConfiguration, vreq); - - editConfiguration.setFilesOnForm(new ArrayList()); - - //Sparql queries - this.setSparqlQueries(editConfiguration); - - //set fields - setFields(editConfiguration, vreq, EditConfigurationUtils.getPredicateUri(vreq), getRangeTypes(vreq)); - - // No need to put in session here b/c put in session within edit request dispatch controller instead - //placing in session depends on having edit key which is handled in edit request dispatch controller - // editConfiguration.putConfigInSession(editConfiguration, session); - - prepareForUpdate(vreq, session, editConfiguration); - - //After the main processing is done, check if select from existing process - processProhibitedFromSearch(vreq, session, editConfiguration); - - //Form title and submit label moved to template - setTemplate(editConfiguration, vreq); - - editConfiguration.addValidator(new AntiXssValidation()); - - //Set edit key - setEditKey(editConfiguration, vreq); - - //Adding additional data, specifically edit mode - if( doAutoComplete ){ - addFormSpecificDataForAC(editConfiguration, vreq, session); - }else{ - addFormSpecificData(editConfiguration, vreq); - } - - return editConfiguration; - } - - //We only need enough for the error message to show up - private EditConfigurationVTwo getCustomErrorEditConfiguration(VitroRequest vreq, HttpSession session) { - EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo(); - - //process subject, predicate, object parameters - this.initProcessParameters(vreq, session, editConfiguration); - - this.setUrisAndLiteralsInScope(editConfiguration); - - //Sparql queries - this.setSparqlQueries(editConfiguration); - - - prepareForUpdate(vreq, session, editConfiguration); - - editConfiguration.setTemplate("customErrorMessages.ftl"); - - //Set edit key - setEditKey(editConfiguration, vreq); - - //if custom error messages is not null, then add to form specific data - if(customErrorMessages != null) { - //at this point, it shouldn't be null - HashMap formSpecificData = new HashMap(); - formSpecificData.put("customErrorMessages", customErrorMessages); - editConfiguration.setFormSpecificData(formSpecificData); - } - return editConfiguration; - } - - private void setEditKey(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { - String editKey = EditConfigurationUtils.getEditKey(vreq); - editConfiguration.setEditKey(editKey); - } - - private void setTemplate(EditConfigurationVTwo editConfiguration, - VitroRequest vreq) { - if( doAutoComplete ) - editConfiguration.setTemplate(acObjectPropertyTemplate); - else - editConfiguration.setTemplate(objectPropertyTemplate); - - } - - //Initialize setup: process parameters - private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); - - subjectUri = EditConfigurationUtils.getSubjectUri(vreq); - predicateUri = EditConfigurationUtils.getPredicateUri(vreq); - - editConfiguration.setFormUrl(formUrl); - - editConfiguration.setUrlPatternToReturnTo("/individual"); - - editConfiguration.setVarNameForSubject("subject"); - editConfiguration.setSubjectUri(subjectUri); - editConfiguration.setEntityToReturnTo(subjectUri); - editConfiguration.setVarNameForPredicate("predicate"); - editConfiguration.setPredicateUri(predicateUri); - - - //this needs to be set for the editing to be triggered properly, otherwise the 'prepare' method - //pretends this is a data property editing statement and throws an error - //"object" : [ "objectVar" , "${objectUriJson}" , "URI"], - if(EditConfigurationUtils.isObjectProperty(predicateUri, vreq)) { - log.debug("This is an predicate property: " + predicateUri); - log.debug("This is an subject property: " + subjectUri); - - this.initObjectParameters(vreq); - log.debug("This is an object property: " + objectUri); - this.processObjectPropForm(vreq, editConfiguration); - } else { - log.debug("This is a data property: " + predicateUri); - } - } - - - private void initObjectParameters(VitroRequest vreq) { - //in case of object property - objectUri = EditConfigurationUtils.getObjectUri(vreq); - } - - private void processObjectPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) { - editConfiguration.setVarNameForObject("objectVar"); - editConfiguration.setObject(objectUri); - //this needs to be set for the editing to be triggered properly, otherwise the 'prepare' method - //pretends this is a data property editing statement and throws an error - //TODO: Check if null in case no object uri exists but this is still an object property - } - - //Get N3 required - //Handles both object and data property - private List generateN3Required(VitroRequest vreq) { - List n3ForEdit = new ArrayList(); - getTextExcerpts(vreq); - if (excerptIDs.isEmpty()) { - String editString = "?subject ?predicate ?objectVar ."; - n3ForEdit.add(editString); - } else { - for (String excerptID : excerptIDs) { - String editString = "<"+excerptID+">" + " ?predicate ?objectVar ."; - log.debug(editString); - n3ForEdit.add(editString); - } - } - return n3ForEdit; - } - - private List generateN3Optional() { - List n3Inverse = new ArrayList(); - n3Inverse.add("?objectVar ?inverseProp ?subject ."); - return n3Inverse; - } - - private void getTextExcerpts(VitroRequest vreq) { - ResultSet excerptResults = QueryUtils.getLanguageNeutralQueryResults(getExcerptsQueryString(), vreq); - while (excerptResults.hasNext()) { - QuerySolution solution = excerptResults.nextSolution(); - String excerptID = solution.get("excerptID").asResource().toString(); - log.debug(excerptID); - excerptIDs.add(excerptID); - } - } - - private String getExcerptsQueryString() { - return "PREFIX ts_: " - +"SELECT DISTINCT ?excerptID " - +"WHERE { " - +"<" + subjectUri + "> ts_:hasTOC ?toc . " - +"?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerptID . " - +"} "; - } - - - //Set queries - private String retrieveQueryForInverse () { - String queryForInverse = "PREFIX owl: " - + " SELECT ?inverse_property " - + " WHERE { ?inverse_property owl:inverseOf ?predicate } "; - return queryForInverse; - } - - private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration) { - HashMap> urisInScope = new HashMap>(); - //note that at this point the subject, predicate, and object var parameters have already been processed - urisInScope.put(editConfiguration.getVarNameForSubject(), - Arrays.asList(new String[]{editConfiguration.getSubjectUri()})); - urisInScope.put(editConfiguration.getVarNameForPredicate(), - Arrays.asList(new String[]{editConfiguration.getPredicateUri()})); - //this shoudl happen in edit configuration prepare for object prop update - //urisInScope.put(editConfiguration.getVarNameForObject(), - // Arrays.asList(new String[]{editConfiguration.getObject()})); - //inverse property uris should be included in sparql for additional uris in edit configuration - editConfiguration.setUrisInScope(urisInScope); - //Uris in scope include subject, predicate, and object var - - editConfiguration.setLiteralsInScope(new HashMap>()); - } - - //n3 should look as follows - //?subject ?predicate ?objectVar - - private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { - List urisOnForm = new ArrayList(); - List literalsOnForm = new ArrayList(); - - //uris on form should be empty if data property - urisOnForm.add("objectVar"); - - editConfiguration.setUrisOnform(urisOnForm); - editConfiguration.setLiteralsOnForm(literalsOnForm); - } - - //This is for various items - private void setSparqlQueries(EditConfigurationVTwo editConfiguration) { - //Sparql queries defining retrieval of literals etc. - editConfiguration.setSparqlForAdditionalLiteralsInScope(new HashMap()); - - Map urisInScope = new HashMap(); - urisInScope.put("inverseProp", this.retrieveQueryForInverse()); - editConfiguration.setSparqlForAdditionalUrisInScope(urisInScope); - - editConfiguration.setSparqlForExistingLiterals(generateSparqlForExistingLiterals()); - editConfiguration.setSparqlForExistingUris(generateSparqlForExistingUris()); - } - - - //Get page uri for object - private HashMap generateSparqlForExistingUris() { - HashMap map = new HashMap(); - return map; - } - - private HashMap generateSparqlForExistingLiterals() { - HashMap map = new HashMap(); - return map; - } - - protected void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri) throws Exception { - setFields(editConfiguration, vreq, predicateUri, null); - } - - protected void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri, List rangeTypes) throws Exception { - FieldVTwo field = new FieldVTwo(); - field.setName("objectVar"); - - List validators = new ArrayList(); - validators.add("nonempty"); - field.setValidators(validators); - - if( ! doAutoComplete ){ - field.setOptions( new IndividualsViaObjectPropetyOptions( - subjectUri, - predicateUri, - rangeTypes, - objectUri, - vreq )); - }else{ - field.setOptions(null); - } - - Map fields = new HashMap(); - fields.put(field.getName(), field); - - editConfiguration.setFields(fields); - } - - private void prepareForUpdate(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { - //Here, retrieve model from - OntModel model = ModelAccess.on(session.getServletContext()).getOntModel(); - //if object property - if(EditConfigurationUtils.isObjectProperty(EditConfigurationUtils.getPredicateUri(vreq), vreq)){ - Individual objectIndividual = EditConfigurationUtils.getObjectIndividual(vreq); - if(objectIndividual != null) { - //update existing object - editConfiguration.prepareForObjPropUpdate(model); - } else { - //new object to be created - editConfiguration.prepareForNonUpdate( model ); - } - } else { - throw new Error("DefaultObjectPropertyForm does not handle data properties."); - } - } - - private boolean isSelectFromExisting(VitroRequest vreq) { - String predicateUri = EditConfigurationUtils.getPredicateUri(vreq); - if(EditConfigurationUtils.isDataProperty(predicateUri, vreq)) { - return false; - } - ObjectProperty objProp = EditConfigurationUtils.getObjectPropertyForPredicate(vreq, EditConfigurationUtils.getPredicateUri(vreq)); - return objProp.getSelectFromExisting(); - } - - //Additional processing, eg. select from existing - //This is really process prohibited from search - private void processProhibitedFromSearch(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfig) { - if(isSelectFromExisting(vreq)) { - // set ProhibitedFromSearch object so picklist doesn't show - // individuals from classes that should be hidden from list views - OntModel displayOntModel = ModelAccess.on(session.getServletContext()).getOntModel(DISPLAY); - ProhibitedFromSearch pfs = new ProhibitedFromSearch( - DisplayVocabulary.SEARCH_INDEX_URI, displayOntModel); - if( editConfig != null ) - editConfig.setProhibitedFromSearch(pfs); - } - } - - //Form specific data - public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { - HashMap formSpecificData = new HashMap(); - //range options need to be stored for object property - //Store field names - List objectSelect = new ArrayList(); - objectSelect.add(editConfiguration.getVarNameForObject()); - //TODO: Check if this is the proper way to do this? - formSpecificData.put("objectSelect", objectSelect); - if(customErrorMessages != null && !customErrorMessages.isEmpty()) { - formSpecificData.put("customErrorMessages", customErrorMessages); - } - editConfiguration.setFormSpecificData(formSpecificData); - } - - public void addFormSpecificDataForAC(EditConfigurationVTwo editConfiguration, VitroRequest vreq, HttpSession session) throws SearchEngineException { - HashMap formSpecificData = new HashMap(); - //Get the edit mode - formSpecificData.put("editMode", getEditMode(vreq).toString().toLowerCase()); - - //We also need the type of the object itself - List types = getRangeTypes(vreq); - //if types array contains only owl:Thing, the search will not return any results - //In this case, set an empty array - if(types.size() == 1 && types.get(0).getURI().equals(VitroVocabulary.OWL_THING) ){ - types = new ArrayList(); - } - - StringBuilder typesBuff = new StringBuilder(); - for (VClass type : types) { - if (type.getURI() != null) { - typesBuff.append(type.getURI()).append(","); - } - } - - formSpecificData.put("objectTypes", typesBuff.toString()); - log.debug("autocomplete object types : " + formSpecificData.get("objectTypes")); - - //Get label for individual if it exists - if(EditConfigurationUtils.getObjectIndividual(vreq) != null) { - String objectLabel = EditConfigurationUtils.getObjectIndividual(vreq).getName(); - formSpecificData.put("objectLabel", objectLabel); - } - - //TODO: find out if there are any individuals in the classes of objectTypes - formSpecificData.put("rangeIndividualsExist", rangeIndividualsExist(types) ); - - formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq)); - if(customErrorMessages != null && !customErrorMessages.isEmpty()) { - formSpecificData.put("customErrorMessages", customErrorMessages); - } - editConfiguration.setTemplate(acObjectPropertyTemplate); - editConfiguration.setFormSpecificData(formSpecificData); - } - - private Object rangeIndividualsExist(List types) throws SearchEngineException { - SearchEngine searchEngine = ApplicationUtils.instance().getSearchEngine(); - - boolean rangeIndividualsFound = false; - for( VClass type:types){ - //search for type count. - SearchQuery query = searchEngine.createQuery(); - query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type.getURI()); - query.setRows(0); - - SearchResponse rsp = searchEngine.query(query); - SearchResultDocumentList docs = rsp.getResults(); - if( docs.getNumFound() > 0 ){ - rangeIndividualsFound = true; - break; - } - } - - return rangeIndividualsFound; - } - - public String getSubjectUri() { - return subjectUri; - } - - public String getPredicateUri() { - return predicateUri; - } - - public String getObjectUri() { - return objectUri; - } - - - /** get the auto complete edit mode */ - public EditMode getEditMode(VitroRequest vreq) { - //In this case, the original jsp didn't rely on FrontEndEditingUtils - //but instead relied on whether or not the object Uri existed - String objectUri = EditConfigurationUtils.getObjectUri(vreq); - EditMode editMode = FrontEndEditingUtils.EditMode.ADD; - if(objectUri != null && !objectUri.isEmpty()) { - editMode = FrontEndEditingUtils.EditMode.EDIT; - - } - return editMode; - } - - public String getSparqlForAcFilter(VitroRequest vreq) { - String subject = EditConfigurationUtils.getSubjectUri(vreq); - String predicate = EditConfigurationUtils.getPredicateUri(vreq); - //Get all objects for existing predicate, filters out results from addition and edit - String query = "SELECT ?objectVar WHERE { " + - "<" + subject + "> <" + predicate + "> ?objectVar .} "; - return query; - } - - -} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddServiceProviderRoleToPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddServiceProviderRoleToPersonGenerator.java index c1ae9621..3a52a130 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddServiceProviderRoleToPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddServiceProviderRoleToPersonGenerator.java @@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class AddServiceProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { @@ -17,63 +18,63 @@ public class AddServiceProviderRoleToPersonGenerator extends AddRoleToPersonTwoS String getRoleType() { return "http://purl.obolibrary.org/obo/ERO_0000012"; } - - /** Service Provider role involves hard-coded options for the - * "right side" of the role or activity. */ + @Override -FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { - return new ConstantFieldOptions( - "","Select type", - "http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", - "http://vivoweb.org/ontology/core#Association","Association", - "http://vivoweb.org/ontology/core#Center","Center", - "http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", - "http://vivoweb.org/ontology/core#College","College", - "http://vivoweb.org/ontology/core#Committee","Committee", - "http://vivoweb.org/ontology/core#Company","Company", - "http://vivoweb.org/ontology/core#Competition", "Competition", - "http://purl.org/ontology/bibo/Conference", "Conference", - "http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", - "http://vivoweb.org/ontology/core#Consortium","Consortium", - "http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", - "http://vivoweb.org/ontology/core#Course", "Course", - "http://vivoweb.org/ontology/core#Department","Department", - "http://vivoweb.org/ontology/core#Division","Division", - "http://purl.org/NET/c4dm/event.owl#Event","Event", - "http://vivoweb.org/ontology/core#EventSeries", "Event Series", - "http://vivoweb.org/ontology/core#Exhibit", "Exhibit", - "http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", - "http://vivoweb.org/ontology/core#Foundation","Foundation", - "http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", - "http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", - "http://xmlns.com/foaf/0.1/Group","Group", - "http://purl.org/ontology/bibo/Hearing", "Hearing", - "http://vivoweb.org/ontology/core#Hospital","Hospital", - "http://vivoweb.org/ontology/core#Institute","Institute", - "http://purl.org/ontology/bibo/Interview", "Interview", - "http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", - "http://vivoweb.org/ontology/core#Laboratory","Laboratory", - "http://vivoweb.org/ontology/core#Library","Library", - "http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", - "http://vivoweb.org/ontology/core#Meeting", "Meeting", - "http://vivoweb.org/ontology/core#Museum","Museum", - "http://xmlns.com/foaf/0.1/Organization","Organization", - "http://purl.org/ontology/bibo/Performance", "Performance", - "http://vivoweb.org/ontology/core#Presentation", "Presentation", - "http://vivoweb.org/ontology/core#PrivateCompany","Private Company", - "http://vivoweb.org/ontology/core#Program","Program", - "http://vivoweb.org/ontology/core#Publisher","Publisher", - "http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", - "http://vivoweb.org/ontology/core#School","School", - "http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", - "http://vivoweb.org/ontology/core#Team","Team", - "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", - "http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", - "http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", - "http://vivoweb.org/ontology/core#University","University", - "http://purl.org/ontology/bibo/Workshop", "Workshop", - "http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); -} + FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { + return GeneratorUtil.buildResourceAndLabelFieldOptions( + vreq.getRDFService(), vreq.getWebappDaoFactory(), "", + I18n.bundle(vreq).text("select_type"), + "","Select type", + "http://vivoweb.org/ontology/core#AcademicDepartment", + "http://vivoweb.org/ontology/core#Association", + "http://vivoweb.org/ontology/core#Center", + "http://vivoweb.org/ontology/core#ClinicalOrganization", + "http://vivoweb.org/ontology/core#College", + "http://vivoweb.org/ontology/core#Committee", + "http://vivoweb.org/ontology/core#Company", + "http://vivoweb.org/ontology/core#Competition", + "http://purl.org/ontology/bibo/Conference", + "http://vivoweb.org/ontology/core#ConferenceSeries", + "http://vivoweb.org/ontology/core#Consortium", + "http://vivoweb.org/ontology/core#CoreLaboratory", + "http://vivoweb.org/ontology/core#Course", + "http://vivoweb.org/ontology/core#Department", + "http://vivoweb.org/ontology/core#Division", + "http://purl.org/NET/c4dm/event.owl#Event", + "http://vivoweb.org/ontology/core#EventSeries", + "http://vivoweb.org/ontology/core#Exhibit", + "http://vivoweb.org/ontology/core#ExtensionUnit", + "http://vivoweb.org/ontology/core#Foundation", + "http://vivoweb.org/ontology/core#FundingOrganization", + "http://vivoweb.org/ontology/core#GovernmentAgency", + "http://xmlns.com/foaf/0.1/Group", + "http://purl.org/ontology/bibo/Hearing", + "http://vivoweb.org/ontology/core#Hospital", + "http://vivoweb.org/ontology/core#Institute", + "http://purl.org/ontology/bibo/Interview", + "http://vivoweb.org/ontology/core#InvitedTalk", + "http://vivoweb.org/ontology/core#Laboratory", + "http://vivoweb.org/ontology/core#Library", + "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */, + "http://vivoweb.org/ontology/core#Meeting", + "http://vivoweb.org/ontology/core#Museum", + "http://xmlns.com/foaf/0.1/Organization", + "http://purl.org/ontology/bibo/Performance", + "http://vivoweb.org/ontology/core#Presentation", + "http://vivoweb.org/ontology/core#PrivateCompany", + "http://vivoweb.org/ontology/core#Program", + "http://vivoweb.org/ontology/core#Publisher", + "http://vivoweb.org/ontology/core#ResearchOrganization", + "http://vivoweb.org/ontology/core#School", + "http://vivoweb.org/ontology/core#SeminarSeries", + "http://vivoweb.org/ontology/core#Team", + "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory", + "http://vivoweb.org/ontology/core#StudentOrganization", + "http://purl.obolibrary.org/obo/ERO_0000565" /* Technology Transfer Office" */, + "http://vivoweb.org/ontology/core#University", + "http://purl.org/ontology/bibo/Workshop", + "http://vivoweb.org/ontology/core#WorkshopSeries"); + } @Override boolean isShowRoleLabelField(){return true;} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/CompilationGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/CompilationGenerator.java deleted file mode 100644 index d11c7213..00000000 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/CompilationGenerator.java +++ /dev/null @@ -1,306 +0,0 @@ -/* $This file is distributed under the terms of the license in LICENSE$ */ - -package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.TimeZone; - -import javax.servlet.http.HttpSession; - -import org.apache.jena.rdf.model.Literal; -import org.apache.jena.vocabulary.RDFS; -import org.apache.jena.vocabulary.XSD; - -import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle; -import edu.cornell.mannlib.vitro.webapp.auth.identifier.RequestIdentifiers; -import edu.cornell.mannlib.vitro.webapp.auth.identifier.common.HasAssociatedIndividual; -import edu.cornell.mannlib.vitro.webapp.beans.VClass; -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.admin.ShowAuthController.AssociatedIndividual; -import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; -import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; -import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; - -/** - * Generates the edit configuration for a default property form. - * ModelChangePreprocessor creates the rdfs:label statement. - */ -public class CompilationGenerator extends BaseEditConfigurationGenerator implements EditConfigurationGenerator { - - private String associatedProfile; - private int excerptsCounter; - - @Override - public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) { - - EditConfigurationVTwo config = new EditConfigurationVTwo(); - - associatedProfile = getAssociatedProfile(vreq); - excerptsCounter = parseCounter(vreq); - - config.setTemplate( "compilationForm.ftl" ); - - config.setN3Required( generateN3Required(vreq)); - - //Optional because user may have selected either person or individual of another kind - //Person uses first name and last name whereas individual of other class would use label - //middle name is also optional - //config.setN3Optional(generateN3Optional()); - - config.addNewResource("newCompilation", vreq.getWebappDaoFactory().getDefaultNamespace()); - config.addNewResource("newCompilationTOC", vreq.getWebappDaoFactory().getDefaultNamespace()); - config.addField(new FieldVTwo(). - setName("rawQueryString"). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - config.addField(new FieldVTwo(). - setName("queryBuilderRules"). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - - for (int itemN = 1; itemN <= excerptsCounter; itemN++) { - String tocItem = "tocItem" + itemN; - config.addNewResource(tocItem, vreq.getWebappDaoFactory().getDefaultNamespace()); - String tocLevel = "tocLevel" + itemN; - config.addNewResource(tocLevel, vreq.getWebappDaoFactory().getDefaultNamespace()); - - String tocItemName = tocItem + "Name"; - config.addField(new FieldVTwo(). - setName(tocItemName). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - - String tocLevelName = tocLevel + "Name"; - config.addField(new FieldVTwo(). - setName(tocLevelName). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - - String excerpt = "excerpt" + itemN; - config.addField(new FieldVTwo(). - setName(excerpt). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - - } - config.setUrisOnform(getUrisOnForm()); - config.setLiteralsOnForm( getLiteralsOnForm()); - setUrisAndLiteralsInScope(config); - //No SPARQL queries for existing since this is only used to create new, never for edit - - config.addField(new FieldVTwo(). - setName("newCompilationLabel"). - setRangeDatatypeUri(XSD.xstring.getURI()). - setValidators(getCompilationNameValidators(vreq))); - - - addFormSpecificData(config, vreq); - - config.addValidator(new AntiXssValidation()); - - //This combines the first and last name into the rdfs:label - // currently being done via javascript in the template. May use this again - // when/if updated to ISF ontology. tlw72 -// config.addModelChangePreprocessor(new FoafNameToRdfsLabelPreprocessor()); - - String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq); - config.setFormUrl(formUrl); - - //Note, the spaces are important - they were added by ProcessRdfFormController earlier - //as a means of ensuring the substitution worked correctly - as the regex expects spaces - config.setEntityToReturnTo(" ?newCompilation "); - prepare(vreq, config); - return config; - } - - private List getUrisOnForm() { - List uris = list(); - for (int itemN = 1; itemN <= excerptsCounter; itemN++) { - String excerpt = "excerpt" + itemN; - uris.add(excerpt); - } - return uris; - } - - private List getLiteralsOnForm() { - List literals = list( "newCompilationLabel"); - for (int itemN = 1; itemN <= excerptsCounter; itemN++) { - String tocItemName = "tocItem" + itemN + "Name"; - String tocLevelName = "tocLevel" + itemN + "Name"; - literals.add(tocItemName); - literals.add(tocLevelName); - literals.add("rawQueryString"); - literals.add("queryBuilderRules"); - } - return literals; - } - - private String getAssociatedProfile(VitroRequest vreq) { - String associatedProfile; - IdentifierBundle ids = RequestIdentifiers.getIdBundleForRequest(vreq); - Collection individualURIs = HasAssociatedIndividual.getIndividualUris(ids); - Iterator uriIterator = individualURIs.iterator(); - if (uriIterator.hasNext()) { - associatedProfile = uriIterator.next(); - } else { - associatedProfile = ""; - } - return associatedProfile; - } - - private List generateN3Required(VitroRequest vreq) { - StringBuilder n3Req = new StringBuilder(); - n3Req.append("@prefix ts: .\n"); - n3Req.append("?newCompilation <" + VitroVocabulary.RDF_TYPE + "> <" + getTypeOfNew(vreq) + "> .\n"); - n3Req.append("?newCompilation " + getModificationTime() + " .\n"); - n3Req.append("?newCompilation ts:rawQueryString ?rawQueryString .\n"); - n3Req.append("?newCompilation ts:queryBuilderRules ?queryBuilderRules .\n"); - n3Req.append("?newCompilation <" + RDFS.label.getURI() + "> ?newCompilationLabel .\n"); - n3Req.append("?newCompilation ts:hasTOC ?newCompilationTOC .\n"); - n3Req.append("?newCompilationTOC <" + VitroVocabulary.RDF_TYPE + "> ts:TOC .\n"); - n3Req.append("?newCompilationTOC <" + RDFS.label.getURI() + "> ?newCompilationLabel .\n"); - - if (!associatedProfile.isEmpty()) { - n3Req.append("<" + associatedProfile + "> ts:compilatorOf ?newCompilation .\n"); - - } - //n3Req.append(); - - for (int itemN = 1; itemN <= excerptsCounter; itemN++) { - String tocItemVar = "?tocItem" + itemN ; - String tocItemNameVar = tocItemVar + "Name" ; - String tocLevelVar = "?tocLevel" + itemN ; - String tocLevelVarName = tocLevelVar + "Name" ; - String excerptVar = "?excerpt" + itemN ; - n3Req.append("?newCompilationTOC ts:hasTOCItem " + tocItemVar + " .\n"); - n3Req.append(tocItemVar + " <" + VitroVocabulary.RDF_TYPE + "> ts:TOCItem .\n"); - n3Req.append(tocItemVar + " <" + RDFS.label.getURI() + "> " + tocItemNameVar + " .\n"); - n3Req.append(tocItemVar + " ts:itemNumber " + itemN + " .\n"); - n3Req.append(tocItemVar + " ts:pointsTo " + tocLevelVar + " .\n"); - n3Req.append(tocLevelVar + " <" + VitroVocabulary.RDF_TYPE + "> ts:TOCLevel .\n"); - n3Req.append(tocLevelVar + " <" + RDFS.label.getURI() + "> " + tocLevelVarName + " .\n"); - n3Req.append(tocLevelVar + " ts:hasText " + excerptVar + ".\n"); - } - return list(n3Req.toString()); - } - - private List generateN3Optional() { - List n3OptList = list(); - StringBuilder n3Opt = new StringBuilder(); - n3Opt.append("@prefix ts: .\n"); - n3Opt.append("?newCompilation ts:rawQueryString ?rawQueryString .\n"); - n3Opt.append("?newCompilation ts:queryBuilderRules ?queryBuilderRules .\n"); - n3OptList.add(n3Opt.toString()); - return n3OptList; - } - - private String getModificationTime() { - SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - sd.setTimeZone(TimeZone.getTimeZone("GMT")); - Date currentTime = Calendar.getInstance().getTime(); - String todayAsString = "\"" + sd.format(currentTime) + "\"^^"; - return todayAsString; - } - - private static Integer parseCounter(VitroRequest vreq) { - String text = vreq.getParameter("excerptsCount"); - if (text == null ) { - return 0; - } - try { - return Integer.parseInt(text); - } catch (NumberFormatException e) { - return 0; - } - } - - - private List getCompilationNameValidators(VitroRequest vreq) { - List validators = new ArrayList(); - if (isCompilationType(vreq)) { - validators.add("nonempty"); - } - return validators; - } - - //Get parameter from HTTP request for type of new individual - private String getTypeOfNew(VitroRequest vreq) { - String typeUri = vreq.getParameter("typeOfNew"); - if( typeUri == null || typeUri.trim().isEmpty() ) - return getCompilationClassURI(); - else - return typeUri; - } - - //Form specific data - public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { - HashMap formSpecificData = new HashMap(); - formSpecificData.put("typeName", getTypeName(vreq)); - //Put in whether or not person type - if(isCompilationType(vreq)) { - //Doing this b/c unsure how freemarker will handle boolean value from JAVA - formSpecificData.put("isCompilationType", "true"); - } else { - formSpecificData.put("isCompilationType", "false"); - - } - formSpecificData.put("excerptsCounter", excerptsCounter); - - editConfiguration.setFormSpecificData(formSpecificData); - } - - private String getTypeName(VitroRequest vreq) { - String typeOfNew = getTypeOfNew(vreq); - VClass type = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(typeOfNew); - return type.getName(); - } - - public String getCompilationClassURI() { - return "https://litvinovg.pro/text_structures#compilation"; - } - - public boolean isCompilationType(VitroRequest vreq) { - WebappDaoFactory wdf = vreq.getWebappDaoFactory(); - Boolean isCompilationType = Boolean.FALSE; - String foafPersonType = getCompilationClassURI(); - String typeOfNew = getTypeOfNew(vreq); - List superTypes = wdf.getVClassDao().getAllSuperClassURIs(typeOfNew); - //add the actual type as well so we can add that for the list to be checked - superTypes.add(typeOfNew); - if( superTypes != null ){ - for( String typeUri : superTypes){ - if( foafPersonType.equals(typeUri)) { - isCompilationType = Boolean.TRUE; - break; - } - } - } - return isCompilationType; - } - private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration) { - HashMap> urisInScope = new HashMap>(); - //note that at this point the subject, predicate, and object var parameters have already been processed - urisInScope.put(editConfiguration.getVarNameForSubject(), - Arrays.asList(new String[]{editConfiguration.getSubjectUri()})); - urisInScope.put(editConfiguration.getVarNameForPredicate(), - Arrays.asList(new String[]{editConfiguration.getPredicateUri()})); - editConfiguration.setUrisInScope(urisInScope); - //Uris in scope include subject, predicate, and object var - - editConfiguration.setLiteralsInScope(new HashMap>()); - } - - private String N3_PREFIX = "@prefix foaf: .\n"; -} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GeneratorUtil.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GeneratorUtil.java new file mode 100644 index 00000000..69b53dda --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GeneratorUtil.java @@ -0,0 +1,127 @@ +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.iri.IRI; +import org.apache.jena.iri.IRIFactory; +import org.apache.jena.query.QuerySolution; +import org.apache.jena.vocabulary.RDFS; + +import edu.cornell.mannlib.vitro.webapp.beans.VClass; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException; +import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer; + +public class GeneratorUtil { + + private static final Log log = LogFactory.getLog(GeneratorUtil.class); + + /** + * Build a field options list of resource URIs paired with their labels as + * retrieved from the supplied RDFService. + * + * @param rdfService from which to retrieve labels: this should typically + * be a LanguageFilteringRDFService. + * + * @param webappDaoFactory may be null. If non-null, labels for classes will be + * returned from here first before consulting + * rdfService. + * + * @param headerValue optional value for first value/label pair in the + * options list before appending the URIs with their + * labels. May be null. Example: empty string + * + * @param headerLabel optional label for first value/label pair in the + * options list before appending the URIs with their + * labels. May be null. Example: "Select type" + * + * @param resourceURIs variable list of resource URI strings + * + * @return empty ConstantFieldOptions list if resourceURIs is null or empty or + * if rdfService is null + * @throws RDFServiceException from the supplied rdfService + * @throws Exception from ConstantFieldOptions constructor + */ + public static ConstantFieldOptions buildResourceAndLabelFieldOptions( + RDFService rdfService, WebappDaoFactory webappDaoFactory, String headerValue, + String headerLabel, String ... resourceURIs) throws Exception { + if(resourceURIs == null || resourceURIs.length == 0 || rdfService == null) { + return new ConstantFieldOptions(); + } + List options = new ArrayList(); + if(headerValue != null && headerLabel != null) { + options.add(headerValue); + options.add(headerLabel); + } + IRIFactory iriFactory = IRIFactory.iriImplementation(); + for(String resourceURI : resourceURIs) { + IRI iri = iriFactory.create(resourceURI); + if(iri.hasViolation(false)) { + log.warn("Not adding invalid URI " + resourceURI + + " to field options list"); + } else { + String label = getLabel(iri, rdfService, webappDaoFactory); + if(!StringUtils.isEmpty(label)) { + options.add(iri.toString()); + options.add(label); + } + } + } + return new ConstantFieldOptions(options.toArray( + new String[options.size()])); + } + + /** + * Retrieve label for iri from webappDaoFactory if available and iri is + * for a VClass, otherwise retrieve lowest-sorting rdfs:label for iri from + * rdfService + * @param iri may not be null + * @param rdfService may not be null + */ + private static String getLabel(IRI iri, RDFService rdfService, + WebappDaoFactory webappDaoFactory) throws RDFServiceException { + // Try the WebappDaoFactory for class labels that exist only in + // "everytime" and do not show up in the RDFService. + if(webappDaoFactory != null) { + VClass vclass = webappDaoFactory.getVClassDao().getVClassByURI( + iri.toString()); + if(vclass != null) { + return vclass.getLabel(); + } + } + StringBuilder select = new StringBuilder("SELECT ?label WHERE { \n"); + select.append(" <" + iri + "> <" + RDFS.label.getURI() + "> ?label \n"); + select.append("} ORDER BY ?label"); + LabelConsumer labelConsumer = new LabelConsumer(); + rdfService.sparqlSelectQuery(select.toString(), labelConsumer); + return labelConsumer.getLabel(); + } + + private static class LabelConsumer extends ResultSetConsumer { + + private String label; + + @Override + protected void processQuerySolution(QuerySolution qsoln) { + if(label != null) { + return; + // keep only the first value returned in the result set + } + if(qsoln.contains("label") && qsoln.get("label").isLiteral()) { + label = qsoln.getLiteral("label").getLexicalForm(); + } + } + + public String getLabel() { + return label; + } + + } + +} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GrantHasContributorGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GrantHasContributorGenerator.java index fc6ed234..09caf457 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GrantHasContributorGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/GrantHasContributorGenerator.java @@ -19,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class GrantHasContributorGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ @@ -92,7 +93,7 @@ public class GrantHasContributorGenerator extends VivoBaseGenerator implements //Add validator conf.addValidator(new AntiXssValidation()); - conf.addValidator(new FirstAndLastNameValidator("existingPerson")); + conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq))); //Adding additional data, specifically edit mode addFormSpecificData(conf, vreq); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java index 7610387c..d9146213 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java @@ -15,6 +15,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpSession; @@ -41,6 +42,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.FoafNameToRdfsLabelPreprocessor; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.ManageLabelsForPersonPreprocessor; import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale; +import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.DataPropertyStatementTemplateModel; /** @@ -246,12 +248,12 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat private void addFormSpecificData(EditConfigurationVTwo config, VitroRequest vreq) { - //Get all language codes/labels in the system, and this list is sorted by language name - List> locales = this.getLocales(vreq); + ArrayList existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq); + //Get language codes/labels for existing labels, and this list is sorted by language name + List> locales = this.getLocales(vreq, existingLabels); //Get code to label hashmap - we use this to get the language name for the language code returned in the rdf literal HashMap localeCodeToNameMap = this.getFullCodeToLanguageNameMap(locales); //the labels already added by the user - ArrayList existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq); int numberExistingLabels = existingLabels.size(); //existing labels keyed by language name and each of the list of labels is sorted by language name HashMap> existingLabelsByLanguageName = this.getLabelsSortedByLanguageName(existingLabels, localeCodeToNameMap, config, vreq); @@ -267,6 +269,19 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat config.addFormSpecificData("selectLocale",availableLocalesForAdd); config.addFormSpecificData("displayRemoveLink", (numberExistingLabels > 1)); + // get current selected locale + String rangeLang = vreq.getLocale().getLanguage(); + if (!vreq.getLocale().getCountry().isEmpty()) { + rangeLang += "-" + vreq.getLocale().getCountry(); + } + + // check if locale already has an entry (label) + boolean localeEntryExisting = true; + for (HashMap tmp : availableLocalesForAdd) { + if (tmp.get("code").equals(rangeLang)) localeEntryExisting = false; + } + config.addFormSpecificData("localeEntryExisting", localeEntryExisting); + config.addFormSpecificData("currentSelectedLocale", rangeLang); //How do we edit? Will need to see config.addFormSpecificData("deleteWebpageUrl", "/edit/primitiveDelete"); @@ -419,28 +434,27 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat + " ?subject rdfs:label ?label \n" + "} ORDER BY ?label"; - + private ArrayList getExistingLabels(String subjectUri, VitroRequest vreq) { String queryStr = QueryUtils.subUriForQueryVar(LABEL_QUERY, "subject", subjectUri); log.debug("queryStr = " + queryStr); ArrayList labels = new ArrayList(); try { - //We want to get the labels for all the languages, not just the display language - ResultSet results = QueryUtils.getLanguageNeutralQueryResults(queryStr, vreq); + // No longer retrieving language-neutral results here, so that + // language editing is consistent with other editing forms. + // Editable values depend on the interface's locale selector. + ResultSet results = QueryUtils.getQueryResults(queryStr, vreq); while (results.hasNext()) { QuerySolution soln = results.nextSolution(); Literal nodeLiteral = soln.get("label").asLiteral(); labels.add(nodeLiteral); - - } } catch (Exception e) { log.error(e, e); } return labels; -} - + } //Putting this into a method allows overriding it in subclasses @@ -454,30 +468,32 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat return template; } + //get locales present in list of literals + public List> getLocales(VitroRequest vreq, + List existingLiterals) { + Set locales = new HashSet(); + for(Literal literal : existingLiterals) { + String language = literal.getLanguage(); + if(!StringUtils.isEmpty(language)) { + locales.add(LanguageFilteringUtils.languageToLocale(language)); + } + } + if (locales.isEmpty()) { + return Collections.emptyList(); + } + List> list = new ArrayList>(); + Locale currentLocale = SelectedLocale.getCurrentLocale(vreq); + for (Locale locale : locales) { + try { + list.add(buildLocaleMap(locale, currentLocale)); + } catch (FileNotFoundException e) { + log.warn("Can't show locale '" + locale + "': " + e); + } + } - - //get locales - public List> getLocales(VitroRequest vreq) { - List selectables = SelectedLocale.getSelectableLocales(vreq); - if (selectables.isEmpty()) { - return Collections.emptyList(); - } - List> list = new ArrayList>(); - Locale currentLocale = SelectedLocale.getCurrentLocale(vreq); - for (Locale locale : selectables) { - try { - list.add(buildLocaleMap(locale, currentLocale)); - } catch (FileNotFoundException e) { - log.warn("Can't show the Locale selector for '" + locale - + "': " + e); - } - } - - return list; + return list; } - - public HashMap getFullCodeToLanguageNameMap(List> localesList) { HashMap codeToLanguageMap = new HashMap(); for(Map locale: localesList) { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java index 1c43cfa1..15065314 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageWebpagesForIndividualGenerator.java @@ -3,20 +3,20 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpSession; -import org.apache.jena.query.QueryExecution; -import org.apache.jena.query.QueryExecutionFactory; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.ModelFactory; -import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - +import org.apache.jena.query.ParameterizedSparqlString; +import org.apache.jena.query.QueryExecution; +import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QuerySolution; import org.apache.jena.query.ResultSet; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.RDFNode; import edu.cornell.mannlib.vitro.webapp.beans.Individual; @@ -26,6 +26,8 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMa import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; +import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; /** * This is an odd controller that is just drawing a page with links on it. @@ -153,16 +155,36 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG + "PREFIX vcard: \n" + "PREFIX rdfs: \n" + "PREFIX vitro: \n" - + "SELECT DISTINCT ?vcard ?link ?url ?rank ?typeLabel (group_concat(distinct ?linkLabel;separator=\"/\") as ?label) WHERE { \n" + + "SELECT DISTINCT ?vcard ?link ?url (MIN(?rank_) AS ?rank) \n" + + "(MIN(?typeLabel_) AS ?typeLabel) \n" + + "(group_concat(distinct ?linkLabel;separator=\"/\") as ?label) WHERE { \n" + " ?subject ?vcard . \n" + " ?vcard vcard:hasURL ?link . \n" + " ?link a vcard:URL \n" + " OPTIONAL { ?link vcard:url ?url } \n" + " OPTIONAL { ?link rdfs:label ?linkLabel } \n" - + " OPTIONAL { ?link core:rank ?rank } \n" + + " OPTIONAL { ?link core:rank ?rank_ } \n" + " OPTIONAL { ?link vitro:mostSpecificType ?type } \n" - + " OPTIONAL { ?type rdfs:label ?typeLabel } \n" - + "} GROUP BY ?rank ?vcard ?link ?url ?typeLabel \n" + // UQAM-Linguistic-Management Add linguistic control on label + // Try full locale + + " OPTIONAL { ?type rdfs:label ?typeLabelPrimary . \n" + + " FILTER (LANG(?typeLabelPrimary) = ?locale) \n" + + " } \n" + // Try language only + + " OPTIONAL { ?type rdfs:label ?typeLabelSecondary . \n" + + " FILTER (LANG(?typeLabelSecondary) = ?language) \n" + + " } \n" + // Try the same language in another other locale + + " OPTIONAL { ?type rdfs:label ?typeLabelTertiary . \n" + + " FILTER (STRBEFORE(STR(LANG(?typeLabelTertiary)), \"-\") = ?language) \n" + + " } \n" + // Try any other available label + + " OPTIONAL { ?type rdfs:label ?typeLabelFallback . \n" + + " FILTER (LANG(?typeLabelFallback) != ?locale \n" + + " && LANG(?typeLabelFallback) != ?language) \n" + + " } \n" + + " BIND(COALESCE(?typeLabelPrimary, ?typeLabelSecondary, ?typeLabelTertiary, ?typeLabelFallback) AS ?typeLabel_) \n" + + "} GROUP BY ?vcard ?link ?url \n" + " ORDER BY ?rank"; @@ -175,8 +197,10 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG Model constructedModel = ModelFactory.createDefaultModel(); rdfService.sparqlConstructQuery(constructStr, constructedModel); - - String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(), "subject", subjectUri); + /* + * UQAM-Linguistic-Management Adjust the getQuery signature for managing the linguistic context + */ + String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(vreq), "subject", subjectUri); log.debug("Query string is: " + queryStr); QueryExecution qe = QueryExecutionFactory.create(queryStr, constructedModel); @@ -205,8 +229,16 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG return AddEditWebpageFormGenerator.class.getName(); } - protected String getQuery() { - return WEBPAGE_QUERY; + protected String getQuery(VitroRequest vreq) { + /* + * UQAM-Linguistic-Management Adjust the query to the linguistic context + */ + Locale locale = SelectedLocale.getCurrentLocale(vreq); + ParameterizedSparqlString queryPstr = new ParameterizedSparqlString( + WEBPAGE_QUERY); + queryPstr.setLiteral("locale", locale.toString().replace("_", "-")); + queryPstr.setLiteral("language", locale.getLanguage()); + return queryPstr.toString(); } protected String getTemplate() { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationForTrainingGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationForTrainingGenerator.java index 07a6eca9..228c01aa 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationForTrainingGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationForTrainingGenerator.java @@ -22,6 +22,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsVi import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class OrganizationForTrainingGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ @@ -166,7 +167,7 @@ public class OrganizationForTrainingGenerator extends VivoBaseGenerator impleme //Add validator conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new AntiXssValidation()); - conf.addValidator(new FirstAndLastNameValidator("existingPerson")); + conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq))); //Adding additional data, specifically edit mode addFormSpecificData(conf, vreq); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationHasPositionHistoryGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationHasPositionHistoryGenerator.java index 2dc592b3..681bc2ea 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationHasPositionHistoryGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/OrganizationHasPositionHistoryGenerator.java @@ -17,6 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisio import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesWithParent; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class OrganizationHasPositionHistoryGenerator extends VivoBaseGenerator implements EditConfigurationGenerator { @@ -256,7 +257,7 @@ public class OrganizationHasPositionHistoryGenerator extends VivoBaseGenerator conf.addField(endField.setEditElement(new DateTimeWithPrecisionVTwo( endField, URI_PRECISION_YEAR, URI_PRECISION_NONE))); - conf.addValidator(new FirstAndLastNameValidator("existingPerson")); + conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq))); conf.addValidator(new AntiXssValidation()); conf.addValidator(new DateTimeIntervalValidationVTwo("startField", "endField")); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java index 21fa93eb..16b37a6b 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdviseeRelationshipGenerator.java @@ -20,6 +20,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClasses import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator implements EditConfigurationGenerator { @@ -184,7 +185,7 @@ public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator imp conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new AntiXssValidation()); - conf.addValidator(new FirstAndLastNameValidator("existingAdvisor")); + conf.addValidator(new FirstAndLastNameValidator("existingAdvisor", I18n.bundle(vreq))); addFormSpecificData(conf, vreq); prepare(vreq, conf); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java index 6c22bd4a..8d172992 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/PersonHasAdvisorRelationshipGenerator.java @@ -20,6 +20,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClasses import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator implements EditConfigurationGenerator { @@ -184,7 +185,7 @@ public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator imp conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new AntiXssValidation()); - conf.addValidator(new FirstAndLastNameValidator("existingAdvisee")); + conf.addValidator(new FirstAndLastNameValidator("existingAdvisee", I18n.bundle(vreq))); addFormSpecificData(conf, vreq); prepare(vreq, conf); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ProjectHasParticipantGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ProjectHasParticipantGenerator.java index 83d03a55..b035e531 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ProjectHasParticipantGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ProjectHasParticipantGenerator.java @@ -17,6 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; +import edu.cornell.mannlib.vitro.webapp.i18n.I18n; public class ProjectHasParticipantGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ @@ -92,7 +93,7 @@ public class ProjectHasParticipantGenerator extends VivoBaseGenerator implement //Add validator conf.addValidator(new AntiXssValidation()); - conf.addValidator(new FirstAndLastNameValidator("existingPerson")); + conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq))); //Adding additional data, specifically edit mode addFormSpecificData(conf, vreq); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utilities/Describe.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utilities/Describe.java new file mode 100644 index 00000000..c2c03d5c --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utilities/Describe.java @@ -0,0 +1,36 @@ +package edu.cornell.mannlib.vitro.webapp.utilities; + +import java.util.Iterator; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.ontology.OntModel; +import org.apache.jena.rdf.model.ModelFactory; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.ResourceFactory; +import org.apache.jena.rdf.model.Statement; +import org.apache.jena.rdf.model.StmtIterator; +import org.apache.jena.vocabulary.RDFS; + + +public class Describe { + private static final Log log = LogFactory.getLog(Describe.class.getName()); + + public static void main(String[] args) { + OntModel model = ModelFactory.createOntologyModel(); + model.read("C:\\VIVO-Trad-ecosysteme\\vivo\\home\\rdf\\applicationMetadata\\firsttime\\classgroups_fr_CA.rdf") ; + model.read("C:\\VIVO-Trad-ecosysteme\\vivo\\home\\rdf\\applicationMetadata\\firsttime\\classgroups.rdf") ; + Describe.showVitroClassGroupequipmentLabels(model,"test"); + System.out.println("Done!"); + } + + private static void showVitroClassGroupequipmentLabels(OntModel model, String message) { + String uri = "http://vivoweb.org/ontology#vitroClassGroupequipment"; + List stmts = model.listStatements(ResourceFactory.createResource(uri), RDFS.label, (RDFNode)null).toList(); + for (Iterator iterator = stmts.iterator(); iterator.hasNext();) { + Statement statement = (Statement) iterator.next(); + log.debug("\t\t"+message + " " +statement); + } + } +} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java index 70268cd9..d6b0e733 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java @@ -12,6 +12,7 @@ import org.apache.commons.logging.LogFactory; import edu.cornell.mannlib.semservices.bo.Concept; import edu.cornell.mannlib.semservices.service.ExternalConceptService; +import edu.cornell.mannlib.semservices.service.impl.UMLSService; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; /** * Utilities for search @@ -38,7 +39,9 @@ public class ConceptSearchServiceUtils { //URL to label public static HashMap getVocabSources() { HashMap map = new HashMap(); - map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource, "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System")); + if(UMLSService.configurationFileExists()) { + map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource, "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System")); + } //Commenting out agrovoc for now until implementation is updated map.put(AgrovocVocabSource, new VocabSourceDescription("AGROVOC", AgrovocVocabSource, "http://www.fao.org/agrovoc/", "Agricultural Vocabulary")); map.put(GemetVocabSource, new VocabSourceDescription("GEMET", GemetVocabSource, "http://www.eionet.europa.eu/gemet", "GEneral Multilingual Environmental Thesaurus")); @@ -53,6 +56,7 @@ public class ConceptSearchServiceUtils { //Get the hashmap mapping service name to Service class private static HashMap getMapping() { HashMap map = new HashMap(); + map.put(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService"); map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService"); map.put(GemetVocabSource, "edu.cornell.mannlib.semservices.service.impl.GemetService"); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/capabilitymap/CapabilityMapRequestHandler.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/capabilitymap/CapabilityMapRequestHandler.java index 07a96f29..60baa82d 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/capabilitymap/CapabilityMapRequestHandler.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/capabilitymap/CapabilityMapRequestHandler.java @@ -54,10 +54,16 @@ public class CapabilityMapRequestHandler implements VisualizationRequestHandler @Override public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log, Dataset dataSource) throws MalformedQueryParametersException, JsonProcessingException { - ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.getNoWait(vitroRequest.getRDFService()); - ConceptPeopleMap conceptPeopleMap = VisualizationCaches.conceptToPeopleMap.getNoWait(vitroRequest.getRDFService()); - OrganizationPeopleMap organizationPeopleMap = VisualizationCaches.organisationToPeopleMap.getNoWait(vitroRequest.getRDFService()); - Map organizationLabels = VisualizationCaches.organizationLabels.getNoWait(vitroRequest.getRDFService()); + RDFService rdfService = vitroRequest.getRDFService(); + rdfService.setVitroRequest(vitroRequest); + // VisualizationCaches.rebuildAll(rdfService); + // VisualizationCaches.conceptToLabel.build(rdfService); +// ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.getNoWait(rdfService); + // UQAM-Bug-Correction Refresh all memory models with appropriate liguistic labels + ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.get(rdfService, true, true); + ConceptPeopleMap conceptPeopleMap = VisualizationCaches.conceptToPeopleMap.getNoWait(rdfService); + OrganizationPeopleMap organizationPeopleMap = VisualizationCaches.organisationToPeopleMap.getNoWait(rdfService); + Map organizationLabels = VisualizationCaches.organizationLabels.getNoWait(rdfService); String data = vitroRequest.getParameter("data"); if (!StringUtils.isEmpty(data)) { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/CachingRDFServiceExecutor.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/CachingRDFServiceExecutor.java index ddbc68aa..abb2c4e2 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/CachingRDFServiceExecutor.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/CachingRDFServiceExecutor.java @@ -2,8 +2,10 @@ package edu.cornell.mannlib.vitro.webapp.visualization.utilities; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread; +import edu.cornell.mannlib.vitro.webapp.visualization.model.ConceptLabelMap; import java.util.Date; import java.util.HashMap; @@ -85,7 +87,69 @@ public class CachingRDFServiceExecutor { if (backgroundTask != null && backgroundTask.isDone()) { completeBackgroundTask(); } + // If we have cached results + if (cachedResults != null) { + // If the background service exists, and the cache is considered invalid + if (backgroundRDFService != null && resultBuilder.invalidateCache(System.currentTimeMillis() - lastCacheTime)) { + // In most cases, only wait for half a second + long waitFor = 500; + + if (backgroundTask == null) { + // Start the background task to refresh the cache + startBackgroundTask(backgroundRDFService); + + // As we've just started the background task, allow a wait time of 1 second + waitFor = 1000; + } + + // See if we expect it to complete in time, and if so, wait for it + if (allowWaits && isExpectedToCompleteIn(waitFor)) { + completeBackgroundTask(waitFor); + } + + } + } else { + // No cached results, so fetch the results using any available RDF service + if (rdfService != null) { + startBackgroundTask(rdfService); + } else if (backgroundRDFService != null) { + startBackgroundTask(backgroundRDFService); + } else { + throw new RuntimeException("Can't execute without an RDF Service"); + } + + // As there are no cached results, wait for an answer regardless of the RDF service used + completeBackgroundTask(); + } + return cachedResults; + } + + public synchronized T get(RDFService rdfService, boolean allowWaits, boolean force) { + /* + * UQAM-Bug-Correction + * Forces the regeneration of the result + */ + if (force) { + try { + String backLang = backgroundRDFService.getVitroRequest().getLocale().getLanguage(); + String srvLang = rdfService.getVitroRequest().getLocale().getLanguage(); + if (!backLang.equals(srvLang)) { + backgroundRDFService.setVitroRequest(rdfService.getVitroRequest()); + startBackgroundTask(rdfService); + completeBackgroundTask(); + } + } catch (Exception e) { + backgroundRDFService.setVitroRequest(rdfService.getVitroRequest()); + startBackgroundTask(rdfService); + completeBackgroundTask(); + } + return cachedResults; + } + // First, check if there are results from the previous background task, and update the cache + if (backgroundTask != null && backgroundTask.isDone()) { + completeBackgroundTask(); + } // If we have cached results if (cachedResults != null) { // If the background service exists, and the cache is considered invalid diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/VisualizationCaches.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/VisualizationCaches.java index 6206e126..0a528443 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/VisualizationCaches.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/visualization/utilities/VisualizationCaches.java @@ -9,6 +9,8 @@ import org.apache.jena.rdf.model.Literal; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.Resource; + +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer; import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants; @@ -232,13 +234,37 @@ final public class VisualizationCaches { new CachingRDFServiceExecutor.RDFServiceCallable>(visualizationAffinity) { @Override protected Map callWithService(RDFService rdfService) throws Exception { + // get current selected language tag + VitroRequest vreq = rdfService.getVitroRequest(); + String langCtx = "en-US"; // set default + String language = "en"; // set fallback language + try { + langCtx = language = vreq.getLocale().getLanguage(); + if (!vreq.getLocale().getCountry().isEmpty()) { + langCtx += "-" + vreq.getLocale().getCountry(); + } + } catch (Exception e) { } + String query = QueryConstants.getSparqlPrefixQuery() + - "SELECT ?org ?orgLabel\n" + + "SELECT ?org (Min(?orgLabel_) AS ?orgLabel) \n" + "WHERE\n" + "{\n" + - " ?org a foaf:Organization .\n" + - " ?org rdfs:label ?orgLabel .\n" + - "}\n"; + " ?org a foaf:Organization \n" + + " OPTIONAL { ?org rdfs:label ?orgLabelPrimary . \n" + + " FILTER (LANG(?orgLabelPrimary) = '" + langCtx + "') \n" + + "} \n" + + " OPTIONAL { ?org rdfs:label ?orgLabelSecondary . \n" + + " FILTER (LANG(?orgLabelSecondary) = '" + language + "') \n" + + "} \n" + + " OPTIONAL { ?org rdfs:label ?orgLabelTertiary .\n" + + " FILTER (STRBEFORE(STR(LANG(?orgLabelTertiary)), '-') = '" + language + "') \n" + + "} \n" + + " OPTIONAL { ?org rdfs:label ?orgLabelFallback .\n" + + " FILTER (LANG(?orgLabelFallback) != '" + langCtx + "' \n" + + " && LANG(?orgLabelFallback) != '" + language + "' ) \n" + + "} \n" + + "BIND(COALESCE(?orgLabelPrimary, ?orgLabelSecondary, ?orgLabelTertiary, ?orgLabelFallback) AS ?orgLabel_) \n" + + "} GROUP BY ?org \n"; final Map map = new HashMap<>(); @@ -390,6 +416,16 @@ final public class VisualizationCaches { new CachingRDFServiceExecutor.RDFServiceCallable() { @Override protected ConceptLabelMap callWithService(RDFService rdfService) throws Exception { + VitroRequest vreq = rdfService.getVitroRequest(); + String langCtx = "en-US"; + // UQAM-Optimization Adjust to linguistic context + try { + langCtx = vreq.getLocale().getLanguage(); + if (!vreq.getLocale().getCountry().isEmpty()) { + langCtx += "-" + vreq.getLocale().getCountry(); + } + } catch (Exception e) { + } String query = QueryConstants.getSparqlPrefixQuery() + "SELECT ?concept ?label\n" + "WHERE\n" + @@ -398,13 +434,13 @@ final public class VisualizationCaches { " ?person core:hasResearchArea ?concept .\n" + " ?concept a skos:Concept .\n" + " ?concept rdfs:label ?label .\n" + + " FILTER (lang(?label) = '" + langCtx+"' ) \n" + "}\n"; // final Map map = new HashMap<>(); final ConceptLabelMap map = new ConceptLabelMap(); - + rdfService.sparqlSelectQuery(query, new ResultSetConsumer() { - @Override protected void processQuerySolution(QuerySolution qs) { String conceptURI = qs.getResource("concept").getURI().intern(); String label = qs.getLiteral("label").getString().intern(); diff --git a/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java b/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java index 51fadef5..23b536d8 100644 --- a/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java +++ b/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java @@ -2,29 +2,40 @@ package org.vivoweb.webapp.sitemap; -import org.apache.commons.lang3.StringUtils; -import org.apache.jena.query.QuerySolution; -import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; -import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException; -import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer; -import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants; -import org.apache.commons.io.IOUtils; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jena.query.QuerySolution; + +import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; +import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException; +import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer; +import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants; @WebServlet(name = "SiteMapServlet", urlPatterns = {"/robots.txt","/sitemap.xml"}) public class SiteMapServlet extends VitroHttpServlet { + + private static final int MAX_URLS = 50000; // max URLs per sitemap + private static final Log log = LogFactory.getLog(SiteMapServlet.class); + @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { String requestURI = request.getRequestURI(); if (requestURI != null) { @@ -60,7 +71,7 @@ public class SiteMapServlet extends VitroHttpServlet { "WHERE\n" + "{\n" + " ?person a foaf:Person .\n" + - "}\n"; + "} LIMIT " + MAX_URLS + "\n"; final VitroRequest vreq = new VitroRequest(request); final ServletOutputStream out = response.getOutputStream(); @@ -68,28 +79,33 @@ public class SiteMapServlet extends VitroHttpServlet { out.println(""); out.println(""); + List personURIs = new ArrayList(); + try { vreq.getRDFService().sparqlSelectQuery(query, new ResultSetConsumer() { @Override protected void processQuerySolution(QuerySolution qs) { - String person = qs.getResource("person").getURI(); - - String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq); - - if (!StringUtils.isEmpty(profileUrl)) { - try { - out.println(" "); - out.println(" " + schemeAndServer + profileUrl + ""); - out.println(" weekly"); - out.println(" "); - } catch (Exception e) { - } - } + personURIs.add(qs.getResource("person").getURI()); } }); } catch (RDFServiceException rse) { + log.error(rse, rse); } + for(String person : personURIs) { + String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq); + if (!StringUtils.isEmpty(profileUrl)) { + try { + out.println(" "); + out.println(" " + schemeAndServer + profileUrl + ""); + out.println(" weekly"); + out.println(" "); + } catch (Exception e) { + log.error(e, e); + } + } + } + out.println(""); } } @@ -104,7 +120,8 @@ public class SiteMapServlet extends VitroHttpServlet { if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) { StringBuilder builder = new StringBuilder(); builder.append(scheme).append("://").append(serverName); - if (("http".equalsIgnoreCase(scheme) && serverPort != 80) || ("https".equalsIgnoreCase(scheme) && serverPort != 443) ) { + if (("http".equalsIgnoreCase(scheme) && serverPort != 80) + || ("https".equalsIgnoreCase(scheme) && serverPort != 443) ) { builder.append(":").append(serverPort); } diff --git a/api/src/main/java/org/vivoweb/webapp/startup/i18nSetup.java b/api/src/main/java/org/vivoweb/webapp/startup/i18nSetup.java index b4c1a6d5..2f539474 100644 --- a/api/src/main/java/org/vivoweb/webapp/startup/i18nSetup.java +++ b/api/src/main/java/org/vivoweb/webapp/startup/i18nSetup.java @@ -7,6 +7,12 @@ import edu.cornell.mannlib.vitro.webapp.i18n.VitroResourceBundle; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +/** + * Configures VIVO to look for i18n properties files prefixed with 'vivo_'. + * This listener must be run before any other code that uses resource bundles. + * As this listener does not depend on any others, it should be run at or near + * the top of the list in startup_listeners.txt. + */ public class i18nSetup implements ServletContextListener { @Override diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..d47dcf7d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.2' + +services: + + solr: + image: vivoweb/vivo-solr:latest + environment: + - RESET_CORE=${RESET_CORE} + - VERBOSE=${VERBOSE} + ports: + - 8983:8983 + networks: + - vivo + + tomcat: + container_name: vivo + hostname: vivo + build: + context: ./ + dockerfile: Dockerfile + args: + - VIVO_DIR=/usr/local/vivo/home + - TDB_FILE_MODE=direct + - SOLR_URL=http://solr:8983/solr/vivocore + environment: + - RESET_HOME=${RESET_HOME} + - VERBOSE=${VERBOSE} + ports: + - 8080:8080 + volumes: + - ${LOCAL_VIVO_HOME}:/usr/local/vivo/home + networks: + - vivo + +networks: + vivo: diff --git a/home/pom.xml b/home/pom.xml index 18357bdf..8b61e33e 100644 --- a/home/pom.xml +++ b/home/pom.xml @@ -1,19 +1,16 @@ - + 4.0.0 org.vivoweb vivo-home - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT pom org.vivoweb vivo-project - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT .. @@ -72,4 +69,4 @@ tar.gz - + \ No newline at end of file diff --git a/home/src/main/resources/config/example.applicationSetup.n3 b/home/src/main/resources/config/example.applicationSetup.n3 index 7b5dfb39..0acd91f0 100644 --- a/home/src/main/resources/config/example.applicationSetup.n3 +++ b/home/src/main/resources/config/example.applicationSetup.n3 @@ -82,10 +82,10 @@ # ---------------------------- # # Content triples source module: holds data contents -# The SDB-based implementation is the default option. It reads its parameters +# The TDB-based implementation is the default option. It reads its parameters # from the runtime.properties file, for backward compatibility. # -# Other implementations are based on a local TDB instance, a "standard" SPARQL +# Other implementations are based on an SDB instance, a "standard" SPARQL # endpoint, or a Virtuoso endpoint, with parameters as shown. # diff --git a/home/src/main/resources/config/example.runtime.properties b/home/src/main/resources/config/example.runtime.properties index b0fb959e..bb558456 100644 --- a/home/src/main/resources/config/example.runtime.properties +++ b/home/src/main/resources/config/example.runtime.properties @@ -10,7 +10,7 @@ # For more information on specific properties, see the configuration reference # or installation options section of the technical documentation for the # version of VIVO you are running: -# https://wiki.duraspace.org/display/VIVO/VIVO+Technical+Documentation +# https://wiki.lyrasis.org/display/VIVO/VIVO+Technical+Documentation # # ----------------------------------------------------------------------------- @@ -39,7 +39,6 @@ Vitro.defaultNamespace = http://vivo.mydomain.edu/individual/ # rootUser.emailAddress = vivo_root@mydomain.edu - # # Argon2 password hashing parameters for time, memory and parallelism required to # compute a hash. @@ -72,20 +71,23 @@ argon2.time = 1000 # Email parameters which VIVO can use to send mail. If these are left empty, # the "Contact Us" form will be disabled and users will not be notified of # changes to their accounts. + # Example: + # email.smtpHost = smtp.mydomain.edu + # email.replyTo = vivoAdmin@mydomain.edu # -email.smtpHost = smtp.mydomain.edu -email.replyTo = vivoAdmin@mydomain.edu +# email.smtpHost = +# email.replyTo = # # URL of Solr context used in local VIVO search. This will usually consist of: - # scheme + server_name + port + vivo_webapp_name + "solr" - # In the standard installation, the Solr context will be on the same server as VIVO, - # and in the same Tomcat instance. The path will be the VIVO webapp.name (specified - # in build.properties) + "solr" + # scheme + server_name + port + "solr" + solr_core_name + # In a standard Solr installation, the Solr service will be available on port + # 8983. The path will be /solr followed by the name used when adding a core + # for VIVO. # Example: - # vitro.local.solr.url = http://localhost:8080/vivosolr + # vitro.local.solr.url = http://localhost:8983/solr/vivocore # -vitro.local.solr.url = http://localhost:8080/vivosolr +vitro.local.solr.url = http://localhost:8983/solr/vivocore # ----------------------------------------------------------------------------- @@ -112,6 +114,22 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId # #externalAuth.netIdHeaderName = remote_userID +# ----------------------------------------------------------------------------- +# OPTIMIZING LIST VIEW QUERIES +# ----------------------------------------------------------------------------- + + # + # Include sections between + # tags when executing 'list view' queries that retrieve data + # for property lists on profile pages. + # + # Including these optional sections does not change the query + # semantics, but may improve performance. + # + # Default is true if not set. + # (Prior to v1.12, default was true for SDB and false for TDB.) + # +# listview.usePreciseSubquery = true # ----------------------------------------------------------------------------- # TUNING THE DATABASE CONNECTION POOL @@ -130,7 +148,6 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId # # VitroConnection.DataSource.pool.maxIdle = 10 - # ----------------------------------------------------------------------------- # USING A DIFFERENT DATABASE # ----------------------------------------------------------------------------- @@ -202,8 +219,8 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId # # A list of supported languages or Locales that the user may choose to - # use instead of the one specified by the browser. Selection images must - # be available in the i18n/images directory of the theme. This affects + # use instead of the one specified by the browser. The selected language(s) + # must exist in the VIVO-languages repository. This affects # RDF data retrieved from the model, if RDFService.languageFilter is true. # This also affects the text of pages that have been modified to support # multiple languages. @@ -217,26 +234,43 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId # ORCID INTEGRATION # ----------------------------------------------------------------------------- + # The Client ID from your ORCID credentials + # When your application for credentials is accepted, you will receive a Client + # ID to be used in communications with the API. If you apply for sandbox + # credentials first, and then production credentials, you will likely receive + # two different Client IDs. # orcid.clientId = 0000-0000-0000-000X + + # The Client Secret from your ORCID credentials + # When your application for credentials is accepted, you will receive a Client + # Secret to be used in communications with the API. If you apply for sandbox + # credentials first, and then production credentials, you will likely receive + # two different Client Secrets. # orcid.clientPassword = 00000000-0000-0000-0000-000000000000 - # - # The orcid.webappBaseUrl must end in a front slash (/) - # if it includes a path past the domain and (if required) port. - # + # The base URL for your VIVO application, as seen from outside. + # VIVO will use this to construct a callback URL that the ORCID API can use to + # return control to VIVO. The actual callback URL will be the string you + # provide here with the suffix of /orcid/callback added at the end. + # The orcid.webappBaseUrl must end in a front slash (/) + # if it includes a path past the domain and (if required) port. + # # orcid.webappBaseUrl = http://vivo.mydomain.edu/vivo/ # orcid.externalIdCommonName = VIVO Cornell Identifier - # 1.2, 2.0 + # The version of ORCIDs API protocol that VIVO will expect. Currently, the + # only supported version is 2.0. # orcid.apiVersion = 2.0 - # release, sandbox + # The entry point for ORCID's public API. + # This changes, depending on whether you are using the sandbox API or the + # production API. Value is either release or sandbox. # orcid.api = sandbox - # Specify the type of API access that you have - public or member - # public - only allows you to confirm ORCID IDs - # member - allows VIVO to write a link to the VIVO profile in the ORCID record - # If you only have a public API key, ensure that you have entered public here + # Specify the type of API access that you have - public or member + # public - only allows you to confirm ORCID IDs + # member - allows VIVO to write a link to the VIVO profile in the ORCID record + # If you only have a public API key, ensure that you have entered public here #orcid.apiLevel = public @@ -392,7 +426,15 @@ Vitro.reconcile.defaultTypeList = http://vivoweb.org/ontology/core#Role, core:Ro # If you do not wish to use the claiming interface, set this property to nothing (empty) createAndLink.providers = doi, pmid - # Triple pattern fragments is a very fast, very simple means for querying a triple store. - # The triple pattern fragments API in VIVO puts little load on the server, providing a simple means for getting data from the triple store. The API has a web interface for manual use, can be used from the command line via curl, and can be used by programs. + # Triple Pattern Fragments is a very fast, very simple means for querying a + # triple store. The Triple Pattern Fragments API in VIVO puts little load on + # the server, providing a simple means for getting data from the triple store. + # The API has a web interface for manual use, can be used from the command + # line via curl, and can be used by programs. + # + # VIVO's Triple Pattern Fragments API does not require authentication and + # makes the full RDF graph available regardless of display or publish levels + # set on particular properties. Enable Triple Pattern Fragments only if your + # VIVO does not contain restricted data that should not be shared with others. # # tpf.activeFlag = true diff --git a/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 b/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 deleted file mode 100644 index 3bc0bb3a..00000000 --- a/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 +++ /dev/null @@ -1,167 +0,0 @@ -@prefix : . -@prefix searchIndex: . - -@prefix rdfs: . - -:vivodocumentModifier_excerptsInComplexPublications - a , - ; - rdfs:label "Populate complex publications with excerpts" ; - :hasTargetField "ALLTEXT" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX ts: - PREFIX rdf: - SELECT DISTINCT ?value - WHERE { - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt . - VALUES ?property { ts:works ts:bibliography ts:htmlExcerpt ts:keywords } - ?excerpt ?property ?value . - } - """ . - -:vivoUriFinder_excerptsInComplexPublications - a searchIndex:indexing.IndexingUriFinder , - searchIndex:indexing.SelectQueryUriFinder ; - rdfs:label "When excerpts change" ; - :hasSelectQuery """ - PREFIX ts: - SELECT ?uri - WHERE { - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?subject . - } - """ . - -:vivoUriFinder_onRubricsAssign - a searchIndex:indexing.IndexingUriFinder , - searchIndex:indexing.SelectQueryUriFinder ; - rdfs:label "When rubric was assigned" ; - :hasSelectQuery """ - PREFIX ts: - SELECT ?uri - WHERE { - ?subject a ts:textExcerpt . - VALUES ?uri { ?subject } - } - """ . - -:vivodocumentModifier_PopulateTextWithHTMLContentsOfExcerpts - a , - ; - rdfs:label "Html text to text field" ; - :hasTargetField "text" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX ts: - PREFIX rdf: - SELECT DISTINCT ?htmlExcerpt - WHERE { - { - ?uri rdf:type ts:textExcerpt . - ?uri ts:htmlExcerpt ?htmlExcerpt . - } - UNION - { - ?uri rdf:type ts:complexPublication . - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt . - ?excerpt ts:htmlExcerpt ?htmlExcerpt . - } - } - """ . - -:vivodocumentModifier_rubrics - a , - ; - rdfs:label "Add rubrics in rubrics field" ; - :hasTargetField "rubrics" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX ts: - PREFIX rdf: - PREFIX pr: - SELECT DISTINCT ?rubric - WHERE { - { - ?uri rdf:type ts:textExcerpt . - ?uri pr:belongsTo ?assignedRubric . - ?assignedRubric (pr:hasParent)* ?rubric . - } - UNION - { - ?uri rdf:type ts:complexPublication . - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt . - ?excerpt pr:belongsTo ?assignedRubric . - ?assignedRubric (pr:hasParent)* ?rubric . - } - } - """ . - -:vivodocumentModifier_titles - a , - ; - rdfs:label "Add titles to special field" ; - :hasTargetField "titles" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX rdf: - SELECT DISTINCT ?title - WHERE { - ?uri rdfs:label ?title . - } - """ . - - -:vivodocumentModifier_keywordsElenph - a , - ; - rdfs:label "Keywords for articles and excerpts" ; - :hasTargetField "keywords" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX ts: - PREFIX rdf: - SELECT DISTINCT ?keywords - WHERE { - { - ?uri rdf:type ts:elenphArticle . - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?elenphExcerpt . - ?elenphExcerpt ts:keywords ?keywords . - } - UNION - { - ?uri rdf:type ts:elenphExcerpt . - ?uri ts:keywords ?keywords . - } - } - """ . - -:vivodocumentModifier_bibliographyElenph - a , - ; - rdfs:label "Bibliography for articles and excerpts" ; - :hasTargetField "bibliography" ; - :hasSelectQuery """ - PREFIX rdfs: - PREFIX ts: - PREFIX rdf: - SELECT DISTINCT ?bibliography - WHERE { - { - ?uri rdf:type ts:elenphArticle . - ?uri ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?elenphExcerpt . - ?elenphExcerpt ts:bibliography ?bibliography . - } - UNION - { - ?uri rdf:type ts:elenphExcerpt . - ?uri ts:bibliography ?bibliography . - } - } - """ . - diff --git a/home/src/main/resources/rdf/display/everytime/compilationDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/compilationDataGetters.n3 deleted file mode 100644 index eab30a54..00000000 --- a/home/src/main/resources/rdf/display/everytime/compilationDataGetters.n3 +++ /dev/null @@ -1,144 +0,0 @@ -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . -@prefix display: . - - - display:hasDataGetter display:getCompilationExcerptsContentDataGetter . - - display:hasDataGetter display:getCompilationExcerptPathsDataGetter . - - display:hasDataGetter display:getCompilationWorksDataGetter . - - display:hasDataGetter display:getCompilationBibliographyDataGetter . - - display:hasDataGetter display:getCompilationAuthorsDataGetter . - - display:hasDataGetter display:getCompilationRubricsDataGetter . - -display:getCompilationExcerptsContentDataGetter - a ; - display:saveToVar "excerpts"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - SELECT ?elenphExcerpt ?htmlLabel ?htmlContent (COUNT (distinct ?excerptWorks) as ?worksCounter) (COUNT (distinct ?excerptBibliography) as ?bibliographyCounter) - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:htmlExcerpt ?htmlContent . - ?elenphExcerpt rdfs:label ?htmlLabel . - OPTIONAL{ ?elenphExcerpt ts_:works ?excerptWorks . } - OPTIONAL{ ?elenphExcerpt ts_:bibliography ?excerptBibliography . } - } GROUP BY ?elenphExcerpt ?htmlLabel ?htmlContent ORDER BY ?elenphExcerpt - """ . - -display:getCompilationExcerptPathsDataGetter - a ; - display:saveToVar "paths"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - SELECT (GROUP_CONCAT(substr(concat("000",str(?outline)),strlen(str(?outline))); SEPARATOR = ".") AS ?path ) (COUNT(?outline) AS ?level) ?tocElement ?elenphExcerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc ts_:hasTOCItem/(ts_:pointsTo/ts_:hasTOCItem)* ?tmpTOCItem . - ?tmpTOCItem rdf:type ts_:TOCItem . - ?tmpTOCItem ts_:pointsTo/(ts_:hasTOCItem/ts_:pointsTo)* ?tocElement . - ?tmpTOCItem ts_:itemNumber ?outline . - OPTIONAL { - ?tocElement ts_:hasText ?elenphExcerpt . - } - { - SELECT ?tocElement - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement . - ?tocElement rdf:type ts_:TOCLevel . - } - } - } GROUP BY ?tocElement ?elenphExcerpt ORDER BY ?path - """ . - -display:getCompilationBibliographyDataGetter - a ; - display:saveToVar "bibliography"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?bibliography ?excerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?excerpt ts_:bibliography ?bibliography . - } ORDER BY ?bibliography - """ . - -display:getCompilationWorksDataGetter - a ; - display:saveToVar "works"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?works ?excerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?excerpt ts_:works ?works . - } ORDER BY ?works - """ . - -display:getCompilationAuthorsDataGetter - a ; - display:saveToVar "authors"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:hasAuthor ?participant . - ?participant ts_:participantFamily ?authorFamily . - ?participant ts_:participantInitials ?authorInitials . - ?participant ts_:participantGivenName ?authorGivenName . - OPTIONAL { ?participant ts_:affiliatedWith ?organization . - OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } . - OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } . - OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } . - } - - } ORDER BY ?authorFamily - """ . - -display:getCompilationRubricsDataGetter - a ; - display:saveToVar "rubrics"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - PREFIX pr: - SELECT DISTINCT ?rubricID ?rubricName - WHERE { - ?uri ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?artExcerpt . - ?artExcerpt pr:belongsTo ?rubricID . - ?rubricID rdfs:label ?rubricName . - } ORDER BY ?rubricID - """ . - - diff --git a/home/src/main/resources/rdf/display/everytime/customSearchDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/customSearchDataGetters.n3 deleted file mode 100644 index 746d5a88..00000000 --- a/home/src/main/resources/rdf/display/everytime/customSearchDataGetters.n3 +++ /dev/null @@ -1,42 +0,0 @@ -@prefix display: . -@prefix rdf: . -@prefix rdfs: . - - display:hasDataGetter display:customSearchFieldsDataGetter . - display:hasDataGetter display:customSearchFiltersDataGetter . - -display:customSearchFieldsDataGetter - a ; - display:saveToVar "searchFields" ; - display:query """ - PREFIX rdfs: - PREFIX rdf: - PREFIX search: - SELECT ?name ?field ?hasFilters - WHERE { - ?searchField rdf:type search:searchField . - ?searchField rdfs:label ?name . - ?searchField search:indexField ?field . - BIND (exists { ?filters search:filterFiled ?searchField } AS ?hasFilters) - } ORDER BY ?name - """ . - -display:customSearchFiltersDataGetter - a ; - display:saveToVar "searchFilters" ; - display:query """ - PREFIX rdfs: - PREFIX rdf: - PREFIX search: - SELECT ?name ?field ?id - WHERE { - ?searchFilter rdf:type search:filter . - ?searchFilter rdfs:label ?name . - ?searchFilter search:id ?id . - ?searchFilter search:filterFiled ?searchField . - ?searchField search:indexField ?field . - BIND (replace ( ?name, "«", "" ) AS ?sortName) - - } ORDER BY ?field ?sortName - """ . - diff --git a/home/src/main/resources/rdf/display/everytime/deleteQueries.n3 b/home/src/main/resources/rdf/display/everytime/deleteQueries.n3 deleted file mode 100644 index 6431a4f9..00000000 --- a/home/src/main/resources/rdf/display/everytime/deleteQueries.n3 +++ /dev/null @@ -1,48 +0,0 @@ -@prefix display: . - display:hasDeleteQuery """ - PREFIX ts: - DESCRIBE ?individualURI ?tocElement ?tocItem ?toc - WHERE { - OPTIONAL { - ?individualURI ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)* ?tocElement . - OPTIONAL { - ?tocElement ts:hasTOCItem ?tocItem . - } - } - } - """ . - display:hasDeleteQuery """ - PREFIX ts: - PREFIX rdf: - DESCRIBE ?individualURI ?tocElement ?tocItem ?toc ?excerpt ?author ?organization - WHERE { - ?individualURI rdf:type ts:elenphArticle . - OPTIONAL { - ?individualURI ts:hasTOC ?toc . - ?toc (ts:hasTOCItem/ts:pointsTo)* ?tocElement . - OPTIONAL { - ?tocElement ts:hasTOCItem ?tocItem . - } - OPTIONAL { - ?tocElement ts:hasText ?excerpt . - OPTIONAL { - ?excerpt ts:hasAuthor ?author . - OPTIONAL { - ?author ts:affiliatedWith ?organization . - } - } - } - } - } - """ . - - display:hasDeleteQuery """ - PREFIX ts: - DESCRIBE ?individualURI ?tocElement - WHERE - { - ?tocElement ts:hasText ?individualURI . - FILTER NOT EXISTS {?tocElement ts:hasTOCItem ?tocItem } - } - """ . diff --git a/home/src/main/resources/rdf/display/everytime/elenphArticleDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/elenphArticleDataGetters.n3 deleted file mode 100644 index 3c7a3977..00000000 --- a/home/src/main/resources/rdf/display/everytime/elenphArticleDataGetters.n3 +++ /dev/null @@ -1,144 +0,0 @@ -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . -@prefix display: . - - - display:hasDataGetter display:getArticleExcerptsContentDataGetter . - - display:hasDataGetter display:getArticleExcerptPathsDataGetter . - - display:hasDataGetter display:getArticleWorksDataGetter . - - display:hasDataGetter display:getArticleBibliographyDataGetter . - - display:hasDataGetter display:getArticleAuthorsDataGetter . - - display:hasDataGetter display:getArticleRubricsDataGetter . - -display:getArticleExcerptsContentDataGetter - a ; - display:saveToVar "excerpts"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - SELECT ?elenphExcerpt ?htmlLabel ?htmlContent (COUNT (distinct ?excerptWorks) as ?worksCounter) (COUNT (distinct ?excerptBibliography) as ?bibliographyCounter) - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:htmlExcerpt ?htmlContent . - ?elenphExcerpt rdfs:label ?htmlLabel . - OPTIONAL{ ?elenphExcerpt ts_:works ?excerptWorks . } - OPTIONAL{ ?elenphExcerpt ts_:bibliography ?excerptBibliography . } - } GROUP BY ?elenphExcerpt ?htmlLabel ?htmlContent ORDER BY ?elenphExcerpt - """ . - -display:getArticleExcerptPathsDataGetter - a ; - display:saveToVar "paths"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - SELECT (GROUP_CONCAT(substr(concat("000",str(?outline)),strlen(str(?outline))); SEPARATOR = ".") AS ?path ) (COUNT(?outline) AS ?level) ?tocElement ?elenphExcerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc ts_:hasTOCItem/(ts_:pointsTo/ts_:hasTOCItem)* ?tmpTOCItem . - ?tmpTOCItem rdf:type ts_:TOCItem . - ?tmpTOCItem ts_:pointsTo/(ts_:hasTOCItem/ts_:pointsTo)* ?tocElement . - ?tmpTOCItem ts_:itemNumber ?outline . - OPTIONAL { - ?tocElement ts_:hasText ?elenphExcerpt . - } - { - SELECT ?elenphArticle ?tocElement - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement . - ?tocElement rdf:type ts_:TOCLevel . - } - } - } GROUP BY ?tocElement ?elenphExcerpt ORDER BY ?path - """ . - -display:getArticleBibliographyDataGetter - a ; - display:saveToVar "bibliography"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?bibliography ?excerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?excerpt ts_:bibliography ?bibliography . - } ORDER BY ?bibliography - """ . - -display:getArticleWorksDataGetter - a ; - display:saveToVar "works"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?works ?excerpt - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?excerpt ts_:works ?works . - } ORDER BY ?works - """ . - -display:getArticleAuthorsDataGetter - a ; - display:saveToVar "authors"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:hasAuthor ?participant . - ?participant ts_:participantFamily ?authorFamily . - ?participant ts_:participantInitials ?authorInitials . - ?participant ts_:participantGivenName ?authorGivenName . - OPTIONAL { ?participant ts_:affiliatedWith ?organization . - OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } . - OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } . - OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } . - } - - } ORDER BY ?authorFamily - """ . - -display:getArticleRubricsDataGetter - a ; - display:saveToVar "rubrics"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - PREFIX pr: - SELECT DISTINCT ?rubricID ?rubricName - WHERE { - ?uri ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?artExcerpt . - ?artExcerpt pr:belongsTo ?rubricID . - ?rubricID rdfs:label ?rubricName . - } ORDER BY ?rubricID - """ . - - diff --git a/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 deleted file mode 100644 index 8cbf13e7..00000000 --- a/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 +++ /dev/null @@ -1,52 +0,0 @@ -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . -@prefix display: . - - - display:hasDataGetter display:getExcerptAssignedArticlesDataGetter . - display:hasDataGetter display:getExcerptAuthorsDataGetter . - - -display:getExcerptAssignedArticlesDataGetter - a ; - display:saveToVar "articles"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?articleName ?articleUri - WHERE { - ?articleUri rdf:type ts_:elenphArticle . - ?articleUri ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?individualURI . - ?articleUri rdfs:label ?articleName . - } ORDER BY ?articleName - """ . - -display:getExcerptAuthorsDataGetter - a ; - display:saveToVar "authors"; - display:query - """ - PREFIX rdfs: - PREFIX ts_: - PREFIX rdf: - SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress - WHERE { - ?individualURI ts_:hasAuthor ?participant . - ?participant ts_:participantFamily ?authorFamily . - ?participant ts_:participantInitials ?authorInitials . - ?participant ts_:participantGivenName ?authorGivenName . - OPTIONAL { ?participant ts_:affiliatedWith ?organization . - OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } . - OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } . - OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } . - } - - } ORDER BY ?authorFamily - """ . diff --git a/home/src/main/resources/rdf/display/everytime/excluded_classes.n3 b/home/src/main/resources/rdf/display/everytime/excluded_classes.n3 deleted file mode 100644 index bf183cda..00000000 --- a/home/src/main/resources/rdf/display/everytime/excluded_classes.n3 +++ /dev/null @@ -1,11 +0,0 @@ -@prefix vitroDisplay: . - -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . -vitroDisplay:SearchIndex vitroDisplay:excludeClass . diff --git a/home/src/main/resources/rdf/display/everytime/homePageDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/homePageDataGetters.n3 index be3db725..35ec0e8e 100644 --- a/home/src/main/resources/rdf/display/everytime/homePageDataGetters.n3 +++ b/home/src/main/resources/rdf/display/everytime/homePageDataGetters.n3 @@ -23,7 +23,8 @@ display:academicDeptsDataGetter WHERE { ?theURI a vivo:AcademicDepartment . - ?theURI rdfs:label ?label + ?theURI rdfs:label ?label . + FILTER (lang(?label) = '?country' ) . } """ . diff --git a/home/src/main/resources/rdf/display/everytime/rubricDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/rubricDataGetters.n3 deleted file mode 100644 index e17d13c8..00000000 --- a/home/src/main/resources/rdf/display/everytime/rubricDataGetters.n3 +++ /dev/null @@ -1,115 +0,0 @@ -@prefix owl: . -@prefix rdf: . -@prefix rdfs: . -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . -@prefix display: . - - - display:hasDataGetter display:getArticlesWithRubricDataGetter . - - display:hasDataGetter display:getArticlesWithChildRubricDataGetter . - - display:hasDataGetter display:getChildRubricsDataGetter . - - display:hasDataGetter display:getExcerptsWithRubricDataGetter . - - display:hasDataGetter display:getExcerptsWithRubricsChildsDataGetter . - -display:getArticlesWithChildRubricDataGetter - a ; - display:saveToVar "childArticles"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - PREFIX pr: - SELECT DISTINCT ?childArticleID ?childArticleName - WHERE { - ?rubric (pr:hasParent)+ ?individualURI . - ?excerpt pr:belongsTo ?rubric . - ?excerpt rdf:type ts_:elenphExcerpt . - ?childArticleID ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?childArticleID rdfs:label ?childArticleName . - ?childArticleID rdf:type ts_:elenphArticle . - } ORDER BY ?childArticleName - """ . - - -display:getArticlesWithRubricDataGetter - a ; - display:saveToVar "articles"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - PREFIX pr: - SELECT DISTINCT ?articleID ?articleName - WHERE { - ?excerpt pr:belongsTo ?individualURI . - ?excerpt rdf:type ts_:elenphExcerpt . - ?articleID ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . - ?articleID rdfs:label ?articleName . - ?articleID rdf:type ts_:elenphArticle . - } ORDER BY ?articleName - """ . - -display:getChildRubricsDataGetter - a ; - display:saveToVar "childRubrics"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - PREFIX pr: - SELECT DISTINCT ?rubricID ?rubricName - WHERE { - ?rubricID pr:hasParent ?individualURI . - ?rubricID pr:rubricOrder ?order . - ?rubricID rdfs:label ?rubricName . - ?rubricID rdf:type pr:rubric . - } ORDER BY ?order - """ . - -display:getExcerptsWithRubricsChildsDataGetter - a ; - display:saveToVar "childExcerpts"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - PREFIX pr: - SELECT DISTINCT ?childExcerptID ?childExcerptName - WHERE { - ?tmpChildRubrics (pr:hasParent)+ ?individualURI . - ?childExcerptID pr:belongsTo ?tmpChildRubrics . - ?childExcerptID rdfs:label ?childExcerptName . - ?childExcerptID rdf:type ts_:elenphExcerpt . - } ORDER BY ?childExcerptName - """ . - -display:getExcerptsWithRubricDataGetter - a ; - display:saveToVar "excerpts"; - display:query - """ - PREFIX rdfs: - PREFIX rdf: - PREFIX ts_: - PREFIX pr: - SELECT DISTINCT ?excerptID ?excerptName - WHERE { - ?excerptID pr:belongsTo ?individualURI . - ?excerptID rdfs:label ?excerptName . - ?excerptID rdf:type ts_:elenphExcerpt . - } ORDER BY ?excerptName - """ . - - diff --git a/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3 b/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3 index c29361c8..bdc8a4fa 100644 --- a/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3 +++ b/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3 @@ -23,7 +23,7 @@ searchIndex:documentBuilding.DocumentModifier , searchIndex:extensions.LabelsAcrossContextNodes ; rdfs:label "Labels across relatedBy/relates" ; - :hasTypeRestriction "http://vivoweb.org/ontology/core#Relationship" ; + :appliesToContextNodeType "http://vivoweb.org/ontology/core#Relationship" ; :hasIncomingProperty "http://vivoweb.org/ontology/core#relatedBy" ; :hasOutgoingProperty "http://vivoweb.org/ontology/core#relates" . @@ -117,6 +117,22 @@ } """ . +# URI finder that will find the relevant person to update when the +# property linking to the email or preferred title resource is removed +:vivoUriFinder_VCard_2 + a searchIndex:indexing.IndexingUriFinder , + searchIndex:indexing.SelectQueryUriFinder ; + rdfs:label "Preferred title / email person URI finder #2" ; + :hasPredicateRestriction "http://www.w3.org/2006/vcard/ns#hasTitle" ; + :hasPredicateRestriction "http://www.w3.org/2006/vcard/ns#hasEmail" ; + :hasSelectQuery """ + PREFIX obo: + SELECT ?uri + WHERE { + ?uri obo:ARG_2000028 ?subject . + } + """ . + :vivodocumentModifier_PreferredTitle a searchIndex:documentBuilding.SelectQueryDocumentModifier , searchIndex:documentBuilding.DocumentModifier ; diff --git a/home/src/main/resources/rdf/display/firsttime/aboutPage.n3 b/home/src/main/resources/rdf/display/firsttime/aboutPage.n3 deleted file mode 100644 index d2a7c2f7..00000000 --- a/home/src/main/resources/rdf/display/firsttime/aboutPage.n3 +++ /dev/null @@ -1,24 +0,0 @@ -# $This file is distributed under the terms of the license in LICENSE$ - -@prefix about: . - -about:ABOUTDG - a ; - - """

About VIVO

-

The VIVO application enables the discovery of researchers across institutions. Participants in the network include institutions with local installations of VIVO or those with research discovery and profiling applications that can provide semantic web-compliant data. The information accessible through VIVO's search and browse capability will therefore reside and be controlled locally, within institutional VIVOs or other semantic web-compliant applications.

- -

VIVO is an open source semantic web application originally developed and implemented at Cornell. When installed and populated with content at an institution, it enables the discovery of research and scholarship across disciplines at that institution. VIVO supports browsing and a search function which returns faceted results for rapid retrieval of desired information. Content in any local VIVO installation may be maintained manually or brought into the database in automated ways from local systems of record, such as human resources, scholarships, grants, course, and faculty activity databases.

- -

See more information on the VIVO Project.

- """@en ; - - "aboutPage" . -about:ABOUTPAGE - a ; - - about:ABOUTDG ; - - "About Page" ; - - "/about" . diff --git a/home/src/main/resources/rdf/display/firsttime/menu.n3 b/home/src/main/resources/rdf/display/firsttime/menu.n3 index 3d6aa54e..1717a05b 100644 --- a/home/src/main/resources/rdf/display/firsttime/menu.n3 +++ b/home/src/main/resources/rdf/display/firsttime/menu.n3 @@ -14,7 +14,6 @@ display:DefaultMenu a display:MainMenu ; - rdfs:label "Default Menu" ; display:hasElement display:EventsMenuItem ; display:hasElement display:HomeMenuItem ; display:hasElement display:OrganizationsMenuItem ; @@ -27,43 +26,36 @@ display:DefaultMenu display:HomeMenuItem a display:NavigationElement ; display:menuPosition 1; - display:linkText "Home"; display:toPage display:Home . display:PeopleMenuItem a display:NavigationElement ; display:menuPosition 2; - display:linkText "People"; display:toPage display:People . display:OrganizationsMenuItem a display:NavigationElement ; display:menuPosition 3; - display:linkText "Organizations"; display:toPage display:Organizations . display:ResearchMenuItem a display:NavigationElement ; display:menuPosition 4; - display:linkText "Research"; display:toPage display:Research . display:EventsMenuItem a display:NavigationElement ; display:menuPosition 5; - display:linkText "Events"; display:toPage display:Events . display:CapabilityMapMenuItem a display:NavigationElement ; display:menuPosition 6; - display:linkText "Capability Map"; display:toPage display:CapabilityMap . display:Home a display:HomePage ; a display:Page ; - display:title "Home" ; display:urlMapping "/" ; display:hasDataGetter display:homeDataGetter; display:cannotDeletePage "true" . @@ -72,7 +64,6 @@ display:Events a display:Page ; a display:ClassGroupPage; display:forClassGroup vivoweb:vitroClassGroupevents ; - display:title "Events" ; display:urlMapping "/events" ; display:hasDataGetter display:eventsDataGetter . @@ -80,7 +71,6 @@ display:Organizations a display:Page ; a display:ClassGroupPage; display:forClassGroup vivoweb:vitroClassGrouporganizations ; - display:title "Organizations" ; display:urlMapping "/organizations"; display:hasDataGetter display:organizationsDataGetter . @@ -88,7 +78,6 @@ display:People a display:Page ; a display:ClassGroupPage; display:forClassGroup vivoweb:vitroClassGrouppeople ; - display:title "People" ; display:urlMapping "/people" ; display:hasDataGetter display:peopleDataGetter . @@ -96,13 +85,11 @@ display:Research a display:Page ; a display:ClassGroupPage; display:forClassGroup vivoweb:vitroClassGrouppublications ; - display:title "Research" ; display:urlMapping "/research" ; display:hasDataGetter display:researchDataGetter . display:CapabilityMap a display:Page ; - display:title "Capability Map" ; display:urlMapping "/vis/capabilitymap" ; display:hasDataGetter display:capabilityMapDataGetter . diff --git a/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl b/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl deleted file mode 100644 index e2aa1a3d..00000000 --- a/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl +++ /dev/null @@ -1,110 +0,0 @@ - - - The ontology of philosophical relations - Philosophical ontology - pr - - - рубрика - - - - - - rubric.ftl - Рубрика - - - Relation - - - - true - - - - - - has parent rubric - - - - true - - - - - edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.AddRubricToELENPHArticleGenerator - - belongs to - - - - true - - - - - порядок рубрики - - - - - - - - isInversionOf - - - - - - true - -1 - - - - diff --git a/home/src/main/resources/rdf/tbox/filegraph/searchOnotology.owl b/home/src/main/resources/rdf/tbox/filegraph/searchOnotology.owl deleted file mode 100644 index bb73e651..00000000 --- a/home/src/main/resources/rdf/tbox/filegraph/searchOnotology.owl +++ /dev/null @@ -1,118 +0,0 @@ - - - Semantic search - search - - - Field - - - - - - - - - - Search statement - - - - - - - Sort - - - - - - - - Filter - - - - - - - - - Filter field - - - - true - - - - - - Index field - - - - - - - - - Identifier - - - - - - - - - description - - - - - - - diff --git a/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl b/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl deleted file mode 100644 index ef5adf7e..00000000 --- a/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl +++ /dev/null @@ -1,525 +0,0 @@ - - - Text structures Ontology - Text structures Ontology - ts - - - - - Table of contents - Table of contents - - - - - -1 - -1 - -1 - -1 - - - Complex Publication - -1 - -1 - - - - - - - - - -1 - -1 - - - Publication - Publication - -1 - -1 - - - - Publication Participant - -1 - -1 - - - - - - TOC Item - TOC Item - - - - - - - - - Organization - - - - - - - elenphAritcle.ftl - Electronic philosophical encyclopedia article - - - - - - - - - - - - compilation.ftl - Compilation - edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.CompilationGenerator - - - - - - - - - - Text excerpt - - - - Book - Book - - - -1 - -1 - -1 - -1 - - - - -1 - -1 - - -1 - -1 - - Journal Article - - - - - Encyclopedia article - - - - -1 - -1 - - - - - - - - elenphExcerpt.ftl - - - - Elenph Excerpt - - - - - - TOC Level - TOC Level - - Table of contents element - - - - - has author - - - - - - true - - - affiliated with - - - - - - true - - - compilatorOf - - - - - - true - - - - - has TOC item - - - - true - - - - - - - - - has text - has text - - - - true - - - - - - - points to - - - - - - - - - true - - - Query Builder Rules - - - - - - - - - Raw Query String - - - - - - - - - - - - - Publication Participant Initials - - - - - - - - - - DOI - - - - - - Publication Participant Given Name - - - - - - - - - - - - - - - First publication - - - - Modification time - - - - - - - - - Keywords - - - - - - - - - - - - - HTML - - - - - - - html Excerpt - - - Publication Participant Family - - - - - - - - - - Issue - - - - - - - - - Publication Participant email - - - - - - - - - - - - - - - Works - - - - Year and month - - - - - - - - - - - - - - - - - bibliography - - - - - - - - - Year - - - - - - - - - Organization Address - - - - - - - - Organization Postal Code - - - - - - - - - Official Organization Name - - - - - - - - - - - - - - - - htmlExcerpt - - - - - - - Item Number - - - - - - - - - - - - true - - - has TOC - has TOC - - - diff --git a/home/src/main/resources/rdf/tbox/filegraph/vivo.owl b/home/src/main/resources/rdf/tbox/filegraph/vivo.owl index 205cb2e6..fdc65974 100644 --- a/home/src/main/resources/rdf/tbox/filegraph/vivo.owl +++ b/home/src/main/resources/rdf/tbox/filegraph/vivo.owl @@ -4763,9 +4763,8 @@ use one freetextKeyword assertion for each keyword or phrase. - ISI Researcher ID - RearcherID is a Thomson Reuters project where researchers have a place to manage and share their professional information. It will allow them to solve author identity issues while simultaneously adding dynamic citation metrics and collaboration networks to your personal profile. -Definition source: http://isiwebofknowledge.com/researcherid/ + ResearcherID + ResearcherID is a Clarivate project where researchers have a place to manage and share their professional information. It will allow them to solve author identity issues while simultaneously adding dynamic citation metrics and collaboration networks to your personal profile. http://www.researcherid.com/ @@ -5982,6 +5981,32 @@ To enable other Gender/Sex codes to be used, this dataproperty has range URI. Th + + + + Data Collection Process + + Observing and recording the presence or absence of butterflies during a transect walk.; A trip camera capture of an image of a jaguar is an observation, because it is "selected" by the camera as worthy of obsevation simply by virtue of moving in front of the camera.; Seeing three pelicans flying overhead on Christmas day and report them as part of the Christmas Bird Count. + + A process in which a person or machine sees or detects a material entity and selects it as worthy of observation, and which has as output an information content entity about the selected material entity. + Under development + A collection process in which an information content entity is collected for research or scholarly purposes. The immediate use case is recording observations of taxa (presence/absence). Need to figure out how this relates to OBI assay OBI:0000070. maybe has broader synonym OBI:0000070 + + + + + + + + Taxonomic Identification Process + + Using a key to identify a plant in the field.; Using DNA barcoding to identify a plant species.; Associating a museum specimen with a specific taxonomic concept based on its characters.; Using BLAST to identify the taxa present in an environmental (metagenomic) sample. + + A curation process in which a taxonomic name is appied to a biological entity to denote membership in a taxon. + + + + @@ -9754,6 +9779,20 @@ This class allows for linking an author to a publication while indicating inform + + + + + Georeferenced + + A curation process in which a material entity is annotated with geo-coordinates to indicate the location of a collection + Under development + PERSON: Anne Thessen + Georeferencing Process + + + + @@ -9846,6 +9885,21 @@ This class allows for linking an author to a publication while indicating inform + + + + + Identified + + A curation process in which a term is appied to a material entity to denote its type or kind + Under development + PERSON: Anne Thessen + This is intended to apply to a wide variety of material entities, not just biological specimens. + Identification Process + + + + @@ -10028,6 +10082,21 @@ This class allows for linking an author to a publication while indicating inform + + + + + Measured + + A curation process in which data are collected about a specimen in a collection + Under development + PERSON: Anne Thessen + possibly has broader synonym OBI assay OBI:0000070 because all measurement processes will be assays, but not all assays will be performed on a material entity in a collection + Measurement Process + + + + diff --git a/home/src/main/resources/rdf/tbox/firsttime/README.md b/home/src/main/resources/rdf/tbox/firsttime/README.md index 2ee229c1..151cc2e7 100644 --- a/home/src/main/resources/rdf/tbox/firsttime/README.md +++ b/home/src/main/resources/rdf/tbox/firsttime/README.md @@ -1,6 +1,20 @@ -This directory contains ontology "TBox" files with class and property definitions. -These are loaded by the VIVO application when it starts for the first time, after -the initial installation or after an upgrade installation that involves changes -to these files. +This directory contains ontology "TBox" files with class and property +definitions or annotations that are intended to be editable in the VIVO GUI. + +These files are loaded by the VIVO application when it starts for the first time +and during later restarts if the contents have changed. A triple is updated +if there is no conflicting value for the same subject and predicate that was +added to the triple store via the GUI or data ingest (e.g. SPARQL UPDATE). + +The file vitroAnnotations.n3 contains triples with predicates in the vitro +namespace and objects that are not literals with language tags. + +The VIVO-languages project contains additional language-specific +vitroAnnotations.n3 files where all of the triples contain language-tagged +literals. + +VIVO-languages also provides additional annotation files +(e.g. initialTBoxAnnotations_en_US.n3) containing triples with predicates +in ontologies/voabularies outside the vitro namespace (e.g. rdfs:label). See ../filegraph/README.md for more information about "TBox" files. diff --git a/home/src/main/resources/rdf/tbox/firsttime/elenphArticle-template.n3 b/home/src/main/resources/rdf/tbox/firsttime/elenphArticle-template.n3 deleted file mode 100644 index 080da042..00000000 --- a/home/src/main/resources/rdf/tbox/firsttime/elenphArticle-template.n3 +++ /dev/null @@ -1,5 +0,0 @@ -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . - -ts_:elenphArticle vitro:customDisplayViewAnnot "elenphAritcle.ftl"^^xsd:string . diff --git a/home/src/main/resources/rdf/tbox/firsttime/elenphExcerpt-template.n3 b/home/src/main/resources/rdf/tbox/firsttime/elenphExcerpt-template.n3 deleted file mode 100644 index 39c80dc3..00000000 --- a/home/src/main/resources/rdf/tbox/firsttime/elenphExcerpt-template.n3 +++ /dev/null @@ -1,5 +0,0 @@ -@prefix vitro: . -@prefix xsd: . -@prefix ts_: . - -ts_:elenphExcerpt vitro:customDisplayViewAnnot "elenphExcerpt.ftl"^^xsd:string . diff --git a/home/src/main/resources/rdf/tbox/firsttime/rubric-template.n3 b/home/src/main/resources/rdf/tbox/firsttime/rubric-template.n3 deleted file mode 100644 index 77bcf93c..00000000 --- a/home/src/main/resources/rdf/tbox/firsttime/rubric-template.n3 +++ /dev/null @@ -1,5 +0,0 @@ -@prefix vitro: . -@prefix xsd: . -@prefix pr: . - -pr:rubric vitro:customDisplayViewAnnot "rubric.ftl"^^xsd:string . diff --git a/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3 b/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3 index 9651b025..2fcfd609 100644 --- a/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3 +++ b/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3 @@ -26,83 +26,63 @@ @prefix xsd: . - rdfs:label "Bibliographic Ontology"@en-US ; vitro:ontologyPrefixAnnot "bibo" . - rdfs:label "SKOS (Simple Knowledge Organization System)"@en-US ; vitro:ontologyPrefixAnnot "skos" . - rdfs:label "VIVO Core Ontology"@en-US ; vitro:ontologyPrefixAnnot "vivo" . - rdfs:label "OCRe Research"@en-US ; vitro:ontologyPrefixAnnot "ocrer" . - rdfs:label "OCRe Study Design"@en-US ; vitro:ontologyPrefixAnnot "ocresd" . - rdfs:label "OCRe Study Protocol"@en-US ; vitro:ontologyPrefixAnnot "ocresp" . - rdfs:label "OCRe Statistics"@en-US ; vitro:ontologyPrefixAnnot "ocresst" . - rdfs:label "Geopolitical Ontology"@en-US ; vitro:ontologyPrefixAnnot "geo" . - rdfs:label "Event Ontology"@en-US ; vitro:ontologyPrefixAnnot "event" . - rdfs:label "OBO Foundry"@en-US ; vitro:ontologyPrefixAnnot "obo" . - rdfs:label "VCard"@en-US ; vitro:ontologyPrefixAnnot "vcard" . - rdfs:label "FOAF (Friend of a Friend)"@en-US ; vitro:ontologyPrefixAnnot "foaf" . - rdfs:label "VIVO Scientific Research Ontology"@en-US ; vitro:ontologyPrefixAnnot "scires" . - rdfs:label "FaBiO (FRBR-Aligned Bibliographic Ontology)"@en-US ; vitro:ontologyPrefixAnnot "fabio" . - rdfs:label "Citation Counting and Context Characterization Ontology"@en-US ; vitro:ontologyPrefixAnnot "c4o" . - rdfs:label "CiTO (Citation Typing Ontology)"@en-US ; vitro:ontologyPrefixAnnot "cito" . - rdfs:label "Dublin Core Terms"@en-US ; vitro:ontologyPrefixAnnot "dcterms" . - rdfs:label "Vocabulary for Annotating Vocabulary Descriptions"@en-US ; vitro:ontologyPrefixAnnot "vann" . - rdfs:label "Relations Ontology"@en-US ; vitro:ontologyPrefixAnnot "ro" . - rdfs:label "Software Ontology"@en-US ; vitro:ontologyPrefixAnnot "swo" . vivo:pmcid @@ -178,7 +158,7 @@ vivo:isCorrespondingAuthor vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; vitro:publicDescriptionAnnot - "Indicates whether the author handles correspondence about the work and is in effect the guarantor of the published work. The response is either 'true' or 'false' (without the quotes)."^^xsd:string . + "Indicates whether the author handles correspondence about the work and is in effect the guarantor of the published work. The response is either 'true' or 'false' (without the quotes)."@en-US . vivo:SeminarSeries vitro:displayLimitAnnot @@ -213,9 +193,7 @@ vivo:supplementalInformation vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Allows for the entry of additional information, such as additional information describing educational background."^^xsd:string . + . bibo:chapter vitro:displayRankAnnot @@ -227,9 +205,7 @@ bibo:chapter vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A chapter number. NOT to be used for the chapter title, which should be entered in the \"name\" field instead (the field in bold at the top of the page)"^^xsd:string . + . vivo:Student vitro:displayLimitAnnot @@ -341,9 +317,7 @@ bibo:sici vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The Serial Item and Contribution Identifier (SICI) is a code (ANSI/NISO standard Z39.56) used to uniquely identify specific volumes, articles or other identifiable parts of a periodical."^^xsd:string . + . vivo:placeOfPublication vitro:displayLimitAnnot @@ -357,9 +331,7 @@ vivo:placeOfPublication vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "City in which the publication was done."^^xsd:string . + . vivo:hasCollaborator vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -389,8 +361,6 @@ skos:narrower "5"^^xsd:int ; vitro:displayRankAnnot "52"^^xsd:int ; - vitro:fullPropertyNameAnnot - "narrower term"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -399,8 +369,6 @@ skos:narrower "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a term that is narrower in meaning (i.e. more specific) to another term that is broader in meaning, where the scope (meaning) of narrower term falls completely within the scope of the broader term."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean ; vitro:inPropertyGroupAnnot @@ -468,9 +436,7 @@ bibo:pageStart vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Starting page number within a continuous page range."^^xsd:string . + . geo:countryAreaYear vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -492,9 +458,7 @@ vivo:reportId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Unique identifier for a Report (a type of information resource)."^^xsd:string . + . geo:hasMinLongitude vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -527,8 +491,6 @@ owl:sameAs "1"^^xsd:int ; vitro:forceStubDeletionAnnot "false"^^xsd:boolean ; - vitro:fullPropertyNameAnnot - "sameAs" ; vitro:inPropertyGroupAnnot ; vitro:offerCreateNewOptionAnnot @@ -539,8 +501,6 @@ owl:sameAs ; vitro:hiddenFromPublishBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This is the OWL property to link two indivdiuals with the same 'identity'. see http://www.w3.org/TR/owl-ref/#sameAs-def"@en-US ; vitro:selectFromExistingAnnot "true"^^xsd:boolean ; vitro:stubObjectPropertyAnnot @@ -787,8 +747,6 @@ obo:ERO_0000005 vitro:inClassGroup . vitro:moniker - vitro:descriptionAnnot - "This property is deprecated."^^xsd:string ; vitro:displayLimitAnnot "3"^^xsd:int ; vitro:displayRankAnnot @@ -935,9 +893,7 @@ bibo:pmid vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A PMID (PubMed Identifier or PubMed Unique Identifier) is a unique number assigned to each PubMed citation of life sciences and biomedical scientific journal articles."^^xsd:string . + . bibo:Film vitro:displayLimitAnnot @@ -1001,9 +957,7 @@ vivo:grantDirectCosts vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "This is the cost associated with the grant activity, and should not include any indirect cost associated with administering the grant."^^xsd:string . + . geo:nameListES vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -1042,8 +996,6 @@ vivo:features "5"^^xsd:int ; vitro:displayRankAnnot "60"^^xsd:int ; - vitro:fullPropertyNameAnnot - "features"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1054,8 +1006,6 @@ vivo:features "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates an information resource to a person it features."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1066,8 +1016,6 @@ vivo:featuredIn "5"^^xsd:int ; vitro:displayRankAnnot "50"^^xsd:int ; - vitro:fullPropertyNameAnnot - "featuredIn"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1078,8 +1026,6 @@ vivo:featuredIn "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a person to an information resource that contains a featured article on that person."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1145,8 +1091,6 @@ bibo:distributor "5"^^xsd:int ; vitro:displayRankAnnot "70"^^xsd:int ; - vitro:fullPropertyNameAnnot - "distributor"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1157,8 +1101,6 @@ bibo:distributor "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "The foaf definition is as follows - Distributor of a document or a collection of documents. However, in VIVO, this can relate anything as the distributor to anything else."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1177,8 +1119,6 @@ vivo:eligibleFor "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Used for the situation where a credential has a prerequisite training or degree, as in becoming board eligible in a field of medicine"^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1194,8 +1134,6 @@ obo:ERO_0001254 vitro:inClassGroup . bibo:affirmedBy - vitro:fullPropertyNameAnnot - "affirmedBy"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1206,8 +1144,6 @@ bibo:affirmedBy "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A legal decision that affirms a ruling."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1299,8 +1235,6 @@ vivo:assignee "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "the individual or entity to whom ownership of the published application was assigned at the time of publication."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1322,8 +1256,6 @@ obo:ERO_0001257 bibo:presents vitro:displayRankAnnot "200"^^xsd:int ; - vitro:fullPropertyNameAnnot - "presentations"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1334,8 +1266,6 @@ bibo:presents "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates an event to associated documents; for example, conference to a paper."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1407,9 +1337,7 @@ bibo:locator vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A description (often numeric) that locates an item within a containing document or collection."^^xsd:string . + . bibo:Article vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -1455,8 +1383,6 @@ geo:GDPYear . bibo:degree - vitro:fullPropertyNameAnnot - "degree"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1467,8 +1393,6 @@ bibo:degree "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "The thesis degree."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1497,9 +1421,7 @@ vivo:localAwardId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An institution's local identifier assigned to a grant awarded."^^xsd:string . + . obo:ARG_0000197 vitro:inPropertyGroupAnnot @@ -1529,15 +1451,11 @@ vivo:iclCode vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - """The International classification(s) to which the published application has been assigned."""^^xsd:string . + . bibo:presentedAt vitro:displayRankAnnot "120"^^xsd:int ; - vitro:fullPropertyNameAnnot - "presentedAt"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1548,8 +1466,6 @@ bibo:presentedAt "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a document to an event; for example, a paper to a conference."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1566,8 +1482,6 @@ vivo:publisherOf "5"^^xsd:int ; vitro:displayRankAnnot "25"^^xsd:int ; - vitro:fullPropertyNameAnnot - "publisher of"^^xsd:string ; vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.AutocompleteObjectPropertyFormGenerator"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -1580,8 +1494,6 @@ vivo:publisherOf "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates an entity that is engaged in publishing printed or online material to the material itself."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1712,9 +1624,7 @@ bibo:asin vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The Amazon Standard Identification Number (ASIN) is a unique identification number assigned by Amazon.com and its partners for product identification within the Amazon.com organization."^^xsd:string . + . vivo:outreachOverview vitro:displayLimitAnnot @@ -1729,8 +1639,6 @@ vivo:outreachOverview ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Please enter a single summary narrative of your outreach goals and/or contributions"^^xsd:string ; vitro:editing "HTML"^^xsd:string . @@ -1827,8 +1735,6 @@ bibo:doi "1"^^xsd:int ; vitro:displayRankAnnot "3"^^xsd:int ; - vitro:fullPropertyNameAnnot - "doi"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -1839,8 +1745,6 @@ bibo:doi "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "The Digital Object Identifier (DOI) System provides for persistent identification of content objects in the digital environment. \"DOI names are assigned to any entity for use on digital networks. They are used to provide current information, including where they (or information about them) can be found on the Internet. Information about a digital object may change over time, including where to find it, but its DOI name will not change.\""^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -1870,9 +1774,7 @@ bibo:shortDescription vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An account of the resource."^^xsd:string . + . geo:isAdministeredBy vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -1896,9 +1798,7 @@ bibo:volume vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A volume number."^^xsd:string . + . bibo:abstract vitro:displayLimitAnnot @@ -1913,8 +1813,6 @@ bibo:abstract ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A summary of the resource."^^xsd:string ; vitro:editing "HTML"^^xsd:string . @@ -2029,8 +1927,6 @@ vivo:courseCredits ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Number of credits assigned a course by an learning institution."^^xsd:string ; vitro:inPropertyGroupAnnot . @@ -2073,9 +1969,7 @@ bibo:number vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A generic item or document number. Not to be confused with issue number. A barcode, perhaps?"^^xsd:string . + . obo:RO_0001025 vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -2144,8 +2038,6 @@ vivo:teachingOverview ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Please enter a single narrative summary description of your teaching activities, goals, and/or experience"^^xsd:string ; vitro:editing "HTML"^^xsd:string . @@ -2155,9 +2047,7 @@ vivo:rank vitro:hiddenFromPublishBelowRoleLevelAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "enter the position in the list that you would like this item displayed"^^xsd:string . + . bibo:issn vitro:displayLimitAnnot @@ -2171,9 +2061,7 @@ bibo:issn vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An International Standard Serial Number (ISSN) is a unique eight-digit number used to identify a periodical publication."^^xsd:string . + . vivo:supports vitro:displayLimitAnnot @@ -2207,9 +2095,7 @@ vivo:patentNumber vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Unique number assigned to a patent application when the United States Patent and Trademark Office issues as a patent."^^xsd:string . + . bibo:Journal vitro:displayLimitAnnot @@ -2248,9 +2134,7 @@ vivo:contactInformation vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The contact information for a particular event. This could be a name, email, phone number, or method(s) of contacting someone to gain information about the event."^^xsd:string . + . geo:nameListEN vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -2273,8 +2157,6 @@ vivo:overview ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A short narrative summary to be used as a single descriptive overview statement."^^xsd:string ; vitro:editing "HTML"^^xsd:string . @@ -2290,9 +2172,7 @@ vivo:description vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An account of the resource."^^xsd:string . + . geo:hasCode vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -2343,8 +2223,6 @@ vivo:grantSubcontractedThrough "5"^^xsd:int ; vitro:displayRankAnnot "15"^^xsd:int ; - vitro:fullPropertyNameAnnot - "grantSubcontractedThrough"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -2353,8 +2231,6 @@ vivo:grantSubcontractedThrough ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a grant to the organization awarding the sub-contract for the grant."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean ; vitro:offerCreateNewOptionAnnot @@ -2364,8 +2240,6 @@ obo:ERO_0001260 vitro:inClassGroup . bibo:recipient - vitro:fullPropertyNameAnnot - "recipient"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -2376,8 +2250,6 @@ bibo:recipient "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a communication document to the agent who receives that communication document."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -2466,9 +2338,7 @@ vivo:freetextKeyword vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; vitro:inPropertyGroupAnnot - ; - vitro:publicDescriptionAnnot - "Intended for a word or short phrase only where no instance of a controlled vocabulary can be identified. Can also be used to help in highlighting subtle difference in work."^^xsd:string . + . vivo:Credential vitro:displayLimitAnnot @@ -2495,9 +2365,7 @@ bibo:identifier vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Unique identifier of a document or collection. This data property is not seen or updated by anyone."^^xsd:string . + . obo:ERO_0000044 vitro:displayLimitAnnot @@ -2535,8 +2403,6 @@ bibo:reviewOf "5"^^xsd:int ; vitro:displayRankAnnot "60"^^xsd:int ; - vitro:fullPropertyNameAnnot - "reviewOf"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -2547,8 +2413,6 @@ bibo:reviewOf "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a review document to a reviewed thing (resource, item, etc.)."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -2708,16 +2572,12 @@ vivo:reviewedIn "5"^^xsd:int ; vitro:displayRankAnnot "60"^^xsd:int ; - vitro:fullPropertyNameAnnot - "reviewedIn"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates something to the review of that thing."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -2867,8 +2727,6 @@ vivo:proceedingsOf "5"^^xsd:int ; vitro:displayRankAnnot "30"^^xsd:int ; - vitro:fullPropertyNameAnnot - "proceedingsOf"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -2879,8 +2737,6 @@ vivo:proceedingsOf "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates the proceedings to the conference that produced the proceedings."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -2979,8 +2835,6 @@ geo:self_governing . vivo:hasPrerequisite - vitro:fullPropertyNameAnnot - "hasPrerequisite"^^xsd:string ; vitro:displayLimitAnnot "5"^^xsd:int ; vitro:displayRankAnnot @@ -3210,9 +3064,7 @@ bibo:pageEnd vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Ending page number within a continuous page range."^^xsd:string . + . bibo:AudioDocument vitro:displayLimitAnnot @@ -3307,8 +3159,6 @@ obo:ERO_0000029 "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A 'global citation frequency' is an entity referencing a distinct source, date, and value; include the value, source, and date in the label for clarity."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -3394,8 +3244,6 @@ bibo:translationOf "5"^^xsd:int ; vitro:displayRankAnnot "52"^^xsd:int ; - vitro:fullPropertyNameAnnot - "translation of"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -3406,8 +3254,6 @@ bibo:translationOf "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a translated document to the original document."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -3438,8 +3284,6 @@ geo:hasBorderWith . bibo:performer - vitro:fullPropertyNameAnnot - "performer"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -3450,8 +3294,6 @@ bibo:performer "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a performance to the person who or organization that carries out the performance."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -3526,8 +3368,6 @@ vivo:supportedInformationResource "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "enter a publication or document supported by this grant"^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -3572,9 +3412,7 @@ bibo:eissn vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An International Standard Serial Number (ISSN) is a unique eight-digit number used to identify a periodical publication. The eissn is an issn for electronic periodicals."^^xsd:string . + . geo:nameOfficialEN vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -3620,8 +3458,6 @@ vivo:publisher "5"^^xsd:int ; vitro:displayRankAnnot "18"^^xsd:int ; - vitro:fullPropertyNameAnnot - "publisher"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -3632,8 +3468,6 @@ vivo:publisher "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates published materials to an entity that is engaged in publishing."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -3698,9 +3532,7 @@ vivo:seatingCapacity vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Number of people who can be seated in a specific room, by physical space available or limitations set by law. "^^xsd:string . + . vivo:ConferencePoster vitro:displayLimitAnnot @@ -3727,9 +3559,7 @@ vivo:middleName vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The middle name or initial with which you normally identify yourself. Only one may be entered."^^xsd:string . + . vivo:WorkshopSeries vitro:displayLimitAnnot @@ -3883,9 +3713,7 @@ vivo:licenseNumber vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "license number"^^xsd:string . + . vivo:FacultyPosition vitro:displayLimitAnnot @@ -3933,9 +3761,7 @@ bibo:gtin14 vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Global Trade Item Number (GTIN) is an identifier for trade items developed by GS1 (comprising the former EAN International and Uniform Code Council). GTIN is an \"umbrella\" term used to describe the entire family of GS1 data structures for trade items (products and services) identification. GTINs may be 8, 12, 13 or 14 digits long."^^xsd:string . + . vivo:AdvisingRelationship vitro:displayLimitAnnot @@ -4020,9 +3846,7 @@ bibo:section vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A section number"^^xsd:string . + . vivo:CaseStudy vitro:displayLimitAnnot @@ -4062,8 +3886,6 @@ geo:nationalityES . bibo:interviewer - vitro:fullPropertyNameAnnot - "interviewer"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4074,8 +3896,6 @@ bibo:interviewer "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "An agent that interview another agent."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4209,23 +4029,17 @@ vivo:orcidId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "ORCID (Open Researcher and Contributor ID) is a proposed nonproprietary alphanumeric code that would uniquely identify scientific and other academic authors."^^xsd:string . + . vivo:hasFacility vitro:displayLimitAnnot "5"^^xsd:int ; vitro:displayRankAnnot "90"^^xsd:int ; - vitro:fullPropertyNameAnnot - "has facility"^^xsd:string ; vitro:offerCreateNewOptionAnnot "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates an organization to a facility that it owns or runs."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4249,9 +4063,7 @@ geo:nameListFR vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "ClinicalTrials.gov registry number"^^xsd:string . + . geo:organization vitro:displayLimitAnnot @@ -4280,8 +4092,6 @@ bibo:Slideshow vivo:equipmentFor vitro:displayLimitAnnot "5"^^xsd:int ; - vitro:fullPropertyNameAnnot - "equipment for"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4292,8 +4102,6 @@ vivo:equipmentFor "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates equipment to the organization that owns the equipment."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4336,9 +4144,7 @@ bibo:prefixName vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A title placed before a person's name."^^xsd:string . + . geo:nameShortAR vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -4387,9 +4193,7 @@ vivo:researcherId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The identification number given to the profile created by a researcher in ResearcherID (http://isiwebofknowledge.com/researcherid/)."^^xsd:string . + . vivo:hasPublicationVenue vitro:displayLimitAnnot @@ -4435,8 +4239,6 @@ vivo:NonFacultyAcademic . bibo:annotates - vitro:fullPropertyNameAnnot - "annotates"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4447,8 +4249,6 @@ bibo:annotates "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Critical or explanatory note for a Document."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4486,8 +4286,6 @@ geo:nameOfficialZH . bibo:reversedBy - vitro:fullPropertyNameAnnot - "reversedBy"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4498,8 +4296,6 @@ bibo:reversedBy "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A legal decision that reverses a ruling. This relates the legal decision to the legal decision that reversed it."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4515,9 +4311,7 @@ vivo:majorField vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Major subject focus of the degree being described in an educational background."^^xsd:string . + . geo:GDPNotes vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -4543,9 +4337,7 @@ bibo:upc vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The Universal Product Code (UPC) is a barcode symbology (i.e., a specific type of barcode), that is widely used in Canada and the United States for tracking trade items in stores."^^xsd:string . + . vivo:FacultyMember vitro:displayLimitAnnot @@ -4608,9 +4400,7 @@ obo:ERO_0000016 vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Institutional Review Board (IRB) number for a Clinical Trial"^^xsd:string . + . vivo:Competition vitro:displayLimitAnnot @@ -4657,8 +4447,6 @@ vivo:ResearchProposal . bibo:director - vitro:fullPropertyNameAnnot - "director"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4669,8 +4457,6 @@ bibo:director "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates an entity to a Film director."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4775,9 +4561,7 @@ bibo:lccn vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The Library of Congress Control Number or LCCN is a serially based system of numbering cataloging records in the Library of Congress in the United States."^^xsd:string . + . foaf:Group vitro:displayLimitAnnot @@ -4864,8 +4648,6 @@ vivo:CoreLaboratory . - vitro:fullPropertyNameAnnot - "relation"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4876,8 +4658,6 @@ vivo:CoreLaboratory "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A related resource. Recommended best practice is to identify the related resource by means of a string conforming to a formal identification system. "^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4888,8 +4668,6 @@ skos:broader "5"^^xsd:int ; vitro:displayRankAnnot "50"^^xsd:int ; - vitro:fullPropertyNameAnnot - "broader term"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4900,8 +4678,6 @@ skos:broader "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a term that is broader in meaning (i.e. more general) to another term that is narrower in meaning, where the scope (meaning) of narrower term falls completely within the scope of the broader term."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -4970,13 +4746,9 @@ vivo:departmentOrSchool vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Name of department or school name used when describing educational background."^^xsd:string . + . bibo:court - vitro:fullPropertyNameAnnot - "court"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -4987,8 +4759,6 @@ bibo:court "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a legal document with an organization. Bibo definition is: \"A court associated with a legal document; for example, that which issues a decision.\""^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5099,8 +4869,6 @@ bibo:translator "5"^^xsd:int ; vitro:displayRankAnnot "14"^^xsd:int ; - vitro:fullPropertyNameAnnot - "translator"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5111,8 +4879,6 @@ bibo:translator "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates an information resource to the translator of the written document from one language to another."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5134,8 +4900,6 @@ vivo:distributesFundingFrom "5"^^xsd:int ; vitro:displayRankAnnot "64"^^xsd:int ; - vitro:fullPropertyNameAnnot - "distributes funding from"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5146,8 +4910,6 @@ vivo:distributesFundingFrom "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Indicates the organization that distributes funding from another organization. For example, indicates the source of flow-through funding."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5226,8 +4988,6 @@ skos:related "5"^^xsd:int ; vitro:displayRankAnnot "54"^^xsd:int ; - vitro:fullPropertyNameAnnot - "related"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5236,8 +4996,6 @@ skos:related "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This indicates when a term is related to another term in the same vocabulary."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean ; vitro:inPropertyGroupAnnot @@ -5313,7 +5071,9 @@ vivo:governingAuthorityFor vitro:displayRankAnnot "70"^^xsd:int ; vitro:inPropertyGroupAnnot - . + ; + vitro:offerCreateNewOptionAnnot + "true"^^xsd:boolean . geo:agriculturalAreaYear vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -5329,8 +5089,6 @@ vivo:providesFundingThrough "5"^^xsd:int ; vitro:displayRankAnnot "65"^^xsd:int ; - vitro:fullPropertyNameAnnot - "provides funding through"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5341,8 +5099,6 @@ vivo:providesFundingThrough "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a funding organization to another funding organization through which it provides its funding. Note that organizations may be asserted to be of more than one type."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5384,8 +5140,6 @@ vivo:end "false"^^xsd:boolean . bibo:interviewee - vitro:fullPropertyNameAnnot - "interviewee"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5396,8 +5150,6 @@ bibo:interviewee "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "An agent that is interviewed by another agent."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5465,8 +5217,6 @@ vivo:ResearcherRole . bibo:transcriptOf - vitro:fullPropertyNameAnnot - "transcriptOf"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5477,8 +5227,6 @@ bibo:transcriptOf "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates a document to some transcribed original."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5491,8 +5239,6 @@ vivo:facilityFor . bibo:issuer - vitro:fullPropertyNameAnnot - "issuer"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5503,8 +5249,6 @@ bibo:issuer "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "An entity responsible for issuing often informally published documents such as press releases, reports, etc."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -5521,8 +5265,6 @@ vivo:start "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "the start of a time interval."^^xsd:string ; vitro:selectFromExistingAnnot "false"^^xsd:boolean . @@ -5567,9 +5309,7 @@ bibo:oclcnum vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "An oclcnum is a sequential accession number assigned by OCLC as bibliographic records are entered into OCLC WorldCat (the OCLC Online Union Catalog)."^^xsd:string . + . bibo:isbn10 vitro:displayLimitAnnot @@ -5583,9 +5323,7 @@ bibo:isbn10 vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The International Standard Book Number (ISBN) is a unique[1][2] numeric commercial book identifier based upon the 9-digit Standard Book Numbering (SBN) code created by Gordon Foster. The 10-digit ISBN format was developed by the International Organization for Standardization and was published in 1970 as international standard ISO 2108."^^xsd:string . + . vivo:MedicalResidency vitro:displayLimitAnnot @@ -5738,8 +5476,6 @@ vivo:prerequisiteFor "5"^^xsd:int ; vitro:displayRankAnnot "42"^^xsd:int ; - vitro:fullPropertyNameAnnot - "prerequisite for"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -5767,9 +5503,7 @@ bibo:isbn13 vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The International Standard Book Number (ISBN) is a unique[1][2] numeric commercial book identifier based upon the 9-digit Standard Book Numbering (SBN) code created by Gordon Foster.Since 1 January 2007, ISBNs have contained 13 digits, a format that is compatible with Bookland EAN-13s."^^xsd:string . + . vivo:cclCode vitro:displayLimitAnnot @@ -5783,9 +5517,7 @@ vivo:cclCode vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The original and cross-reference US Classification(s) to which the published application was assigned at the time of publication -- includes both primary and secondary class information."^^xsd:string . + . geo:hasNationality vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -5820,9 +5552,7 @@ bibo:uri vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Universal Resource Identifier of a document."^^xsd:string . + . obo:ERO_0000392 vitro:inClassGroup . @@ -5833,8 +5563,6 @@ vivo:translatorOf "5"^^xsd:int ; vitro:displayRankAnnot "70"^^xsd:int ; - vitro:fullPropertyNameAnnot - "translatorOf"^^xsd:string ; vitro:inPropertyGroupAnnot ; vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -5843,8 +5571,6 @@ vivo:translatorOf ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates something as the translator of an information resource."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean ; vitro:offerCreateNewOptionAnnot @@ -5927,9 +5653,7 @@ bibo:eanucc13 vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "EAN International-Uniform Code Council (EAN-UCC) was a supply chain standards family name, formally the EAN.UCC System, that included product barcodes which are printed on the great majority of products available in stores worldwide and electronic commerce standards."^^xsd:string . + . bibo:EditedBook vitro:displayLimitAnnot @@ -6046,8 +5770,6 @@ vivo:hasTranslation "5"^^xsd:int ; vitro:displayRankAnnot "51"^^xsd:int ; - vitro:fullPropertyNameAnnot - "has translation"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -6058,8 +5780,6 @@ vivo:hasTranslation "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "Relates an original documents to a translation of that document."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -6110,8 +5830,6 @@ vivo:dateIssued "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "The date the patent was issued."^^xsd:string ; vitro:selectFromExistingAnnot "false"^^xsd:boolean . @@ -6219,9 +5937,7 @@ vivo:identifier vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A parent property for institutional and other identifiers. This data property is not seen or updated by anyone."^^xsd:string . + . geo:populationNotes vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -6268,9 +5984,7 @@ vivo:totalAwardAmount vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "This includes the direct cost being used for the grant activity plus indirect costs associated with administering the grant."^^xsd:string . + . bibo:Code vitro:displayLimitAnnot @@ -6388,8 +6102,6 @@ vivo:distributes "5"^^xsd:int ; vitro:displayRankAnnot "70"^^xsd:int ; - vitro:fullPropertyNameAnnot - "distributes"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -6398,8 +6110,6 @@ vivo:distributes ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This can relate anything to the thing it distributes. The inverse of this is distributor and the foaf definition for distributor is as follows - Distributor of a document or a collection of documents. "^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -6505,8 +6215,6 @@ geo:codeAGROVOC . - vitro:fullPropertyNameAnnot - "contributor"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -6517,8 +6225,6 @@ geo:codeAGROVOC "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "An entity responsible for making contributions to the resource. Examples of a Contributor include a person, an organization, or a service. Typically, the name of a Contributor should be used to indicate the entity."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -6598,9 +6304,7 @@ vivo:hrJobTitle vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "A specific designation of a post within a human resource organization, normally associated with a job description that details the tasks and responsibilities that go with it."^^xsd:string . + . vivo:hasResearchArea vitro:customEntryFormAnnot @@ -6636,9 +6340,7 @@ geo:hasCoordinate vitro:hiddenFromPublishBelowRoleLevelAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The full URI for the namespace."^^xsd:string . + . bibo:Report vitro:displayLimitAnnot @@ -6751,8 +6453,6 @@ vivo:subcontractsGrant "5"^^xsd:int ; vitro:displayRankAnnot "63"^^xsd:int ; - vitro:fullPropertyNameAnnot - "subcontractsGrant"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -6763,8 +6463,6 @@ vivo:subcontractsGrant "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates the agency, entity or individual awarding the sub-contract for a grant to the grant itself."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -6857,8 +6555,6 @@ vivo:dateFiled "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "The date the patent was filed."^^xsd:string ; vitro:selectFromExistingAnnot "false"^^xsd:boolean . @@ -6911,8 +6607,6 @@ vivo:Foundation . bibo:subsequentLegalDecision - vitro:fullPropertyNameAnnot - "subsequentLegalDecision"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -6923,8 +6617,6 @@ bibo:subsequentLegalDecision "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "A legal decision on appeal that takes action on a case (affirming it, reversing it, etc.)."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -6936,9 +6628,7 @@ bibo:coden vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "CODEN – according to ASTM standard E250 – is a six character, alphanumeric bibliographic code, that provides concise, unique and unambiguous identification of the titles of serials and non-serial publications from all subject areas."^^xsd:string . + . vivo:OrganizerRole vitro:displayLimitAnnot @@ -7011,9 +6701,7 @@ vivo:scopusId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The numeric digit assigned to an author in Scopus. In Scopus it's call the \"Author Identifier\"."^^xsd:string . + . bibo:Statute vitro:displayLimitAnnot @@ -7154,9 +6842,7 @@ vivo:sponsorAwardId vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Identifier of the organization that sponsored the award."^^xsd:string . + . obo:ERO_0000543 vitro:displayLimitAnnot @@ -7230,8 +6916,6 @@ vivo:degreeCandidacy "5"^^xsd:int ; vitro:displayRankAnnot "25"^^xsd:int ; - vitro:fullPropertyNameAnnot - "degreeCandidacy"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -7242,8 +6926,6 @@ vivo:degreeCandidacy "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates an advisory relationship to an academic degree. "^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -7276,8 +6958,6 @@ vivo:hasProceedings "5"^^xsd:int ; vitro:displayRankAnnot "30"^^xsd:int ; - vitro:fullPropertyNameAnnot - "hasProceedings"^^xsd:string ; vitro:hiddenFromDisplayBelowRoleLevelAnnot ; vitro:hiddenFromPublishBelowRoleLevelAnnot @@ -7288,8 +6968,6 @@ vivo:hasProceedings "true"^^xsd:boolean ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot ; - vitro:publicDescriptionAnnot - "This relates a conference proceeding to the conference that produced the proceeding."^^xsd:string ; vitro:selectFromExistingAnnot "true"^^xsd:boolean . @@ -7313,9 +6991,7 @@ bibo:edition vitro:inPropertyGroupAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "The name defining a special edition of a document. Normally its a literal value composed of a version number and words."^^xsd:string . + . geo:nameShortZH vitro:hiddenFromDisplayBelowRoleLevelAnnot @@ -7347,9 +7023,7 @@ vivo:dateTime vitro:hiddenFromPublishBelowRoleLevelAnnot ; vitro:prohibitedFromUpdateBelowRoleLevelAnnot - ; - vitro:publicDescriptionAnnot - "Use when a single date and time is appropriate versus a start date and time and end date and time, or when multiple dates and times are relevant."^^xsd:string . + . geo:codeUN vitro:hiddenFromDisplayBelowRoleLevelAnnot diff --git a/installer/example-settings.xml b/installer/example-settings.xml index 0007c79c..cae40e61 100644 --- a/installer/example-settings.xml +++ b/installer/example-settings.xml @@ -1,5 +1,6 @@ - + diff --git a/installer/home/pom.xml b/installer/home/pom.xml index b0a9deee..b16d99c7 100644 --- a/installer/home/pom.xml +++ b/installer/home/pom.xml @@ -7,13 +7,13 @@ org.vivoweb vivo-installer-home - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT pom org.vivoweb vivo-installer - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT .. @@ -24,6 +24,34 @@ + + package + + vivo-dir + + + ${app-name} + + + maven-assembly-plugin + + + src/main/assembly/home.xml + + false + + + + package + + single + + + + + + + install @@ -108,11 +136,11 @@ tar.gz - + diff --git a/installer/pom.xml b/installer/pom.xml index ceb494bd..9dd4aef1 100644 --- a/installer/pom.xml +++ b/installer/pom.xml @@ -7,12 +7,13 @@ org.vivoweb vivo-installer - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT pom VIVO Installer + vivo ${project.version} true UTF-8 @@ -41,12 +42,6 @@ true - - maven-deploy-plugin - - true - - @@ -70,10 +65,6 @@ maven-dependency-plugin 2.10 - - maven-deploy-plugin - 2.7 - maven-enforcer-plugin 1.4.1 @@ -228,6 +219,21 @@ + + skip + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + + + @@ -235,6 +241,14 @@ vivo-installer http://vivo-project.github.io/ + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + @@ -258,7 +272,7 @@ vivo-dependencies VIVO Dependencies - https://raw.github.com/vivo-project/dependencies/master/ + https://raw.github.com/vivo-project/dependencies/main/ diff --git a/installer/webapp/pom.xml b/installer/webapp/pom.xml index ca682a1d..f19c84ac 100644 --- a/installer/webapp/pom.xml +++ b/installer/webapp/pom.xml @@ -7,13 +7,13 @@ org.vivoweb vivo-installer-vivo - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT war org.vivoweb vivo-installer - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT .. @@ -122,6 +122,7 @@ + ${app-name} maven-install-plugin @@ -153,18 +154,18 @@ war - + javax.servlet diff --git a/installer/webapp/src/main/webResources/WEB-INF/classes/log4j.properties b/installer/webapp/src/main/webResources/WEB-INF/classes/log4j.properties index 7bd470d5..1d3c0c4a 100644 --- a/installer/webapp/src/main/webResources/WEB-INF/classes/log4j.properties +++ b/installer/webapp/src/main/webResources/WEB-INF/classes/log4j.properties @@ -24,7 +24,7 @@ # debug.log4j.properties exists will be used instead, if it exists, but is not stored in Subversion. log4j.appender.AllAppender=org.apache.log4j.RollingFileAppender -log4j.appender.AllAppender.File= ${catalina.base}/logs/${app-name}.all.log +log4j.appender.AllAppender.File=${catalina.base}/logs/${app-name}.all.log log4j.appender.AllAppender.MaxFileSize=10MB log4j.appender.AllAppender.MaxBackupIndex=10 log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout diff --git a/pom.xml b/pom.xml index 63dc7825..bb38c0de 100644 --- a/pom.xml +++ b/pom.xml @@ -1,13 +1,10 @@ - + 4.0.0 org.vivoweb vivo-project - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT pom VIVO @@ -43,11 +40,9 @@ - + scm:git:git@github.com:vivo-project/VIVO.git scm:git:git@github.com:vivo-project/VIVO.git @@ -72,6 +67,28 @@ + + Vitro-languages + + + ../Vitro-languages/pom.xml + + + + ../Vitro-languages + + + + VIVO-languages + + + ../VIVO-languages/pom.xml + + + + ../VIVO-languages + + vitro @@ -335,7 +352,8 @@ - + org.apache.maven.plugins maven-checkstyle-plugin @@ -343,7 +361,8 @@ verify-style - + verify check @@ -352,10 +371,10 @@ - duraspace-checkstyle/checkstyle.xml + duraspace-checkstyle/checkstyle.xml - vitro-checkstyle/checkstyle-suppressions.xml + vitro-checkstyle/checkstyle-suppressions.xml UTF-8 true @@ -469,15 +488,20 @@ false - - + + + + javadoc test-javadoc - + + aggregate - false + false aggregate @@ -501,15 +525,14 @@ - + vivo-dependencies VIVO Dependencies - https://raw.github.com/vivo-project/dependencies/master/ + https://raw.github.com/vivo-project/dependencies/main/ @@ -537,6 +560,6 @@ ossrh https://oss.sonatype.org/service/local/staging/deploy/maven2/ - + - + \ No newline at end of file diff --git a/rc_script.sh b/rc_script.sh index d2407604..a7323784 100755 --- a/rc_script.sh +++ b/rc_script.sh @@ -1,12 +1,12 @@ #!/bin/bash # RC Script -RC_VERSION=1.11.1 +RC_VERSION=1.12.0 RC_NUM=1 -git checkout master +git checkout main git pull -git push origin master:rel-${RC_VERSION}-RC +git push origin main:rel-${RC_VERSION}-RC git checkout rel-${RC_VERSION}-RC diff --git a/selenium/pom.xml b/selenium/pom.xml index 2e5e9ae1..b5c53e28 100644 --- a/selenium/pom.xml +++ b/selenium/pom.xml @@ -34,7 +34,7 @@ junit junit - 4.12 + 4.13.1 test diff --git a/start.sh b/start.sh new file mode 100644 index 00000000..0f9ef7d9 --- /dev/null +++ b/start.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -e + +# allow easier debugging with `docker run -e VERBOSE=yes` +if [[ "$VERBOSE" = "yes" ]]; then + set -x +fi + +# allow easier reset home with `docker run -e RESET_HOME=true` +if [[ "$RESET_HOME" = "true" ]]; then + echo 'Clearing VIVO HOME /usr/local/vivo/home' + rm -rf /usr/local/vivo/home/* +fi + +# copy home bin if not exists +if [ ! -d /usr/local/vivo/home/bin ]; then + echo "Copying home bin directory to /usr/local/vivo/home/bin" + cp -r /vivo-home/bin /usr/local/vivo/home/bin +fi + +# copy home config if not exists +if [ ! -d /usr/local/vivo/home/config ]; then + echo "Copying home config directory to /usr/local/vivo/home/config" + cp -r /vivo-home/config /usr/local/vivo/home/config +fi + +# copy home rdf if not exists +if [ ! -d /usr/local/vivo/home/rdf ]; then + echo "Copying home rdf directory to /usr/local/vivo/home/rdf" + cp -r /vivo-home/rdf /usr/local/vivo/home/rdf +fi + +# copy runtime.properties if it does not already exist in target home directory +if [ -f /usr/local/vivo/home/config/example.runtime.properties ]; then + if [ ! -f /usr/local/vivo/home/config/runtime.properties ] + then + echo "Copying example.runtime.properties to /usr/local/vivo/home/config/runtime.properties" + cp /usr/local/vivo/home/config/example.runtime.properties /usr/local/vivo/home/config/runtime.properties + + # template runtime.properties vitro.local.solr.url value to $SOLR_URL value + echo "Templating runtime.properties vitro.local.solr.url = $SOLR_URL" + sed -i "s,http://localhost:8983/solr/vivocore,$SOLR_URL,g" /usr/local/vivo/home/config/runtime.properties + else + echo "Using existing /usr/local/vivo/home/config/runtime.properties" + fi +fi + +# copy applicationSetup.n3 if it does not already exist in target home directory +if [ -f /usr/local/vivo/home/config/example.applicationSetup.n3 ]; then + if [ ! -f /usr/local/vivo/home/config/applicationSetup.n3 ] + then + echo "Copying example.applicationSetup.n3 to /usr/local/vivo/home/config/applicationSetup.n3" + cp /usr/local/vivo/home/config/example.applicationSetup.n3 /usr/local/vivo/home/config/applicationSetup.n3 + else + echo "Using existing /usr/local/vivo/home/config/applicationSetup.n3" + fi +fi + +catalina.sh run diff --git a/update-versions.sh b/update-versions.sh index d5c4272d..97ef9113 100755 --- a/update-versions.sh +++ b/update-versions.sh @@ -2,7 +2,7 @@ if [ -z "$1" ] then - echo 'New version number required eg. 1.9.0-rc1' + echo 'New version number required eg. 1.12.0-RC1' exit 1 fi diff --git a/webapp/pom.xml b/webapp/pom.xml index 10f76e2f..3a9f7100 100644 --- a/webapp/pom.xml +++ b/webapp/pom.xml @@ -7,13 +7,13 @@ org.vivoweb vivo-webapp - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT war org.vivoweb vivo-project - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT .. @@ -69,7 +69,7 @@ org.vivoweb vivo-api - 1.11.2-SNAPSHOT + 1.12.1-SNAPSHOT diff --git a/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 b/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 deleted file mode 100644 index c912bc22..00000000 --- a/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 +++ /dev/null @@ -1,27 +0,0 @@ -@prefix ts_: . -@prefix display: . -@prefix mydomain: . - -ts_:elenphExcerpt display:hasCustomView mydomain:elenphExcerptShortView . - -mydomain:elenphExcerptShortView - a display:customViewForIndividual ; - display:appliesToContext "SEARCH" ; - display:hasTemplate "elenphExcerptShortView.ftl" ; - display:hasDataGetter mydomain:elenphExcerptShortViewDataGetter . - -mydomain:elenphExcerptShortViewDataGetter - a ; - display:saveToVar "excerptInfo"; - display:query - """ - PREFIX rdfs: - PREFIX vivo: - PREFIX rdf: - PREFIX ts_: - SELECT ?property ?value - WHERE { - ?individualUri ?property ?value . - ?individualUri rdf:type ts_:elenphExcerpt . - } - """ . diff --git a/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt b/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt index a3727d05..62a3320f 100644 --- a/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt +++ b/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt @@ -5,6 +5,10 @@ # https://sourceforge.net/apps/mediawiki/vivo/index.php?title=The_StartupManager # +# This listener must be run before any other code that uses resource bundles, +# otherwise there will be problems with i18n-support. +org.vivoweb.webapp.startup.i18nSetup + edu.cornell.mannlib.vitro.webapp.servlet.setup.JvmSmokeTests edu.cornell.mannlib.vitro.webapp.application.ApplicationSetup @@ -21,6 +25,9 @@ edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup +# For multiple language support +edu.cornell.mannlib.vitro.webapp.i18n.selection.LocaleSelectionSetup + edu.cornell.mannlib.vitro.webapp.servlet.setup.ConfigurationModelsSetup edu.cornell.mannlib.vitro.webapp.servlet.setup.ContentModelSetup @@ -67,9 +74,6 @@ org.vivoweb.webapp.startup.SearchResultTemplateModelSetup edu.ucsf.vitro.opensocial.OpenSocialSmokeTests -# For multiple language support -edu.cornell.mannlib.vitro.webapp.i18n.selection.LocaleSelectionSetup - # The search indexer uses a "public" permission, so the PropertyRestrictionPolicyHelper # and the PermissionRegistry must already be set up. edu.cornell.mannlib.vitro.webapp.searchindex.SearchIndexerSetup @@ -91,5 +95,3 @@ edu.cornell.mannlib.vitro.webapp.controller.individual.VIVOIndividualResponseBui # This should be near the end, because it will issue a warning if the connection to the SearchEngine times out. edu.cornell.mannlib.vitro.webapp.servlet.setup.SearchEngineSmokeTest - -org.vivoweb.webapp.startup.i18nSetup diff --git a/webapp/src/main/webapp/config/listViewConfig-additionalEmail.xml b/webapp/src/main/webapp/config/listViewConfig-additionalEmail.xml index ecc565ca..a9a08490 100644 --- a/webapp/src/main/webapp/config/listViewConfig-additionalEmail.xml +++ b/webapp/src/main/webapp/config/listViewConfig-additionalEmail.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-adviseeIn.xml b/webapp/src/main/webapp/config/listViewConfig-adviseeIn.xml index 9acb938c..6f66ce66 100644 --- a/webapp/src/main/webapp/config/listViewConfig-adviseeIn.xml +++ b/webapp/src/main/webapp/config/listViewConfig-adviseeIn.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-advisorIn.xml b/webapp/src/main/webapp/config/listViewConfig-advisorIn.xml index 689f8ab8..b0be2026 100644 --- a/webapp/src/main/webapp/config/listViewConfig-advisorIn.xml +++ b/webapp/src/main/webapp/config/listViewConfig-advisorIn.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-authorInAuthorship.xml b/webapp/src/main/webapp/config/listViewConfig-authorInAuthorship.xml index b02165da..f60f4d59 100644 --- a/webapp/src/main/webapp/config/listViewConfig-authorInAuthorship.xml +++ b/webapp/src/main/webapp/config/listViewConfig-authorInAuthorship.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-awardOrHonor.xml b/webapp/src/main/webapp/config/listViewConfig-awardOrHonor.xml index 584992c3..f608bb2a 100644 --- a/webapp/src/main/webapp/config/listViewConfig-awardOrHonor.xml +++ b/webapp/src/main/webapp/config/listViewConfig-awardOrHonor.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-awardOrHonorGiven.xml b/webapp/src/main/webapp/config/listViewConfig-awardOrHonorGiven.xml index 8c5b9388..05d8586a 100644 --- a/webapp/src/main/webapp/config/listViewConfig-awardOrHonorGiven.xml +++ b/webapp/src/main/webapp/config/listViewConfig-awardOrHonorGiven.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-dateTimeInterval.xml b/webapp/src/main/webapp/config/listViewConfig-dateTimeInterval.xml index 211f5c7e..9a65107e 100644 --- a/webapp/src/main/webapp/config/listViewConfig-dateTimeInterval.xml +++ b/webapp/src/main/webapp/config/listViewConfig-dateTimeInterval.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-dateTimeValue.xml b/webapp/src/main/webapp/config/listViewConfig-dateTimeValue.xml index d2eae7b8..4ee0dc14 100644 --- a/webapp/src/main/webapp/config/listViewConfig-dateTimeValue.xml +++ b/webapp/src/main/webapp/config/listViewConfig-dateTimeValue.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-default.xml b/webapp/src/main/webapp/config/listViewConfig-default.xml index b497c41f..620f9af7 100644 --- a/webapp/src/main/webapp/config/listViewConfig-default.xml +++ b/webapp/src/main/webapp/config/listViewConfig-default.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-degreeEarned.xml b/webapp/src/main/webapp/config/listViewConfig-degreeEarned.xml index 5245714e..2c60a331 100644 --- a/webapp/src/main/webapp/config/listViewConfig-degreeEarned.xml +++ b/webapp/src/main/webapp/config/listViewConfig-degreeEarned.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-doi.xml b/webapp/src/main/webapp/config/listViewConfig-doi.xml index 3cd5e6ae..48938bcd 100644 --- a/webapp/src/main/webapp/config/listViewConfig-doi.xml +++ b/webapp/src/main/webapp/config/listViewConfig-doi.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-editorship.xml b/webapp/src/main/webapp/config/listViewConfig-editorship.xml index 0d0bf485..6b43b2a8 100644 --- a/webapp/src/main/webapp/config/listViewConfig-editorship.xml +++ b/webapp/src/main/webapp/config/listViewConfig-editorship.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-educationalTraining.xml b/webapp/src/main/webapp/config/listViewConfig-educationalTraining.xml index 676c9aa5..ef99da28 100644 --- a/webapp/src/main/webapp/config/listViewConfig-educationalTraining.xml +++ b/webapp/src/main/webapp/config/listViewConfig-educationalTraining.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-fauxPropertyDefault.xml b/webapp/src/main/webapp/config/listViewConfig-fauxPropertyDefault.xml index dec47497..a7f78596 100644 --- a/webapp/src/main/webapp/config/listViewConfig-fauxPropertyDefault.xml +++ b/webapp/src/main/webapp/config/listViewConfig-fauxPropertyDefault.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-faxNumber.xml b/webapp/src/main/webapp/config/listViewConfig-faxNumber.xml index 5b6a5a96..8eec4f51 100644 --- a/webapp/src/main/webapp/config/listViewConfig-faxNumber.xml +++ b/webapp/src/main/webapp/config/listViewConfig-faxNumber.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-fullName.xml b/webapp/src/main/webapp/config/listViewConfig-fullName.xml index 1c5df79b..0087de02 100644 --- a/webapp/src/main/webapp/config/listViewConfig-fullName.xml +++ b/webapp/src/main/webapp/config/listViewConfig-fullName.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-grantAdministeredBy.xml b/webapp/src/main/webapp/config/listViewConfig-grantAdministeredBy.xml index c3a05eba..698881bd 100644 --- a/webapp/src/main/webapp/config/listViewConfig-grantAdministeredBy.xml +++ b/webapp/src/main/webapp/config/listViewConfig-grantAdministeredBy.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasAssociatedConcept.xml b/webapp/src/main/webapp/config/listViewConfig-hasAssociatedConcept.xml index 9d563cc6..239ed0b0 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasAssociatedConcept.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasAssociatedConcept.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasAttendeeRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasAttendeeRole.xml index 3b7bc325..7ba52ee7 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasAttendeeRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasAttendeeRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasClinicalActivity.xml b/webapp/src/main/webapp/config/listViewConfig-hasClinicalActivity.xml index 9cdba6e0..6d7bccdb 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasClinicalActivity.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasClinicalActivity.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasCoPrincipalInvestigatorRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasCoPrincipalInvestigatorRole.xml index b6442841..e0ea1490 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasCoPrincipalInvestigatorRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasCoPrincipalInvestigatorRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasEditorRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasEditorRole.xml index c87854f0..124f3d4c 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasEditorRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasEditorRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasInvestigatorRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasInvestigatorRole.xml index df031ec9..c2ea6896 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasInvestigatorRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasInvestigatorRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasPresenterRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasPresenterRole.xml index 7d0aa24f..768b0b53 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasPresenterRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasPresenterRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasPrincipalInvestigatorRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasPrincipalInvestigatorRole.xml index 9a0fab66..39c87151 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasPrincipalInvestigatorRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasPrincipalInvestigatorRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasReviewerRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasReviewerRole.xml index 403f86d5..69e31bef 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasReviewerRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasReviewerRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-hasRole.xml b/webapp/src/main/webapp/config/listViewConfig-hasRole.xml index 51bf20ec..0d200f5b 100644 --- a/webapp/src/main/webapp/config/listViewConfig-hasRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-hasRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-informationResourceInAuthorship.xml b/webapp/src/main/webapp/config/listViewConfig-informationResourceInAuthorship.xml index 9c1a98fb..c9d15ae6 100644 --- a/webapp/src/main/webapp/config/listViewConfig-informationResourceInAuthorship.xml +++ b/webapp/src/main/webapp/config/listViewConfig-informationResourceInAuthorship.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-informationResourceInEditorship.xml b/webapp/src/main/webapp/config/listViewConfig-informationResourceInEditorship.xml index 11d43f4a..e6281ca0 100644 --- a/webapp/src/main/webapp/config/listViewConfig-informationResourceInEditorship.xml +++ b/webapp/src/main/webapp/config/listViewConfig-informationResourceInEditorship.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-issuedCredential.xml b/webapp/src/main/webapp/config/listViewConfig-issuedCredential.xml index 1e741ae9..d79071ed 100644 --- a/webapp/src/main/webapp/config/listViewConfig-issuedCredential.xml +++ b/webapp/src/main/webapp/config/listViewConfig-issuedCredential.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-mailingAddress.xml b/webapp/src/main/webapp/config/listViewConfig-mailingAddress.xml index 1a5bd4f9..61298008 100644 --- a/webapp/src/main/webapp/config/listViewConfig-mailingAddress.xml +++ b/webapp/src/main/webapp/config/listViewConfig-mailingAddress.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-orcidId.xml b/webapp/src/main/webapp/config/listViewConfig-orcidId.xml index 67686c27..f4fdee64 100644 --- a/webapp/src/main/webapp/config/listViewConfig-orcidId.xml +++ b/webapp/src/main/webapp/config/listViewConfig-orcidId.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-organizationAdministersGrant.xml b/webapp/src/main/webapp/config/listViewConfig-organizationAdministersGrant.xml index fcc09d57..da7f5838 100644 --- a/webapp/src/main/webapp/config/listViewConfig-organizationAdministersGrant.xml +++ b/webapp/src/main/webapp/config/listViewConfig-organizationAdministersGrant.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-organizationAwardsGrant.xml b/webapp/src/main/webapp/config/listViewConfig-organizationAwardsGrant.xml index 522179de..6c56c26a 100644 --- a/webapp/src/main/webapp/config/listViewConfig-organizationAwardsGrant.xml +++ b/webapp/src/main/webapp/config/listViewConfig-organizationAwardsGrant.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-organizationForPosition.xml b/webapp/src/main/webapp/config/listViewConfig-organizationForPosition.xml index 9565578a..8fde15da 100644 --- a/webapp/src/main/webapp/config/listViewConfig-organizationForPosition.xml +++ b/webapp/src/main/webapp/config/listViewConfig-organizationForPosition.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-organizationForTraining.xml b/webapp/src/main/webapp/config/listViewConfig-organizationForTraining.xml index 4763c9d3..037a53f3 100644 --- a/webapp/src/main/webapp/config/listViewConfig-organizationForTraining.xml +++ b/webapp/src/main/webapp/config/listViewConfig-organizationForTraining.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-personInPosition.xml b/webapp/src/main/webapp/config/listViewConfig-personInPosition.xml index 9a578c49..8fb58bb5 100644 --- a/webapp/src/main/webapp/config/listViewConfig-personInPosition.xml +++ b/webapp/src/main/webapp/config/listViewConfig-personInPosition.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-preferredTitle.xml b/webapp/src/main/webapp/config/listViewConfig-preferredTitle.xml index 9cdaa46a..bff23dd1 100644 --- a/webapp/src/main/webapp/config/listViewConfig-preferredTitle.xml +++ b/webapp/src/main/webapp/config/listViewConfig-preferredTitle.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-primaryEmail.xml b/webapp/src/main/webapp/config/listViewConfig-primaryEmail.xml index 32a26ebe..d920f1a0 100644 --- a/webapp/src/main/webapp/config/listViewConfig-primaryEmail.xml +++ b/webapp/src/main/webapp/config/listViewConfig-primaryEmail.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-publicationVenueFor.xml b/webapp/src/main/webapp/config/listViewConfig-publicationVenueFor.xml index f83ae2fc..b96d04db 100644 --- a/webapp/src/main/webapp/config/listViewConfig-publicationVenueFor.xml +++ b/webapp/src/main/webapp/config/listViewConfig-publicationVenueFor.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-publisherOf.xml b/webapp/src/main/webapp/config/listViewConfig-publisherOf.xml index d31ea7c7..b39e816f 100644 --- a/webapp/src/main/webapp/config/listViewConfig-publisherOf.xml +++ b/webapp/src/main/webapp/config/listViewConfig-publisherOf.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-rangeUnion.xml b/webapp/src/main/webapp/config/listViewConfig-rangeUnion.xml index acca40d3..a7b19bfe 100644 --- a/webapp/src/main/webapp/config/listViewConfig-rangeUnion.xml +++ b/webapp/src/main/webapp/config/listViewConfig-rangeUnion.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-relatedRole.xml b/webapp/src/main/webapp/config/listViewConfig-relatedRole.xml index 193fa951..17f7dc0f 100644 --- a/webapp/src/main/webapp/config/listViewConfig-relatedRole.xml +++ b/webapp/src/main/webapp/config/listViewConfig-relatedRole.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-researchActivities.xml b/webapp/src/main/webapp/config/listViewConfig-researchActivities.xml index 7bfe4279..e7e95584 100644 --- a/webapp/src/main/webapp/config/listViewConfig-researchActivities.xml +++ b/webapp/src/main/webapp/config/listViewConfig-researchActivities.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-researchAreaOf.xml b/webapp/src/main/webapp/config/listViewConfig-researchAreaOf.xml index e37be248..ee4cae86 100644 --- a/webapp/src/main/webapp/config/listViewConfig-researchAreaOf.xml +++ b/webapp/src/main/webapp/config/listViewConfig-researchAreaOf.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-roleContributesTo.xml b/webapp/src/main/webapp/config/listViewConfig-roleContributesTo.xml index dd87a529..7da48fd2 100644 --- a/webapp/src/main/webapp/config/listViewConfig-roleContributesTo.xml +++ b/webapp/src/main/webapp/config/listViewConfig-roleContributesTo.xml @@ -1,7 +1,7 @@ - diff --git a/webapp/src/main/webapp/config/listViewConfig-roleRealizedIn.xml b/webapp/src/main/webapp/config/listViewConfig-roleRealizedIn.xml index 4aef99e6..0162f28e 100644 --- a/webapp/src/main/webapp/config/listViewConfig-roleRealizedIn.xml +++ b/webapp/src/main/webapp/config/listViewConfig-roleRealizedIn.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-scopusId.xml b/webapp/src/main/webapp/config/listViewConfig-scopusId.xml index e910dc9e..c3a918e8 100644 --- a/webapp/src/main/webapp/config/listViewConfig-scopusId.xml +++ b/webapp/src/main/webapp/config/listViewConfig-scopusId.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/config/listViewConfig-telephoneNumber.xml b/webapp/src/main/webapp/config/listViewConfig-telephoneNumber.xml index 97ac5991..d83d5780 100644 --- a/webapp/src/main/webapp/config/listViewConfig-telephoneNumber.xml +++ b/webapp/src/main/webapp/config/listViewConfig-telephoneNumber.xml @@ -1,7 +1,7 @@ - + diff --git a/webapp/src/main/webapp/config/listViewConfig-webpage.xml b/webapp/src/main/webapp/config/listViewConfig-webpage.xml index d6d4a5c2..2d7b5cbe 100644 --- a/webapp/src/main/webapp/config/listViewConfig-webpage.xml +++ b/webapp/src/main/webapp/config/listViewConfig-webpage.xml @@ -3,7 +3,7 @@ + See guidelines at https://wiki.lyrasis.org/display/VIVODOC112x/Custom+List+View+Configurations --> diff --git a/webapp/src/main/webapp/css/visualization/capabilitymap/key.css b/webapp/src/main/webapp/css/visualization/capabilitymap/key.css new file mode 100644 index 00000000..5ae38c2a --- /dev/null +++ b/webapp/src/main/webapp/css/visualization/capabilitymap/key.css @@ -0,0 +1,37 @@ +.capability, .edge, .group, .links2, .links3, .links4 { + text-indent: 28px; + font-size: 9px; + width: 98%; + background-repeat: no-repeat; + background-image: url("../../../images/visualization/capabilitymap/key-sprite.png") +} + +.capability { + background-position: 0px 0px; + height: 22px; +} + +.edge { + background-position: 0px -22px; + height: 24px; +} + +.group { + background-position: 0px -48px; + height: 20px; +} + +.links2 { + background-position: 0px -73px; + height: 20px; +} + +.links3 { + background-position: 0px -96px; + height: 20px; +} + +.links4 { + background-position: 0px -121px; + height: 20px; +} diff --git a/webapp/src/main/webapp/favicon.ico b/webapp/src/main/webapp/favicon.ico index d6f769bc..fe936708 100644 Binary files a/webapp/src/main/webapp/favicon.ico and b/webapp/src/main/webapp/favicon.ico differ diff --git a/webapp/src/main/webapp/i18n/vivo_all.properties b/webapp/src/main/webapp/i18n/vivo_all.properties deleted file mode 100644 index dec982fa..00000000 --- a/webapp/src/main/webapp/i18n/vivo_all.properties +++ /dev/null @@ -1,908 +0,0 @@ -# -# Text strings for the controllers and templates -# -# Default (English) -# - -uri_icon = uri icon - -# -# "partial" individual templates ( /templates/freemarker/body/partials/individual ) -# -contact_capitalized = Contact -phone = phone -primary_email = primary email -additional_emails = additional emails -email = email -primary_email_capitalized = Primary Email -additional_emails_capitalized = Additional Emails -contact_info = Contact Info - -active_grants_for = Active Grants for the -department = department -grant_name = Grant Name -close_date = Close Date -no_active_grants = There are currently no active grants for this department. -view_all_active_grants = View all active grants - -individuals_with_researh_area_one = Here are the individuals in {0} who have an interest in this research area. -individuals_with_researh_area_two = Here are the individuals in the {0} who have an interest in this research area. -individuals_with_dept = Here are the individuals with an interest in {0} who are in this organization. -faculty_with_researh_area = Here are the faculty members in the {0} department who have an interest in this research area. -view_all_individuals_in_area = View all individuals with an interest in this area. -view_all_individuals_in_dept = View all individuals in this organization. -view_all_faculty_in_area = View all faculty with an interest in this area. -faculty_research_areas = Faculty Research Areas -affiliated_research_areas = Affiliated Research Areas -affiliated_departments = Associated Departments -organization = individuals with the research area in this organization - -share_the_uri = share the uri - -export_qr_codes = Export QR codes -vcard_qr = vCard QR -vcard_qr_code = vCard QR Code -close_capitalized = Close -qr_icon = qr icon -qr_code = QR Code -invalid_qr_code_parameter = You have passed an invalid value for the qrCode display parameter. - -research_areas = research areas - -publications_in_vivo = Publications in VIVO -co_author = co-author -co_authors = co-authors -co_author_network = Co-author Network -map_of_science = map of science -map_of_science_capitalized = Map of Science -co_investigator_network = co-investigator network -co_investigator_network_capitalized = Co-investigator Network - -networks = Networks -co_authors_capitalized = Co-authors - -temporal_graph = temporal graph -temporal_graph_capitalized = Temporal Graph - -websites = Websites - -advisee_label = advisee label -advisor_label = advisor label -candidate = candidate -candidacy = candidacy -advisingRel_label = advisory label - -editor_abbreviated = Ed. -volume_abbreviated = Ed. -resource_name = resource name -missing_info_resource = missing information resource - -award_receipt_name = award receipt name -award_name = award name -conferred_by = conferred by -conferred_on = conferred on -selected_award = Selected Award - -incomplete_date_time_interval = incomplete date/time interval -incomplete_date_time_value = incomplete date/time value - -in = in -organization_name = organization name -missing_organization = missing organization -middle_organization = middle organization - -concept_name = concept name - -at = at -event_name = event name -missing_event = missing event -event_label = event label - -activity_name = activity name -missing_activity = missing activity -awarded_by = awarded by -administered_by = administered by - -presentation_name = presentation name -missing_presentation = missing presentation -conference = conference -series = series - -author_name = author name -missing_author = missing author - -person_name = person name -missing_person_in_posn = missing person in this position -missing_person_in_role = missing person in this role - -scopus_id_link = Scopus ID Link - -click_to_view_web_page = Click to view the {0} web page -screenshot_of_webpage = screenshot of webpage {0} -click_webpage_icon = click webpage icon -link_text = link text -link_name = link name -no_url_provided = no url provided for link - -# -# individual templates ( /templates/freemarker/body/individual ) -# -standard_view = Standard profile view -quick_view = Quick profile view -quick_view_icon = quick view icon -geographic_focus = Geographic Focus - -background_top_image = background top image -full_view_icon = full view icon -profile_type = Profile Type -# -# body templates ( /templates/freemarker/body/ ) -# -export_qr_code = Export QR code -more_qr_info = More info on QR codes -what_is_this = What is this? -view_this_profile = View this person's profile -vcard = Vcard -hyperlink = Hyperlink - -# -# harvester templates ( /templates/freemarker/body/harvester ) -# -must_be_admin = You must be an administrator to use this tool. -error_no_job_specified = Error: No file harvest job was specified, or an unknown job was specified. -probably_a_bug_so_report = The end user should not see this error under normal circumstances, so this is probably a bug and should be reported. -return_to_ingest_menu = Return to the Data Ingest Tools menu -ingest_menu = Ingest Menu -data_being_harvested = Please wait while your data is harvested. -harvest_complete = Harvest complete. For another, please refresh the page. -error_harvest_cannot_continue = An error has occurred and the file harvest cannot continue. -harvest_error_instructions_one = This is most likely due to an improper Harvester configuration. Please ensure the following: -harvest_error_instructions_two = VIVO Harvester is installed. -the_capitalized = The -harvester_location = harvester.location -harvest_error_instructions_three = property in runtime.properties is pointed to the Harvester installation directory. -harvest_error_instructions_fourA = In VIVO Harvester, the web server user (typically tomcat6) has read and write access to the -harvest_error_instructions_fourB = vivo/ -harvest_error_instructions_fourC = directory and all of its children. -harvest_error_instructions_fiveA = In VIVO Harvester, the -harvest_error_instructions_fiveB = logs/ -harvest_error_instructions_fiveC = directory exists and the web server user has read and write access to it. -harvest_error_instructions_sixA = In VIVO Harvester, the file -harvest_error_instructions_sixB = vivo/config/vivo.xml -harvest_error_instructions_sixC = is properly configured with your database information and namespace. -step_one = Step 1 -download_template = Download template -download = Download -step_two = Step 2 -fill_in_data = Fill in data -help_capitalized = Help -fill_in_template_with_data = Fill in the template with your data. You may fill in multiple templates if you wish to harvest multiple files at once. -step_three = Step 3 -upload_files = Upload file(s) -upload_completed_templates = Upload your completed template(s). -upload_capitalized = Upload -uploaded_files = Uploaded files -step_four = Step 4 -harvest_capitalized = Harvest -click_to_harvest = Click the button to harvest your file(s). -step_five = Step 5 -view_results = View results -script_executed = Script being executed -progress_capitalized = Progress -undefined_runtime_property = property in runtime.properties is undefined. -define_value_for_property = In order to use this feature, please define a value for this property that points to the Harvester installation directory before redeploying and restarting the application. - -# -# lib templates ( /templates/freemarker/body/lib ) -# -faculty_capitalized = Faculty -loading_faculty = Loading faculty . . . -research_capitalized = Research -view_all = View all ... -view_all_research = view all research -no_research_content_found = No research content found. -departments = Departments -loading_map_information = Loading map information . . . -verify_match_capitalized = Verify this match - -# -# custom form templates ( /templates/freemarker/edit/forms ) -# -manage_concepts = Manage Concepts -no_concepts_specified = There are currently no concepts specified. -return_to_profile = Return to Profile Page -external_vocabulary_services = External Vocabulary Services -create_own_concept = Select or create a VIVO-defined concept. -add_selected_concept = Add Selected Concept -cannot_find_concept = Can't find the concept you want? Select or create a VIVO-defined concept. -add_concept = Add Concept - -event_type = event type -attended = attended - -manage_authors = Manage Authors -no_linked_author = no linked author -remove_author_link = remove author link -add_author = Add Author -return_to_publication = Return to publication -add_an_author = Add an Author -person_capitalized = Person -organization_capitalized = Organization -middle_name = Middle name -initial_okay = initial okay -selected_author = Selected Author -organization_name_capitalized = Organization name -selected_organization = Selected Organization - -clinical_activity = clinical activity -clinical_activity_type = clinical activity type -year_hint_format = YYYY - -collection_series_editor_role = collection or series editor role -editor_role_in = editor role in - -edit_wbpage_of = Edit webpage of -add_webpage_for = Add webpage for -add_webpage = Add Web Page -url_type = URL Type -faculty_of_1000 = Faculty of 1000 Link -standard_web_link = Standard Web Link -webpage_name = Webpage Name - -investigator_entry_for = investigator entry for -investigator_capitalized = Investigator -principal_investigator_entry_for = principal investigator entry for -co_principal_investigator_entry_for = co-principal investigator entry for -start_year_must_precede_end = The Start Year must be earlier than the End Year. -end_year_must_be_later = The End Year must be later than the Start Year. -enter_or_select_grant = Please enter or select a value in the Grant Name field. -selected_grant = Selected Grant -years_of_grant_participation = Years of Participation in Grant - -leadership = leadership -organization_type = organization type - -membership = membership -membership_in = membership in -organizations = organizations - -organizer_of = organizer of - -outreach_comm_service = outreach & community service -outreach_comm_service_in = outreach & community service in - -select_or_enter_name = Please select an existing value or enter a new value in the Name field. -presentation_entry_for = presentation entry for -presentation_capitalized = Presentation -presentation_type = Presentation Type -role_in = Role in -presentation_hint = e.g., Moderator, Speaker, Panelist -presented_at = Presented At -selected_conference = Selected Conference - -select_existing_pub_or_enter_new = Please select an existing publication in the Title field or enter a new one. - -publication_entry_for = publication entry for -publication_type = Publication Type -selected_publication = Selected Publication -published_in = Published in -selected_journal = Selected Journal -selected_event = Selected Event -proceedings_of = Proceedings of -editor_capitalized = Editor -required_with_last_name = required with new Last name -selected_editor = Selected Editor -publisher_capitalized = Publisher -selected_publisher = Selected Publisher -volume_capitalized = Volume -number_capitalized = Number -issue_capitalized = Issue -chapter_capitalized = Chapter -start_page = Start Page -end_page = End Page -selected_book = Selected Book -publication_date = Publication Date -place_of_publication = Place of Publication - -research_activity = research activity -research_activity_type = research activity type - -reviewer_of = reviewer of - -entry_for = entry for -specify_role_for_activity = Please specify a role for this activity. -start_year = Start Year - -service_to_profession = service to the profession -service_to_profession_in = service to the profession in - -teaching_activity = teaching activity -teaching_activity_type = teaching activity type -teaching_role_hint = e.g., Instructor, Facilitator, Assistant - -create_own_concept_all_caps = Create Your Own Concept -concept_capitalized = Concept -selected_concept = Selected Concept -create_concept = Create Concept -return_to_manage_concepts = Return to Manage Concepts - -institutional_internal_class = Institutional Internal Class -internal_class_intro_one = This class will be used to designate those individuals internal to your institution. -internal_class_intro_two = This will allow you to limit the individuals displayed on your menu pages (People, Research, etc.) to only those within your institution. -no_local_oncologies = There are currently no recognized local ontologies. -namespace_must_use_this_pattern = In order for a local ontology to be recognized here, its namespace URI must follow this pattern -new_local_oncology = a new local ontology -return_here_to_define_class = and then return here to define the institutional internal class. -select_existing_local_class = Select an existing class from a local extension -cannot_find_class = Can't find an appropriate class? -create_new_class = Create a new class -create_new_one = Create a new one -use_capitals_each_word = use capitals for the first letter of each word -local_namespace = Local Namespace -problematic_section_error = Error: problematic section as above should all have been handled. -new_local_ontology = new local ontology - -manage_grants_and_projects = Manage Grants & Projects for -check_grants_to_exclude = Check those grants and projects you want to exclude from the profile page. - -manage_affiliated_people = Manage People Affiliated with -check_people_to_exclude = Check those people you want to exclude from the profile page. - -manage_publications_for = Manage Publications for -check_pubs_to_exclude = Check those publications you want to exclude from the profile page. - -manage_web_pages = Manage Web Pages -has_no_webpages = This individual currently has no web pages specified. Add a new web page by clicking on the button below. -edit_webpage_link = edit web page link -delete_webpage_link = delete web page link -webpage_url = webpage url -add_new_web_page = Add New Web Page - -enable_internal_class_one = To enable this option, you must first select an -enable_internal_class_two = for your instance -internal_class = institutional internal class -only_display = Only display -within_my_institution = within my institution - -enter_a_name = Please enter a value in the Name field. -enter_last_name = Please enter a Last name for this person. -enter_first_name = Please enter a First name for this person. - -posn_history_entry_for = position history entry for -enter_posn_title_value = Please enter a value in the Position Title field. -enter_posn_type_value = Please select a value in the Position Type field. -enter_or_select_person_value = Please select an existing value or enter a new value in the Person field. -position_title = Position Title -position_type = Position Type -selected_person = Selected Person - -degree_candidacy = Degree Candidacy -subject_area = Subject Area -selected_subject_area = Selected Subject Area -selected_advisee = Selected Advisee -selected_advisor = Selected Advisor -advisee_capitalized = Advisee -advisor_capitalized = Advisor -advising_relationship_type = Advising Relationship Type -select_advising_relationship_type = Please select an Advising Relationship Type. -advisor_relationship_entry_for = advisor relationship entry for -advisee_relationship_entry_for = advisee relationship entry for -years_participating = Years of Participation - -award_or_honor_for = award or honor for -select_Award_or_enter_name = Please select an existing value or enter a new value in the Award or Honor Name field. -award_honor_name = Award or Honor Name -conferred_by_capitalized = Conferred by -selected_conferred = Selected Conferrer -description = Description -year_awarded = Year Awarded -years_inclusive = Years Inclusive -award_hint = (e.g., for multi-year awards) - -educational_training_for = educational training entry for -select_organization_type = Please select a value in the Organization Type field. -select_an_organization_name = Please enter or select a value in the Name field. -select_educational_training_value = Please select a value in the Type of Educational Training field. -org_type_capitalized = Organization Type -educational_training_type = Type of Educational Training -dept_or_school_name = Department or School Name within the -degree = Degree -missing_degree = missing degree -major_field = Major Field of Degree -supplemental_information = Supplemental Information -supplemental_information_hint = (e.g., Thesis title, Transfer info, etc.) -academic_studies_or_other = Academic Studies or Other Training - -create_mailing_address = Create Mailing Address -mailing_address_for = mailing address for -enter_a_country = Please enter a value in the Country field. -enter_street_address = Please enter a value in the Street Address field. -enter_a_locality = Please enter a value in the City/Locality field. -enter_postal_code = Please enter a value in the Postal Code field. -country = Country -street_address = Street Address -city_locality = City/Locality -region = State/Province/Region -postal_code = Postal Code - -posn_entry_for = position entry for - -# -# coauthorship templates ( /templates/freemarker/visualization/coauthorship ) -# -within_last_10_years = within the last 10 years -total = total -from = from -file = file -file_capitalized = File -view_full_timeline_and_network = View full timeline and co-author network. -download_data_as = Download data as -unique_coauthors_per_year = Unique Co-Authors per year -count_capitalized = Count - -# -# copi templates ( /templates/freemarker/visualization/copi ) -# -year_capitalized = Year -unique_coinvestigators = Unique co-investigators -co_investigator = co-investigator -co_investigators = co-investigators -unique_coinvestigators_per_year = Unique Co-Investigators per year -view_timeline_copi_network = View full timeline and co-investigator network. - -# -# entity comparison templates ( /templates/freemarker/visualization/entitycomparison ) -# -parent_organization_of = Parent organization of -temporal_graph_drill_up = temporal graph drill up -how_to_compare = How do you want to compare? -no_view_link = no view link -persistent_link_to_visualization = Persistent link to current visualization -error_notification = error notification -close_me = Close Me -what_to_compare = What do you want to compare? -organizations_capitalized = Organizations -people_capitalized = People -organization_hierarchy_note = Note: the organizations or people listed below are only those which are directly beneath {0} in the organization hierarchy. You may 'drill down' to see the organizations or people below a given sub-organization by selecting the chart icon next to a selected sub-organization's name below the graph on the right. -save_all_as_csv = Save All as CSV -clear_capitalized = Clear -clear_all_selected_entities = Clear all selected entities. -comparing_capitalized = Comparing -of = of -institutions_capitalized = Institutions -info_based_on_vivo_data = This information is based solely on {0} which have been loaded into the VIVO system. -you_have_selected = You have selected -of_a_maximum = of a maximum -schools = schools -legend_capitalized = Legend -with_unknown_year = with unknown year -with_known_year = with known year -from_current_incomplete_year = from current incomplete year - -entity_comp_error_text1 = This organization has neither sub-organizations nor people with -entity_comp_error_text2 = in the system. -entity_comp_error_text3 = Please visit the full -entity_comp_error_text4 = for a more complete overview. -profile_page = profile page - -publication = publication -published = published -publications = publications -by_publications = by Publications -publications_capitalized = Publications -grant = grant -granted = granted -grants = grants -by_grants = by Grants -grants_capitalized = Grants -activity = activity -activities = activities - -# -# grant visualization templates ( /templates/freemarker/visualization/grant ) -# -view_all_grants = view all grants -view_all_grants_text = View all VIVO grants and corresponding co-investigator network. -grant_per_year = Grants per year -link = link - -# -# map of science templates ( /templates/freemarker/visualization/mapOfScience ) -# -parent_entity = parent entity -map_of_science_icon = map of science icon -explore_activity = Explore activity -explore_capitalized = Explore -across_subdisciplines = across 554 scientific subdisciplines -compare_organizations = Compare organizations -mapped = mapped -save_unmapped_publications = Save Unmapped Publications -map_of_science_visualization = Map of Science Visualization -no_publications_for_this_organization = No publications in the system have been attributed to this organization. -please_visit = Please visit the -for_complete_overview = for a complete overview. - -# -# model constructor templates ( /templates/freemarker/visualization/modelconstructor ) -# -cached_models_regenerated = The following cached models will be regenerated. -uri_independent_model = URI Independent Model -currently_no_constructed_models = Currently there are no constructed models for use by visualization. - -# -# person level templates ( /templates/freemarker/visualization/personlevel) -# -co_investigator_icon = co-investigator icon -co_authorship = co-authorship -this_author = this author -in_the_vivo_db = in the VIVO database. -no_papers_for = Currently there are no papers for -publication_s_capitalized = Publication(s) -co_author_s_capitalized = Co-author(s) -incomplete_data_note1 = Note: This information is based solely on publications that have been loaded into the VIVO system. This may only be a small sample of the person's total work. -incomplete_data_note2 = Go to your profile page to enter additional details about your publications. -incomplete_data_note3 = Log in to enter additional details about your publications on your profile page. -tables_capitalized = Tables -publications_per_year = Publications per year - -investigator_name = investigator name -co_author_icon = co-author icon -currently_no_grants_for = Currently there are no {0} grants for -this_investigator = this investigator -grant_s_capitalized = Grant(s) -co_investigator_s_capitalized = Co-investigator(s) -incomplete_grant_data_note1 = Note: This information is based solely on grants that have been loaded into the VIVO system. This may only be a small sample of the person's total work. -incomplete_grant_data_note2 = Go to your profile page to enter additional details about your grants. -incomplete_grant_data_note3 = Log in to enter additional details about your grants on your profile page. -grants_per_year = Grants per year -grant_info_for_all_years = The information in the following tables is for all years. -grant_sparkline_note = The spark lines shown above reflect grants through the last complete calendar year. These tables, however, show the grant information for all years, based on the information loaded in the VIVO system. - -# -# publication templates ( /templates/freemarker/visualization/publication) -# -numbers_based_on_publications_in_vivo = These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below. -last_ten_full_years = in the last 10 full years - -last_ten_full = in the last 10 full -download_link = download link -years = years - -# -# miscellaneous visualization templates ( /templates/freemarker/visualization) -# -visualization_tools = Visualization Tools -refresh_cached_vis_models = Refresh Cached Models for Visualization -why_needed = Why is it needed? -vis_tools_note_one = Large-scale visualizations like the Temporal Graph or the Map of Science involve calculating total counts of publications or of grants for some entity. Since this also means checking through all of its sub-entities, the underlying queries can be both memory-intensive and time-consuming. For a faster user experience, we wish to save the results of these queries for later re-use. -vis_caching_process = What's involved in the caching process? -vis_tools_note_two = To this end we have devised a caching solution which will retain information about the hierarchy of organizations -- namely, which publications are attributed to which organizations -- by storing the RDF model. -vis_tools_note_three = We're currently caching these models in memory. The cache is built (only once) on the first user request after a server restart. Because of this, the same model will be served until the next restart. This means that the data in these models may become stale depending upon when it was last created. This works well enough for now. In future releases we will improve this solution so that models are stored on disk and periodically updated. -vis_tools_note_four = The models are refreshed each time the server restarts. Since this is not generally practical on production instances, administrators can instead use the "refresh cache" link above to do this without a restart. - -# -# custom form javascript variables ( /templates/freemarker/edit/js) -# -drag_drop_reorder_authors = Drag and drop to reorder authors -reordering_authors_failed = Reordering of authors failed. -confirm_author_removal = Are you sure you want to remove this author: -error_processing_author_request = Error processing request: author not removed -author_capitalized = Author -or_add_new_one = or add a new one. - -vocabulary_service_unavailable = An error was encountered in executing this search. -no_serch_results_found = No search results were found. -label_type = Label (Type) -label_altLabels = Label (Alternate Labels) -definition_capitalized = Definition -best_match = Best Match -select_term_from_results = Please select at least one term from the search search results. -select_vocabulary_source_to_search = Please select at least one external vocabulary source to search. -confirm_term_deletion = Are you sure you want to remove this term? -error_term_not_deleted = Error processing request: term not removed - -advising = advising -advising_relationship = advising relationship - -select_or_create_organization = Select an existing Organization or create a new one. - -grant_successfully_excluded = The item has been successfully excluded from the profile page. -error_excluding_grant = Error processing request: the item cannot be excluded from the profile page. - -person_successfully_excluded = The person has been successfully excluded from the organization page. -error_excluding_person = Error processing request: the person cannot be excluded from the organization page. - -publication_successfully_excluded = The publication will has been successfully excluded from the profile page. -error_excluding_publication = Error processing request: the publication cannot be excluded from the profile page. - -drag_drop_to_reorder_webpages = Drag and drop to reorder web pages -webpage_reordering_failed = Reordering of web pages failed. -confirm_webpage_deletion = Are you sure you want to remove this web page? -error_removing_webpage = Error processing request: web page not removed. - -# -# miscellaneous javascript variables ( productMods/js) -# -researcher = researcher - -# -# individual javascript variables ( productMods/js/individual) -# -error_processing_type_change = Error processing request: the unchecked labels could not be deleted. - -# -# visualization javascript variables ( productMods/js/visualization) -# -publications_with = Publications with - -co_investigators_capitalized = Co-investigators -grants_with = Grants with - -vis_first_link = First -vis_last_link = Last -vis_previous_link = Prev -vis_next_link = Next - -max_entity_note = A Maximum 10 entities can be compared. Please remove some & try again. -organizations_and_people = Organizations and People -loading_data_for = Loading data for -data_for = Data for -refreshing_data_message = is now being refreshed. The visualization will load as soon as we are done computing, or you can search or browse other data in VIVO and come back in a few minutes. -disclaimer_text_one = This information is based solely on -disclaimer_text_two = which have been loaded into the VIVO system as of -level_undefined_error = ENTITY LEVEL UNDEFINED ERROR - -total_number_of = Total Number of -number_of = Number of -have_an_unknown = have an unknown -year_not_chartered = year (not charted above) -in_completed_year = in a completed year -were = were -in_current_incomplete_year = in the current incomplete year (not charted above) -publication_count = Publication Count -grant_count = Grant Count -entity_type = Entity Type -entity_label = Entity Label -no_matching_entities_found = No matching entities found -clear_search_query = clear search query -short_max_entity_note = A Maximum of 10 entities can be compared. -information_capitalized = Information -content_requires_flash = This content requires the Adobe Flash Player. -get_flash = Get Flash -of_pubs = of pubs. -max_nbr_for_comp = The maximum number of items for comparison is 3. -no_matching_science_areas = No matching science areas found - -subdisciplines = Subdisciplines -disciplines = Disciplines -science_area_level = Level of Science Area -of_activity = of activity - -drill_down = drill down - -disciplines_lower = disciplines -subdisciplines_lower = subdisciplines -show_discipline_labels = Show discipline labels - -no_attributed_publications = No publications in the system have been attributed to this -none_of_the = None of the -publications_attributed_to = publications attributed to this -been_science_located = have been "science-located." -publication_attributed_to = The publication attributed to this -not_science_located = has not been "science-located." -no_journal_information = have no journal information. -no_matching_map_location = could not be matched with a map location using their journal information. - -map_being_refreshed_msg = is now being refreshed. The visualization will load as soon as we are done computing, or you can search or browse other data in VIVO and come back in a few minutes. - -publication_pubs = publications (pubs.) -percent_activity = % activity - -# -# miscellaneous additions -# - -standardview_tooltip_one = Click to display the -standardview_tooltip_two = profile quick view. -research_area_tooltip_one = Click an area to view others -research_area_tooltip_two = with the same interest. -quickview_tooltip = Click to view the standard profile page. -global_research = Global Research -country_wide_research = Country-wide Research -local_research = Local Research -selected_presentation = Selected Presentation -event_capitalized = Event -item_capitalized = Item -telephone_number_for = telephone number for -telephone_number = Telephone Number -enter_telephone_number = Please enter a value in the Telephone Number field. -email_address_for = email address for -enter_email_address = Please enter a value in the Email Address field. -full_name_for = full name for -title_not_found = Title not found. -speeches_capitalized = Speeches -theses_capitalized = Theses -select_document_type = Please select a value in the Document Type field. -select_a_document_name = Please enter or select a value in the Document Name field. -document_type_capitalized = Document Type -document_name_capitalized = Document Name -selected_document = Selected Document -editor_name = editor name -missing_editor = missing editor -drag_drop_reorder_editors = Drag and drop to reorder editors -reordering_editors_failed = Reordering of editors failed. -confirm_editor_removal = Are you sure you want to remove this editor: -error_processing_editor_request = Error processing request: editor not removed -manage_editors = Manage Editors -no_linked_editor = no linked editor -remove_editor_link = remove editor link -add_an_editor = Add an Editor -add_editor = Add Editor -please_select_type = Please select a type from the drop-down list. -preferred_title = Preferred Title -preferred_title_for = preferred title for -enter_preferred_title = Please enter a value in the Preferred Title field. -fax_number_for = fax number for -fax_number = Fax Number -enter_fax_number = Please enter a value in the Fax Number field. -credentials = credentials -select_credential_or_enter_name = Please enter or select a value in the Credential Name field. -type_of_credential = Type of Credential -credential_name = Credential Name -selected_credential = Selected Credential -year_issued = Year Issued -year_awarded_for = year awarded for -create_year_awarded = Create year awarded -edit_year_awarded = Edit year awarded -publication_date_for = publication date for -create_publication_date = Create publication date -edit_publication_date = Edit publication date -name_prefix = Name Prefix -name_suffix = Name Suffix -administering_organization_for = administering organization for -missing_credential = missing credential -grant_administered_by = grant being administered by -missing_grant = missing grant -editor_of_entry = editor of entry for -role_type = Role type -researcher_role = Researcher Role -search_service_btn = Search Service -through_today = Publications through today's date -doi_link=Digital Object Identifier (DOI) - -using_cache_time=Using information cached at - -# -#New Entries for i18n purposes -# -edit_entry_for_head_role=: Edit this "head of" role -edit_entry_for_member_role=: Edit this membership -edit_entry_for_clinical_role=: Edit this clinical activity -edit_entry_for_attendee_role=: Edit this participation -edit_entry_for_organizer_role=: Edit this organizer role -edit_entry_for_editor_role=: Edit this editor role -edit_entry_for_service_provider_role=: Edit this service provider role -edit_entry_for_outreach_provider_role=: Edit this outreach provider role -edit_entry_for_researcher_role=: Edit this researcher role -edit_entry_for_reviewer_role=: Edit this reviewer role -edit_entry_for_teacher_role=: Edit this teaching role - -create_entry_for_head_role=: Add a new "head of" role -create_entry_for_member_role=: Add a new membership -create_entry_for_clinical_role=: Add a new clinical activity -create_entry_for_attendee_role=: Add a new participation -create_entry_for_organizer_role=: Add a new Organizer role -create_entry_for_editor_role=: Add a new editor role -create_entry_for_service_provider_role=: Add a new service provider role -create_entry_for_outreach_provider_role=: Add a new outreach provider role -create_entry_for_researcher_role=: Add a new researcher role -create_entry_for_reviewer_role=: Add a new reviewer role -create_entry_for_teacher_role=: Add a new teaching role - - -save_changes=Save -start_capitalized = Start -end_capitalized = End -institution_name=Name of Institution -role_in_institution=Role in Institution -presentation_name_capitalized=Title of Presentation -role_in_presentation_capitalized=Role in Presentation -advisee_capitalized_first_name=First Name -advisee_capitalized_lastname=Last Name - -add_orcid_id=Add an iD - -orcid_title_add = Do you want to add an ORCID iD? -orcid_step1_add = Step 1: Adding your ORCID iD -orcid_title_confirm = Do you want to add an ORCID iD? -orcid_step1_confirm = Step 1: Adding your ORCID iD - -orcid_step1_description =
  • VIVO redirects you to ORCID's web site.
  • \ -
  • You log in to your ORCID account.
    • If you don't have an account, you can create one.
  • \ -
  • You tell ORCID that VIVO may read your ORCID record. (one-time permission)
  • \ -
  • VIVO reads your ORCID record.
  • \ -
  • VIVO notes that your ORCID iD is confirmed.
- -orcid_step1_denied =

You denied VIVO's request to read your ORCID record.

\ -

Confirmation can't continue.

- -orcid_step1_failed =

VIVO failed to read your ORCID record.

\ -

Confirmation can't continue.

- -orcid_step1_confirmed =

Your ORCID iD is confirmed as {0}

- -orcid_step2_heading = Step 2 (recommended): Linking your ORCID record to VIVO - -orcid_step2_description =
  • VIVO redirects you to ORCID's web site
  • \ -
  • You tell ORCID that VIVO may add an "external ID" to your ORCID record. (one-time permission)
  • \ -
  • VIVO adds the external ID.
- -orcid_step2_already_present =

Your ORCID record already includes a link to VIVO.

- -orcid_step2_denied =

You denied VIVO's request to add an External ID to your ORCID record.

\ -

Linking can't continue.

- -orcid_step2_failed =

VIVO failed to add an External ID to your ORCID record.

\ -

Linking can't continue.

- -orcid_step2_added =

Your ORCID record is linked to VIVO

- -orcid_button_step1 = Continue Step 1 -orcid_button_step2 = Continue Step 2 - -orcid_step_completed = (step completed) -orcid_view_orcid_record = View your ORCID record. -orcid_return_to_vivo = Return to your VIVO profile page - -# Messages for creating and linking resources (publications) -create_and_link_enter=Enter {0}: -create_and_link_claim_for=Claiming works for
{0} -create_and_link_confirm_works=Confirm your work(s) -create_and_link_confirm_works_intro=Please check that these are the work(s) that you wish to claim, and indicate your relationship with them. -create_and_link_authors=Authors -create_and_link_authors_desc=If you are an author of a work, please select your name in the author list.
Retrieved metadata may be incomplete. If you can not see your name listed, select "Unlisted Author". -create_and_link_editors=Editors -create_and_link_editors_desc=If you edited the work, please select "Editor". -create_and_link_not_mine_desc=If you do not wish to claim a work, select "This is not my work". -create_and_link_already_claimed=You have already claimed this work. -create_and_link_unlisted_author=Unlisted Author -create_and_link_editor=Editor -create_and_link_not_mine=This is not my work -create_and_link_remaining=There are {0} ids remaining -create_and_link_thank_you=Thank you -create_and_link_finished=There are no more works left to claim.
You may enter more IDs below, or view your profile. -create_and_link_go_profile=Go to profile -create_and_link_enter_dois_intro=You may enter one or more DOIs to match, and can be entered either as an ID or URL:

e.g. -create_and_link_enter_dois_supported=Currently, DOIs issued by Crossref, DataCite and mEDRA are supported.
Each DOI should be separated by a comma or new line. -create_and_link_enter_pmid_intro=You may enter one or more PubMed IDs to match. Each ID should be separated by a comma or new line. -create_and_link_enter_pmid_supported=Note that metadata will be retrieved from Crossref, if the PubMed ID can be resolved to a DOI. -create_and_link_unknown_profile=Unknown Profile -create_and_link_unknown_resource=Unknown Resource Type -create_and_link_unauthorized_for_profile=You do not have permissions to claim for this user -create_and_link_submit_ids=Submit IDs -create_and_link_submit_confirm=Confirm -create_and_link_error=Unable to retrieve citation details -create_and_link_type_article=Article -create_and_link_type_article_journal=Journal Article -create_and_link_type_book=Book -create_and_link_type_chapter=Chapter -create_and_link_type_dataset=Dataset -create_and_link_type_figure=Image -create_and_link_type_graphic=Image -create_and_link_type_legal_case=Legal Case -create_and_link_type_legislation=Legislation -create_and_link_type_manuscript=Manuscript -create_and_link_type_map=Map -create_and_link_type_musical_score=Musical Score -create_and_link_type_paper_conference=Conference Paper -create_and_link_type_patent=Patent -create_and_link_type_personal_communication=Letter -create_and_link_type_post_weblog=Blog -create_and_link_type_report=Report -create_and_link_type_review=Review -create_and_link_type_speech=Speech -create_and_link_type_thesis=Thesis -create_and_link_type_webpage=Webpage -claim_publications_by=Claim publications by -claim_publications_by_doi=DOI -claim_publications_by_pmid=PubMed ID diff --git a/webapp/src/main/webapp/images/visualization/capabilitymap/key-sprite.png b/webapp/src/main/webapp/images/visualization/capabilitymap/key-sprite.png new file mode 100644 index 00000000..f2cd22eb Binary files /dev/null and b/webapp/src/main/webapp/images/visualization/capabilitymap/key-sprite.png differ diff --git a/webapp/src/main/webapp/images/visualization/capabilitymap/key.png b/webapp/src/main/webapp/images/visualization/capabilitymap/key.png deleted file mode 100644 index 5954e234..00000000 Binary files a/webapp/src/main/webapp/images/visualization/capabilitymap/key.png and /dev/null differ diff --git a/webapp/src/main/webapp/js/individual/individualUtils.js b/webapp/src/main/webapp/js/individual/individualUtils.js index 85014189..974209cb 100644 --- a/webapp/src/main/webapp/js/individual/individualUtils.js +++ b/webapp/src/main/webapp/js/individual/individualUtils.js @@ -64,7 +64,7 @@ $(document).ready(function(){ } vcard += "END:VCARD"; - spanStr = "" + "Term: " + decodeURIComponent(id) + "") + .append(title = $("

" + i18nStringsCap.term + ": " + decodeURIComponent(id) + "

") .bind("click", function() { highlight(id); detailsPane.showDetails(mode, id); @@ -403,7 +419,7 @@ DetailsPanel.prototype.showDetails = function(mode, id) { .css("cursor", "pointer") .prepend($("").addClass("orange-square")) ) - .append($("") + .append($("") .bind("click", function() { g.removeCapability(id); that.clearDetails(); @@ -411,7 +427,7 @@ DetailsPanel.prototype.showDetails = function(mode, id) { }) ) .append($(" ")) - .append($("") + .append($("") .bind("click", function() { expandLastQuery = 1; addKwd(decodeURIComponent(id)); @@ -454,7 +470,7 @@ DetailsPanel.prototype.groupInfo = function(i, group, mode, id) { }); return $("
") .append( - $("

" + "Group: " + group.capabilities.map(function(c) { + $("

" + i18nStringsCap.group + ": " + group.capabilities.map(function(c) { return decodeURIComponent(c.term); }).join(", ") + "

") .bind("click", function() { @@ -464,7 +480,7 @@ DetailsPanel.prototype.groupInfo = function(i, group, mode, id) { .css("cursor", "pointer") .prepend($("").addClass("blue-circle")) ) - .append($("") + .append($("") .bind("click", function() { g.removeGroup(group); that.clearDetails(); @@ -615,12 +631,12 @@ var ipretResults = function(results) { var disableSubButton = function() { subButton.disabled = true; $("#sExpand").attr("disabled", true); - $("#resetButton").val("Stop"); + $("#resetButton").val(i18nStringsCap.pause); } var enableSubButton = function() { subButton.disabled = false; $("#sExpand").attr("disabled", false); - $("#resetButton").val("Reset"); + $("#resetButton").val(i18nStringsCap.reset); } var getLinkColor = function() { var linkColor = $("#linkColor").val(); @@ -807,7 +823,7 @@ var render = function() { } force.on("tick", function() { - $("#log button:first-child").html("pause"); + $("#log button:first-child").html(i18nStringsCap.pause); force2.start(); node.call(updateNode); anchorNode.each(function(d, i) { @@ -832,30 +848,30 @@ var render = function() { }); // refresh UI - $("#log").empty().append($("") + $("#log").empty().append($("") .bind("click", function() { - if ($(this).html() != "resume") { - $(this).html("resume"); + if ($(this).html() != i18nStringsCap.resume) { + $(this).html(i18nStringsCap.resume); force.stop(); force2.stop(); } else { - $(this).html("pause"); + $(this).html(i18nStringsCap.pause); force.resume(); force2.resume(); } }) - ).append(" ").append($("") + ).append(" ").append($("") .bind("click", function() { - if ($(this).html() != "show group labels") { - $(this).html("show group labels"); + if ($(this).html() != i18nStringsCap.show_group_labels) { + $(this).html(i18nStringsCap.show_group_labels); $(".label-group").css("visibility", "hidden"); } else { - $(this).html("hide group labels"); + $(this).html(i18nStringsCap.hide_group_labels); $(".label-group").css("visibility", "visible"); } }) ); - $("#log_printout").empty().append($("").bind("click", function() { + $("#log_printout").empty().append($("").bind("click", function() { $("input[type=checkbox]:checked").each(function() { g.removeCapability($(this).attr("name")); $(this).parent().remove(); diff --git a/webapp/src/main/webapp/js/visualization/entitycomparison/util.js b/webapp/src/main/webapp/js/visualization/entitycomparison/util.js index 1e081393..0e754460 100644 --- a/webapp/src/main/webapp/js/visualization/entitycomparison/util.js +++ b/webapp/src/main/webapp/js/visualization/entitycomparison/util.js @@ -1069,7 +1069,7 @@ function prepareTableForDataTablePagination(jsonData, dataTableParams){ // console.log(processJSONData.currentEntityLevel); - if (processJSONData.currentEntityLevel.toUpperCase() === "ORGANIZATIONS AND PEOPLE") { + if (processJSONData.currentEntityLevel === i18nStringsGuiEvents.organizationsAndPeople) { $.fn.dataTableExt.afnFiltering.push(DatatableCustomFilters.peopleOrOrganizations); } @@ -1193,7 +1193,7 @@ function prepareTableForDataTablePagination(jsonData, dataTableParams){ */ function reloadDataTablePagination(preselectedEntityURIs, jsonData){ - if (processJSONData.currentEntityLevel.toUpperCase() === "ORGANIZATIONS AND PEOPLE") { + if (processJSONData.currentEntityLevel === i18nStringsGuiEvents.organizationsAndPeople) { /* * This will make sure that duplicate filters are not added. diff --git a/webapp/src/main/webapp/robots.txt b/webapp/src/main/webapp/robots.txt index 659b6c36..ed35ce7c 100644 --- a/webapp/src/main/webapp/robots.txt +++ b/webapp/src/main/webapp/robots.txt @@ -22,3 +22,4 @@ Disallow: /vis/ # VIVO addition Disallow: /visualizationAjax/ # VIVO addition Disallow: /visualizationData/ # VIVO addition Disallow: /qrcode # VIVO addition +Disallow: /individual # VIVO addition diff --git a/webapp/src/main/webapp/templates/freemarker/body/aboutQrCodes.ftl b/webapp/src/main/webapp/templates/freemarker/body/aboutQrCodes.ftl deleted file mode 100644 index d16acf6b..00000000 --- a/webapp/src/main/webapp/templates/freemarker/body/aboutQrCodes.ftl +++ /dev/null @@ -1,25 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Page providing details on how QR codes work --> - -

About QR Codes

- -

What is QR?

- -

QR, which stands for Quick Response, is a standard for two-dimensional barcodes that can be read by mobile devices equipped with cameras (such as a smartphone).

- -

What kind of data is in a QR code?

- -

QR codes can encode many different types of data. The QR code on the profile page of a person in VIVO encodes information about that person in vCard format. This is a sort of digital business card, containing information about the person's name, address, telephone number, email address, and more.

- -

If you click on a person's QR code in VIVO, you will be taken to the QR Export page for that person. This page contains the vCard QR code seen on the front page, as well as a QR code containing a simple hyperlink to the user's VIVO profile. It also contains an HTML tag for each code, that can be embedded in a web page to display that code on other sites.

-<#-- todo: make VIVO API? Currently pasting Google API code into export area, this will be static and not change if VIVO data is updated. --> - -

How do I read a QR code?

- -

There are apps you can download for the iPhone and Android phones that allow you to use your phone's camera to interact with QR codes placed on objects in the real world.

- -

What can I do with a QR code?

- -

Anything! For a state-of-the-art business card, put your hyperlink QR code on the back of it. That way anyone with a properly-equipped smartphone can quickly go to your VIVO profile by simply pointing their camera at the code. Or put your vCard QR code on your office door to provide more contact information.

- diff --git a/webapp/src/main/webapp/templates/freemarker/body/harvester/fileharvest.ftl b/webapp/src/main/webapp/templates/freemarker/body/harvester/fileharvest.ftl index ebc22658..3f14411d 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/harvester/fileharvest.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/harvester/fileharvest.ftl @@ -25,7 +25,7 @@ function doHarvest() { document.getElementById("harvestButton").disabled = true; - document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().data_being_harvested}"; + document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().data_being_harvested?js_string}"; var request = createRequest(); request.onreadystatechange=function() { @@ -92,7 +92,7 @@ importedItems.appendChild(newLi); } - document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().harvest_complete}"; + document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().harvest_complete?js_string}"; } } diff --git a/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-2column.ftl b/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-2column.ftl index 5264d4b2..95231ad5 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-2column.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-2column.ftl @@ -51,7 +51,7 @@ <#else>

style="float:left;border-right:1px solid #A6B1B0;"> <#-- Label --> - <@p.label individual editable labelCount localesCount/> + <@p.label individual editable labelCount localesCount languageCount />

<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> @@ -170,20 +170,20 @@ var profileTypeData = { defaultProfileType: '${profileType!}' }; var i18nStrings = { - errorProcessingTypeChange: '${i18n().error_processing_type_change}', - displayLess: '${i18n().display_less}', - displayMoreEllipsis: '${i18n().display_more_ellipsis}', - showMoreContent: '${i18n().show_more_content}', - verboseTurnOff: '${i18n().verbose_turn_off}', - standardviewTooltipOne: '${i18n().standardview_tooltip_one}', - standardviewTooltipTwo: '${i18n().standardview_tooltip_two}', - researchAreaTooltipOne: '${i18n().research_area_tooltip_one}', - researchAreaTooltipTwo: '${i18n().research_area_tooltip_two}' + errorProcessingTypeChange: '${i18n().error_processing_type_change?js_string}', + displayLess: '${i18n().display_less?js_string}', + displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}', + showMoreContent: '${i18n().show_more_content?js_string}', + verboseTurnOff: '${i18n().verbose_turn_off?js_string}', + standardviewTooltipOne: '${i18n().standardview_tooltip_one?js_string}', + standardviewTooltipTwo: '${i18n().standardview_tooltip_two?js_string}', + researchAreaTooltipOne: '${i18n().research_area_tooltip_one?js_string}', + researchAreaTooltipTwo: '${i18n().research_area_tooltip_two?js_string}' }; var i18nStringsUriRdf = { - shareProfileUri: '${i18n().share_profile_uri}', - viewRDFProfile: '${i18n().view_profile_in_rdf}', - closeString: '${i18n().close}' + shareProfileUri: '${i18n().share_profile_uri?js_string}', + viewRDFProfile: '${i18n().view_profile_in_rdf?js_string}', + closeString: '${i18n().close?js_string}' }; @@ -209,5 +209,5 @@ ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl b/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl index b3707fee..fa2997ea 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl @@ -62,7 +62,7 @@
${individualImage}

style="float:left;border-right:1px solid #A6B1B0;"> <#-- Label --> - <@p.label individual editable labelCount localesCount/> + <@p.label individual editable labelCount localesCount languageCount />

<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> @@ -220,19 +220,19 @@ var profileTypeData = { defaultProfileType: '${profileType!}' }; var i18nStrings = { - errorProcessingTypeChange: '${i18n().error_processing_type_change}', - displayLess: '${i18n().display_less}', - displayMoreEllipsis: '${i18n().display_more_ellipsis}', - showMoreContent: '${i18n().show_more_content}', - verboseTurnOff: '${i18n().verbose_turn_off}', - quickviewTooltip: '${i18n().quickview_tooltip}', - researchAreaTooltipOne: '${i18n().research_area_tooltip_one}', - researchAreaTooltipTwo: '${i18n().research_area_tooltip_two}' + errorProcessingTypeChange: '${i18n().error_processing_type_change?js_string}', + displayLess: '${i18n().display_less?js_string}', + displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}', + showMoreContent: '${i18n().show_more_content?js_string}', + verboseTurnOff: '${i18n().verbose_turn_off?js_string}', + quickviewTooltip: '${i18n().quickview_tooltip?js_string}', + researchAreaTooltipOne: '${i18n().research_area_tooltip_one?js_string}', + researchAreaTooltipTwo: '${i18n().research_area_tooltip_two?js_string}' }; var i18nStringsUriRdf = { - shareProfileUri: '${i18n().share_profile_uri}', - viewRDFProfile: '${i18n().view_profile_in_rdf}', - closeString: '${i18n().close}' + shareProfileUri: '${i18n().share_profile_uri?js_string}', + viewRDFProfile: '${i18n().view_profile_in_rdf?js_string}', + closeString: '${i18n().close?js_string}' }; <#if editable> @@ -270,5 +270,5 @@ ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/body/individual/individual.ftl b/webapp/src/main/webapp/templates/freemarker/body/individual/individual.ftl index 6cfb473d..e6eea562 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/individual/individual.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/individual/individual.ftl @@ -33,10 +33,10 @@ <#include "individual-vitro.ftl"> diff --git a/webapp/src/main/webapp/templates/freemarker/body/individual/manageLabelsForIndividualAddForm.ftl b/webapp/src/main/webapp/templates/freemarker/body/individual/manageLabelsForIndividualAddForm.ftl index 55948085..f34c37d1 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/individual/manageLabelsForIndividualAddForm.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/individual/manageLabelsForIndividualAddForm.ftl @@ -28,16 +28,6 @@

- - diff --git a/webapp/src/main/webapp/templates/freemarker/body/orcid/orcidConfirm.ftl b/webapp/src/main/webapp/templates/freemarker/body/orcid/orcidConfirm.ftl index 1f33e623..1adfa40c 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/orcid/orcidConfirm.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/orcid/orcidConfirm.ftl @@ -125,7 +125,7 @@ span.completed {

<#if continueAppears> - ${i18n().orcid_button_step1}<#else>${i18n().orcid_button_step1}" class="submit"/> + ${i18n().orcid_button_step1}<#else>${i18n().orcid_button_step2}" class="submit"/> or ${i18n().orcid_return_to_vivo} diff --git a/webapp/src/main/webapp/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl b/webapp/src/main/webapp/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl index 2b114448..8bc7b4ad 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl @@ -23,7 +23,7 @@ <#assign coAuthorVisUrl = individual.coAuthorVisUrl()> <#assign mapOfScienceVisUrl = individual.mapOfScienceUrl()> - <#assign googleJSAPI = "https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22imagesparkline%22%5D%7D%5D%7D"> + <#assign googleJSAPI = "https://www.gstatic.com/charts/loader.js"> ${i18n().publications_in_vivo} diff --git a/webapp/src/main/webapp/templates/freemarker/body/partials/menupage/menupage-browse.ftl b/webapp/src/main/webapp/templates/freemarker/body/partials/menupage/menupage-browse.ftl deleted file mode 100644 index 5f94bcdb..00000000 --- a/webapp/src/main/webapp/templates/freemarker/body/partials/menupage/menupage-browse.ftl +++ /dev/null @@ -1,49 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for browsing individuals in class groups for menupages --> - -<#import "lib-string.ftl" as str> -

${i18n().browse_page_javascript_one} ${i18n().index_page} ${i18n().browse_page_javascript_two}

- - - - diff --git a/webapp/src/main/webapp/templates/freemarker/body/partials/shortview/view-search-default.ftl b/webapp/src/main/webapp/templates/freemarker/body/partials/shortview/view-search-default.ftl index 33db0830..be693ca2 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/partials/shortview/view-search-default.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/partials/shortview/view-search-default.ftl @@ -4,10 +4,8 @@ <#import "lib-vivo-properties.ftl" as p> -
${individual.name} <@p.displayTitle individual />

${individual.snippet}

-
diff --git a/webapp/src/main/webapp/templates/freemarker/body/search/search-error.ftl b/webapp/src/main/webapp/templates/freemarker/body/search/search-error.ftl deleted file mode 100644 index 3f08f55d..00000000 --- a/webapp/src/main/webapp/templates/freemarker/body/search/search-error.ftl +++ /dev/null @@ -1,16 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for displaying search error message --> - -<#if title??> -
-

${title?html}

-
- -
-

- ${message?html} -

-
-<#include "searchSelector.ftl"> -<#include "search-help.ftl" > diff --git a/webapp/src/main/webapp/templates/freemarker/body/search/search-help.ftl b/webapp/src/main/webapp/templates/freemarker/body/search/search-help.ftl deleted file mode 100644 index e892f96d..00000000 --- a/webapp/src/main/webapp/templates/freemarker/body/search/search-help.ftl +++ /dev/null @@ -1,49 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#if origination?has_content && origination == "helpLink"> -
-

Search Tips

-
- - Back to results - -<#else> -
-

Search Tips

-
- -
    -
  • Keep it simple! Use short, single terms unless your searches are returning too many results.
  • -
  • Use quotes to search for an entire phrase -- e.g., "protein folding".
  • -
  • Except for boolean operators, searches are not case-sensitive, so "Geneva" and "geneva" are equivalent
  • -
  • If you are unsure of the correct spelling, put ~ at the end of your search term -- e.g., cabage~ finds cabbage, steven~ finds Stephen and Stefan (as well as other similar names).
  • -
- - - - -${stylesheets.add('')} - diff --git a/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl b/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl deleted file mode 100644 index 83c45e9f..00000000 --- a/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl +++ /dev/null @@ -1,252 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for displaying paged search results --> - -

- -<#include "searchSelector.ftl"> - -<#escape x as x?html> -
${i18n().search_results_for} '${querytext}'
-
<#if classGroupName?has_content>${i18n().limited_to_type} '${classGroupName}'
-
<#if typeName?has_content>${i18n().limited_to_type} '${typeName}'
- - - - ${i18n().download_results} -<#-- --> -

- -${i18n().not_expected_results} -
- - <#-- Refinement links --> - <#if classGroupLinks?has_content && classGroupLinks?size gt 1> -
-

${i18n().display_only}

-
    - <#list classGroupLinks as link> -
  • ${link.text}(${link.count})
  • - -
-
- - - <#if classLinks?has_content && classLinks?size gt 1 > -
- <#if classGroupName?has_content> -

${i18n().limit} ${classGroupName} ${i18n().to}

- <#else> -

${i18n().limit_to}

- -
    - <#list classLinks as link> -
  • ${link.text}(${link.count})
  • - -
-
- - - -
- - <#if user.loggedIn> - - -
- - - - <#-- Search results --> -
    - <#list individuals as individual> -
  • - <@shortView uri=individual.uri viewContext="search" /> -
  • - -
- - - <#-- Paging controls --> - <#if (pagingLinks?size > 0)> -
- ${i18n().pages}: - <#if prevPage??> - <#list pagingLinks as link> - <#if link.url??> - ${link.text} - <#else> - ${link.text} <#-- no link if current page --> - - - <#if nextPage??> -
- -
- - <#-- VIVO OpenSocial Extension by UCSF --> - <#if openSocial??> - <#if openSocial.visible> -

OpenSocial

- - - - - - -
- - - -${stylesheets.add('', - '', - '')} - -${headScripts.add('', - '', - '' - )} - -${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addAssociatedConcept.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addAssociatedConcept.ftl index 32e47701..502afacd 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addAssociatedConcept.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addAssociatedConcept.ftl @@ -46,10 +46,10 @@
-

Concept (Type)

+

${i18n().concept_type}

-

Vocabulary Source

+

${i18n().vocabulary_source}

 
@@ -173,19 +173,19 @@ var vocabSpecificDisplay = {}; vocabSpecificDisplay["${vocab}"] = "${vocabSpecificDisplay[vocab]}"; var i18nStrings = { - vocServiceUnavailable: '${i18n().vocabulary_service_unavailable}', - noResultsFound: '${i18n().no_serch_results_found}', - defaultLabelTypeString: '${i18n().label_type}', - definitionString: '${i18n().definition_capitalized}', - bestMatchString: '${i18n().best_match}', - selectTermFromResults: '${i18n().select_term_from_results}', - selectVocSource: '${i18n().select_vocabulary_source_to_search}', - confirmTermDelete: '${i18n().confirm_term_deletion}', - errorTernNotRemoved: '${i18n().error_term_not_deleted}', + vocServiceUnavailable: '${i18n().vocabulary_service_unavailable?js_string}', + noResultsFound: '${i18n().no_serch_results_found?js_string}', + defaultLabelTypeString: '${i18n().label_type?js_string}', + definitionString: '${i18n().definition_capitalized?js_string}', + bestMatchString: '${i18n().best_match?js_string}', + selectTermFromResults: '${i18n().select_term_from_results?js_string}', + selectVocSource: '${i18n().select_vocabulary_source_to_search?js_string}', + confirmTermDelete: '${i18n().confirm_term_deletion?js_string}', + errorTernNotRemoved: '${i18n().error_term_not_deleted?js_string}', vocabSpecificLabels: vocabSpecificDisplay, - displayMoreEllipsis: '${i18n().display_more_ellipsis}', - displayLess: '${i18n().display_less}', - showMoreContent: '${i18n().show_more_content}' + displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}', + displayLess: '${i18n().display_less?js_string}', + showMoreContent: '${i18n().show_more_content?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addAuthorsToInformationResource.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addAuthorsToInformationResource.ftl index a75408a2..65ba3567 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addAuthorsToInformationResource.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addAuthorsToInformationResource.ftl @@ -185,14 +185,14 @@ var customFormData = { reorderUrl: '${urls.base}/edit/reorder' }; var i18nStrings = { - authorNameWrapperTitle: '${i18n().drag_drop_reorder_authors}', - reorderAuthorsAlert: '${i18n().reordering_authors_failed}', - removeAuthorshipMessage: '${i18n().confirm_author_removal}', - removeAuthorshipAlert: '${i18n().error_processing_author_request}', - authorTypeText: '${i18n().author_capitalized}', - organizationTypeText: '${i18n().organization_capitalized}', - helpTextSelect: '${i18n().select_an_existing}', - helpTextAdd: '${i18n().or_add_new_one}' + authorNameWrapperTitle: '${i18n().drag_drop_reorder_authors?js_string}', + reorderAuthorsAlert: '${i18n().reordering_authors_failed?js_string}', + removeAuthorshipMessage: '${i18n().confirm_author_removal?js_string}', + removeAuthorshipAlert: '${i18n().error_processing_author_request?js_string}', + authorTypeText: '${i18n().author_capitalized?js_string}', + organizationTypeText: '${i18n().organization_capitalized?js_string}', + helpTextSelect: '${i18n().select_an_existing?js_string}', + helpTextAdd: '${i18n().or_add_new_one?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addConceptThroughObjectPropertyAutoComplete.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addConceptThroughObjectPropertyAutoComplete.ftl index ae71bbb0..53d46de4 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addConceptThroughObjectPropertyAutoComplete.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addConceptThroughObjectPropertyAutoComplete.ftl @@ -77,7 +77,7 @@

- or + ${i18n().or} ${i18n().cancel_link}

@@ -124,9 +124,9 @@ Also multiple types parameter set to true only if more than one type returned--> baseHref: '${urls.base}/individual?uri=' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; <#-- diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorsToInformationResource.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorsToInformationResource.ftl index f271b2b9..6f5131ae 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorsToInformationResource.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorsToInformationResource.ftl @@ -156,13 +156,13 @@ var customFormData = { reorderUrl: '${urls.base}/edit/reorder' }; var i18nStrings = { - editorNameWrapperTitle: '${i18n().drag_drop_reorder_editors}', - reorderEditorsAlert: '${i18n().reordering_editors_failed}', - removeEditorshipMessage: '${i18n().confirm_editor_removal}', - removeEditorshipAlert: '${i18n().error_processing_editor_request}', - editorTypeText: '${i18n().editor_capitalized}', - helpTextSelect: '${i18n().select_an_existing}', - helpTextAdd: '${i18n().or_add_new_one}' + editorNameWrapperTitle: '${i18n().drag_drop_reorder_editors?js_string}', + reorderEditorsAlert: '${i18n().reordering_editors_failed?js_string}', + removeEditorshipMessage: '${i18n().confirm_editor_removal?js_string}', + removeEditorshipAlert: '${i18n().error_processing_editor_request?js_string}', + editorTypeText: '${i18n().editor_capitalized?js_string}', + helpTextSelect: '${i18n().select_an_existing?js_string}', + helpTextAdd: '${i18n().or_add_new_one?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorshipToPerson.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorshipToPerson.ftl index 8758ecb4..4e9cbef7 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorshipToPerson.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addEditorshipToPerson.ftl @@ -84,7 +84,6 @@ Set this flag on the input acUriReceiver where you would like this behavior to o <#assign docTypeOpts = editConfiguration.pageData.documentType /> - <#list pubTypeLiteralOptions?keys as key> @@ -325,9 +324,9 @@ Set this flag on the input acUriReceiver where you would like this behavior to o flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl index b19235ec..fa2ea79a 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addRoleToPersonTwoStage.ftl @@ -228,9 +228,9 @@ Set this flag on the input acUriReceiver where you would like this behavior to o flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/addUserDefinedConcept.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/addUserDefinedConcept.ftl index 1ea30283..54a0d3c0 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/addUserDefinedConcept.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/addUserDefinedConcept.ftl @@ -62,9 +62,9 @@ Set this flag on the input acUriReceiver where you would like this behavior to o flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/autoCompleteDataPropForm.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/autoCompleteDataPropForm.ftl index 6ea33e89..76800b5f 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/autoCompleteDataPropForm.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/autoCompleteDataPropForm.ftl @@ -71,9 +71,9 @@ Also multiple types parameter set to true only if more than one type returned--> defaultTypeName: '${propertyPublicName}' }; var i18nStrings = { - selectExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/defaultAddMissingIndividualForm.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/defaultAddMissingIndividualForm.ftl index 02f12b6b..429f1e7b 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/defaultAddMissingIndividualForm.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/defaultAddMissingIndividualForm.ftl @@ -74,7 +74,7 @@

- or + ${i18n().or} ${i18n().cancel_link}

diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/grantAdministeredBy.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/grantAdministeredBy.ftl index f3200465..e462254e 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/grantAdministeredBy.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/grantAdministeredBy.ftl @@ -114,9 +114,9 @@ var customFormData = { flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/grantHasContributor.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/grantHasContributor.ftl index 962e9012..a10068af 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/grantHasContributor.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/grantHasContributor.ftl @@ -157,9 +157,9 @@ var customFormData = { subjectName: '${editConfiguration.subjectName}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; $(document).ready(function() { diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/js/publicationToPersonUtils.js b/webapp/src/main/webapp/templates/freemarker/edit/forms/js/publicationToPersonUtils.js index 1aa81bb6..52fcdd7f 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/js/publicationToPersonUtils.js +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/js/publicationToPersonUtils.js @@ -146,9 +146,9 @@ var publicationToPersonUtils = { // hide everything, then show what's needed based on type // simpler in the event the user changes the type this.hideAllFields(); - var selectedType = this.typeSelector.find(':selected').text(); + var selectedType = this.typeSelector.find(':selected').val(); - if ( selectedType == 'Academic Article' ) { + if ( selectedType == 'http://purl.org/ontology/bibo/AcademicArticle' ) { // if the user has changed type, keep any relevant values and display the // acSelection as appropriate var ckForVal = this.getAcUriReceiverVal('collection'); @@ -189,7 +189,7 @@ var publicationToPersonUtils = { this.number.val(''); this.chapterNbr.val(''); } - else if ( selectedType == 'Chapter' ) { + else if ( selectedType == 'http://purl.org/ontology/bibo/Chapter' ) { // if the user has changed type, keep any relevant values and display the // acSelection as appropriate var ckForVal = this.getAcUriReceiverVal('book'); @@ -233,7 +233,7 @@ var publicationToPersonUtils = { this.startPage.val(''); this.endPage.val(''); } - else if ( selectedType == 'Book' || selectedType == 'Edited Book' ) { + else if ( selectedType == 'http://purl.org/ontology/bibo/Book' || selectedType == 'http://purl.org/ontology/bibo/EditedBook' ) { // if the user has changed type, keep any relevant values and display the // acSelection as appropriate var ckForVal = this.getAcUriReceiverVal('editor'); @@ -270,7 +270,7 @@ var publicationToPersonUtils = { this.endPage.val(''); this.chapterNbr.val(''); } - else if ( selectedType == 'Conference Paper' ) { + else if ( selectedType == 'http://vivoweb.org/ontology/core#ConferencePaper' ) { // if the user has changed type, keep any relevant values and display the // acSelection as appropriate ckForVal = this.getAcUriReceiverVal('conference'); @@ -310,7 +310,7 @@ var publicationToPersonUtils = { this.endPage.val(''); this.chapterNbr.val(''); } - else if ( selectedType == 'Conference Poster' || selectedType == 'Speech') { + else if ( selectedType == 'http://vivoweb.org/ontology/core#ConferencePoster' || selectedType == 'http://vivoweb.org/ontology/core#Speech') { // if the user has changed type, keep any relevant values and display the // acSelection as appropriate var ckForVal = this.getAcUriReceiverVal('conference'); diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/manageGrantsForIndividual.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/manageGrantsForIndividual.ftl index 0513a410..ebada87c 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/manageGrantsForIndividual.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/manageGrantsForIndividual.ftl @@ -48,8 +48,8 @@ var customFormData = { processingUrl: '${urls.base}/edit/primitiveRdfEdit' }; var i18nStrings = { - itemSuccessfullyExcluded: '${i18n().grant_successfully_excluded}', - errorExcludingItem: '${i18n().error_excluding_grant}' + itemSuccessfullyExcluded: '${i18n().grant_successfully_excluded?js_string}', + errorExcludingItem: '${i18n().error_excluding_grant?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/managePeopleForOrganization.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/managePeopleForOrganization.ftl index 041bf2fc..9171bf8b 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/managePeopleForOrganization.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/managePeopleForOrganization.ftl @@ -44,8 +44,8 @@ var customFormData = { processingUrl: '${urls.base}/edit/primitiveRdfEdit' }; var i18nStrings = { - itemSuccessfullyExcluded: '${i18n().person_successfully_excluded}', - errorExcludingItem: '${i18n().error_excluding_person}' + itemSuccessfullyExcluded: '${i18n().person_successfully_excluded?js_string}', + errorExcludingItem: '${i18n().error_excluding_person?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl index e767c652..70b72f5c 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/managePublicationsForIndividual.ftl @@ -61,8 +61,8 @@ var customFormData = { processingUrl: '${urls.base}/edit/primitiveRdfEdit' }; var i18nStrings = { - itemSuccessfullyExcluded: '${i18n().publication_successfully_excluded}', - errorExcludingItem: '${i18n().error_excluding_publication}' + itemSuccessfullyExcluded: '${i18n().publication_successfully_excluded?js_string}', + errorExcludingItem: '${i18n().error_excluding_publication?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/manageWebpagesForIndividual.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/manageWebpagesForIndividual.ftl index 436e7da9..83f95042 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/manageWebpagesForIndividual.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/manageWebpagesForIndividual.ftl @@ -70,10 +70,10 @@ var customFormData = { reorderUrl: '${urls.base}/edit/reorder' }; var i18nStrings = { - dragDropToReorderWebpages: '${i18n().drag_drop_to_reorder_webpages}', - webpageReorderingFailed: '${i18n().webpage_reordering_failed}', - confirmWebpageDeletion: '${i18n().confirm_webpage_deletion}', - errorRemovingWebpage: '${i18n().error_removing_webpage}' + dragDropToReorderWebpages: '${i18n().drag_drop_to_reorder_webpages?js_string}', + webpageReorderingFailed: '${i18n().webpage_reordering_failed?js_string}', + confirmWebpageDeletion: '${i18n().confirm_webpage_deletion?js_string}', + errorRemovingWebpage: '${i18n().error_removing_webpage?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationAdministersGrant.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationAdministersGrant.ftl index a01c35a7..81091901 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationAdministersGrant.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationAdministersGrant.ftl @@ -114,9 +114,9 @@ var customFormData = { flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationForTraining.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationForTraining.ftl index 0ed1e9ab..773717ed 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationForTraining.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationForTraining.ftl @@ -203,9 +203,9 @@ var customFormData = { subjectName: '${editConfiguration.subjectName}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; $(document).ready(function() { diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationHasPositionHistory.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationHasPositionHistory.ftl index 2fed809f..d7bc8bc7 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationHasPositionHistory.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/organizationHasPositionHistory.ftl @@ -165,9 +165,9 @@ Set this flag on the input acUriReceiver where you would like this behavior to o }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl index c798b0ae..547e293a 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdviseeRelationship.ftl @@ -217,11 +217,11 @@ var customFormData = { <#--Removing this line for now from above : newUriSentinel : '${newUriSentinel}',--> <#--Also removed this: ,doNotRemoveOriginalObject: '${doNotRemoveOriginalObject}'--> var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', - advisingString: '${i18n().advising}', - advisingRelationshipString: '${i18n().advising_relationship}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', + advisingString: '${i18n().advising?js_string}', + advisingRelationshipString: '${i18n().advising_relationship?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl index 09a3c546..3f7410f2 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAdvisorRelationship.ftl @@ -217,11 +217,11 @@ var customFormData = { <#--Removing this line for now from above : newUriSentinel : '${newUriSentinel}',--> <#--Also removed this: ,doNotRemoveOriginalObject: '${doNotRemoveOriginalObject}'--> var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', - advisingString: '${i18n().advising}', - advisingRelationshipString: '${i18n().advising_relationship}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', + advisingString: '${i18n().advising?js_string}', + advisingRelationshipString: '${i18n().advising_relationship?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAwardOrHonor.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAwardOrHonor.ftl index 6cc9391c..bd239d18 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAwardOrHonor.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasAwardOrHonor.ftl @@ -195,10 +195,10 @@ var customFormData = { flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnOrganization: '${i18n().select_or_create_organization}', - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', + selectAnOrganization: '${i18n().select_or_create_organization?js_string}', + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasEducationalTraining.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasEducationalTraining.ftl index b29e0e4c..8458e93b 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasEducationalTraining.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasEducationalTraining.ftl @@ -224,9 +224,9 @@ var customFormData = { subjectName: '${editConfiguration.subjectName}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; $(document).ready(function() { diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasIssuedCredential.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasIssuedCredential.ftl index f0a18cc6..56e665af 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasIssuedCredential.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasIssuedCredential.ftl @@ -199,9 +199,9 @@ var customFormData = { flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}', + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}', }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasPositionHistory.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasPositionHistory.ftl index 963af616..45e0eeef 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasPositionHistory.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/personHasPositionHistory.ftl @@ -183,9 +183,9 @@ var customFormData = { flagClearLabelForExisting: '${flagClearLabelForExisting}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/edit/forms/projectHasParticipant.ftl b/webapp/src/main/webapp/templates/freemarker/edit/forms/projectHasParticipant.ftl index b39bad10..7fdea09f 100644 --- a/webapp/src/main/webapp/templates/freemarker/edit/forms/projectHasParticipant.ftl +++ b/webapp/src/main/webapp/templates/freemarker/edit/forms/projectHasParticipant.ftl @@ -153,9 +153,9 @@ var customFormData = { subjectName: '${editConfiguration.subjectName}' }; var i18nStrings = { - selectAnExisting: '${i18n().select_an_existing}', - orCreateNewOne: '${i18n().or_create_new_one}', - selectedString: '${i18n().selected}' + selectAnExisting: '${i18n().select_an_existing?js_string}', + orCreateNewOne: '${i18n().or_create_new_one?js_string}', + selectedString: '${i18n().selected?js_string}' }; $(document).ready(function() { diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/capabilitymap/capabilityMap.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/capabilitymap/capabilityMap.ftl index dc615cf9..75d76d15 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/capabilitymap/capabilityMap.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/capabilitymap/capabilityMap.ftl @@ -11,12 +11,27 @@ ${stylesheets.add( '', '', '', - '' + '', + '' )}
-

Capability Map

-

Build a ‘first pass’ capability map by typing in a search term that could be said to represent a broad research capability.

+

${i18n().capability_map}

+

${i18n().cap_map_intro}

@@ -43,9 +58,9 @@ ${stylesheets.add( - - - + + +

@@ -56,56 +71,27 @@ ${stylesheets.add(

- Welcome to the Capability Mapping tool. - This tool visualises how researchers relate to other - researchers via search terms. + ${i18n().cap_map_text_intro}

-

Getting Started

+

${i18n().cap_map_text_headline1}

- Enter a research area into the search field above and press 'Search'. - The resulting diagram displays the search term, rendered in orange, - connected to the blue group of researchers that are active in that area. - Enter another search term to see how researchers from both searches relate. - Keep adding search terms to build a capability map. + ${i18n().cap_map_text1}

- Tip: you can expand a broad search term into smaller concepts - by clicking ‘search and expand’. + ${i18n().cap_map_text2}

-

Interacting with the visualisation

+

${i18n().cap_map_text_headline2}

- By clicking on any node in the visualisation, - additional information can be viewed in the - 'Info' tab on the right-hand side. - For groups of people, the participants in the group - and their information can be viewed, - and individual researchers can be removed from the graph. - Selecting a search term will display all attached groups. - Under each group full information for each person is retrieved, - and the number of matching grants and publications - for each researcher within the mapped capabilities is shown. - Clicking on a researcher's name will lead to the original search - results. + ${i18n().cap_map_text3}

-

Visual cues

+

${i18n().cap_map_text_headline3}

- To make the visualisation easier to read, - search terms and groups are scaled according - to the number of results returned. - Groups are also given different shades - according to the number of connected search terms. - The darker the shade, the more search terms a group is connected to. + ${i18n().cap_map_text4}

-

Advanced features

-

Changing the cutoff value

+

${i18n().cap_map_text_headline4}

+

${i18n().cap_map_text_headline5}

- The amount of researchers retrieved for each search term - for is limited by the cutoff value in the search form - (10 by default). - Increasing this cutoff will increase the likelihood - of an intersection between different search terms. - This will also increase the complexity of the graph, - however, and may make it difficult to identify patterns. + ${i18n().cap_map_text5}

@@ -118,28 +104,32 @@ ${stylesheets.add(
-

Current search terms

+

${i18n().cap_map_cur_search_terms}

    -
  • This panel displays a list of the search terms currently - on the graph. Search for something to begin.
  • +
  • + ${i18n().cap_map_text6} +

- Key +

${i18n().cap_map_key1}
+
${i18n().cap_map_key2}
+
${i18n().cap_map_key3}
+
${i18n().cap_map_key4}
+
${i18n().cap_map_key5}
+
${i18n().cap_map_key6}

- This panel displays information about individual - search terms and groups. Click on a group to display - its information. + ${i18n().cap_map_text7}

@@ -164,4 +154,3 @@ ${stylesheets.add(
- diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipSparklineContent.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipSparklineContent.ftl index 46b0b2ec..682a6fac 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipSparklineContent.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipSparklineContent.ftl @@ -159,17 +159,17 @@ var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedShortSparks; if (totalPubs === 1) { - var pubDisplay = "${i18n().co_author}"; + var pubDisplay = "${i18n().co_author?js_string}"; } else { - var pubDisplay = "${i18n().co_authors}"; + var pubDisplay = "${i18n().co_authors?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalPubs).css("font-weight", "bold").attr("class", "grey").append(" " + pubDisplay + "
"); - var sparksText = ' ${i18n().within_last_10_years}'; + var sparksText = ' ${i18n().within_last_10_years?js_string}'; if (totalPubs !== totalPublicationCount) { - sparksText += ' (' + totalPublicationCount + ' ${i18n().total})'; + sparksText += ' (' + totalPublicationCount + ' ${i18n().total?js_string})'; } <#else> @@ -188,22 +188,22 @@ var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedSparks; if ( totalPubs == 1 ) { - var pubDisplay = "${i18n().co_author}"; + var pubDisplay = "${i18n().co_author?js_string}"; } else { - var pubDisplay = "${i18n().co_authors}"; + var pubDisplay = "${i18n().co_authors?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalPubs).css("font-weight", "bold").attr("class", "grey").append(" " + pubDisplay + "
"); - var sparksText = ' ${i18n().from} ${sparklineVO.earliestYearConsidered?c}' + var sparksText = ' ${i18n().from?js_string} ${sparklineVO.earliestYearConsidered?c}' + ' - ${sparklineVO.latestRenderedPublicationYear?c}'; if (totalPubs !== totalPublicationCount) { - sparksText += ' (' + totalPublicationCount + ' ${i18n().total})'; + sparksText += ' (' + totalPublicationCount + ' ${i18n().total?js_string})'; } if (totalPublicationCount) { - sparksText += '
(.CSV ${i18n().file_capitalized}) '; + sparksText += '
(.CSV ${i18n().file_capitalized}) '; } @@ -271,7 +271,13 @@ } - drawCoauthorsSparklineVisualization(sparklineImgTD); + google.charts.load('current', { + callback: function() { + drawCoauthorsSparklineVisualization(sparklineImgTD) + }, + packages: ['bar', 'corechart', 'table', 'imagesparkline'] + }); + }); diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipStandaloneActivator.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipStandaloneActivator.ftl index fe1d8173..b6a6e1ee 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipStandaloneActivator.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/coauthorship/coAuthorshipStandaloneActivator.ftl @@ -1,6 +1,6 @@ <#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#assign googleJSAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleJSAPI = 'https://www.gstatic.com/charts/loader.js'> ${headScripts.add('')} ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationSparklineContent.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationSparklineContent.ftl index c4149708..762c2f9e 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationSparklineContent.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationSparklineContent.ftl @@ -161,17 +161,17 @@ if (totalGrants === 1) { - var grantDisplay = "${i18n().co_investigator}"; + var grantDisplay = "${i18n().co_investigator?js_string}"; } else { - var grantDisplay = "${i18n().co_investigators}"; + var grantDisplay = "${i18n().co_investigators?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalGrants).css("font-weight", "bold").attr("class", "grey").append(" " + grantDisplay + "
"); - var sparksText = ' ${i18n().within_last_10_years}'; + var sparksText = ' ${i18n().within_last_10_years?js_string}'; if (totalGrants !== totalGrantCount) { - sparksText += ' (' + totalGrantCount + ' ${i18n().total})'; + sparksText += ' (' + totalGrantCount + ' ${i18n().total?js_string})'; } <#else> @@ -190,18 +190,18 @@ var totalGrants = onlyUnknownYearGrants ? unknownYearGrantCounts : renderedSparks; if (totalGrants === 1) { - var grantDisplay = "${i18n().co_investigator}"; + var grantDisplay = "${i18n().co_investigator?js_string}"; } else { - var grantDisplay = "${i18n().co_investigators}"; + var grantDisplay = "${i18n().co_investigators?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalGrants).css("font-weight", "bold").attr("class", "grey").append(" " + grantDisplay + "
"); - var sparksText = ' ${i18n().from} ${sparklineVO.earliestYearConsidered?c}' + var sparksText = ' ${i18n().from?js_string} ${sparklineVO.earliestYearConsidered?c}' + ' through ${sparklineVO.latestRenderedGrantYear?c}'; if (totalGrants !== totalGrantCount) { - sparksText += ' (' + totalGrantCount + ' ${i18n().total})'; + sparksText += ' (' + totalGrantCount + ' ${i18n().total?js_string})'; } if (totalGrantCount) { @@ -273,8 +273,12 @@ table.prependTo('#${sparklineContainerID}'); } - - drawCoInvestigatorsSparklineVisualization(sparklineImgTD); + google.charts.load('current', { + callback: function() { + drawCoInvestigatorsSparklineVisualization(sparklineImgTD) + }, + packages: ['bar', 'corechart', 'table', 'imagesparkline'] + }); }); diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationStandaloneActivator.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationStandaloneActivator.ftl index 7d439417..79d7012d 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationStandaloneActivator.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/copi/coInvestigationStandaloneActivator.ftl @@ -1,6 +1,6 @@ <#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#assign googleJSAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleJSAPI = 'https://www.gstatic.com/charts/loader.js'> ${headScripts.add('')} ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/entitycomparison/entityComparisonSetup.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/entitycomparison/entityComparisonSetup.ftl index 9e79169f..fac30ed6 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/entitycomparison/entityComparisonSetup.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/entitycomparison/entityComparisonSetup.ftl @@ -34,25 +34,25 @@ <#assign temporalGraphDownloadCSVCommonURL = '${urls.base}${dataVisualizationURLRoot}?uri=${organizationURI}&labelField=label'> -<#assign publicationParameter = { "name": "${i18n().publication}", - "pluralName": "${i18n().publications}", - "verbName": "${i18n().published}", - "dropDownText": "${i18n().by_publications}", +<#assign publicationParameter = { "name": "publication", + "pluralName": "${i18n().publications?js_string}", + "verbName": "${i18n().published?js_string}", + "dropDownText": "${i18n().by_publications?js_string}", "viewLink": "${organizationPublicationTemporalGraphURL}", "viewBaseLink": "${subOrganizationPublicationTemporalGraphCommonURL}", "dataLink": "${organizationPublicationTemporalGraphDataURL}", "csvLink": "${temporalGraphDownloadCSVCommonURL}&vis=entity_comparison", - "value": "${i18n().publications}" }> + "value": "${i18n().publications?js_string}" }> -<#assign grantParameter = { "name": "${i18n().grant}", - "pluralName": "${i18n().grants}", - "verbName": "${i18n().granted}", - "dropDownText": "${i18n().by_grants}", +<#assign grantParameter = { "name": "grant", + "pluralName": "${i18n().grants?js_string}", + "verbName": "${i18n().granted?js_string}", + "dropDownText": "${i18n().by_grants?js_string}", "viewLink": "${organizationGrantTemporalGraphURL}", "viewBaseLink": "${subOrganizationGrantTemporalGraphCommonURL}", "dataLink": "${organizationGrantTemporalGraphDataURL}", "csvLink": "${temporalGraphDownloadCSVCommonURL}&vis=entity_grant_count", - "value": "${i18n().grants}" }> + "value": "${i18n().grants?js_string}" }> <#assign parameterOptions = [publicationParameter, grantParameter]> @@ -70,68 +70,68 @@ we will use rev 293 (dev build version) of the flot & excanvas files. diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantCountStandaloneActivator.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantCountStandaloneActivator.ftl index 72974e52..6a41be45 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantCountStandaloneActivator.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantCountStandaloneActivator.ftl @@ -1,6 +1,6 @@ <#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#assign googleJSAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleJSAPI = 'https://www.gstatic.com/charts/loader.js'> ${headScripts.add('')} ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantSparklineContent.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantSparklineContent.ftl index 315259e9..543a68bb 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantSparklineContent.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/grant/personGrantSparklineContent.ftl @@ -156,17 +156,17 @@ var totalGrants = onlyUnknownYearGrants ? unknownYearGrantCounts : renderedShortSparks; if (totalGrants === 1) { - var grantDisplay = "${i18n().grant}"; + var grantDisplay = "${i18n().grant?js_string}"; } else { - var grantDisplay = "${i18n().grants}"; + var grantDisplay = "${i18n().grants?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalGrants).css("font-weight", "bold").attr("class", "grey").append(" " + grantDisplay + "
"); - var sparksText = ' ${i18n().within_last_10_years}'; + var sparksText = ' ${i18n().within_last_10_years?js_string}'; if (totalGrants !== totalGrantCount) { - sparksText += ' (' + totalGrantCount + ' ${i18n().total})'; + sparksText += ' (' + totalGrantCount + ' ${i18n().total?js_string})'; } <#else> @@ -185,9 +185,9 @@ var totalGrants = onlyUnknownYearGrants ? unknownYearGrantCounts : renderedSparks; if (totalGrants === 1) { - var grantDisplay = "${i18n().grant}"; + var grantDisplay = "${i18n().grant?js_string}"; } else { - var grantDisplay = "${i18n().grants}"; + var grantDisplay = "${i18n().grants?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalGrants).css("font-weight", "bold").attr("class", "grey").append(" " + grantDisplay + "
"); @@ -196,7 +196,7 @@ + ' through ${sparklineVO.latestRenderedGrantYear?c}
'; if (totalGrants !== totalGrantCount) { - sparksText += ' (' + totalGrantCount + ' ${i18n().total})'; + sparksText += ' (' + totalGrantCount + ' ${i18n().total?js_string})'; } if (totalGrantCount) { @@ -267,7 +267,12 @@ table.prependTo('#${sparklineContainerID}'); } - drawGrantCountVisualization(sparklineImgTD); + google.charts.load('current', { + callback: function() { + drawGrantCountVisualization(sparklineImgTD) + }, + packages: ['bar', 'corechart', 'table', 'imagesparkline'] + }); }); diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/aboutMapOfScience.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/aboutMapOfScience.ftl deleted file mode 100644 index 48253410..00000000 --- a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/aboutMapOfScience.ftl +++ /dev/null @@ -1,52 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#assign aboutImagesRoot = '${urls.images}/visualization/mapofscience/about/'> - -

About VIVO's Map of Science Visualization

-

Reference Basemap

-

The VIVO Map of Science visualization uses the UCSD map of science and classification -system that was computed using paper-level data from about 25,000 journals from Elsevier's -Scopus and Clarivate Analytics' Web of Science (WoS) for the years 2001-2010. The UCSD map -of science assigns the 25,000 journals to 554 subdisciplines that are further aggregated -into 13 main disciplines of science. In the map, each discipline has a distinct color -(green for 'Biology', brown for 'Earth Sciences', etc.) and a label. (Sub)disciplines that -are similar closer to one another on the map. (Sub)disciplines that are especially similar -are connected by grey lines.

- -

Data Overlay

-

Publication activity of a university, organization, or person can be overlaid on the -map to generate expertise profiles. The process is as follows: (1) The set of unique -journals is identified, (2) the number of times each journal served as a publication venue -is calculated, and (3) the area size of the 13 disciplines and 554 subdisciplines is -calculated based on these journal publication venue counts. Note that some journals are -associated with exactly one (sub)discipline while others, e.g., interdisciplinary ones like -Science or Nature, are fractionally associated with multiple -(sub)disciplines. Subdisciplines inherit the colors of their parent disciplines. -(Sub)disciplines without any associated publications are given in gray.

- - - - -

Expertise Profile Comparison Map

-

Publication activity of up to three organizations or persons can be compared via "Compare -organizations." In the table on the left, select up to three organizations. The expertise -profile of each organizations will be represented as data overlay. Each organizations is -represented in a distinct color and a top-10 list of subdisciplines with the highest number -of publications is given below the comparison map. Data can be saved as CSV file.

- - - -

Interactivity

-

The map can be explored at two levels-by 13 disciplines or 554 subdisciplines. Clicking -on a node in the map brings up the number of fractionally associated journal publications -and the percentage of publications mapped to this (sub)discipline. Hover over a discipline -in the table on the left to see what circles it corresponds to on the map. Use slider below -map, on the right to reduce number of subdisciplines shown to improve legibility

- -

Links

-

For more information on the UCSD map of science and classification system, see -https://doi.org/10.1371/journal.pone.0039464. -For other maps of science, see -http://scimaps.org and -http://mapofscience.com.

diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceSetup.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceSetup.ftl index 249cdd91..4d6d6c56 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceSetup.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceSetup.ftl @@ -67,43 +67,43 @@ var entityMapOfScienceSubDisciplineCSVURLPrefix = "${urls.base}${dataVisualizati var entityMapOfScienceDisciplineCSVURL = "${entityMapOfScienceDisciplineCSVURL}"; var entityMapOfScienceSubDisciplineCSVURL = "${entityMapOfScienceSubDisciplineCSVURL}"; var i18nStrings = { - firstString: '${i18n().vis_first_link}', - lastString: '${i18n().vis_last_link}', - previousString: '${i18n().vis_previous_link}', - nextString: '${i18n().vis_next_link}', - organizationsString: '${i18n().organizations_capitalized}', - peopleString: '${i18n().people_capitalized}', - infoIconString: '${i18n().info_icon}', - entityTypeString: '${i18n().entity_type}', - organizationString: '${i18n().organization_capitalized}', - personString: '${i18n().person_capitalized}', - numberOfPubs: '${i18n().of_pubs}', - maxNbrForComp: '${i18n().max_nbr_for_comp}', - noMatchingScienceAreas: '${i18n().no_matching_science_areas}', - clearSearchQuery: '${i18n().clear_search_query}', - saveAllAsCSV: '${i18n().save_all_as_csv}', - drillDownString: '${i18n().drill_down}', - subdisciplinesString: '${i18n().subdisciplines}', - disciplinesString: '${i18n().disciplines}', - scienceAreaLevel: '${i18n().science_area_level}', - ofActivityString: '${i18n().of_activity}', - subdisciplinesLower: '${i18n().subdisciplines_lower}', - disciplinesLower: '${i18n().disciplines_lower}', - showDisciplineLabels: '${i18n().show_discipline_labels}', - noAttributedPubs: '${i18n().no_attributed_publications}', - noneOfThe: '${i18n().none_of_the}', - pubsAttributedTo: '${i18n().publications_attributed_to}', - beenScienceLocated: '${i18n().been_science_located}', - pubAttributedTo: '${i18n().publication_attributed_to}', - notScienceLocated: '${i18n().not_science_located}', - publicationsString: '${i18n().publications}', - publicationString: '${i18n().publication}', - noJournalInformation: '${i18n().no_journal_information}', - noMatchingMapLocation: '${i18n().no_matching_map_location}', - loadingDataFor: '${i18n().loading_data_for}', - mapBeingRefreshed: '${i18n().map_being_refreshed_msg}', - publicationsPubs: '${i18n().publication_pubs}', - percentActivity: '${i18n().percent_activity}' + firstString: '${i18n().vis_first_link?js_string}', + lastString: '${i18n().vis_last_link?js_string}', + previousString: '${i18n().vis_previous_link?js_string}', + nextString: '${i18n().vis_next_link?js_string}', + organizationsString: '${i18n().organizations_capitalized?js_string}', + peopleString: '${i18n().people_capitalized?js_string}', + infoIconString: '${i18n().info_icon?js_string}', + entityTypeString: '${i18n().entity_type?js_string}', + organizationString: '${i18n().organization_capitalized?js_string}', + personString: '${i18n().person_capitalized?js_string}', + numberOfPubs: '${i18n().of_pubs?js_string}', + maxNbrForComp: '${i18n().max_nbr_for_comp?js_string}', + noMatchingScienceAreas: '${i18n().no_matching_science_areas?js_string}', + clearSearchQuery: '${i18n().clear_search_query?js_string}', + saveAllAsCSV: '${i18n().save_all_as_csv?js_string}', + drillDownString: '${i18n().drill_down?js_string}', + subdisciplinesString: '${i18n().subdisciplines?js_string}', + disciplinesString: '${i18n().disciplines?js_string}', + scienceAreaLevel: '${i18n().science_area_level?js_string}', + ofActivityString: '${i18n().of_activity?js_string}', + subdisciplinesLower: '${i18n().subdisciplines_lower?js_string}', + disciplinesLower: '${i18n().disciplines_lower?js_string}', + showDisciplineLabels: '${i18n().show_discipline_labels?js_string}', + noAttributedPubs: '${i18n().no_attributed_publications?js_string}', + noneOfThe: '${i18n().none_of_the?js_string}', + pubsAttributedTo: '${i18n().publications_attributed_to?js_string}', + beenScienceLocated: '${i18n().been_science_located?js_string}', + pubAttributedTo: '${i18n().publication_attributed_to?js_string}', + notScienceLocated: '${i18n().not_science_located?js_string}', + publicationsString: '${i18n().publications?js_string}', + publicationString: '${i18n().publication?js_string}', + noJournalInformation: '${i18n().no_journal_information?js_string}', + noMatchingMapLocation: '${i18n().no_matching_map_location?js_string}', + loadingDataFor: '${i18n().loading_data_for?js_string}', + mapBeingRefreshed: '${i18n().map_being_refreshed_msg?js_string}', + publicationsPubs: '${i18n().publication_pubs?js_string}', + percentActivity: '${i18n().percent_activity?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceTooltips.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceTooltips.ftl deleted file mode 100644 index df9aaac1..00000000 --- a/webapp/src/main/webapp/templates/freemarker/visualization/mapOfScience/mapOfScienceTooltips.ftl +++ /dev/null @@ -1,70 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- START TOOLTIP TEXT --> - - - - - - - - - - - - - - -<#-- COMPARISON TOOLTIP TEXT --> - - - - -<#-- END TOOLTIP TEXT --> diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coAuthorPersonLevelD3.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coAuthorPersonLevelD3.ftl index 0de27ad1..ee785e41 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coAuthorPersonLevelD3.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coAuthorPersonLevelD3.ftl @@ -17,7 +17,7 @@ <#assign egoCoAuthorsListDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&vis_mode=coauthors'> <#assign egoCoAuthorshipNetworkDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&vis_mode=coauthor_network_download'> -<#assign googleVisualizationAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleVisualizationAPI = 'https://www.gstatic.com/charts/loader.js'> <#assign coAuthorPersonLevelJavaScript = '${urls.base}/js/visualization/coauthorship/coauthorship-personlevel.js'> <#assign commonPersonLevelJavaScript = '${urls.base}/js/visualization/personlevel/person-level.js'> @@ -39,16 +39,16 @@ var visualizationDataRoot = "${dataVisualizationURLRoot}"; // --> var i18nStringsCoauthorship = { - coAuthorsString: '${i18n().co_authors_capitalized}', - authorString: '${i18n().author_capitalized}', - publicationsWith: '${i18n().publications_with}', - publicationsString: "${i18n().through_today}", - coauthorsString: '${i18n().co_author_s_capitalized}' + coAuthorsString: '${i18n().co_authors_capitalized?js_string}', + authorString: '${i18n().author_capitalized?js_string}', + publicationsWith: '${i18n().publications_with?js_string}', + publicationsString: '${i18n().through_today?js_string}', + coauthorsString: '${i18n().co_author_s_capitalized?js_string}' }; var i18nStringsPersonLvl = { - fileCapitalized: '${i18n().file_capitalized}', - contentRequiresFlash: '${i18n().content_requires_flash}', - getFlashString: '${i18n().get_flash}' + fileCapitalized: '${i18n().file_capitalized?js_string}', + contentRequiresFlash: '${i18n().content_requires_flash?js_string}', + getFlashString: '${i18n().get_flash?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coPIPersonLevelD3.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coPIPersonLevelD3.ftl index fadfb334..e2845a98 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coPIPersonLevelD3.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/personlevel/coPIPersonLevelD3.ftl @@ -21,7 +21,7 @@ <#assign coAuthorIcon = '${urls.images}/visualization/coauthorship/co_author_icon.png'> -<#assign googleVisualizationAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleVisualizationAPI = 'https://www.gstatic.com/charts/loader.js'> <#assign coInvestigatorPersonLevelJavaScript = '${urls.base}/js/visualization/coPIship/coPIship-person-level.js'> <#assign commonPersonLevelJavaScript = '${urls.base}/js/visualization/personlevel/person-level.js'> @@ -42,16 +42,16 @@ var visualizationDataRoot = "${dataVisualizationURLRoot}"; // --> var i18nStringsCoPi = { - coInvestigatorString: '${i18n().co_investigators_capitalized}', - investigatorString: '${i18n().investigator_capitalized}', - grantsWithString: '${i18n().grants_with}', - grantsCapitalized: '${i18n().grant_s_capitalized}', - coInvestigatorCapitalized: '${i18n().co_investigator_s_capitalized}' + coInvestigatorString: '${i18n().co_investigators_capitalized?js_string}', + investigatorString: '${i18n().investigator_capitalized?js_string}', + grantsWithString: '${i18n().grants_with?js_string}', + grantsCapitalized: '${i18n().grant_s_capitalized?js_string}', + coInvestigatorCapitalized: '${i18n().co_investigator_s_capitalized?js_string}' }; var i18nStringsPersonLvl = { - fileCapitalized: '${i18n().file_capitalized}', - contentRequiresFlash: '${i18n().content_requires_flash}', - getFlashString: '${i18n().get_flash}' + fileCapitalized: '${i18n().file_capitalized?js_string}', + contentRequiresFlash: '${i18n().content_requires_flash?js_string}', + getFlashString: '${i18n().get_flash?js_string}' }; diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountNoSparkline.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountNoSparkline.ftl index 974ec0a8..ce1bfc8b 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountNoSparkline.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountNoSparkline.ftl @@ -63,7 +63,7 @@ if ( !onlyUnknownYearPublications ) { if ( td1Text == tenYearCount ) { - td2Text += "${i18n().last_ten_full_years} " ; + td2Text += "${i18n().last_ten_full_years?js_string} " ; } else { td2Text += "" + tenYearCount + " ${i18n().last_ten_full_years} " ; diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountStandaloneActivator.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountStandaloneActivator.ftl index c9c772c2..294fc29e 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountStandaloneActivator.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationCountStandaloneActivator.ftl @@ -1,6 +1,6 @@ <#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#assign googleJSAPI = 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign googleJSAPI = 'https://www.gstatic.com/charts/loader.js'> ${headScripts.add(googleJSAPI)} ${scripts.add('')} diff --git a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl index d83f6c47..b8c88e6a 100644 --- a/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl +++ b/webapp/src/main/webapp/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl @@ -158,9 +158,9 @@ var sparksText = ""; if ( !onlyUnknownYearPublications ) { - $('#${sparklineContainerID} td.sparkline_number').text(totalPubs + " ${i18n().last_ten_full}").attr("class", "grey-text"); + $('#${sparklineContainerID} td.sparkline_number').text(totalPubs + " ${i18n().last_ten_full?js_string}").attr("class", "grey-text"); - sparksText += "${i18n().years}"; + sparksText += "${i18n().years?js_string}"; if (totalPubs !== totalPublicationCount) { //sparksText += ' (' + totalPublicationCount + ' ${i18n().total})' ; @@ -190,18 +190,18 @@ var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedSparks; if ( totalPubs == 1 ) { - var pubDisplay = "${i18n().publication}"; + var pubDisplay = "${i18n().publication?js_string}"; } else { - var pubDisplay = "${i18n().publications}"; + var pubDisplay = "${i18n().publications?js_string}"; } $('#${sparklineContainerID} td.sparkline_number').text(totalPubs).attr("class", "grey-text").append(" "+ pubDisplay +"
"); - var sparksText = ' ${i18n().from} ${sparklineVO.earliestYearConsidered?c}' + var sparksText = ' ${i18n().from?js_string} ${sparklineVO.earliestYearConsidered?c}' + ' - ${sparklineVO.latestRenderedPublicationYear?c}'; if (totalPubs !== totalPublicationCount) { - sparksText += ' (' + totalPublicationCount + ' ${i18n().total})'; + sparksText += ' (' + totalPublicationCount + ' ${i18n().total?js_string})'; } if (totalPublicationCount) { @@ -272,7 +272,12 @@ } - drawPubCountVisualization(sparklineImgTD); + google.charts.load('current', { + callback: function() { + drawPubCountVisualization(sparklineImgTD) + }, + packages: ['bar', 'corechart', 'table', 'imagesparkline'] + }); }); diff --git a/webapp/src/main/webapp/themes/iph/css/iph.css b/webapp/src/main/webapp/themes/iph/css/iph.css deleted file mode 100644 index 637c7189..00000000 --- a/webapp/src/main/webapp/themes/iph/css/iph.css +++ /dev/null @@ -1,3916 +0,0 @@ -/* $This file is distributed under the terms of the license in LICENSE$ */ - -@charset "UTF-8"; -/* CSS Document */ - -/* Tell the browser to render HTML 5 elements as block */ -header, -hgroup, -section, -nav, -article, -aside, -footer{ - display: block; -} -time{ - font-weight: normal; -} -html, -body { - padding: 0; - height: 100%; /* needed for container min-height */ - font-family: "IPH Astra Serif","Roboto","IPH Serif","Lucida Sans Unicode","Lucida Grande", Geneva, helvetica, sans-serif; - height: auto !important; /* real browsers */ - height: 100%; /* IE6: treaded as min-height*/; - min-height: 100%; /* real browsers */ - margin: 0 auto; - font-size: 16px; -} -body { - position: absolute; - top: 0px; - left: 0px; - min-width: 700px; - max-width: 1920px; - width: 100%; - height: 200px; - display: flex; - flex-direction: column; - flex-wrap: nowrap; - justify-content: center; -} -a { - color: #000000; - text-decoration: none; - font-size: 1.2rem; -} -a:hover { - color: #8B4513; -} - -h2 a:hover, -h2 a:active, -ul#header-nav a:link, -ul#header-nav a:visited, -.pagination.menupage li a { - text-decoration: none; -} -em { - font-style: italic; -} -/* h1,h2,h3,h4,h5,h6 ------> */ -h2 { - padding: 10px 0 12px 0; - margin: 0; - font-size: 1.375em; - color: #000000; - line-height: 1.5em; - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -h2 a { - color: #8B4513; -} -h2 a:link, -h2 a:visited { - text-decoration: underline; -} -h3 { - padding: 10px 0 12px 0; - margin: 0; - font-size: 1.125em; - color: #8B4513; -} -h4 { - padding: 10px 0 12px 0; - margin: 0; - font-size: 1em; - color: #064d68; -} -h5 { - padding: 10px 0 12px 0; - margin: 0; - font-size: .875em; - color: #8B4513; -} -/* -------------------------------------------------> */ -/* EDITING STYLES ----------------------------------> */ -/* -------------------------------------------------> */ -input[type="text"], -select, -input[type="password"] { - border: 0; - font-size: 1rem; - font-family: "Roboto"; - padding: .5em; - font-style: italic; - background: #fff; - border: 1px dashed #000000; - /*border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px;*/ - /*margin-bottom: .8em;*/ - outline: none; -} - -select.form-control { - padding: 5px 8px 5px 5px; - font-family: "Roboto"; - font-style: normal; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor:pointer; - background-image: url(../images/select_button.png); - background-repeat: no-repeat; - background-position: 96% 50%; - background-size: 18px 7px; -} - -select.form-control >option { - padding-right: 30px; - -} - -input.form-control { - font-family: "Roboto"; - font-size: 1rem; - color: #363636; -} -.btn-success.set-json { - background-color: #ffffff; - border: 1px dashed #000000; - font-size: 1rem; - font-family: Roboto; - flex-grow: 1; - margin-right: 10px; -} -input.block { - margin-bottom: 20px; -} -.label { - margin-top: .5em; - margin-bottom: .5em; - font-size: 1.2rem; - font-family: "IPH Astra Serif"; - color: #000000; -} -label.inline { - display: inline; - font-weight: normal; - font-size: .9em; -} -.verbose-toggle, -.verbose-toggle:visited, -#showAddFormButton, -#showAddFormButton:visited, -input.submit, -input.submit:visited, -/* the id selectors are used temporarily due to the custom jsp tags () -for editing forms which require an id and do not allow a class. This will be -removed once we refactor the editing forms to Freemarker */ -input#submit, -input#submit:visited, -input.form-button, -input.form-button:visited { - background: #222 url(../images/alert-overlay.png) repeat-x; - display: inline-block; - padding: 5px 18px 7px; - color: #fff; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - position: relative; - border: 0; - margin: 0; - background-color: #DD9F00; - color: #fff; - font-size: 1rem; - font-weight: normal; - line-height: 1; - margin-right: .6em; - margin-top: .5em; - margin-bottom: .5em; -} -#verbose-mode .small { - font-size: 12px; - color: #fff; -} -#verbose-mode b { - color: #595B5B; -} -#verbose-mode .verbose-off{ - background: #706a66; -} -input.delete, -input.delete:visited, -input#delete, -input#delete:visited { - background: #222 url(../images/alert-overlay.png) repeat-x; - display: inline-block; - padding: 5px 18px 7px; - color: #fff; - text-decoration: none; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - position: relative; - cursor: pointer; - border: 0; - margin: 0; - background-color: #DD9F00; - color: #fff; - font-size: 1rem; - font-weight: normal; - line-height: 1; - margin-right: .6em; -} -.verbose-toggle:hover, -#showAddFormButton:hover, -input.submit:hover, -input#submit:hover, -input.form-button:hover { - color: #fff; - background-color: #DD9F00; -} -input.delete:hover, -input#delete:hover { - color: #fff; - background-color: #93c3d4; -} -.verbose-toggle, -.verbose-toggle:active, -#showAddFormButton:active, -input.delete:active, -input#delete:active, -input.submit:active, -input#submit:active, -input.form-button:active, -.button:active, -input.add-account:active, -section.accounts input.delete:active { - top: 1px; -} -form textarea { - border: 1px solid #e0dfdf; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; -} -.maxWidth { - margin-top: 20px; - width: 100%; -} -#itemList a.remove:link, -#itemList a.remove:visited, -#showAddForm a.cancel:link, -form a:link.cancel, -form a:visited.cancel, -a.return:link, -a.return:visited { - text-decoration: underline; - color: #f70; - border-color: none; - padding-left: 3px; -} -#itemList a.remove:hover, -#itemList a.remove:active, -#showAddForm a.cancel:hover, -#showAddForm a.cancel:active, -form a:hover.cancel, -form a:active.cancel { - text-decoration: none; - color: #f70; - background: none; -} -.validationError { - font-weight: normal; - color: #cc0000; - margin-bottom: .3em; -} -p.submit { - margin-top: 0; - padding-top: 0; -} -.editingForm table { - border-color: #dfe6e6; -} -.editingForm td { - padding: 3px; -} -.editingForm .entryFormHead { - background-color: #f1f2ee; - border-color: #dfe6e6; -} -.form-item { - margin-top:.3em; - background-color: #fff; - border-color: #e0dfdf; - font-size: .8em; - border-width: 1px; - color: #595B5B; - padding: .3em; -} -a.return:hover, -a.return:active { - text-decoration: none; - color: #f70; - background: none; -} -.database_header { - background-color: #f1f2ee; - color: #DD9F00; - font-size: 1em; -} -.database_upperleftcorner { - color: #5F6464; - font-size: 1em; -} -.database_upperleftcenter { - background-color: #B0C4DE; - color: #5F6464; - font-size: 1em; -} -.rownumheader, -.rownum { - background-color: #F1F2EE; - color: #5F6464; - font-size: 1em; -} -.headercenter { - color: #5F6464; - font-size: 10pt; - font-style: normal; - text-align: center; -} -.postheader { - background-color: #E6E6FA; - color: #777; - font-size: 1em; -} -.database_postheader { - background-color: #f7f9f9; - font-size: 1em; -} -.postheadercenter, -.postheaderright { - font-size: 1em; -} -.verticalfieldlabel { - color: #5E6363; /*#5F6464;*/ - font-style: normal !important; - font-size: 10pt !important; - line-height: 2em !important; -} -.row, .rowvert { - background-color: #f7f9f9; - color: #5F6464; - font-size: 10pt; - font-style: normal; - text-align: left; - line-height: 2em; -} -.rowalternate { - background-color: #fff; - color: #5F6464; - font-size: 1em; - line-height: 2em; -} -.rowbold { - background-color: #FFFAFA; - color: #5F6464; - font-size: 10pt; /*1em;*/ - line-height: 2em; -} -.form-background { - background-color: #fff; -} -.formsEdit p { - /*padding-top: 1em;*/ - margin-bottom: 1em; - padding-bottom: 0; - margin-top: 0; -} -.formsEdit p.validationError { - margin-bottom: 1.8em; - margin-top: 0; - padding-top: 0; - font-size: .8em; -} -form.deleteForm { - margin-top: 2em; - padding-top: 1em; - border-top: 1px dotted #e3e9e9; -} -form.editForm span { - color: #c00; - font-weight: normal; - font-size: small; -} -form h3.delete-entry { - padding-right: .8em; - display: inline; -} -form h2 { - margin-bottom: 0; - padding-bottom: 10px; -} -form select { - border: 0; - font-size: 14px; - padding: .5em; - background: #fff; - border: 1px solid #e0dfdf; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - margin-bottom: .8em; - margin-top: .7em; - margin-right: .5em; -} -.notice { - margin-top: 1em; - border: 1px dotted #FFD324; -} -a.ingestMenu:link, -a.ingestMenu:visited, -a.account-menu:link, -a.account-menu:visited { - text-decoration: none; - color: #DD9F00; -} -a.ingestMenu:hover, -a.ingestMenu:active, -a.account-menu:hover, -a.account-menu:active, -ul#alpha-browse-individuals a, -ul#browse-classes a, -ul#find-filters a, -ul#vgraph-classes a { - text-decoration: none; - color: #5E6363; -} -ul#browse-classes a { - width: 90%; -} -ul.ingestMenu { - margin-bottom: 1.5em; -} -.toBeDeleted { - margin-bottom: 0; -} -/* BACK-END FORMS --------------> */ -.display-inline { - display: inline-block; -} -.theme-dir, -#noContentMsg { - clear: both; -} -tr.editformcell td input[type="text"] { - width: 30% !important; -} -tr.editformcell td input.fullWidthInput { - width: 70% !important; - margin-top: 0.7em !important; -} -tr.editformcell td input.shortInput { - width: 20% !important; - margin-top: 0.7em !important; -} -tr.editformcell td textarea.matchingInput { - width: 95%; - height:10ex; - margin-top:0.7em; - font-family: "IPH Serif","Roboto","Lucida Sans Unicode","Lucida Grande", Geneva, helvetica, sans-serif; - font-size:0.95em; -} -hr.formDivider { - background-color: #DD9F00; - border: 0 none; - height: 1px; - margin-bottom: 20px; - margin-top: 15px; - opacity: 0.3; -} -.editingForm table { - width: 100%; - border: none; -} -/* -------------------------------------------------> */ -/* HOMEPAGE AND INTERIOR PAGES STYLES --------------> */ -/* -------------------------------------------------> */ - -/* HEADER ------> */ -#branding { - position: relative; - width: 100%; - height: 200px; - margin: 0 auto; - padding: 0px 0px 0px 0px; - background-image: url(../images/header-image.png); - background-position: center; - background-repeat: no-repeat; -} -#topArea{ - width: 90%; -} -/* BRANDING ------> */ -h1.vivo-logo { - position: absolute; - width: 100%; - height: 100px; - top: 35px; - /* left: 0; */ - background: url(../images/site-title-padding.png) center 0 no-repeat; -} -h1.vivo-logo a { - display: block; - width: 386px; - height: 59px; -} -/* HEADER NAV------> */ -ul#header-nav { - float: right; - list-style: none; - height: 30px; - padding-top: 10px; - /*padding-right: 10px; - padding-left: 10px;*/ - background-color: #000000; - opacity: 0.7; - /* margin-right: 13px; */ - font-size: 1.1rem; -} -ul#header-nav li { - float: left; - display: block; - padding-left: 20px; - padding-right: 20px; - border-right: 1px solid #7c7d7f; - font-size: 1rem; - color: #fff; -} -ul#header-nav li:last-child { - /*padding-left: 1px; - padding-right: 0;*/ - border-right: none; -} -ul#header-nav a:hover, -ul#header-nav a:active { - text-decoration: none; - color: #999; -} -ul#header-nav a.log-out { - /* padding-left: 10px; */ -} -/* SEARCH ------> */ -.search-form-container { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: center; - width: 100%; - /*float: left;*/ - -} -.searchResultsHeader { - width: 100%; -} - -.searchResultsHeader >div#simple-search-container { - margin-left: auto; - margin-right: auto; -} -#switch-to-extended-searchform { - border:none; - background-color:unset; - color: #8B4513; - text-align: right; - width: 100%; - font-size: 1.1rem; - padding-left: 0px; - padding-right: 0px; - padding-top: 10px; - font-family: "Roboto"; - font-style: normal; -} -#custom-search { - width: 100%; - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: center; -} -.customsearch >div#articleWrapper >div#wrapper-content >div#simple-search-container { - margin-left: auto; - margin-right: auto; -} -.errorPageTitle { - text-align: center; -} -.errorPageTitle >h2 { - padding-bottom: 5px; -} -#nomatchingTitle { - text-align: center; - margin-bottom: 10px; -} -#searchTipsTitleH3 { - margin-bottom: 10px; - border-top: 1px solid #8B4513; - border-bottom: 1px solid #8B4513; - margin-top: 25px; - font-size: 1.2rem; - font-family: "IPH Astra Serif"; - background-color: #F6F6F6; - padding-left: 10px; -} -#searchTipsTitleH3 >h3 { - padding-bottom: 5px; - padding-top: 5px; -} -ul.searchTips >li { - font-family: "IPH Astra Serif"; - font-size: 1.1rem; -} -#advancedTipsWrapper { - margin-bottom: 10px; - border-top: 1px solid #8B4513; - border-bottom: 1px solid #8B4513; - margin-top: 10px; - font-size: 1.2rem; - font-family: "IPH Astra Serif"; - background-color: #F6F6F6; - padding-left: 10px; - width: 100%; -} -#advancedTipsWrapper >h4 { - padding-bottom: 5px; - padding-top: 5px; -} -#closeLink { - font-family: "IPH Astra Serif"; - font-size: 1rem!important; - text-transform: uppercase; - font-weight: bold; - border: 1px solid #8B4513; - padding: 8px; - background-color: #F6F6F6; - margin-left: 20px; -} -.customsearch >div#articleWrapper >div#wrapper-content >ul#advanced.searchTips { - margin-bottom: 10px; -} -.custom-search-input { - width: 90%; - border-radius: unset !important; - -webkit-border-radius: unset !important; - float: left; - height: 2rem; - padding: 0px 0px 0px 5px !important; - border-style: solid !important; - border-color: #8B4513 !important; - margin-bottom: 0 !important; - background-color: #F3F3F3 !important; - height: 36px; -} -.search-submit-button{ - all: unset; - border-radius: unset !important; - -webkit-border-radius: unset !important; - float: left; - color: transparent; - height: 36px; - border-style: solid; - border-width: 1px; - border-color: #8B4513; - border-left: 0px; - background: #F3F3F3; - width: 10%; -} -input.search-submit-button { - background-image: url(../images/search-icon.png)!important; - background-repeat: no-repeat; - background-position: center center; -} -.custom-search-select{ - border-radius: unset !important; - -webkit-border-radius: unset !important; - margin: 0; - float: left; - /*height: 36px;*/ - border-style: solid; - border-color: #8B4513; - border-left: 0px; - width: 20%; - background-color: #F3F3F3; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor:pointer; - background-image: url(../images/select_button.png); - background-repeat: no-repeat; - background-position: 94% 50%; - background-size: 18px 7px; -} -#searchRightpanel { - width: 30%; -} -#search { - /*position: absolute;*/ - width: 100%; - height: 38px; - /* top: 90px; - right: 10px;*/ -} -#search-field { - width: 396px; - height: 38px; - background: url(../images/search-interior-pages.png) 0 0 no-repeat; -} -#search-field input.search { - text-decoration: none; - background-color: transparent; - color: #fff; - font-size: 14px; - border: none; - padding-left: 25px; - padding-top: 8px; - cursor: pointer; -} -input.search-vivo { - float: left; - width: 290px; - height: 25px; - border: 0; - font-size: 16px; - color: #5e6363; - margin-left: 10px; - margin-top: 5px; - padding: 0; -} -#search-form-modifier { - display: none; -} - -.btn-group-bottom { - /*background-color: #F1F1F1;*/ - /*padding: 5px 5px 5px 5px;*/ - /*border-left: 1px solid #8B4513; - border-right: 1px solid #8B4513; - border-bottom: 1px solid #8B4513;*/ - /*width: 100%;*/ - /*margin: 0 10px 0 10px;*/ -} - -#settingsButtons { - color: #000000; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; - width: 100%; - background-color: #F1F1F1; - /*margin-top: 1%; - margin-bottom: 0; - margin-left: 2%; - margin-right: 2%;*/ - align-items: center; - -} - -#CounterSearchWrapper { - border: 1px solid #8B4513; - box-shadow: 0px 4px 4px #aeaeae; - -} - -#wrapperButtons { - /*width: 70%; - margin-left: 4%;*/ - display: flex; - justify-content: space-around; - background-color: #ffffff; - padding: 5px; - box-shadow: 0px 4px 4px #aeaeae; -} - -#OuterWrapperButtons { - display: flex; - justify-content: space-between; - width: auto; - margin-left: 2%; - background-color: #F1F1F1; - padding: 15px 10px 15px 10px; - /*border-left: 1px solid #8B4513; - border-right: 1px solid #8B4513; - border-bottom: 1px solid #8B4513;*/ -} - -#SearchTitle { - background-color: #F1F1F1; - font-size: 1.3rem; - padding-left: 20px; - padding-top: 15px; - font-family: Roboto; -} - -#SelectResults { - font-size: 1rem; - border: 1px dashed #000000; - color: #000000; - padding-left: 5px; - margin-left: 10px; -} -#SelectResults >label { - padding-left: 5px; - padding-right: 5px; - font-family: "Roboto"; - font-style: normal; - -} -#btn-search-expand { - width: 15%; - margin-right: 2%; - background-color: #ffffff; - border: 1px solid #DD9F00; - font-size: 1rem; - height: 49px; - cursor: pointer; - outline: none; -} - -#btn-reset-button { - background-color: #ffffff; - border: 1px dashed #000000; - font-size: 1rem; - flex-grow: 1; -} - -#hitsPerPageSelect { - border-left: 1px dashed #000000; - border-right: 0px; - border-top: 0px; - border-bottom: 0px; - font-family: Roboto; - font-size: 1rem; - font-style: normal; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor:pointer; - background-image: url(../images/select_button.png); - background-repeat: no-repeat; - background-position: 90% 50%; - background-size: 18px 7px; - padding-right: 25px; -} - -#btn-get-standard-searchform { - /*margin-bottom: 10px;*/ - background: transparent; - border: 0px; - padding-top: 8px; - padding-left: 15px; - font-family: Roboto; - font-size: 1.2rem; - cursor: pointer; -} -#backgroundForm { - height: 39px; - background-image: url(../images/custom_search_button.png); - background-repeat: no-repeat; - /*clip-path:polygon(0% 0%, 0% 1000%, 80% 0%);*/ - -} - - -/* MAIN NAVIGATION------> */ -ul#main-nav { - display: flex; - flex-direction:row; - flex-wrap:nowrap; - justify-content: center; - align-content: center; - width: 80%; - padding: 0px 0px 0px 0px; - height: 46px; - /* border: 1px solid #dce4e3;*/ - background-color: #000000; - opacity: 0.8; - margin-left: auto; - margin-right: auto; - margin-top: -46px; - list-style: none; - font-size: 1.2rem; - color: #ffffff; -} - -#main-nav li:last-child { - background: none; -} - -#main-nav li { - float: left; - line-height: 46px; - background: url(../images/separator-main-nav.jpg) right no-repeat; -} -#main-nav li a { - padding-left: 20px; - font-family: "Roboto"; - font-style: normal; - padding-right: 20px; - display: block; - color: #ffffff; - text-decoration: none; -} -#main-nav li a:hover { - color: #EECFA1; -} -#main-nav li a.selected { - color: #DD9F00; - /* background: url(../images/selected-main-nav.jpg) left -1px no-repeat; */ - /* margin-left: 18px; */ -} -/* WRAPPER CONTENT------> */ -#wrapper-content { - clear: both; - width: 80%; - /*margin: 0 auto;*/ - background: #fff; - min-height: 710px; - padding-top: 20px ; - padding-left: 0px; - padding-right: 0px; - padding-bottom: 20px; - margin-left: auto; - margin-right: auto; -} - -#wrapperDescription { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; - width: 100%; - -} -#projectDescription { - width: 50%; - -} - -#titleProject { - width: 100%; - color: #8B4513; - font-size: 1.4rem; - padding: 0 0px 10px 25px; - font-family: "Roboto"; - background-image: url(../images/circle.png); - background-repeat: no-repeat; - background-position: left center; -} - -p.aboutProject { - font-size: 0.8em; - text-align: justify; - line-height: 1.2; - padding: 15px 0px 10px 10px; - border-top: 1px solid #8B4513; - margin-right: 5px; - text-indent: 35px; -} - -#membersDescription { - width: 49%; - border-top: 1px solid #8B4513; - margin-left: 1%; -} - - -#contactDescription { - width: 50%; - border-top: 1px solid #000000; -} - -#registrationDescription { - width: 50%; - border-top: 1px solid #000000; -} - - -/* INTRO-BLURB ------> */ -#intro { - float: left; - /* width: 570px; */ - padding-bottom: 50px; -} -body.loggedIn #intro { - width: 98%; -} -#intro h2 { - padding: 35px 0 12px 24px; - border-bottom: none; - color: #2485AE; -} -#intro p { - /* font-size: 16px; - color: #5f6464; - line-height: 1.3em; - padding: 0 24px 0 24px;*/ -} -#intro a, -#individual-intro ul.individual-urls li a, -#revision-build-date h3, -#terms h3, -#visual-graph h5, -.blue, -p.forgot-password a, -ul#individual-personInPosition li a, -ul.individual-urls li a, -ul.individual-urls-people li a { - color: #8B4513 -} -/* LOG IN------> */ -#login { - float: right; - width: 314px; - border: 1px solid #e8ece9; - margin-right: 25px; - padding-bottom: 30px; - margin-bottom: 30px; - overflow: hidden; - margin-top: 20px; -} -body.login #login { - float: none; - margin-left: auto; - margin-right: auto; -} -#login h2 { - font-size: 1.4rem; - color: #8B4513; - padding-left: 38px; - padding-top: 18px; - border-bottom: none; - font-family: "IPH Astra Serif"; -} -h3.internal-auth:hover { - color: #47B6D0; -} -#error-alert { - margin-left: 0; - margin-bottom: 12px; - padding: 12px; - padding-bottom: 12px; - border: 1px dotted #a12424; -} -#error-alert img { - float: left; - margin: 0; - padding: 0; - vertical-align: middle; -} -#error-alert p { - padding-left: 40px; - font-size: .8em; - line-height: 1.3em; - color: #a12424; - padding-top: 5px; -} -#login-form label { - display: block; - color: #5e6363; - padding-top: 0; - padding-left: 38px; - font-size: 14px; -} -#login-form input.text-field { - border: 0; - font-size: 14px; - padding: 5px; - width: 219px; - height: 24px; - margin-left: 38px; - background: #fff; - border: 1px solid #e0dfdf; - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} -#login-form input.text-field:focus { - border: 1px solid #8B4513; - background-color: #ffffff; -} -#login-form p.submit { - width: 100px; - height: 40px; - margin-top: 20px; - margin-left: 38px; -} -#login-form p.submit-password { - height: 40px; - margin-top: 20px; - margin-left: 38px; -} -#login-form input.checkbox-remember-me { - float: left; - height: 14px; - width: 14px; - color: #5e6363; - padding: 0; - margin-top: 33px; - margin-left: 20px; -} -#login-form label.label-remember-me { - display: block; - float: right; - color: #5e6363; - font-size: 12px; - width: 100px; - margin: 0; - padding: 0; - margin-top: 29px; - margin-right: 32px; -} -p.forgot-password { - clear: both; - margin-left: 38px; - font-size: 12px; - padding-top: 1.2em; - padding-bottom: 1.2em; -} -p.request-account { - width: 219px; - clear: both; - float: left; - margin-left: 38px; - margin-top: 10px; - padding-top: 20px; - border-top: 1px solid #e8ece9; -} -p.password-note { - font-size: 12px; - color: #949696; - padding-left: 38px; -} -#flash-message { - border: 1px dotted #E2C822; - background-color: #FFF9D7; - padding: .5em; - margin-bottom: 10px; -} -#welcome-message { - border: 1px dotted #E2C822; - background-color: #FFF9D7; - padding: .25em; - margin-bottom: 8px; -} -#flash-msg-container, -#welcome-msg-container { - margin-bottom: 8px; - margin-top: -10px; - margin-right:-10px; - height:34px; -} -p.external-auth { - margin: 0 auto; -} -p.external-auth a.blue, -p.external-auth a.blue:visited { - background-color: #398AAC; - width: 180px; - margin-bottom: 17px; - line-height: 1.3em; - padding-top: 10px; -} -p.external-auth a.blue:hover { - background-color: #58A2C1; - color: #fff; -} -/* HOME SEARCH ------> */ -#search-home { - /*float: left;*/ - margin-bottom: 30px; - margin-top: 10px; - width: 100%; - display: flex; - flex-direction: row; - justify-content: center; -} - -#simple-search-container { - display: flex; - flex-direction: row; - justify-content: center; - flex-wrap: wrap; - align-content: center; - width: 50%; -} - - - - -#search-home h3 { - padding: 0; - font-size: 22px; - margin-bottom: 15px; - color: #2485AE; - /*padding-left: 24px;*/ -} -#search-home-field { - width: 483px; - height: 44px; - background: url(../images/search-field-and-button.gif) 0 0 no-repeat; -} -#search-home-field input.search { - text-decoration: none; - background-color: transparent; - color: #fff; - font-size: 18px; - border: none; - padding-left: 23px; - padding-top: 8px; - cursor: pointer; -} -input.search-home-vivo { - float: left; - margin: 10px 0 0 8px; - width: 350px; - height: 20px; - border: 0; - font-size: 18px; - color: #5e6363; - margin-left: 4px; - margin-top: 2px; -} - -/* SEARCH HOME EXPANDED------> */ - -#querybuilder-container { - width: 60%; - /*display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: center;*/ - margin-left: auto; - margin-right: auto; -} - - - - -/* SEARCH HOME------> */ - -#search-home-field { - background: url(../images/search-field-and-button.gif) 0 0 no-repeat; - width: 520px; -} -#search-home-field input.search { - background-color: transparent; - color: #fff; - border: none; -} -a.filter-search { - right: 109px; -} -input.search-homepage { - border: 0; - background-color: #f9fafa; - background-position: right; - opacity: .5; - text-align:right; -} -#search-homepage { - width:520px; -} - -#limitedToClassGroup { - font-size: 1rem; - display: none; -} -#searchQueryResults { - font-size: 1.3rem; - font-family: "IPH Astra Serif"; - margin-top: 25px; - color: #8B4513; - display: inline-block; - vertical-align: middle; -} -img#downloadIcon { - display: inline; - vertical-align: bottom; - height: 0px; - width: 0px; - padding: 15px; - background-image: url(../images/download-icon.svg); - background-position: center bottom; - background-repeat: no-repeat; -} -#limitedToType { - font-size: 1rem; - display: none; -} - -.filter-default { - background: url(../images/filteredSearch.gif) 0 0 no-repeat; -} -.filter-active { - background: url(../images/filteredSearchActive.gif) 0 0 no-repeat; -} -#filter-search-nav { - background-color: #2d3535; - color: #fff; - background-color: #2d3535; - color: #fff; - right: 109px; -} -#filter-search-nav li { - background-image: none; - padding-left: 0; - margin-left: 0; -} -#filter-search-nav a.active, -#stats p, -p.request-account a, -ul#header-nav a { - color: #fff; - font-family: "Roboto"; -} -#filter-search-nav a { - border-bottom: 1px dotted #4f5656; - color: #1483A4; -} - -/* BROWSE ------> */ -ul#browse-classgroups a { - padding-top: 3px; - padding-bottom: 3px; -} -ul#browse-classgroups a.selected, -ul#browse-classgroups a:hover, -ul#classes-in-classgroup a:hover, -ul#classes-in-classgroup a.selected, -ul#vgraph-classes a:hover, -ul#vgraph-classes a.selected { - background: url(../images/arrow.gif) 0 10px no-repeat; - color: #2ea0cf; -} -svg text:hover { - color: #2EA0CF; -} -p.view-all { - clear: both; - width: 200px; - font-size: 14px; - text-align: right; - color: #303e4e; -} -a.view-all-style { - color: #303e4e -} - -/* HOME STATS-----> */ - -.home-sections { - /* border-top: 1px dotted #dbe3e3; /* stroke */ - /* border-bottom: 1px dotted #dbe3e3; /* stroke */ - /* background-color: #fff; /* layer fill content */ - -} -.home-sections h4 { - /*border-top: 1px solid rgba(220,228,227,.42); /* stroke */ - /*border-bottom: 1px solid rgba(220,228,227,.42); /* stroke */ - background-color: none; /* layer fill content */ - /*border-bottom: 2px solid #62b6d7;*/ - color: #DD9F00; - font-size: 1.5em; - line-height: normal; - margin-left: 0px; - -} - -section#home-stats.home-sections { - display: flex !important; - flex-direction: column; - flex-wrap: nowrap; - justify-content: center; - align-items: center; -} - -#home-stats h4 { - padding-bottom: 0px; - display: block; - height: 1.5rem; - font-family: "Roboto"; -} - - -#home-stats { - margin-top: 0px !important; - height: 120px; - width: 40%; -} - -#stats { - margin-top: 5px; - width: auto; -} - -#stats li { - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - background-color: #4c4c4c; - border-width: 2px; - border-radius: 6px; /* border radius */ - -moz-background-clip: padding; - -webkit-background-clip: padding-box; - background-clip: padding-box; /* prevents bg color from leaking outside the border */ - border-color: #DD9F00; - border-style: solid; - color: #fff; - margin-top: 0px; - margin-right: 0px; - width:90px; -} - - - -#stats >li { - height: 60px; - margin-left: 20px; -} - -#stats li:first-child { - margin-left: 0px; -} - - -#stats li a:hover { - opacity: 0.7; -} - -#stats .stats-count { - font-size: 2.2em; - padding-top: 8px; - height: 28px; - vertical-align: middle; - border-bottom: 1px dashed #ffffff; - font-family: "Roboto"; -} - -#stats .stats-type { - height: 23px; - padding-top: 0px; - margin-top: 0px; - font-size: 1.1em; - font-family: "Roboto"; -} - -#stats .stats-count span { - color: #fff; - opacity: .5; -} -#home-research { - width: 297px; - float: left; - clear: both; -} -#home-research ul { - padding: 0.7em 0 0.6em 0.75em; -} -#home-research li { - line-height: 1.25em; - margin-top: 0.7em; - font-size: 0.9em; -} -#home-research li:last-child { - text-align:right; - padding: 4px 16px 0 0; -} -#home-research li span { - color: #fff; - background: url(../../../images/count-background.png) no-repeat; - width: 65px; - height: 27px; - display: inline-block; - padding: 6px 8px 0 0; - margin-left: 4px; - text-align: center; -} -#home-academic-depts { - width: 297px; - margin-left: 15px; - float: left; -} -#home-academic-depts h4, -#home-faculty-mbrs h4, -#home-geo-focus h4, -#home-research h4 { - display: inline; - padding: 3px 10px; -} -#home-academic-depts ul { - list-style: disc outside url(../../../images/arrowIcon.gif); - padding: 0.4em 0 0.6em 1.8em; -} -#home-academic-depts li { - line-height: 1.25em; - padding-top: 1.0em; - padding-right: 4px; - font-size: 0.9em; -} -#home-faculty-mbrs { - width: 297px; - margin: 0 0 20px 15px; - float: left; -} -div#tempSpacing { - margin-top:30px; - padding-left:20px; - height:325px; -} -div#research-faculty-mbrs { - font-size: 0.9em; - line-height: 16px; -} -div#research-faculty-mbrs li.individual { - clear: both; -} -div#research-faculty-mbrs ul li.individual:first-child { - clear: both; - padding-top: 20px -} -div#research-faculty-mbrs li h1 { - padding: 6px 0 2px 0; -} -div#research-faculty-mbrs li img { - width: 60px; - float: left; - padding: 0px 8px 10px 10px; -} -div#research-faculty-mbrs li span.title { - display: block; - font-size: 0.825em; - line-height: 1.25em; - padding-bottom: 8px; -} -div#research-faculty-mbrs ul#viewMoreFac { - list-style:none; -} -div#research-faculty-mbrs ul#viewMoreFac li { - text-align:right; - padding: 0 16px 8px 0; - clear:both; -} -div#adjImgHeight { - height:65px; - overflow:hidden; - float:left; - margin-bottom:10px; -} -#home-geo-focus { - clear: both; - display: inline-block; - margin-top: 30px; - height: 632px; - width: 921px; -} -#home-geo-focus div#timeIndicatorGeo { - text-align:center; - margin-top:100px; -} -/* FOOTER------> */ - -#footerWrapper { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: space-between; - width: 80%; - margin-left: auto; - margin-right: auto; -} - -div#footerWrapper >nav { - width: 30%; - font-family: "Roboto"; - font-style: normal; - font-size: 0.8rem; -} - -footer { - padding: 0px 0px 0px 0px; - clear: both; - width: 100%; - height: 120px; - margin: 0 auto; - font-size: .7em; - color: #ffffff; - background-color: #4c4c4c; -} -footer p.copyright { - float: left; - padding-top: 55px; - /*padding-left: 30px;*/ - color: #ffffff; - font-family: "Roboto"; - font-style: normal; - display: flex; - justify-content: flex-start; - flex-direction: row; - flex-wrap: nowrap; - align-items: baseline; -} -footer p.copyright small { - font-size: 1rem; - display: flex; - align-items: center; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-start; -} -p.copyright >small >a >img { - padding-left: 5px; - padding-right: 5px; - padding-top: 7px; -} -p.copyright >small >a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - color: #DD9F00; - padding-left: 5px; -} -p.copyright >small >a:hover { - color: #ffffff; -} -ul#footer-nav { - float: right; - list-style: none; - /* width: 30%;*/ - height: 20px; - margin: 0; - padding: 0; - padding-top: 55px; - /*padding-right: 20px;*/ - color: #ffffff; -} -ul#footer-nav li { - float: left; - display: block; - padding-left: 10px; - padding-right: 10px; - border-right: 1px solid #c9c8c8; -} -ul#footer-nav li:last-child, -ul#header-nav li.last, -ul#individual-hasResearchArea li:last-child, -ul#individual-facultyMemberships li:last-child { - border-right: none; -} -#footer-nav a { - color: #ffffff; - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -#footer-nav a:hover, -a.terms { - color: #DD9F00; - text-decoration: none; -} -a.powered-by-vivo { - color: #CDC9C9; - text-decoration: none; - font-size: 1rem; -} -a.powered-by-vivo >strong { - font-size: 0.9rem; - color: #CDB79E; -} -a.terms:hover { - color: #4e5051; - text-decoration: none; -} -a.powered-by-vivo:hover { - color: #ffffff; - text-decoration: none; -} -p { - margin-bottom: 0.3em; -} - -/* STYLED BUTTONS ------> */ -.button, -.button:visited { - background: #222 url(../images/alert-overlay.png) repeat-x; - display: inline-block; - padding: 7px 22px 8px; - color: #fff; - text-decoration: none; - border-radius: 4px; /*This box should have a rounded corners in browsers supporting CSS3*/ - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - position: relative; - cursor: pointer; - border: 0; -} -.button:hover { - background-color: #111; - color: #fff; -} -.green, -ul#individual-tools li a, -ul#individual-tools-people li a { - color: #b2d15a; -} -.small.button, -.small.button:visited { - font-size: 11px -} -.button, -.button:visited { - font-size: 16px; - font-weight: normal; - line-height: 1; -} -.green.button, -.green.button:visited { - background-color: #DD9F00; - color: #fff; -} -.green.button:hover { - background-color: #DD9F00; -} -.blue.button, -.blue.button:visited { - background-color: #398aac; - color: #fff; -} -.blue.button:hover { - background-color: #58a2c1; -} - -/* -------------------------------------------------> */ -/* INDIVIDUAL LIST ---------------------------------> */ -/* -------------------------------------------------> */ -.pagination li.selectedNavPage { - color: #91b039; -} -.rdfLink a { - color: #84a655; -} -.individualList ul.individualData li { - border-right: solid 1px #a0a0a0; -} -.individualList ul { - margin-left: 0; -} -.individualList li, -.individualList li span { - color: #9c9c9c; - } -.individualList li a { - font-weight: normal; - color: #2485AE; -} - -/* -------------------------------------------------> */ -/* MENU PAGES --------------------------------------> */ -/* -------------------------------------------------> */ - -/* VISUAL GRAPH------> */ -.property-group, -#menupage-intro { - width: 100%; - text-align: left; - background: #fff; -} -#menupage-intro { - margin: 0.7em auto; -} -#menupage-intro h2 { - font-size: 1.4em; - color: #000000; - font-weight: normal; - padding: 0 25px 10px 20px; - font-family: Roboto; - display: none; -} -#menupage-intro.people h2 { - float: left; -} -#menupage-content.people { - border-right: 1px solid #e8ece9; -} -#menupage-content { - width: 900px; -} -#menupage-content h3 { - font-size: 1.5em; - color: #002b44; - font-weight: normal; - border-bottom: 1px solid #f3f3f4; -} -/* FIND BY ------> */ -#find-by { - border: 1px solid #e4eae9; -} -#find-by h3 { - font-size: 1.125em; - color: #2485ae; - font-weight: normal; -} -ul#find-filters a:hover, -ul#find-filters a.selected { - background: url(../images/arrow.gif) 0 6px no-repeat; - color: #2ea0cf; -} -/* RESEARCHERS ------> */ -#researchers { - width: 920px; - background: #f7f9f9; - border: 1px solid #d7e6e6; -} -#researchers h3 { - font-size: 1.25em; - color: #2485ae; - font-weight: normal; - background: url(../images/arrow.gif) 140px 27px no-repeat; -} -#researchers p { - font-size: 1.125em; - color: #5e6363; -} -#researchers-slider { - border: 1px solid #e8e8e8; - background: #fff; -} -#alpha-display { - font-size: 4.375em; - text-align: center; - float: left; - color: #2485ae; - border-right: 1px dotted #dde4e3; - font-weight: bold; -} -#profile-photo-display { - width: 600px; -} -#profile-photo-display img { - border: 1px solid #dde4e3; -} -#nav-display p { - font-size: 26px; - color: #2485ae; -} -#nav-display img { - border-left: 1px solid #e8e8e8; -} -/* BROWSE BY ------> */ -#browse-by { - width: 100%; -} -nav#alpha-browse-container { - /* width: 894px;*/ - float: left; - padding-left: 20px; - margin-left: 0px; -} - -#browse-by h2 { - background: #5e6363; - font-size: 1.375em; - color: #fff; -} -/* BROWSE CLASSES ------> */ -ul#browse-classes { - border: 1px solid #efe9d9; - border-right: 0; - background-color: #efe9d9; - margin-left: 0px; - width: 25%; - outline-color: #efe9d9; - outline-style: solid; - outline-width: 1px; - min-height: 78px; -} -ul#browse-classes li, -ul#vgraph-classes li { - border-bottom: 1px solid #dde4e3; - font-size: 1em; -} -ul#browse-classes li { - width: 90%; - margin-left: 10px; - margin-right: 10px; - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - line-height: 1.3; -} -ul#browse-classes a:hover, -ul#browse-classes a.selected { - background: url(../images/arrow_brown.png) 4px 5px no-repeat; - color: #000000; -} -ul#browse-classes .count-classes { - font-size: 12px; -} -/* ALPHA BROWSE------> */ -ul#alpha-browse-individuals { - background-color: #fff; - font-family: "IPH Astra Serif"; - float: left; - width: auto; - list-style: none; - font-size: 1.6rem; -} -ul#alpha-browse-individuals a:hover, -ul#alpha-browse-individuals a.selected { - background: url(../images/arrow_small.png) -3px 8px no-repeat; - color: #DD9F00; -} -ul#alpha-browse-individuals .count-classes, -ul#vgraph-classes .count-classes { - font-size: .75em; -} -.alphaIndex, -tr.editformcell td select, -ul#alpha-browse-individuals li { - font-size: .8em; -} -.pagination.menupage { - font-size: 1rem; - font-family: "IPH Astra Serif"; - margin-bottom: 10px; - margin-left: 0px; -} -.pagination li.selected { - font-size: 1.2rem; - background: #FDF5E6; - color: #8B4513; -} -nav#alpha-browse-container { - border-top: 1px solid #efe9d9; - background-color: #fff; - border-left: 1px solid #efe9d9; - border-bottom: none; - width: 73%; -} -/* BROWSE INDIVIDUALS------> */ -#individuals-in-class { - width: 100%; - border-top: 1px solid #dde4e3; - background-color: #fff; - margin-right: 0; - margin-top: 10px; -} - -h3.selected-class { - padding-bottom: 0.3em; - color: #8B4513; - font-family: "IPH Astra Serif"; - font-size: 1.3rem; -} - -#individuals-in-class li.individual { - border-bottom: 1px solid #dde4e3; -} -#individuals-in-class li img { - border: 2px solid #dde4e3; -} -#individuals-in-class li h1, -#property-group-menu ul, -article.property ul.property-list { - color: #5e6363; - font-size: 1em; -} -.pagination.menupage li a:hover { - font-size: 1.2rem; - background: #ffffff; - color: #8B4513; -} -.pagination h3 { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -li.individual { - margin-left: 0; - margin-right: 0; - width: 100%; - font-family: "IPH Astra Serif"; - font-size: 1.3rem; -} - -/* -------------------------------------------------> */ -/* IMAGE UPLOAD-------------------------------------> */ -/* -------------------------------------------------> */ -/* <------ UPLOAD PICTURE*/ -#photoUploadDefaultImage img { - border: 4px solid #DDE4E3; -} -#photoUploadForm { - border-left: 1px dotted #DDE4E3; -} -/* <------ CROP PICTURE*/ -#photoCropping img { - border: 1px solid #DDE4E3; -} -#photoCropping { - margin-left: 20px; - padding-left: 40px; - background: url(../images/pointToCropPreview.jpg) 0 30px no-repeat; -} -#photoCroppingPreview { - width: 210px; -} -.photoCroppedPreview { - border: 4px solid #DDE4E3; -} -/* <------ DELETE PICTURE*/ -#photoDeletingContainer { - border: 1px solid #bdbcbc; -} -/* -------------------------------------------------> */ -/* INDIVIDUAL DISPLAY ------------------------------> */ -/* -------------------------------------------------> */ - -/* ADMIN PANEL ------> */ -#admin { - background-color: #efe9d9; -} -#admin h3 { - background: #DD9F00; - color: #fff; -} -#admin .uri-link, -#verbose-mode span { - color: #888c8c; -} -#admin a { - color: #8B4513; -} -/* INDIVIDUAL INTRO FOR ANY CLASS ------> */ -.preferred { - padding-top: .2em; -} -#individual-intro h1 { - font-size: 1.375em; - color: #000000; -} -#individual-intro span.display-title, -h1.fn .display-title { - font-size: .825em; - color: #5e6363; - border-left: 1px solid #a6b1b0; -} -ul#individual-tools { - color: #8AA149; -} -h2#webpage { - font-weight: bold; -} -/* INDIVIDUAL INTRO - LEFT SIDE CONTENT ------> */ -img.individual-photo { - border: 7px solid #ebebeb; -} -.rdf-url { - padding-top: .8em; - display: block; -} -ul#individual-tools { - color: #8AA149 -} -#share-contact a.email, -#share-contact a.tel, -.editingForm .entryFormHead h2, -.header, -.navlinkblock { - color: #5f6464; -} -ul.individual-urls { - list-style: url(../images/arrow-brown.png); -} -ul.individual-urls li { - font-size: .875em; - line-height: 1.6em; -} -ul.individual-urls-people { - list-style: url(../../../images/individual/arrow-grey.gif); -} -/* INDIVIDUAL RIGHT CONTENT ------> */ -#individual-info, -#property-group-menu a, -.grey, -h2#mainImage, -#share-contact h2, -h3.internal-auth { - color: #5e6363; -} -#individual-info { - font-family: "IPH Astra Serif"; -} -#titleContainer { - font-family: "IPH Astra Serif"; - width: auto!important; -} -#individual-info h1.fn { - font-size: 1.7rem; - color: #595B5B; - background-image: url(../images/circle_title.png); - background-repeat: no-repeat; - background-position: left center; - padding-left: 22px; - padding-bottom: 5px; - color: #000000; - font-family: "IPH Astra Serif"; - border-right: none !important; - margin-top: 5px; - margin-right: 0px; - float: none; - display: inline; -} -#individual-info h2 { - color: #5E6363; - font-size: 1em; - font-weight: bold; -} -#individual-info h3 { - font-size: 1.125em; - line-height: 1.2em; -} -ul#individual-personInPosition { - font-size: 1em; - list-style: url("../images/arrow-brown.png"); -} -ul#individual-personInPosition li { - line-height: 1.8em; -} -.individual-overview { - font-size: 1em; - padding-right: 10px; - padding-top: 10px; - width: 100%; -} -ul#individual-hasResearchArea li { - border-right: 1px solid #A6B1B0; -} -ul#individual-facultyMemberships li { - border-right: 1px solid #A6B1B0; -} - -.display-title-not-editable { - color: #4F4F4F; - display: block; - padding-top: 7px; - padding-left: 10px; - border-left: 1px solid #5e6363; - font-size: 1.5rem; -} - -/* INDIVIDUAL VISUALIZATION ------> */ -.publication-year-range, -p.view-all-coauthors { - font-size: .875em; -} -a.all-vivo-publications { - font-size: .875em; - color: #5e6363; -} -/* <------ TEMPORAL GRAPH and MAP O' SCIENCE */ -#temporal-graph h3 a, -#map-of-science h3 a { - color: #2485AE; - font-size: .8em !important; - text-decoration: underline; - vertical-align:text-top; -} -/* COAUTHORS ------> */ -img.co-author { - border: 2px solid #ebebeb; -} -#co-authors h3, -#right-hand-column h3 { - font-size: 1.25em; - color: #2485ae; -} -/* PROPERTY GROUP MENU ------> */ -#property-group-menu { - width: 920px; - background: #f1f2ee; -} -#property-group-menu li { - background: url(../../../images/individual/separator-property-group-nav.jpg) right 10px no-repeat; -} -#property-group-menu a:hover { - color: #002b44; -} -#property-group-menu li:last-child { - background: none; -} -/* PROPERTY GROUP ------> */ -section.property-group h2, -#menupage-content h4 { - font-size: 1.25em; - color: #8B4513; - font-weight: normal; -} -article.property { - width: 95%; -} -article.property h3 { - background: #fafaf9; - font-size: 1.4rem; - color: #8B4513; - font-family: "IPH Astra Serif"; - font-style: normal; -} -article.property ul.property-list li.subclass h3 { - font-size: 1.063em; - color: #5E6363; -} -article.property .data-property-statement { - background: #fff; - font-size: 1em; - color: #5e6363; -} -article.property ul.property-list li a { - /*color: #2485ae;*/ /* cappadona: seems unnecessarily specific and is overriding .more-less from individual.css so I'm commenting out for now */ - line-height: 1.6em; -} -/* MISCELLANEOUS ------> */ -.displace { - position: absolute; - left: -9999px; -} - -.middle { - vertical-align: middle; -} -input[type="submit"] { - cursor: pointer; -} -.checkboxSpacer { - margin-left:80px; -} -p.address-line { - margin-bottom: 0.3em; -} -/* EDITING DISPLAY------> */ -.edit-individual { - border-left: 1px dotted #8B4513; - margin-left: 5px; -} -/* -------------------------------------------------> */ -/* SITE ADMIN DASHBOARD ----------------------------> */ -/* -------------------------------------------------> */ -#adminDashboard .pageBodyGroup { - padding: 0 1em .5em 1em; -} -#adminDashboard .pageBodyGroup h3 { - background-color: #fff; - border-bottom: 1px dotted #AFB2B2; - font-weight: bold; - padding: .625em; - color: #8B4513; - margin-bottom: .625em; -} -#adminDashboard .pageBodyGroup ul { - margin: 0 0 1em .6em; -} -#adminDashboard .pageBodyGroup h4 { - color: #5E6363; - font-size: 1em; - margin-left: .6em; - font-weight: bold; -} -#adminDashboard .pageBodyGroup h4 a { - color: #5E6363; - font-size: 1em; - margin-left: 0; - font-weight: bold; -} -.siteAdmin.loggedIn >div#articleWrapper >div#wrapper-content >div.tab >h2 { - text-align: center; - font-family: "IPH Astra Serif"; - font-size: 1.5rem; - padding-bottom: 0px; - border-bottom: 1px solid #8B4513; -} - - - -/* -------------------------------------------------> */ -/* REVISION INFO -----------------------------------> */ -/* -------------------------------------------------> */ - -#revision-build-date { - border-left: 1px solid #DFE6E6; -} -#revision-levels caption { - font-size: 18px; - color: #2485ae; -} -#revision-levels th { - font-weight: bold; - border: 1px solid #DFE6E6; -} -#revision-levels td { - border: 1px solid #DFE6E6; -} - -/* -------------------------------------------------> */ -/* IE message when JS is disabled -----------------> */ -/* -------------------------------------------------> */ -.ie-alert { - color: #f00; - font-weight: bold; -} - -/* -------------------------------------------------> */ -/* VERBOSE DISPLAY --------------------------------> */ -/* -------------------------------------------------> */ -section.verbosePropertyListing { - font-size: 12px; - font-weight: normal; - color: #5E6363; -} -section.verbosePropertyListing span { - color: #9bae5a; -} -h2#email .verbosePropertyListing, -h2#phoneNumber .verbosePropertyListing { - margin-top: 10px; - line-height: 1.4em; -} -article.property h3 { - padding: 10px 0 10px 20px; - margin: 0; -} -h2#personInPosition .verbosePropertyListing, -h2#hasResearchArea .verbosePropertyListing, -h2#preferredTitle .verbosePropertyListing { - display: block; -} - -/* -------------------------------------------------> */ -/* ACCOUNT PAGE ------------------------------------> */ -/* -------------------------------------------------> */ -form.customForm p { - margin-top: 8px; -} -section.accounts input.delete, -section.accounts input.delete:visited { - background-color: #FFF; - color: #8B4513; - border: 1px solid #8B4513; -} -section.accounts input.delete:hover { - color: #fff; - background-color: #ffffff; - border: 1px solid #8B4513; -} -input.add-account, -input.add-account:visited { - background: url(../images/addNewAccount.png) 0 center no-repeat; - color: #fff; - padding-left: 35px; -} -input.add-account:hover { - color: #fff; - background-color: #ffffff; - background: url(../images/addNewAccountOver.png) 0 center no-repeat; -} -.disabledSubmit { - color: #000000 ! important; - background-color: #DD9F00 ! important; - cursor: default ! important; -} -/* -------------------------------------------------> */ -/* CONTACT FORM ------------------------------------> */ -/* -------------------------------------------------> */ -#contact_form input[type="text"] { - width: 20em; -} -#contact_form textarea { - width: 40em; -} -/* -------------------------------------------------> */ -/* ASSOCIATE PROFILE -------------------------------> */ -/* -------------------------------------------------> */ -#associateProfileBackgroundThree { - padding:7px 94px 26px 12px; - margin-top:-136px; -} -#associateProfileBackgroundTwo { - padding:7px 94px 40px 0; - margin-top:-136px; -} -#associateProfileBackgroundFour { - margin-top:-12px; -} - -/* -------------------------------------------------> */ -/* CLASS HIERARCHY --------------------------------> */ -/* -------------------------------------------------> */ -span.headerSpanPlus { - width: 12px; - background: url(../images/green_plus_sign.gif) left center no-repeat; - cursor:default; -} -span.headerSpanMinus { - width: 12px; - background: url(../images/green_minus_sign.gif) left center no-repeat; - cursor:default; -} -span.subclassExpandPlus { - padding-right: 14px; - background: url(../images/green_plus_sign.gif) left center no-repeat; - cursor:default; -} -span.subclassExpandMinus { - padding-right: 14px; - background: url(../images/green_minus_sign.gif) left center no-repeat; - cursor:default; -} -/* -------------------------------------------------> */ -/* PAGE MANAGEMENT --------------------------------> */ -/* -------------------------------------------------> */ -.expandArrow { - background:url(../images/green_plus_sign.gif) right center no-repeat; - min-height:18px; -} -.collapseArrow { - background:url(../images/green_minus_sign.gif) right center no-repeat; - min-height:18px; -} - -.affiliations { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - font-weight: bold; -} -/* -------------------------------------------------> */ -/* ARTICLESTYLES --------------------------------> */ -/* -------------------------------------------------> */ -.articleExcerpt { - background-color: #ffffff; - /*border: 1px solid #F6F6F6;*/ - font-family: "IPH Astra Serif" !important; - font-size: 1.4rem !important; -} -.articleExcerpt >div.htmlExcerpt >p.Textbody { - font-family: "IPH Astra Serif" !important; - font-size: 1.3rem !important; - padding-top: 10px!important; -} -.htmlExcerpt h1:first-child { - display: none; -} -.htmlExcerpt h2:first-child { - display: none; -} -.htmlExcerpt h3:first-child { - display: none; -} -.htmlExcerpt >li >p.Textbody { - font-family: "IPH Astra Serif" !important; - font-size: 1.3rem !important; - padding-top: 10px!important; -} -.articleExcerpt >div.htmlExcerpt >p.Textbody >span { - font-family: "IPH Astra Serif" !important; - font-size: 1.3rem !important; -} -button.collapsible { - background-color: #F6F6F6; - /*border: 1px solid #F6F6F6 !important;*/ - outline: none; - background-image: url(../images/arrow-down-big.svg); - background-repeat: no-repeat; - background-position: 1% 50%; - padding-left: 40px !important; - font-family: "IPH Astra Serif"; - font-size: 1.4rem !important; - cursor: pointer; - padding: 14px; - width: 100%; - text-align: left; - border: none; -} -button.collapsible:visited { - -webkit-appearance: none; - -moz-appearance: none; - border: 0px; -} - -button.collapsible.active { - -webkit-appearance: none; - -moz-appearance: none; - border: 1px solid #F6F6F6; - outline: none; - background-image: url(../images/arrow-top-big.svg); - background-repeat: no-repeat; - background-position: 1% 50%; -} -button.collapsible.active:focus { - background-color: #F6F6F6; - border: 1px solid #F6F6F6; -} -button.collapsible.metadataAuthors { - background-color: #FFFAF0; - border-bottom: 1px dashed #9C9C9C; - padding: 18px; - width: 100%; - outline: none; - border-left: 0px; - border-right: 0px; - border-top: 0px; - text-align:left; - margin-top: 0px; - background-image: url(../images/arrow-top.svg); - background-repeat: no-repeat; - background-position: 1% 50%; -} -button.collapsible.metadataAuthors.active { - background-color: #ffffff; - border-bottom: 1px dashed #9C9C9C; - padding: 18px; - width: 100%; - outline: none; - border-left: 0px; - border-right: 0px; - border-top: 0px; - text-align:left; - margin-top: 0px; - background-image: url(../images/arrow-down.svg); - background-repeat: no-repeat; - background-position: 1% 50%; -} -.metadataAuthors { - margin-top: 10px; - padding-left: 15px; -} -.metadataRubrics { - margin-top: 10px; - padding-left: 15px; -} -button.collapsible.metadataRubrics { - background-color: #FFFAF0; - border-bottom: 1px dashed #9C9C9C; - padding: 18px; - width: 100%; - outline: none; - border-left: 0px; - border-right: 0px; - border-top: 0px; - text-align:left; - margin-top: 0px; - background-image: url(../images/arrow-top.svg); - background-repeat: no-repeat; - background-position: 1% 50%; -} -button.collapsible.metadataRubrics.active { - background-color: #ffffff; - border-bottom: 1px dashed #9C9C9C; - padding: 18px; - width: 100%; - outline: none; - border-left: 0px; - border-right: 0px; - border-top: 0px; - text-align:left; - margin-top: 0px; - background-image: url(../images/arrow-down.svg); - background-repeat: no-repeat; - background-position: 1% 50%; -} -.authors { - width: 100%; - border-top: 1px solid #8B4513; - margin-top: 20px; - margin-bottom: 10px; - text-align: right; - padding-top: 10px; - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.3rem; -} -.works { - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; - margin-left: 30px; - padding-left: 20px; -} -.works >li { - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; - margin-bottom: 1.3em; - display: list-item; - list-style-image: url(../images/bullet_icon.png); -} -.works >div.work >p { - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; -} -.works >h2.label { - background-image: url(../images/book_icon.png); - background-repeat: no-repeat; - background-position: left center; - padding-left: 40px; - font-family: IPH Astra Serif; - font-size: 1.4rem; - font-style: normal; - margin-left: -50px; -} -.virtualWorks { - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; -} -.virtualWorks.virtualArticlePart >div.virtualWorks { - padding-top: 10px; - padding-bottom: 10px; -} -.virtualArticleWorks >div.virtualWorks >div.work { - background-image: url(../images/bullet_icon.png); - background-repeat: no-repeat; - background-position: left center; - margin-left: 30px; - padding-left: 20px; -} -.virtualWorks.virtualArticlePart >div.virtualWorks >div.work >p { - background-image: url(../images/bullet_icon.png); - background-repeat: no-repeat; - background-position: left center; - margin-left: 30px; - padding-left: 20px; -} -.bibliography { - margin-left: 30px; - padding-left: 20px; - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; -} -.bibliography_entry >p { - font-family: IPH Astra Serif; - font-style: italic; - font-size: 1.2rem; -} -.virtualBibliography.virtualArticlePart >div.virtualBibliography >.bibliography { - background-image: url(../images/bullet_icon.png); - background-repeat: no-repeat; - background-position: left center; -} -.virtualBibliography.virtualArticlePart >div.virtualBibliography { - padding-top: 10px; - padding-bottom: 10px; -} -.searchResult { - margin-top: 15px; - font-family: "IPH Astra Serif"; - font-style: normal; - font-size: 1.4rem; - border-bottom: 1px solid #dde4e3; -} -.searchResult >a { - font-family: IPH Astra Serif; - font-style: normal; - font-size: 1.2rem; - color: #000000; - font-weight: bold; -} -.searchResult >a:hover { - color: #8B4513; -} -.virtualArticleBiblio >div.virtualBibliography { - margin-top: 10px; -} -.expandedAffilations { - padding-top: 10px; - padding-bottom: 10px; - padding-left: 20px; -} -.expandedAffilations span { - color: #696969; - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - line-height: 1.4em; -} -.virtualArticleSwitch { - border-top: 1px solid #8B4513; - border-bottom: 1px solid #dde4e3; - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-start; - align-items: baseline; - background-color: #F6F6F6; -} -.virtualArticleSwitch >label.switch { - font-family: IPH Astra Serif; - font-style: normal; - font-size: 1.3rem; - padding-bottom: 15px; - padding-top: 9px; - display: flex; - align-items: center; -} -.virtualArticleSwitch >button { - all: unset; - cursor: pointer; - font-family: "IPH Astra Serif"; - font-size: 1.3rem; - padding: 15px; - background-color: #f8eccc; -} -.virtualArticleBiblio >div.virtualBibliography >div.bibliography { - background-image: url(../images/bullet_icon.png); - background-repeat: no-repeat; - background-position: left center; -} -.searchhits li { - margin-top: 0px; -} - -ul.dropdown li#user-menu a { - font-family: "Roboto"; - font-size: 1rem; -} -ul.dropdown ul.sub_menu { - background-color: #000000; -} -ul.dropdown ul.sub_menu li { - background: url(../images/arrow-menu-account.gif) 7px 8px no-repeat; -} -ul.dropdown ul.sub_menu li a { - background-color: #000000; - color: #ffffff !important; -} -ul.dropdown ul.sub_menu li a:hover { - color: #DD9F00; -} -.individual.loggedIn >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.individual >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.entity >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.entity.loggedIn >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.display.loggedIn >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.display >div#articleWrapper { - width: 80%; - margin-left: auto; - margin-right: auto; - display: flex; - flex-direction: row-reverse; - flex-wrap: nowrap; - justify-content: space-between; -} -.individual.loggedIn >div#articleWrapper >div#searchRightpanel { - width: 27%; - margin-left: 3%; -} -.individual >div#articleWrapper >div#searchRightpanel { - width: 30%; - margin-left: 3%; -} -.entity >div#articleWrapper >div#searchRightpanel { - width: 30%; - margin-left: 3%; -} -.entity.loggedIn >div#articleWrapper >div#searchRightpanel { - width: 27%; - margin-left: 3%; -} -.display > div#articleWrapper > div#searchRightpanel { - width: 30%; - margin-left: 3%; -} -.individual.loggedIn >div#articleWrapper >div#wrapper-content { - width: 70%; -} -.individual >div#articleWrapper >div#wrapper-content { - width: 70%; -} -.individual >div#articleWrapper >div#searchRightpanel >section#search >div.search-form-container >form#custom-search { - justify-content: right; -} -.individual.loggedIn >div#articleWrapper >div#searchRightpanel >section#search >div.search-form-container >form#custom-search { - justify-content: right; -} -.home.loggedIn >div#wrapper-content { - margin-left: auto; - margin-right: auto; - display: flex; - justify-content: center; -} -.home >div#wrapper-content { - margin-left: auto; - margin-right: auto; - display: flex; - justify-content: center; -} - -.issues >div >p { - font-size: 1.3rem; - font-family: "IPH Astra Serif"; -} -.rubrics >div#articleWrapper >div#wrapper-content >div.rubricContents >button.collapsible { - background-color: #efe9d9; - background-image: none; - padding-left: 1%; -} -.rubrics >div#articleWrapper >div#wrapper-content >button.collapsible { - padding-left: 1% !important; -} -.rubrics >div#articleWrapper >div#wrapper-content >div.rubricContents >div.rubricContents >button.collapsible { - background-image: none; -} -.rubrics >div#articleWrapper >div#wrapper-content >div.rubricContents >div.rubricContents >div.rubricContents >button.collapsible { - background-image: none; -} -.rubrics >div#articleWrapper >div#wrapper-content >div.rubricContents >div.rubricContents >div.rubricContents >div.rubricContents >button.collapsible { - background-image: none; -} -button.collapsible.active { - background-color: #F6F6F6; -} -.rubrics >div#articleWrapper >div#wrapper-content >button.collapsible { - background-color: transparent; - border-bottom: 1px solid #dde4e3 !important; - background-image: none; -} -.affiliations >span { - font-family: "IPH Astra Serif"; - font-size: 1.1rem; -} -.parentRubric >li >a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - color: #8B4513; -} -.parentRubric >li { - margin-bottom: 8px; -} -.childRubric a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -.childRubric { - list-style:none; - border:none; - padding: 5px; - width: 100%; - text-align:left; -} -.childRubric > a:hover { - color: #8B4513; -} -#individual-intro.person { - margin-top: 0px; -} -#articleHeaderWrapper { - display: flex; - flex-direction: column; - flex-wrap: nowrap; - justify-content: space-between; - width: 100%; -} -.keywords { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -.biblio >h2.label { - background-image: url(../images/book_icon.png); - background-repeat: no-repeat; - background-position: left center; - font-family: "IPH Astra Serif"; - font-size: 1.4rem; - padding-left: 40px; -} -.biblio >li { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - font-style: italic; - margin-bottom: 1.3em; - display: list-item; - list-style-image: url(../images/bullet_icon.png); - margin-left: 40px; -} -#individual-intro.person #individual-info { - width:80%; - margin-bottom: 0px; -} -#share-contact { - width: 16%; -} -li.nonSelectedGroupTab { - background-color: #efe9d9; -} -button#scrollToTopBtn { - all: unset; - background-image: url(../images/to_up.png); - background-repeat: no-repeat; - background-position: top center; - cursor: pointer; - font-size: 0.8rem; - text-transform: uppercase; - font-family: "Roboto"; - color: #ffffff; - height: 62px; - margin-top: 45px; -} -button#scrollToTopBtn:hover { - background-image: url(../images/to_up_hover.png); - background-repeat: no-repeat; - background-position: top center; -} -span.iconControlsNotEditable { - top: 0px; - position: relative; - padding-top: 5px; -} -span.iconControlsEditable { - position: relative; - top: 0px; - padding-top: 5px; -} -.expandSwitch { - width: auto; - text-align: center; - font-family: "Roboto"; - font-size: 1rem; - text-align: center; - /*background-color: #000000;*/ - /*background-image: url(../images/expand-label-image.svg); - background-repeat: no-repeat; - background-position: right bottom;*/ - /*margin-top: -1px; - border: 1px solid #8B4513; - border-bottom-left-radius: 2em;*/ - /*clip-path:polygon(10% 0%, 100% 0%, 100% 100%, 0% 100%);*/ -} - -#articleTitleWrapper { - width: 100%; - /*display: flex;*/ - border-bottom: 1px solid #8B4513; - /*flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start;*/ - padding-bottom: 6px; -} -.articleToolsContainer { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: space-between; - border-bottom: 1px solid #8B4513; - background-color: #F6F6F6; - width: 100%; -} -#articleIconsWrapper { - margin-top: 25px; -} -#print { - all: unset; - cursor: pointer; - padding-left: 8px; - padding-top: 5px; - padding-right: 10px; -} -.articleButtons { - /*width: 10%;*/ - display: flex; - justify-content: flex-end; -} -#save { - all: unset; -} -#exportPdf { - all: unset; -} - -#tocPlaceHolder { - margin-top: 10px; - border: 1px solid #8B4513; -} -#tocName { - text-align: center; - font-family: "Roboto"; - font-size: 1.2rem; - border-bottom: 1px solid #8B4513; - padding-top: 7px; - padding-bottom: 7px; -} -#wrapperTocButtons { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: space-between; - font-size: 1rem; - font-family: "Roboto"; - padding-top: 10px; - padding-bottom: 10px; - border-bottom: 1px dashed #8B4513; - color: #000000; - background-color: #ffffff!important; -} -#tocExpandAll:hover { - cursor: pointer; - color: #8B4513; -} -#tocCollapseAll:hover { - cursor: pointer; - color: #8B4513; -} -#tocExpandImageAll { - float: left; - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; -} -#tocCollapseImageAll { - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - float: right; -} -.tocElementSwitchImage { - padding-right: 10px; - cursor: pointer; -} -.tocElement >div.tocElement { - padding-left: 20px; - background-color: #ffffff; -} -.tocElement >div.tocElement >div.tocElementName { - padding-left: 14px; - background-image: none; - margin-left: 0px; -} -#tocPlaceHolder >div { - background-color: #F6F6F6; -} -#tocPlaceHolder a { - font-family: "Roboto"; - font-size: 1rem; -} -.tocElementName { - padding-left: 5px; - margin-left: 8px; - padding-top: 5px; - padding-bottom: 5px; -} -.display-title-editable { - font-size: 1.15em!important; - padding-top: 7px; -} -.collapsibleLink { - font-family: "IPH Astra Serif"; - font-size: 1.3rem; - cursor: pointer; -} -.collapsibleLink:hover { - color: #8B4513; -} -.label.collapsible { - padding-top: 10px; - padding-right: 10px; - padding-bottom: 10px; - border-bottom: 1px dashed #9C9C9C; - background-color: #FDF5E6; -} -.collapsible.collapsed { - padding: 4px 4px 4px 10px; - background-color: #fdfaf5; -} -.collapsible.collapsed >div.collapsibleLink { - background-image: url(../images/arrow-down-big.svg); - background-repeat: no-repeat; - background-position: left center; - cursor: pointer; - padding-left: 30px; -} -.collapsible.collapsed >div.collapsibleLink >b { - font-weight: normal; -} -.collapsible.expanded { - padding: 4px 4px 4px 10px; - background-color: #fdfaf5; -} -.collapsible.expanded >div.collapsibleLink { - background-image: url(../images/arrow-top-big.svg); - background-repeat: no-repeat; - background-position: left center; - cursor: pointer; - padding-left: 30px; - -} -.collapsible.expanded >div.collapsibleLink >b { - font-weight: normal; -} -.searchTOC { - display: none; -} -span#searchHelp { - display: none; -} -.searchpages >span { - font-size: 1.2rem; - font-family: "IPH Astra Serif"; - background-color: #FDF5E6; - padding: 0 0.4em; - border-radius: 3px; - margin-left: 0px; - margin-right: 0px; -} -.searchpages a { - margin-left: 0.3em; - margin-right: 0.3em; -} -p.snippet { - font-size: 1.1rem; - margin-bottom: 0.9em; -} -p.snippet >strong { - color: #8B4513; -} -.searchpages { - border-top: 1px solid #dde4e3; - padding-top: 20px; -} -.expandedContent { - padding-left: 10px; - padding-top: 10px; - margin-bottom: 10px; - padding-bottom: 5px; - border-top: 1px solid #dde4e3; -} -.expandedContent a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -.childArticle { - list-style:none; - border:none; - padding: 5px; - width: 100%; - text-align:left; -} -.childArticle a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -.childExcerpt { - list-style:none; - border:none; - padding: 5px; - width: 100%; - text-align:left; -} -.childExcerpt a { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -input#expandCB { - display: none; -} -label.switch { - padding-top: 6px; - padding-left: 9px; - padding-right: 9px; -} -.collapseTextControl:hover { - color: #8B4513; -} -.expandTextControl:hover { - color: #8B4513; -} -label.switch >.expandTextControl >img { - padding-left: 6px; -} -label.switch >.collapseTextControl >img { - padding-left: 6px; -} -.firstPub { - padding-bottom: 15px; - padding-top: 8px; -} -.firstPub .label { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - margin-top: 0px; - margin-bottom: .2em; -} -.firstPub li { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; -} -.affilation { - margin-bottom: 12px; -} -.expandedAuthors >.affilation { - font-family: "IPH Astra Serif"; - line-height: 1.6em; -} -.expandedAuthors >.affilation >b { - font-family: "IPH Astra Serif"; - font-size: 1.2rem; - padding-top: 6px; - padding-bottom: 5px; - padding-right: 5px; - border-bottom: 1px dashed #dde4e3; - border-top: 1px solid #dde4e3; - display: block; - font-weight: bold; - margin-bottom: 4px; -} -.authorOrgName { - font-family: "IPH Astra Serif"; - font-size: 1.1rem; - color: #4F4F4F; -} -.authorOrgAdress { - font-family: "IPH Astra Serif"; - font-size: 1.1rem; - color: #4F4F4F; -} -.wrapperExpandedKeywords { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - list-style: none; - border-top: 1px solid #dde4e3; - padding-top: 10px; -} -.wrapperExpandedKeywords >li { - border-right: 1px solid #8B4513; - font-size: 1.2rem; - font-family: "IPH Astra Serif"; - padding-right: 8px; - padding-left: 8px; - margin-bottom: 5px; - margin-top: 5px; -} -.wrapperExpandedKeywords > li:last-child { - border-right: none; -} -.rubricsList { - border-top: 1px solid #dde4e3; - padding-left: 10px; - padding-top: 10px; - line-height: 1.7em; - margin-bottom: 10px; -} -.articleList { - border-top: 1px solid #dde4e3; - padding-left: 10px; - padding-top: 10px; - line-height: 1.7em; - margin-bottom: 10px; -} -.nonePubAuthors { - padding-left: 40px; - padding-bottom: 4px; - padding-top: 4px; -} -#virtualArticleCheck { - appearance: none; - -webkit-appearance: none; - -moz-appearance: none; -} -#virtualArticleCheck[type="checkbox"] { - border: 1px solid #8B4513; - background-color: #ffffff; - width: 20px; - height: 20px; - margin-left: 15px; - outline: none; -} -#virtualArticleCheck[type="checkbox"]:hover { - background-color: #F1F1F1; - outline: none; -} -#virtualArticleCheck[type="checkbox"]:checked { - background-color: #EAD6A2; - background-image: url(../images/check-icon.svg); - background-repeat: no-repeat; - background-position: center center; - outline: none; -} -.toolsWrapper { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-end; -} -#metadataExpandCB { - display: none; -} -.metaDataName { - text-transform: none; - border-bottom:1px solid #dde4e3; -} -.metaDataName.collapsible.collapsed > div.collapsibleLink { - font-size: 1.3rem; - font-family: "IPH Astra Serif"; -} -.metaDataName.collapsible.expanded > div.collapsibleLink { - font-size: 1.3rem; - font-family: "IPH Astra Serif"; -} -.autoMetadataExpand >div.collapsible.collapsed > div.collapsibleLink { - font-size: 1.2rem; - font-family: "IPH Astra Serif"; -} -.autoMetadataExpand >div.collapsible.expanded > div.collapsibleLink { - font-size: 1.2rem; - font-family: "IPH Astra Serif"; -} -.metaDataName.collapsible.collapsed { - padding: 10px; - background-color: #FDF5E6; -} -.metaDataName.collapsible.expanded { - padding: 10px; - background-color: #FDF5E6; -} -.metadataSwitch >.expandSwitch >label.switch >.expandTextControl >img { - padding-left: 0px; - padding-right: 8px; - padding-top: 9px; - float: left; -} -.metadataSwitch >.expandSwitch >label.switch >.collapseTextControl >img { - padding-left: 0px; - padding-right: 6px; - padding-top: 9px; - float: left; -} -#rubricFollow { - display: inline; -} -#rubricFollow a { - font-size: 0.9rem; - padding-left: 10px; - vertical-align: middle; - background-image: url(../images/arrow-right.svg); - background-position: left center; - background-repeat: no-repeat; - color: #8B4513; -} -.tocElementLeafImage { - padding-left: 4px; - padding-right: 12px; -} - -/* Modal windows */ -#userSettingsModal { - display: none; /* Hidden by default */ - position: fixed; /* Stay in place */ - z-index: 1; /* Sit on top */ - padding-top: 100px; /* Location of the box */ - left: 0; - top: 0; - width: 100%; /* Full width */ - height: 100%; /* Full height */ - overflow: auto; /* Enable scroll if needed */ - background-color: rgb(0,0,0); /* Fallback color */ - background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ -} - -/* Modal Content */ -.modal-content { - background-color: #fefefe; - margin: auto; - padding: 30px 30px 15px 30px; - border: 1px solid #888; - width: 60%; -} -.modal-content >label { - display: flex; - flex-direction: row; - font-size: 1.2rem; - font-family: "Roboto"; - align-items: baseline; - margin-bottom: 15px; -} -#expandSettingsCB { - -moz-appearance: none; -} -#expandSettingsCB[type="checkbox"] { - border: 1px solid #8B4513; - width: 14px; - height: 14px; - margin-left: 8px; -} -#expandSettingsCB[type="checkbox"]:checked { - background-color: #EAD6A2; - background-image: url(../images/check-icon.svg); - background-repeat: no-repeat; - background-position: center center; - outline: none; - background-size: 12px 12px; -} -#metadataExpandSettingsCB { - -moz-appearance: none; -} -#metadataExpandSettingsCB[type="checkbox"] { - border: 1px solid #8B4513; - width: 14px; - height: 14px; - margin-left: 8px; -} -#metadataExpandSettingsCB[type="checkbox"]:checked { - background-color: #EAD6A2; - background-image: url(../images/check-icon.svg); - background-repeat: no-repeat; - background-position: center center; - outline: none; - background-size: 12px 12px; -} -#titleSettings { - font-size: 1.4rem; - font-family: "Roboto"; - padding-bottom: 8px; - width: 80%; -} -#userViewSettings { - border: none; - cursor: pointer; - background: none; - padding-top: 3px; - padding-right: 0px; - padding-left: 4px; -} -.modalWrapper { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - width: 100%; - border-bottom: 1px solid #8B4513; - margin-bottom: 15px; - justify-content: space-between; -} -#closeModalWindow { - color: #8B4513; - width: 20%; - text-align: right; - font-size: 3rem; - font-family: "IPH Astra Serif"; -} -#closeModalWindow:hover, -#closeModalWindow:focus { - color: black; - text-decoration: none; - cursor: pointer; -} - -.removeDocFromSearch { - border-inline-width: thin; - border-top-width: thin; - border-bottom-width: thin; - border-color: #8B4513; - border-inline-style: solid; - border-top-style: solid; - border-bottom-style: solid; - margin-left: 0.4em; - padding: 0.0em 0.2em 0.1em 0.2em; -} - -/* -------------------------------------------------> */ -/* FONTS --------------------------------> */ -/* -------------------------------------------------> */ -@font-face { - font-family: "IPH Serif"; - font-weight: normal; - src: url("../fonts/IPHSerif-Regular.woff2") format("woff2"), - url("../fonts/IPHSerif-Regular.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Serif"; - font-style: italic; - src: url("../fonts/IPHSerif-Italic.woff2") format("woff2"), - url("../fonts/IPHSerif-Italic.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Serif"; - font-weight: bold; - src: url("../fonts/IPHSerif-Bold.woff2") format("woff2"), - url("../fonts/IPHSerif-Bold.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Serif"; - font-style: italic; - font-weight: bold; - src: url("../fonts/IPHSerif-BoldItalic.woff2") format("woff2"), - url("../fonts/IPHSerif-BoldItalic.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Astra Serif"; - font-weight: normal; - src: url("../fonts/IPHAstraSerif-Regular.woff2") format("woff2"), - url("../fonts/IPHAstraSerif-Regular.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Astra Serif"; - font-weight: bold; - src: url("../fonts/IPHAstraSerif-Bold.woff2") format("woff2"), - url("../fonts/IPHAstraSerif-Bold.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Astra Serif"; - font-style: italic; - src: url("../fonts/IPHAstraSerif-Italic.woff2") format("woff2"), - url("../fonts/IPHAstraSerif-Italic.ttf") format("truetype"); -} -@font-face { - font-family: "IPH Astra Serif"; - font-style: italic; - font-weight: bold; - src: url("../fonts/IPHAstraSerif-BoldItalic.woff2") format("woff2"), - url("../fonts/IPHAstraSerif-BoldItalic.ttf") format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-weight: normal; - src: url("../fonts/Roboto-Regular.woff2") format("woff2"), - url("../fonts/Roboto-Regular.ttf") format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-weight: bold; - src: url("../fonts/Roboto-Bold.woff2") format("woff2"), - url("../fonts/Roboto-Bold.ttf") format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: italic; - src: url("../fonts/Roboto-Italic.woff2") format("woff2"), - url("../fonts/Roboto-Italic.ttf") format("truetype"); -} -@font-face { - font-family: "Roboto"; - font-style: italic; - font-weight: bold; - src: url("../fonts/Roboto-BoldItalic.woff2") format("woff2"), - url("../fonts/Roboto-BoldItalic.ttf") format("truetype"); -} -/* -------------------------------------------------> */ -/* SCREEN RESOLUTION --------------------------------> */ -/* -------------------------------------------------> */ -@media screen and (max-width: 1630px) { - #querybuilder-container { - width: 70%; - } -} - -@media screen and (max-width: 1500px) { - #topArea { - width: 90%; - } - ul#main-nav { - width: 90%; - } - #wrapper-content { - width: 90%; - } - #switch-to-extended-searchform { - width: 100%; - } - #querybuilder-container { - width: 70%; - } - #footerWrapper { - width: 90%; - } - .individual >div#articleWrapper { - width: 90%; - } - .individual.loggedIn >div#articleWrapper { - width: 90%; - } - .entity >div#articleWrapper { - width: 90%; - } - .entity.loggedIn >div#articleWrapper { - width: 90%; - } - .display.loggedIn >div#articleWrapper { - width: 90%; - } - .display >div#articleWrapper { - width: 90%; - } -} - -@media screen and (max-width: 1300px) { - #topArea { - width: 100%; - } - ul#main-nav { - width: 100%; - } - h1.vivo-logo { - top: 45px; - } - #wrapper-content { - width: 95%; - } - #querybuilder-container { - width: 90%; - } - #footerWrapper { - width: 95%; - } - ul#alpha-browse-individuals { - font-size: 1.3rem; - } - ul#browse-classes { - width: 24%; - } - ul#browse-classes li { - font-size: 1.1rem; - } - .individual >div#articleWrapper { - width: 95%; - } - .entity >div#articleWrapper { - width: 95%; - } - .entity.loggedIn >div#articleWrapper { - width: 95%; - } - .individual.loggedIn >div#articleWrapper { - width: 95%; - } - .display.loggedIn >div#articleWrapper { - width: 95%; - } - .display >div#articleWrapper { - width: 95%; - } -} - -@media screen and (max-width: 1100px) { - ul#alpha-browse-individuals { - font-size: 1.2rem; - } - ul#alpha-browse-individuals a { - padding-left: 4px; - } - h3.selected-class { - font-size: 1.2rem; - } - ul#alpha-browse-individuals a:hover, ul#alpha-browse-individuals a.selected { - background: none; - } - ul#main-nav { - font-size: 1rem; - } - #simple-search-container { - width: 70%; - } - #switch-to-extended-searchform { - width: 100%; - } - footer p.copyright small { - font-size: 0.8rem; - } - #main-nav li a { - font-size: 1rem; - } -} - -@media screen and (max-width: 900px) { - h1.vivo-logo { - background-size: 100%; - top: 50px; - } - ul#main-nav { - font-size: 1rem; - } - #main-nav li a { - padding-left: 15px; - padding-right: 15px; - font-size: 0.8rem; - } - #wrapper-content { - width: 95%; - padding-top: 10px; - } - #querybuilder-container { - width: 100%; - } - #custom-search { - width: 80%; - } - #switch-to-extended-searchform { - width: 80%; - } - #projectDescription { - width: 100%; - } - #membersDescription { - width: 100%; - } - #contactDescription { - width: 100%; - } - #registrationDescription { - width: 100%; - } - #footerWrapper { - width: 100%; - } - #stats > li { - margin-left: 5px;} - #stats li { - width: 80px; - } - button.collapsible { - background-position: 2% 50%; - } - ul#alpha-browse-individuals a { - padding-left: 3px; - } - ul#browse-classes a { - line-height: 1.3em; - font-size: 0.92rem; - } - p.aboutProject { - padding-right: 10px; - } - #simple-search-container { - width: 80%; - } - #titleProject { - text-align: center; - background-image: none; - } - #registrationDescription >p.TableContents { - padding-left: 10px !important; - } - footer p.copyright { - padding-left: 30px; - } - ul#footer-nav { - padding-right: 30px; - } -} - -@media screen and (max-width: 800px) { - input.form-control { - font-size: 0.8rem; - } - input[type="text"], - select, - input[type="password"] { - font-size: 0.8rem; - } - .btn-success.set-json { - font-size: 0.8rem; - } - #btn-reset-button { - font-size: 0.8rem; - } - #btn-search-expand { - font-size: 0.8rem; - height: 44px; - } - .query-builder .btn-xs, .query-builder .btn-group-xs>.btn { - font-size: 0.8rem; - } - #SelectResults { - font-size: 0.8rem; - } - #hitsPerPageSelect { - font-size: 0.8rem; - } - #OuterWrapperButtons { - padding-top: 10px; - } - #builder_group_0 { - padding-bottom: 5px; - } - .btn.btn-xs.btn-success { - font-size: 0.8rem; - } - .btn.btn-xs.btn-danger { - font-size: 0.8rem; - } - .query-builder .btn-primary.active { - font-size: 0.8rem; - } - .btn.btn-xs.btn-primary { - font-size: 0.8rem; - } - ul#main-nav { - font-size: 0.9rem; - } - #main-nav li a { - padding-left: 14px; - padding-right: 14px; - } - #SearchTitle { - font-size: 1.1rem; - } - nav#alpha-browse-container { - width: 72%; - } - ul#browse-classes a { - font-size: 0.81rem; - line-height: 1.3em; - } - #menupage-intro h2 { - padding-bottom: 15px; - } - ul#alpha-browse-individuals { - font-size: 1rem; - } - ul#alpha-browse-individuals a { - padding-left: 1px; - } - #btn-get-standard-searchform { - font-size: 1.1rem; - padding-left: 24px; - } -} - -@media screen and (max-width: 720px) { - #stats li { - width: 80px; - } - #stats > li { - margin-left: 5px; - } - ul#main-nav { - font-size: 0.9rem; - } - #main-nav li a { - padding-left: 10px; - padding-right: 10px; - font-size: 0.7rem; - } - #SearchTitle { - font-size: 1.1rem; - } - #backgroundForm { - height: 30px; - } - #btn-get-standard-searchform { - font-size: 1.1rem; - padding-top: 4px; - padding-left: 25px; - } - ul#browse-classes a { - font-size: 0.8rem; - line-height: 1.2em; - } -} diff --git a/webapp/src/main/webapp/themes/iph/css/openSocial/gadgets.css b/webapp/src/main/webapp/themes/iph/css/openSocial/gadgets.css deleted file mode 100644 index 0998e535..00000000 --- a/webapp/src/main/webapp/themes/iph/css/openSocial/gadgets.css +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.gadgets-gadget-chrome { - float: left; - margin: 4px 6px 4px 12px; /* changed the left value from 0 tlw72*/ - border: 1px solid #CCC; - border: 1px solid #dfebe5; /*#7aa5d6;*/ -} -.col2 .gadgets-gadget-chrome { - margin-left: 9px; -} - -.gadgets-gadget -{ - width: 100%; - border: none; - background-color:#fff; /*tlw72*/ -} - -.gadgets-gadget-title-bar { - padding: 4px 4px 2px; - background-color: #EEEBE5; - background-color: #f1f2ee; /* #e5ecf9; */ -} -/*.gadgets-gadget-title-bar:hover { background-color: #e7e3db; } */ -.gadgets-gadget-title-bar img, -.gadgets-gadget-title-button { - vertical-align: top; -} - -/* title bar */ -.gadgets-gadget-title a, .gadgets-gadget-title a:hover, .gadgets-gadget-title a:visited { - /* font-weight: bold; */ - font-size: 16px; /*14px*/ - color: #2485AE; /*#CA7C29*/ - padding-left:8px; /*tlw72*/ - text-decoration: none; /*tlw72*/ -} -.EditBody .gadgets-gadget-title a { - color:#3B6394; -} -.EditBody .gadgets-gadget-title a:hover { - color:#1E416C; -} - -.gadgets-gadget-title-button-bar { - font-size: smaller; -} - -.gadgets-gadget-canvas-title { - color: #000; - padding-left: 6px; -} - -.gadgets-gadget-user-prefs-dialog { - background-color: #e5ecf9; -} - -.gadgets-gadget-user-prefs-dialog-action-bar { - text-align: center; - padding-bottom: 4px; -} - -.gadgets-gadget-title-button img { - border: 2px solid #4F5CC7; - border: none; - float: left; /*right*/ - margin-left: 2px; /*margin-right*/ - margin-top:6px; /*tlw72*/ -} -.EditBody .gadgets-gadget-title-button img { - float: left; - margin-right: 8px; -} - -.gadgets-gadget-content { - padding: 4px; -} - -.gadgets-log-entry { -} - -/* Used to style messages produced during rewriting by CajaContentRewriter */ -.gadgets-messages { - -} - -.gadgets-gadget-status { - font-weight: bold; - float: right; -/* text-align: center; */ - font-size: 12px; - padding-right: 6px; -} -* html .gadgets-gadget-status { margin-top: -18px; padding-right: 30px; } /* fudge line break for IE6 */ -*+html .gadgets-gadget-status { margin-top: -18px; padding-right: 30px; } /* fudge line break for IE7 */ - -/* list tool fix ticket #135 */ -* html #ctl00_ctl00_left_pnlOpenSocialTools { height: 130px; } -*+html #ctl00_ctl00_left_pnlOpenSocialTools { height: 130px; } -* html #ctl00_ctl00_left_pnlOpenSocialTools { margin-left: -8px; } diff --git a/webapp/src/main/webapp/themes/iph/css/page-createAndLink.css b/webapp/src/main/webapp/themes/iph/css/page-createAndLink.css deleted file mode 100644 index f71cee1c..00000000 --- a/webapp/src/main/webapp/themes/iph/css/page-createAndLink.css +++ /dev/null @@ -1,82 +0,0 @@ -#createAndLink select { - height: 2.5em; - margin-top: 0px; - margin-bottom: 0px; - padding-bottom: 0px; - padding-top: 0px; -} - -#createAndLink .citation_error:before { - content: url('../../../images/createAndLink/error.png'); - transform: scale(0.5); - margin-top: 10px; - margin-right: 10px; - float: left; -} -#createAndLink .citation_error { - height: 70px; -} -#createAndLink .citation_claimed:before { - content: url('../../../images/createAndLink/tick.png'); - transform: scale(0.75); - margin-top: -17px; - margin-left: 535px; - float: left; - position: absolute; -} -#createAndLink .citation_claimed:hover:before { - opacity: 0.2; -} -#createAndLink .citation_claimed .citation { - opacity: 0.2; -} -#createAndLink .citation_claimed:hover .citation { - opacity: 1.0; -} -#createAndLink .citation_type { - font-style: italic; - padding: 5px; -} -#createAndLink .citation_title { - font-weight: bold; -} -#createAndLink .citation_journal { - font-style: italic; -} -#createAndLink .claimed { - font-weight: bold; -} -#createAndLink .linked { - font-style: italic; -} -#createAndLink .entryId { - background-color: #3e8baa; /* #E0E0E0; */ - color: #ffffff; - padding: 5px; - font-weight: bold; - display: inline-block; -} -#createAndLink .entry { - border: 2px solid #3e8baa; /* #E0E0E0; */ - padding: 5px; -} -#createAndLink label { - display: inline; -} -#createAndLink .radioWithLabel:checked + .labelForRadio { - font-weight: bold; -} -#createAndLink .description { - padding-left: 22px; -} -#createAndLink .remainder { - font-style: italic; -} -#createAndLink .claim-for { - float: right; - border: 2px solid #3e8baa; /* #E0E0E0; */ - padding: 5px; -} -#createAndLink .claim-for h3 { - text-align: center; -} diff --git a/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css b/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css deleted file mode 100644 index 87398f3a..00000000 --- a/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css +++ /dev/null @@ -1,155 +0,0 @@ -icons: { - add_group: 'fas fa-plus-square', add_rule: 'fas fa-plus-circle', - remove_group: 'fas fa-minus-square', remove_rule: 'fas fa-minus-circle', - error: 'fas fa-exclamation-triangle' -} - -.rule-value-container > select{ - max-width: 380px; -} - -.query-builder, .query-builder * { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -.query-builder { - font-family: sans-serif; - width: 100%; -} - -.query-builder .hide { - display: none; -} - -.query-builder .pull-right { - float: right !important; - /*box-shadow: 0px 4px 2px #aeaeae;*/ -} - -.query-builder .btn { - text-transform: none; - display: inline-block; - padding: 6px 12px; - margin-bottom: 0px; - font-size: 16px; - font-weight: 400; - line-height: 1.42857; - text-align: center; - white-space: nowrap; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - user-select: none; - background-image: none; - /*border: 1px solid transparent;*/ - /*border-radius: 4px;*/ -} - -.query-builder .btn.focus, .query-builder .btn:focus, .query-builder .btn:hover { - color: #333; - text-decoration: none; -} - -.query-builder .btn.active, .query-builder .btn:active { - background-image: none; - outline: 0px none; -/* box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset; */ -} - -.query-builder .btn-success { - color: #000000; - background-color: #ffffff; - border: 0px; - font-family: Roboto; - /*box-shadow: 0px 4px 2px #aeaeae;*/ -} -.btn-group.pull-right.group-actions { - box-shadow: 0px 4px 2px #aeaeae; - /*margin-right: 10px;*/ -} - -.query-builder .btn-primary { - color: #000000; - background-color: #ffffff; - border: 1px dashed #000000 !important; -} - -.query-builder .btn-danger { - color: #000000; - background-color: #ffffff; - border: 0px; - box-shadow: 0px; -} - -button.btn.btn-xs.btn-danger { - /*box-shadow: 0px 0px 0px #000000;*/ - border-left: 1px solid #ead6a2 !important; - font-family: Roboto; -} - -.query-builder .btn-success.active, .query-builder .btn-success.focus, - .query-builder .btn-success:active, .query-builder .btn-success:focus, - .query-builder .btn-success:hover { - color: #000000; - background-color: #EAD6A2; - border: 0px; - /*border-color: #398439;*/ -} - -.query-builder .btn-primary.active, .query-builder .btn-primary.focus, - .query-builder .btn-primary:active, .query-builder .btn-primary:focus, - .query-builder .btn-primary:hover { - color: #000000; - background-color: #EAD6A2; - border-color: #000000; -} - -.query-builder .btn-danger.active, .query-builder .btn-danger.focus, - .query-builder .btn-danger:active, .query-builder .btn-danger:focus, - .query-builder .btn-danger:hover { - color: #000000; - background-color: #ffffff; - border-color: #AC2925; -} - -.query-builder .btn-group { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.query-builder .btn-group>.btn { - position: relative; - float: left; - border-left: 1px solid #ead6a2; -} - -.query-builder .btn-group>.btn:first-child { - margin-left: 0px; - border-left: none; -} - -.query-builder .btn-group>.btn:first-child:not(:last-child) { - border-top-right-radius: 0px; - border-bottom-right-radius: 0px; -} - -.query-builder .btn-group>.btn:last-child:not(:first-child) { - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; -} - -.query-builder .btn-group .btn+.btn, .query-builder .btn-group .btn+.btn-group, - .query-builder .btn-group .btn-group+.btn, .query-builder .btn-group .btn-group+.btn-group - { - margin-left: -1px; -} - -.query-builder .btn-xs, .query-builder .btn-group-xs>.btn { - padding: 5px 8px; - font-size: 1rem; - line-height: 1.5; - /*border-radius: 3px;*/ -} diff --git a/webapp/src/main/webapp/themes/iph/css/query-builder.css b/webapp/src/main/webapp/themes/iph/css/query-builder.css deleted file mode 100644 index 50018156..00000000 --- a/webapp/src/main/webapp/themes/iph/css/query-builder.css +++ /dev/null @@ -1,212 +0,0 @@ -/*! - * jQuery QueryBuilder 2.5.2 - * Copyright 2014-2018 Damien "Mistic" Sorel (http://www.strangeplanet.fr) - * Licensed under MIT (https://opensource.org/licenses/MIT) - */ -.query-builder .rules-group-container, .query-builder .rule-container, - .query-builder .rule-placeholder { - position: relative; - /*margin: 10px 10px 0 10px;*/ - /*border-radius: 5px;*/ - padding: 5px; - /*border-top: 1px dashed #000000; - border-left: 1px dashed #000000; - border-right: 1px dashed #000000;*/ - background: rgba(255, 255, 255, 0.9); -} - -.rule-container { - box-shadow: 0px 4px 4px #aeaeae; - margin-bottom: 10px; - margin-top: 10px; - -} - -.query-builder .rule-container .rule-filter-container, .query-builder .rule-container .rule-operator-container, - .query-builder .rule-container .rule-value-container, .query-builder .error-container, - .query-builder .drag-handle { - display: inline-block; - margin: 0 5px 0 0; - /*vertical-align: middle;*/ -} - -.query-builder .rules-group-container { - padding: 12px 20px 10px 20px; - /*border-right: 1px solid #8B4513; - border-left: 1px solid #8B4513; - border-top: 1px solid #8B4513; - border-bottom: 1px solid #8B4513;*/ - background-color: #efe9d9; - outline: 1px dashed #000000; - outline-offset: 0px; - margin-bottom: 10px; - font-family: Roboto; -} - -#builder_group_0 { - background-color: #F1F1F1; - margin-bottom: 0; - outline: 1px solid #F1F1F1; - outline-offset: -1px; - border-left: 1px solid #8B4513; - border-right: 1px solid #8B4513; - -} - -#builder_rule_1 { - margin-bottom: 10px; -} - -#builder_group_1 { - margin-top: 10px; - - /*border: 1px dashed #000000;*/ -} - -.query-builder .rules-group-header { - margin-bottom: 10px; -} - -.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active), - .query-builder .rules-group-header .group-conditions input[name$='_cond'] - { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - white-space: nowrap; -} - -.query-builder .rules-group-header .group-conditions .btn.readonly { - border-radius: 3px; -} - -.query-builder .rules-list { - list-style: none; - padding: 0 0 0 10px; - margin: 0; - box-shadow: 0px 0px #aeaeae; -} - -.query-builder .rule-value-container { - /*border-left: 1px solid #DDD;*/ - padding-left: 5px; -} - -.query-builder .rule-value-container label { - margin-bottom: 0; - font-weight: normal; -} - -.query-builder .rule-value-container label.block { - display: block; -} - -.query-builder .rule-value-container select, .query-builder .rule-value-container input[type='text'], - .query-builder .rule-value-container input[type='number'] { - padding: 5px; -} - -.query-builder .error-container { - display: none; - cursor: help; - color: #F00; -} - -.query-builder .has-error { - background-color: #FDD; - border-color: #F99; -} - -.query-builder .has-error .error-container { - display: inline-block !important; -} - -.query-builder .rules-list>*::before, .query-builder .rules-list>*::after - { - content: ''; - position: absolute; - left: -10px; - width: 10px; - height: calc(50% + 4px); - border-color: #000000; - border-style: dashed; -} - -.query-builder .rules-list>*::before { - top: -4px; - border-width: 0 0 1px 1px; -} - -.query-builder .rules-list>*::after { - top: 50%; - border-width: 0 0 0 1px; -} - -.query-builder .rules-list>*:first-child::before { - top: -12px; - height: calc(50% + 14px); -} - -.query-builder .rules-list>*:last-child::before { - /*border-radius: 0 0 0 4px;*/ -} - -.query-builder .rules-list>*:last-child::after { - display: none; -} - -.query-builder.bt-checkbox-glyphicons .checkbox input[type='checkbox']:checked+label::after - { - font-family: 'Glyphicons Halflings'; - content: '\e013'; -} - -.query-builder.bt-checkbox-glyphicons .checkbox label::after { - padding-left: 4px; - padding-top: 2px; - font-size: 9px; -} - -.query-builder .error-container+.tooltip .tooltip-inner { - color: #F99 !important; -} - -.query-builder p.filter-description { - margin: 5px 0 0 0; - background: #D9EDF7; - border: 1px solid #BCE8F1; - color: #31708F; - border-radius: 5px; - padding: 2.5px 5px; - font-size: .8em; -} - -.query-builder .rules-group-header [data-invert] { - margin-left: 5px; -} - -.query-builder .drag-handle { - cursor: move; - vertical-align: middle; - margin-left: 5px; -} - -.query-builder .dragging { - position: fixed; - opacity: .5; - z-index: 100; -} - -.query-builder .dragging::before, .query-builder .dragging::after { - display: none; -} - -.query-builder .rule-placeholder { - border: 1px dashed #BBB; - opacity: .7; -} \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/css/query-builder.default.css b/webapp/src/main/webapp/themes/iph/css/query-builder.default.css deleted file mode 100644 index 465fe2d6..00000000 --- a/webapp/src/main/webapp/themes/iph/css/query-builder.default.css +++ /dev/null @@ -1,173 +0,0 @@ -/*! - * jQuery QueryBuilder 2.5.2 - * Copyright 2014-2018 Damien "Mistic" Sorel (http://www.strangeplanet.fr) - * Licensed under MIT (https://opensource.org/licenses/MIT) - */ -.query-builder .rules-group-container, .query-builder .rule-container, .query-builder .rule-placeholder { - position: relative; - margin: 4px 0; - border-radius: 5px; - padding: 5px; - border: 1px solid #EEE; - background: rgba(255, 255, 255, 0.9); -} - -.query-builder .rule-container .rule-filter-container, -.query-builder .rule-container .rule-operator-container, -.query-builder .rule-container .rule-value-container, .query-builder .error-container, .query-builder .drag-handle { - display: inline-block; - margin: 0 5px 0 0; - vertical-align: middle; -} - -.query-builder .rules-group-container { - padding: 10px; - padding-bottom: 6px; - border: 1px solid #DCC896; - background: rgba(250, 240, 210, 0.5); -} - -.query-builder .rules-group-header { - margin-bottom: 10px; -} - -.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active), -.query-builder .rules-group-header .group-conditions input[name$='_cond'] { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; - white-space: nowrap; -} - -.query-builder .rules-group-header .group-conditions .btn.readonly { - border-radius: 3px; -} - -.query-builder .rules-list { - list-style: none; - padding: 0 0 0 15px; - margin: 0; -} - -.query-builder .rule-value-container { - border-left: 1px solid #DDD; - padding-left: 5px; -} - -.query-builder .rule-value-container label { - margin-bottom: 0; - font-weight: normal; -} - -.query-builder .rule-value-container label.block { - display: block; -} - -.query-builder .rule-value-container select, -.query-builder .rule-value-container input[type='text'], -.query-builder .rule-value-container input[type='number'] { - padding: 1px; -} - -.query-builder .error-container { - display: none; - cursor: help; - color: #F00; -} - -.query-builder .has-error { - background-color: #FDD; - border-color: #F99; -} - -.query-builder .has-error .error-container { - display: inline-block !important; -} - -.query-builder .rules-list > *::before, .query-builder .rules-list > *::after { - content: ''; - position: absolute; - left: -10px; - width: 10px; - height: calc(50% + 4px); - border-color: #CCC; - border-style: solid; -} - -.query-builder .rules-list > *::before { - top: -4px; - border-width: 0 0 2px 2px; -} - -.query-builder .rules-list > *::after { - top: 50%; - border-width: 0 0 0 2px; -} - -.query-builder .rules-list > *:first-child::before { - top: -12px; - height: calc(50% + 14px); -} - -.query-builder .rules-list > *:last-child::before { - border-radius: 0 0 0 4px; -} - -.query-builder .rules-list > *:last-child::after { - display: none; -} - -.query-builder.bt-checkbox-glyphicons .checkbox input[type='checkbox']:checked + label::after { - font-family: 'Glyphicons Halflings'; - content: '\e013'; -} - -.query-builder.bt-checkbox-glyphicons .checkbox label::after { - padding-left: 4px; - padding-top: 2px; - font-size: 9px; -} - -.query-builder .error-container + .tooltip .tooltip-inner { - color: #F99 !important; -} - -.query-builder p.filter-description { - margin: 5px 0 0 0; - background: #D9EDF7; - border: 1px solid #BCE8F1; - color: #31708F; - border-radius: 5px; - padding: 2.5px 5px; - font-size: .8em; -} - -.query-builder .rules-group-header [data-invert] { - margin-left: 5px; -} - -.query-builder .drag-handle { - cursor: move; - vertical-align: middle; - margin-left: 5px; -} - -.query-builder .dragging { - position: fixed; - opacity: .5; - z-index: 100; -} - -.query-builder .dragging::before, .query-builder .dragging::after { - display: none; -} - -.query-builder .rule-placeholder { - border: 1px dashed #BBB; - opacity: .7; -} diff --git a/webapp/src/main/webapp/themes/iph/css/query-builder.default.min.css b/webapp/src/main/webapp/themes/iph/css/query-builder.default.min.css deleted file mode 100644 index 19d64ae9..00000000 --- a/webapp/src/main/webapp/themes/iph/css/query-builder.default.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * jQuery QueryBuilder 2.5.2 - * Copyright 2014-2018 Damien "Mistic" Sorel (http://www.strangeplanet.fr) - * Licensed under MIT (https://opensource.org/licenses/MIT) - */ -.query-builder .rule-container,.query-builder .rule-placeholder,.query-builder .rules-group-container{position:relative;margin:4px 0;border-radius:5px;padding:5px;border:1px solid #eee;background:rgba(255,255,255,.9)}.query-builder .drag-handle,.query-builder .error-container,.query-builder .rule-container .rule-filter-container,.query-builder .rule-container .rule-operator-container,.query-builder .rule-container .rule-value-container{display:inline-block;margin:0 5px 0 0;vertical-align:middle}.query-builder .rules-group-container{padding:10px;padding-bottom:6px;border:1px solid #dcc896;background:rgba(250,240,210,.5)}.query-builder .rules-group-header{margin-bottom:10px}.query-builder .rules-group-header .group-conditions .btn.readonly:not(.active),.query-builder .rules-group-header .group-conditions input[name$='_cond']{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.query-builder .rules-group-header .group-conditions .btn.readonly{border-radius:3px}.query-builder .rules-list{list-style:none;padding:0 0 0 15px;margin:0}.query-builder .rule-value-container{border-left:1px solid #ddd;padding-left:5px}.query-builder .rule-value-container label{margin-bottom:0;font-weight:400}.query-builder .rule-value-container label.block{display:block}.query-builder .rule-value-container input[type=number],.query-builder .rule-value-container input[type=text],.query-builder .rule-value-container select{padding:1px}.query-builder .error-container{display:none;cursor:help;color:red}.query-builder .has-error{background-color:#fdd;border-color:#f99}.query-builder .has-error .error-container{display:inline-block!important}.query-builder .rules-list>::after,.query-builder .rules-list>::before{content:'';position:absolute;left:-10px;width:10px;height:calc(50% + 4px);border-color:#ccc;border-style:solid}.query-builder .rules-list>::before{top:-4px;border-width:0 0 2px 2px}.query-builder .rules-list>::after{top:50%;border-width:0 0 0 2px}.query-builder .rules-list>:first-child::before{top:-12px;height:calc(50% + 14px)}.query-builder .rules-list>:last-child::before{border-radius:0 0 0 4px}.query-builder .rules-list>:last-child::after{display:none}.query-builder.bt-checkbox-glyphicons .checkbox input[type=checkbox]:checked+label::after{font-family:'Glyphicons Halflings';content:'\e013'}.query-builder.bt-checkbox-glyphicons .checkbox label::after{padding-left:4px;padding-top:2px;font-size:9px}.query-builder .error-container+.tooltip .tooltip-inner{color:#f99!important}.query-builder p.filter-description{margin:5px 0 0 0;background:#d9edf7;border:1px solid #bce8f1;color:#31708f;border-radius:5px;padding:2.5px 5px;font-size:.8em}.query-builder .rules-group-header [data-invert]{margin-left:5px}.query-builder .drag-handle{cursor:move;vertical-align:middle;margin-left:5px}.query-builder .dragging{position:fixed;opacity:.5;z-index:100}.query-builder .dragging::after,.query-builder .dragging::before{display:none}.query-builder .rule-placeholder{border:1px dashed #bbb;opacity:.7} \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/css/reset.css b/webapp/src/main/webapp/themes/iph/css/reset.css deleted file mode 100644 index 2115fce7..00000000 --- a/webapp/src/main/webapp/themes/iph/css/reset.css +++ /dev/null @@ -1,102 +0,0 @@ -/* $This file is distributed under the terms of the license in LICENSE$ */ - -/* CSS Document -CSS reste by Eric Meyer: -The goal of a reset stylesheet is to reduce browser inconsistencies in things like default line heights, margins and font sizes of headings, and so on... http://meyerweb.com/eric/tools/css/reset/ -*/ - -html, -body, -div, -span, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -code, -del, -dfn, -em, -img, -q, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td { - margin: 0; - padding: 0; - border: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; - color: #000000; - font-weight: normal; -} -body { - line-height: 1.5em; -} -ol, -ul { - list-style: none; - font-weight: normal; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} -/* remember to highlight inserts somehow! */ -ins { - text-decoration: none; -} -del { - text-decoration: line-through; -} -/* tables still need 'cellspacing="0"' in the markup */ -table { - border-collapse: collapse; - border-spacing: 0; -} -/* New ones added to the default list */ -a { - text-decoration: none; -} -fieldset { - border-style: none; -} -legend { - display: none; -} diff --git a/webapp/src/main/webapp/themes/iph/css/screen.css b/webapp/src/main/webapp/themes/iph/css/screen.css deleted file mode 100644 index 26895243..00000000 --- a/webapp/src/main/webapp/themes/iph/css/screen.css +++ /dev/null @@ -1,30 +0,0 @@ -/* $This file is distributed under the terms of the license in LICENSE$ */ - -/**************************************** -**************************************** - __ __ __ __ __ ___ - /\ \/\ \\/\ \/\ \/\ \ / __`\ - \ \ \_/ |\ \ \ \ \_/ |/\ \L\ \ - \ \___/ \ \_\ \___/ \ \____/ - \/__/ \/_/\/__/ \/___/ - - -VIVO wilma theme: screen styles - - Original version - 2010-09-04 UI team - - Last updated - 2011-2-1 - -***************************************** -*****************************************/ - -@charset "UTF-8"; - -@import url("reset.css"); -@import url("iph.css"); -@import url("query-builder-theme.css"); -@import url("query-builder.css"); -@import url("page-createAndLink.css"); -@import url("../../../local/css/local.css"); diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf deleted file mode 100644 index ea1371a7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.woff2 deleted file mode 100644 index 82adb525..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.ttf deleted file mode 100644 index c970a092..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.woff2 deleted file mode 100644 index 5367fe0d..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.ttf deleted file mode 100644 index e5f8bcf9..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.woff2 deleted file mode 100644 index cfc93a85..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.ttf deleted file mode 100644 index a5e82cda..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.woff2 deleted file mode 100644 index 6b3b5abd..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.ttf deleted file mode 100644 index 10b87aec..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.woff2 deleted file mode 100644 index 6bf967ca..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.ttf deleted file mode 100644 index f74c308e..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.woff2 deleted file mode 100644 index 96ca83f2..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.ttf deleted file mode 100644 index c1660aa7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.woff2 deleted file mode 100644 index 7d307b16..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.ttf deleted file mode 100644 index e8045e37..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.woff2 b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.woff2 deleted file mode 100644 index 2f216440..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.ttf deleted file mode 100644 index 2d452383..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.woff2 deleted file mode 100644 index fd744582..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.ttf deleted file mode 100644 index 29a4359e..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.woff2 deleted file mode 100644 index 572b6f79..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.ttf deleted file mode 100644 index d998cf5b..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.woff2 deleted file mode 100644 index 6f0180e5..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.ttf deleted file mode 100644 index b4e22103..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.woff2 deleted file mode 100644 index 7876f81b..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.ttf deleted file mode 100644 index 5b390ff9..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.woff2 deleted file mode 100644 index dabad09a..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.ttf deleted file mode 100644 index 35267989..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.woff2 deleted file mode 100644 index eb4b36a0..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.ttf deleted file mode 100644 index 46e9bf7c..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.woff2 deleted file mode 100644 index 0bfba543..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.ttf deleted file mode 100644 index f714a514..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.woff2 deleted file mode 100644 index abcfd77c..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.ttf deleted file mode 100644 index 5dc6a2dc..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.woff2 deleted file mode 100644 index 05411264..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.ttf deleted file mode 100644 index 2b6392ff..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.woff2 deleted file mode 100644 index 3b78bd51..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.ttf deleted file mode 100644 index 4e797cf7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.woff2 deleted file mode 100644 index f4d250f7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.ttf b/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.ttf deleted file mode 100644 index eea836f4..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.woff2 b/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.woff2 deleted file mode 100644 index 6b5de918..00000000 Binary files a/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.woff2 and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/i18n/all.properties b/webapp/src/main/webapp/themes/iph/i18n/all.properties deleted file mode 100644 index dbeff3f9..00000000 --- a/webapp/src/main/webapp/themes/iph/i18n/all.properties +++ /dev/null @@ -1,166 +0,0 @@ -menu_contactus = Контакты -menu_welcomestart = Добро пожаловать -menu_copyright = права -menu_support = Поддержка -menu_logout = Выйти -menu_loginfull = Log in to manage this site -menu_login = Войти -menu_version = Версия -menu_about = О нас -menu_termuse = Правила использования -menu_powered = Сделано с помощью - -intro_title = Добро пожаловать в VIVO -intro_para1 = VIVO is a research-focused discovery tool that enables collaboration among scholars of all disciplines. -intro_para2 = Browse or search information on people, departments, courses, grants, and publications. -intro_searchvivo = Поиск VIVO -intro_filtersearch = Ограничить поиск - -identity_title = VIVO | соединяй делись познавай -identity_index = Index -identity_edit = Редактировать страницу -identity_admin = Админка -identity_myprofile = Мой профиль -identity_myaccount = Моя учётная запись -identity_user = пользователь - -collection_capitalized = Коллекция -place_of_grant = Место получения гранта -email_address = email адрес - -# -# menupage templates ( /templates/freemarker/body/menupage ) -# -grants_text_one = This body is from the the template file \ - vivo/productMods/templates/freemarker/body/menupage/grants.ftl. \ - In the display model, the grants page has a display:requiresBodyTemplate \ - property that defines that the grants page overrides the default template. \ - The default template for these pages is at /vitro/webapp/web/templates/freemarker/body/menupage/menupage.ftl -grants_two = This technique could be used to define pages without menu items, that get \ - their content from a freemarker template. An example would be the about page. -grants_text_three = This would create a page that would use about.ftl as the body. The page would be \ - accessed via /about and would override all servlet mappings in web.xml. - -address_street_one = первая строка адреса -address_street_two = вторая строка адреса -address_street_three = третья строка адреса -address_label = подпись адреса - -loading_website_image = Загрузка изображения сайта - -researchers_in = исследователь в -view = вид -grant_type = тип гранта -grant_entry_for = grant entry for -regions = регионы -grant_date = дата получения гранта -map_states_string = штатов. -map_state_string = штат. -unable_to_handle_grant_editing = This form is unable to handle the editing of this grant because it is associated with multiple grant individuals. -unable_to_handle_position_editing = This form is unable to handle the editing of this position because it is associated with multiple Position individuals. -currently_no_papers_for = Currently there are no {0} papers for -change_selection = Изменить выделенное -view_all_departments = view all academic departments -first_name = Имя -last_name = Фамилия -first_grant = Первый грант -last_grant = Последний грант -currently_no_researchers = There are currently no researchers with a defined geographic focus. -reviewer_role = Роль рецензента -vivo_profile = профиль VIVO -loading_data = данные загружаются -select_award = Selected Award -grants_in_vivo = гранты в VIVO -service_provider_role = Роль предоставителя услуг -view_all_faculty = просмотреть весь факультет -no_grants_for = В данный момент грантов нет грантов для -statewide_locations = state-wide locations. -faculty_who_are_members_of_org = Here are the faculty in the {0} department who are members of this organization. -indiv_foafperson_for = к -indiv_foafperson_return = вернуться к -no_departments_found = Университетских департаментов не найдено. -leadership_role = Управляющая роль -countries = страны -first_publication = Первая публикация -last_publication = Последняя публикация -research_area = сотрудников департамента спецализирующихся на данной области исследования -password = пароль -limit_search = ограничить поиск -placeholder_image = Изображение-заполнитель -view_all_members_of_org = Просмотреть всех участников данной организации. -display_more = больше -create_entry = Создать запись -attendee_capitalized = Посетитель -no_faculty_found = Членов факультета найдено не было. -create_capitalized = Создать -to = к -enter_new_role_value = Введеите новое значение в поле Роль. -countries_and_regions = страны и регионы. -province_or_region = Провинция или регион -full_name = Полное имя -researchers = исследователи -years_participation_in = Годы участия в -return_to_grant = Вернуться к гранту -profile_capitalized = Профиль -organizer_role = Роль организатора -faculty_memberships = Членство в факультете -edit_mailing_address = Изменить email адрес -add_capitalized = Добавить - -#Design labels -scroll_to_top_label = Наверх -toc_label = Содержание -collapse_something = Свернуть -expand_something = Раскрыть - -user_settings_label = Выберите настройки: -user_settings_always_open_full_doc = Всегда раскрывать документ при открытии -user_settings_always_open_metadata = Всегда раскрывать метаданные при открытии -expand_doc_switch = Раскрыть документ -collapse_doc_switch = Свернуть документ -expand_metadata_switch = Раскрыть метаданные -collapse_metadata_switch = Свернуть метаданные - - -literature_excerpt_button_text = Литература -literature_all_button_text = Сводная литература -sources_excerpt_button_text = Источники -sources_all_button_text = Сводные источники -extended_search_label = Расширенный поиск -metadata_label = Метаданные -metadata_query = Поисковый запрос -metadata_relates_to_rubrics = Относится к рубрикам: -metadata_relates_to_issue = Входит в выпуск -metadata_year = Год -metadata_to_rubric = перейти в рубрику -metadata_firstPublication = Первая публикация -metadata_authors = Авторы: -metadata_keywords = Ключевые слова: -metadata_html_text = Текст: -metadata_org_address = Адрес организации: -metadata_in_articles = В составе статей: - -#Philosophical classifier -rubricator_parent_rubric = Родительская рубрика: -rubricator_rubric_order = Порядок рубрики -rubricator_subrubrics = Подрубрики -rubricator_articles_in_subrubrics = Статьи в подрубриках -rubricator_excerpts_in_subrubrics = Отрывки в подрубриках -rubricator_articles_in_rubric = Статьи в данной рубрике -rubricator_excerpts_in_rubric = Отрывки в данной рубрике - -#Extended search form -extended_search_example = Пример заполнения -extended_search_results_on_page = Результатов на страницу -extended_search_clean = Очистить -extended_search_execute_search = Поиск -open_standard_search_form = Стандартная форма поиска - -#Virtual articles creation -show_virtual_article = Показать виртуальную статью -create_compilation_button = Сохранить -create_compilation_no_excerpts = Отрывков не найдено -create_compilation_enter_name_notification = Введите название подобрки -create_compilation_no_name_entered_error = Для создания подоборки необходимо ввести её название - - diff --git a/webapp/src/main/webapp/themes/iph/i18n/all_en_US.properties b/webapp/src/main/webapp/themes/iph/i18n/all_en_US.properties deleted file mode 100644 index 406a7b63..00000000 --- a/webapp/src/main/webapp/themes/iph/i18n/all_en_US.properties +++ /dev/null @@ -1,115 +0,0 @@ -menu_contactus = Contact Us -menu_welcomestart = Welcome -menu_copyright = copyright -menu_support = Support -menu_logout = Log out -menu_loginfull = Log in to manage this site -menu_login = Log in -menu_version = Version -menu_about = About -menu_termuse = Terms of Use -menu_powered = Powered by - -intro_title = Welcome to VIVO -intro_para1 = VIVO is a research-focused discovery tool that enables collaboration among scholars of all disciplines. -intro_para2 = Browse or search information on people, departments, courses, grants, and publications. -intro_searchvivo = Search VIVO -intro_filtersearch = Filter search - -identity_title = VIVO | connect share discover -identity_index = Index -identity_edit = Edit Page -identity_admin = Site Admin -identity_myprofile = My profile -identity_myaccount = My account -identity_user = user - -collection_capitalized = Collection -place_of_grant = Place of grant -email_address = Email Address - -# -# menupage templates ( /templates/freemarker/body/menupage ) -# -grants_text_one = This body is from the the template file \ - vivo/productMods/templates/freemarker/body/menupage/grants.ftl. \ - In the display model, the grants page has a display:requiresBodyTemplate \ - property that defines that the grants page overrides the default template. \ - The default template for these pages is at /vitro/webapp/web/templates/freemarker/body/menupage/menupage.ftl -grants_two = This technique could be used to define pages without menu items, that get \ - their content from a freemarker template. An example would be the about page. -grants_text_three = This would create a page that would use about.ftl as the body. The page would be \ - accessed via /about and would override all servlet mappings in web.xml. - -address_street_one = address street one -address_street_two = address street two -address_street_three = address street three -address_label = address label - -loading_website_image = Loading website image - -researchers_in = researchers in -view = view -grant_type = grant Type -grant_entry_for = grant entry for -regions = regions -grant_date = grant Date -map_states_string = states. -map_state_string = state. -unable_to_handle_grant_editing = This form is unable to handle the editing of this grant because it is associated with multiple grant individuals. -unable_to_handle_position_editing = This form is unable to handle the editing of this position because it is associated with multiple Position individuals. -currently_no_papers_for = Currently there are no {0} papers for -change_selection = change selection -view_all_departments = view all academic departments -first_name = First name -last_name = Last name -first_grant = First Grant -last_grant = Last Grant -currently_no_researchers = There are currently no researchers with a defined geographic focus. -reviewer_role = Reviewer Role -vivo_profile = VIVO profile -loading_data = loading data -select_award = Selected Award -grants_in_vivo = grants in VIVO -service_provider_role = Service Provider Role -view_all_faculty = view all faculty -no_grants_for = Currently there are no grants for -statewide_locations = state-wide locations. -faculty_who_are_members_of_org = Here are the faculty in the {0} department who are members of this organization. -indiv_foafperson_for = for -indiv_foafperson_return = return to -no_departments_found = No academic departments found. -leadership_role = Leadership Role -countries = countries -first_publication = First publication -last_publication = Last publication -research_area = individuals in the department with this research area -password = password -limit_search = limit search -placeholder_image = placeholder image -view_all_members_of_org = View all the members of this organization. -display_more = more -create_entry = Create Entry -attendee_capitalized = Attendee -no_faculty_found = No faculty members found. -create_capitalized = Create -to = to -enter_new_role_value = Please enter a new value in the Role field. -countries_and_regions = countries and regions. -province_or_region = Province or Region -full_name = Full name -researchers = researchers -years_participation_in = Years of Participation in -return_to_grant = Return to grant -profile_capitalized = Profile -organizer_role = Organizer Role -faculty_memberships = Faculty Memberships -edit_mailing_address = Edit Mailing Address -add_capitalized = Add - -literature_excerpt_button_text = Bibliography -literature_all_button_text = All bibliorgraphy -sources_excerpt_button_text = Sources -sources_all_button_text = All sources -remove_doc_from_search_results = Remove from search results - diff --git a/webapp/src/main/webapp/themes/iph/i18n/all_ru_RU.properties b/webapp/src/main/webapp/themes/iph/i18n/all_ru_RU.properties deleted file mode 100644 index ae45b193..00000000 --- a/webapp/src/main/webapp/themes/iph/i18n/all_ru_RU.properties +++ /dev/null @@ -1,109 +0,0 @@ -menu_contactus = Contact Us -menu_welcomestart = Welcome -menu_copyright = copyright -menu_support = Support -menu_logout = Log out -menu_loginfull = Log in to manage this site -menu_login = Log in -menu_version = Version -menu_about = About -menu_termuse = Terms of Use -menu_powered = Powered by - -intro_title = Welcome to VIVO -intro_para1 = VIVO is a research-focused discovery tool that enables collaboration among scholars of all disciplines. -intro_para2 = Browse or search information on people, departments, courses, grants, and publications. -intro_searchvivo = Search VIVO -intro_filtersearch = Filter search - -identity_title = Электронная Философская Энциклопедия -identity_index = Index -identity_edit = Edit Page -identity_admin = Site Admin -identity_myprofile = My profile -identity_myaccount = My account -identity_user = user - -collection_capitalized = Collection -place_of_grant = Place of grant -email_address = Email Address - -# -# menupage templates ( /templates/freemarker/body/menupage ) -# -grants_text_one = This body is from the the template file \ - vivo/productMods/templates/freemarker/body/menupage/grants.ftl. \ - In the display model, the grants page has a display:requiresBodyTemplate \ - property that defines that the grants page overrides the default template. \ - The default template for these pages is at /vitro/webapp/web/templates/freemarker/body/menupage/menupage.ftl -grants_two = This technique could be used to define pages without menu items, that get \ - their content from a freemarker template. An example would be the about page. -grants_text_three = This would create a page that would use about.ftl as the body. The page would be \ - accessed via /about and would override all servlet mappings in web.xml. - -address_street_one = address street one -address_street_two = address street two -address_street_three = address street three -address_label = address label - -loading_website_image = Loading website image - -researchers_in = researchers in -view = view -grant_type = grant Type -grant_entry_for = grant entry for -regions = regions -grant_date = grant Date -map_states_string = states. -map_state_string = state. -unable_to_handle_grant_editing = This form is unable to handle the editing of this grant because it is associated with multiple grant individuals. -unable_to_handle_position_editing = This form is unable to handle the editing of this position because it is associated with multiple Position individuals. -currently_no_papers_for = Currently there are no {0} papers for -change_selection = change selection -view_all_departments = view all academic departments -first_name = First name -last_name = Last name -first_grant = First Grant -last_grant = Last Grant -currently_no_researchers = There are currently no researchers with a defined geographic focus. -reviewer_role = Reviewer Role -vivo_profile = VIVO profile -loading_data = loading data -select_award = Selected Award -grants_in_vivo = grants in VIVO -service_provider_role = Service Provider Role -view_all_faculty = view all faculty -no_grants_for = Currently there are no grants for -statewide_locations = state-wide locations. -faculty_who_are_members_of_org = Here are the faculty in the {0} department who are members of this organization. -indiv_foafperson_for = for -indiv_foafperson_return = return to -no_departments_found = No academic departments found. -leadership_role = Leadership Role -countries = countries -first_publication = First publication -last_publication = Last publication -research_area = individuals in the department with this research area -password = password -limit_search = limit search -placeholder_image = placeholder image -view_all_members_of_org = View all the members of this organization. -display_more = more -create_entry = Create Entry -attendee_capitalized = Attendee -no_faculty_found = No faculty members found. -create_capitalized = Create -to = to -enter_new_role_value = Please enter a new value in the Role field. -countries_and_regions = countries and regions. -province_or_region = Province or Region -full_name = Full name -researchers = researchers -years_participation_in = Years of Participation in -return_to_grant = Return to grant -profile_capitalized = Profile -organizer_role = Organizer Role -faculty_memberships = Faculty Memberships -edit_mailing_address = Edit Mailing Address -add_capitalized = Add -remove_doc_from_search_results=Удалить из результатов поиска diff --git a/webapp/src/main/webapp/themes/iph/i18n/images/select_locale_en_US.GIF b/webapp/src/main/webapp/themes/iph/i18n/images/select_locale_en_US.GIF deleted file mode 100644 index b42e9a41..00000000 Binary files a/webapp/src/main/webapp/themes/iph/i18n/images/select_locale_en_US.GIF and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/VIVO-logo.png b/webapp/src/main/webapp/themes/iph/images/VIVO-logo.png deleted file mode 100644 index 9f8f2937..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/VIVO-logo.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/addNewAccount.png b/webapp/src/main/webapp/themes/iph/images/addNewAccount.png deleted file mode 100644 index 9a39df3b..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/addNewAccount.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/addNewAccountOver.png b/webapp/src/main/webapp/themes/iph/images/addNewAccountOver.png deleted file mode 100644 index a7614a32..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/addNewAccountOver.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/alert-overlay.png b/webapp/src/main/webapp/themes/iph/images/alert-overlay.png deleted file mode 100644 index 222cdc91..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/alert-overlay.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/all-toc-collapse.svg b/webapp/src/main/webapp/themes/iph/images/all-toc-collapse.svg deleted file mode 100644 index f2f6f449..00000000 --- a/webapp/src/main/webapp/themes/iph/images/all-toc-collapse.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/all-toc-expand.svg b/webapp/src/main/webapp/themes/iph/images/all-toc-expand.svg deleted file mode 100644 index fd8c4338..00000000 --- a/webapp/src/main/webapp/themes/iph/images/all-toc-expand.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down-account.gif b/webapp/src/main/webapp/themes/iph/images/arrow-down-account.gif deleted file mode 100644 index 0f5463eb..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-down-account.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down-big.svg b/webapp/src/main/webapp/themes/iph/images/arrow-down-big.svg deleted file mode 100644 index e470467a..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-down-big.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down-over-account.gif b/webapp/src/main/webapp/themes/iph/images/arrow-down-over-account.gif deleted file mode 100644 index 4db412c9..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-down-over-account.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down-small.png b/webapp/src/main/webapp/themes/iph/images/arrow-down-small.png deleted file mode 100644 index 6121c8da..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-down-small.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down-small.svg b/webapp/src/main/webapp/themes/iph/images/arrow-down-small.svg deleted file mode 100644 index e470467a..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-down-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down.svg b/webapp/src/main/webapp/themes/iph/images/arrow-down.svg deleted file mode 100644 index 44de0c5d..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-green.gif b/webapp/src/main/webapp/themes/iph/images/arrow-green.gif deleted file mode 100644 index d4d79c31..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-green.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-grey.gif b/webapp/src/main/webapp/themes/iph/images/arrow-grey.gif deleted file mode 100644 index f858de94..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-grey.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-menu-account.gif b/webapp/src/main/webapp/themes/iph/images/arrow-menu-account.gif deleted file mode 100644 index 6dcb3239..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-menu-account.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-right.svg b/webapp/src/main/webapp/themes/iph/images/arrow-right.svg deleted file mode 100644 index fca54213..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-right.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-top-big.svg b/webapp/src/main/webapp/themes/iph/images/arrow-top-big.svg deleted file mode 100644 index 4a9456ed..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-top-big.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-top-small.svg b/webapp/src/main/webapp/themes/iph/images/arrow-top-small.svg deleted file mode 100644 index 4a9456ed..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-top-small.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-top.svg b/webapp/src/main/webapp/themes/iph/images/arrow-top.svg deleted file mode 100644 index f43e7765..00000000 --- a/webapp/src/main/webapp/themes/iph/images/arrow-top.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/arrow.gif b/webapp/src/main/webapp/themes/iph/images/arrow.gif deleted file mode 100644 index 01f51333..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif b/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif deleted file mode 100644 index b464f9bb..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow_brown.png b/webapp/src/main/webapp/themes/iph/images/arrow_brown.png deleted file mode 100644 index b577fd8c..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow_brown.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow_down.png b/webapp/src/main/webapp/themes/iph/images/arrow_down.png deleted file mode 100644 index 6121c8da..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow_down.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrow_small.png b/webapp/src/main/webapp/themes/iph/images/arrow_small.png deleted file mode 100644 index cf1fa977..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow_small.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/book_icon.png b/webapp/src/main/webapp/themes/iph/images/book_icon.png deleted file mode 100644 index 8fad5896..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/book_icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/bullet_icon.png b/webapp/src/main/webapp/themes/iph/images/bullet_icon.png deleted file mode 100644 index 476f38d9..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/bullet_icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/check-icon.svg b/webapp/src/main/webapp/themes/iph/images/check-icon.svg deleted file mode 100644 index 51c9036a..00000000 --- a/webapp/src/main/webapp/themes/iph/images/check-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/circle-item.svg b/webapp/src/main/webapp/themes/iph/images/circle-item.svg deleted file mode 100644 index def917f5..00000000 --- a/webapp/src/main/webapp/themes/iph/images/circle-item.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/circle.png b/webapp/src/main/webapp/themes/iph/images/circle.png deleted file mode 100644 index 3385c075..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/circle.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/circle_title.png b/webapp/src/main/webapp/themes/iph/images/circle_title.png deleted file mode 100644 index f853a102..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/circle_title.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/custom_search_button.png b/webapp/src/main/webapp/themes/iph/images/custom_search_button.png deleted file mode 100644 index 3519e9c9..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/custom_search_button.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/download-icon.svg b/webapp/src/main/webapp/themes/iph/images/download-icon.svg deleted file mode 100644 index 01a98a88..00000000 --- a/webapp/src/main/webapp/themes/iph/images/download-icon.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/expand-label-image.svg b/webapp/src/main/webapp/themes/iph/images/expand-label-image.svg deleted file mode 100644 index 881a6676..00000000 --- a/webapp/src/main/webapp/themes/iph/images/expand-label-image.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/webapp/src/main/webapp/themes/iph/images/expand_button.png b/webapp/src/main/webapp/themes/iph/images/expand_button.png deleted file mode 100644 index b5e1aac0..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/expand_button.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/exportPdf.svg b/webapp/src/main/webapp/themes/iph/images/exportPdf.svg deleted file mode 100644 index 3e39df79..00000000 --- a/webapp/src/main/webapp/themes/iph/images/exportPdf.svg +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/filteredSearch.gif b/webapp/src/main/webapp/themes/iph/images/filteredSearch.gif deleted file mode 100644 index 16bb82be..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/filteredSearch.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/filteredSearchActive.gif b/webapp/src/main/webapp/themes/iph/images/filteredSearchActive.gif deleted file mode 100644 index 8ef75fbe..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/filteredSearchActive.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/green_minus_sign.gif b/webapp/src/main/webapp/themes/iph/images/green_minus_sign.gif deleted file mode 100644 index 9a1dacc8..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/green_minus_sign.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/green_plus_sign.gif b/webapp/src/main/webapp/themes/iph/images/green_plus_sign.gif deleted file mode 100644 index e0a3681f..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/green_plus_sign.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/header-background.jpg b/webapp/src/main/webapp/themes/iph/images/header-background.jpg deleted file mode 100644 index c9bc4a1f..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/header-background.jpg and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/header-background.png b/webapp/src/main/webapp/themes/iph/images/header-background.png deleted file mode 100644 index 69388a3c..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/header-background.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/header-image.png b/webapp/src/main/webapp/themes/iph/images/header-image.png deleted file mode 100644 index 6e7597a4..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/header-image.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/jump-tp-property-group-menu.gif b/webapp/src/main/webapp/themes/iph/images/jump-tp-property-group-menu.gif deleted file mode 100644 index 937f7bb7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/jump-tp-property-group-menu.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareArrow.gif b/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareArrow.gif deleted file mode 100644 index 897e8d1d..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareArrow.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareDownArrow.gif b/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareDownArrow.gif deleted file mode 100644 index ad8a40b7..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/openSocial/icon_squareDownArrow.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/pointToCropPreview.jpg b/webapp/src/main/webapp/themes/iph/images/pointToCropPreview.jpg deleted file mode 100644 index 35db801a..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/pointToCropPreview.jpg and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/print-icon.png b/webapp/src/main/webapp/themes/iph/images/print-icon.png deleted file mode 100644 index b3a54282..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/print-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/print.svg b/webapp/src/main/webapp/themes/iph/images/print.svg deleted file mode 100644 index e7c22d3c..00000000 --- a/webapp/src/main/webapp/themes/iph/images/print.svg +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/save-icon.png b/webapp/src/main/webapp/themes/iph/images/save-icon.png deleted file mode 100644 index 6bc8f5bb..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/save-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/save-pdf-icon.png b/webapp/src/main/webapp/themes/iph/images/save-pdf-icon.png deleted file mode 100644 index acb7e624..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/save-pdf-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/save.svg b/webapp/src/main/webapp/themes/iph/images/save.svg deleted file mode 100644 index df7f3aff..00000000 --- a/webapp/src/main/webapp/themes/iph/images/save.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/search-field-and-button.gif b/webapp/src/main/webapp/themes/iph/images/search-field-and-button.gif deleted file mode 100644 index 3b672288..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/search-field-and-button.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/search-icon.png b/webapp/src/main/webapp/themes/iph/images/search-icon.png deleted file mode 100644 index 8a43549f..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/search-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/search-interior-pages.gif b/webapp/src/main/webapp/themes/iph/images/search-interior-pages.gif deleted file mode 100644 index 7d51c4a2..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/search-interior-pages.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/search-interior-pages.png b/webapp/src/main/webapp/themes/iph/images/search-interior-pages.png deleted file mode 100644 index 802da20d..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/search-interior-pages.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/select_button.png b/webapp/src/main/webapp/themes/iph/images/select_button.png deleted file mode 100644 index f7553d65..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/select_button.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/selected-main-nav.jpg b/webapp/src/main/webapp/themes/iph/images/selected-main-nav.jpg deleted file mode 100644 index 1b2059ba..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/selected-main-nav.jpg and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/separator-main-nav.jpg b/webapp/src/main/webapp/themes/iph/images/separator-main-nav.jpg deleted file mode 100644 index 60c157cb..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/separator-main-nav.jpg and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/separator-property-group-nav.jpg b/webapp/src/main/webapp/themes/iph/images/separator-property-group-nav.jpg deleted file mode 100644 index 8b1c0ea8..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/separator-property-group-nav.jpg and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/settings.svg b/webapp/src/main/webapp/themes/iph/images/settings.svg deleted file mode 100644 index e53e92e9..00000000 --- a/webapp/src/main/webapp/themes/iph/images/settings.svg +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/webapp/src/main/webapp/themes/iph/images/share-icon.png b/webapp/src/main/webapp/themes/iph/images/share-icon.png deleted file mode 100644 index b5491e0d..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/share-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/site-title-padding.png b/webapp/src/main/webapp/themes/iph/images/site-title-padding.png deleted file mode 100644 index b4082a63..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/site-title-padding.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/small-dot.png b/webapp/src/main/webapp/themes/iph/images/small-dot.png deleted file mode 100644 index ae91e899..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/small-dot.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/sort-asc.gif b/webapp/src/main/webapp/themes/iph/images/sort-asc.gif deleted file mode 100644 index 906b7573..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/sort-asc.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/sort-desc.gif b/webapp/src/main/webapp/themes/iph/images/sort-desc.gif deleted file mode 100644 index dcc043eb..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/sort-desc.gif and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/stats-bg.png b/webapp/src/main/webapp/themes/iph/images/stats-bg.png deleted file mode 100644 index 7366b582..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/stats-bg.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/title.png b/webapp/src/main/webapp/themes/iph/images/title.png deleted file mode 100644 index c1fc0eae..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/title.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/to_up.png b/webapp/src/main/webapp/themes/iph/images/to_up.png deleted file mode 100644 index f5cad4d8..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/to_up.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/to_up_hover.png b/webapp/src/main/webapp/themes/iph/images/to_up_hover.png deleted file mode 100644 index 4e263a0e..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/to_up_hover.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/images/uricon-icon.png b/webapp/src/main/webapp/themes/iph/images/uricon-icon.png deleted file mode 100644 index 0600d164..00000000 Binary files a/webapp/src/main/webapp/themes/iph/images/uricon-icon.png and /dev/null differ diff --git a/webapp/src/main/webapp/themes/iph/js/collapsible_elements.js b/webapp/src/main/webapp/themes/iph/js/collapsible_elements.js deleted file mode 100644 index 9cca3c92..00000000 --- a/webapp/src/main/webapp/themes/iph/js/collapsible_elements.js +++ /dev/null @@ -1,123 +0,0 @@ -document.addEventListener('DOMContentLoaded', addCollapsibleOnClick(), false); -document.addEventListener('DOMContentLoaded', applyExpandSettings(), false); -document.addEventListener('DOMContentLoaded', hideUserSettingsModal(), false); - -function showUserSettingsModal() { - var modalElement = document.getElementById("userSettingsModal"); - if (modalElement != null) { - modalElement.style.display = 'block'; - } -} - -function hideUserSettingsModal() { - window.onclick = function(event) { - var modalElement = document.getElementById("userSettingsModal"); - var closeElement = document.getElementById("closeModalWindow"); - if (event.target == modalElement || event.target == closeElement) { - modalElement.style.display = 'none'; - } - } -} - -function addCollapsibleOnClick() { - var coll = document.getElementsByClassName("collapsible"); - var i; - for (i = 0; i < coll.length; i++) { - var collapsibleLink = coll[i].querySelector('.collapsibleLink'); - if (collapsibleLink === null) { - collapseNextElementOnClick(coll[i]); - } else { - expandableNextOuterElementOnClick(collapsibleLink); - } - - } -} - -function expandableNextOuterElementOnClick(element) { - element.addEventListener("click", function() { - this.parentElement.classList.toggle("expanded"); - this.parentElement.classList.toggle("collapsed"); - var content = this.parentElement.nextElementSibling; - if (content.style.display === "block") { - content.style.display = "none"; - } else { - content.style.display = "block"; - } - }); -} - -function collapseNextElementOnClick(element) { - element.addEventListener("click", function() { - this.classList.toggle("active"); - var content = this.nextElementSibling; - if (content.style.display === "block") { - content.style.display = "none"; - } else { - content.style.display = "block"; - } - }); -} - -function applyExpandSettings() { - applyDocumentExpandSettings('switchExpand', 'expandCB', 'expandSettingsCB', '.autoExpand'); - applyDocumentExpandSettings('metadataExpandSetting', 'metadataExpandCB', 'metadataExpandSettingCB', '.autoMetadataExpand'); -} - -function applyDocumentExpandSettings(settingName, buttonId, settingButtonId, targetElementsClass) { - if (localStorage.getItem(settingName) === true || localStorage.getItem(settingName) === 'true') { - var expandSwitchCB = document.getElementById(buttonId); - if (expandSwitchCB != null) { - expandSwitchCB.checked = true; - } - var expandSwitchSettingsCB = document.getElementById(settingButtonId); - if (expandSwitchSettingsCB != null) { - expandSwitchSettingsCB.checked = true; - } - $(targetElementsClass).show(); - showDocumentCollapseButton(buttonId); - } else { - $(targetElementsClass).hide(); - showDocumentExpandButton(buttonId); - } -} - -function switchExpand(inputID, elementsClass) { - var checkBox = document.getElementById(inputID); - if (checkBox.checked == true) { - $(elementsClass).show(); - showDocumentCollapseButton(inputID); - } else { - $(elementsClass).hide(); - showDocumentExpandButton(inputID); - } -} -function showDocumentCollapseButton(inputID) { - var inputElement = document.getElementById(inputID); - if (inputElement === null) { - return; - } - var collapseTextControl = inputElement.parentElement.querySelector('.collapseTextControl'); - collapseTextControl.style.display = "inline"; - var expandTextControl = inputElement.parentElement.querySelector('.expandTextControl'); - expandTextControl.style.display = "none"; -} - -function showDocumentExpandButton(inputID) { - var inputElement = document.getElementById(inputID); - if (inputElement === null) { - return; - } - var collapseTextControl = inputElement.parentElement.querySelector('.collapseTextControl'); - collapseTextControl.style.display = "none"; - var expandTextControl = inputElement.parentElement.querySelector('.expandTextControl'); - expandTextControl.style.display = "inline"; -} - -function switchExpandSettings(checkboxID, settingName) { - var checkBox = document.getElementById(checkboxID); - if (checkBox.checked == true) { - localStorage.setItem(settingName, true); - } else { - localStorage.setItem(settingName, false); - } -} diff --git a/webapp/src/main/webapp/themes/iph/js/print.js b/webapp/src/main/webapp/themes/iph/js/print.js deleted file mode 100644 index 7c23db47..00000000 --- a/webapp/src/main/webapp/themes/iph/js/print.js +++ /dev/null @@ -1,13 +0,0 @@ -function printPageContent() { - var printContent = null; - var winPrint = window.open('','', 'left=0,top=0,width=800,height=900'); - winPrint.document.write("" + document.title + ""); - printContent = document.getElementById("wrapper-content"); - winPrint.document.write(printContent.innerHTML); - winPrint.document.write(""); - winPrint.document.close(); - winPrint.focus(); - setTimeout(function(){ - winPrint.print(); - }, 500); -} diff --git a/webapp/src/main/webapp/themes/iph/js/query-builder-config.js b/webapp/src/main/webapp/themes/iph/js/query-builder-config.js deleted file mode 100644 index e69de29b..00000000 diff --git a/webapp/src/main/webapp/themes/iph/js/query-builder.ru.js b/webapp/src/main/webapp/themes/iph/js/query-builder.ru.js deleted file mode 100644 index c53708b7..00000000 --- a/webapp/src/main/webapp/themes/iph/js/query-builder.ru.js +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * jQuery QueryBuilder 2.5.2 - * Locale: Russian (ru) - * Licensed under MIT (https://opensource.org/licenses/MIT) - */ - -(function(root, factory) { - if (typeof define == 'function' && define.amd) { - define(['jquery', 'query-builder'], factory); - } - else { - factory(root.jQuery); - } -}(this, function($) { -"use strict"; - -var QueryBuilder = $.fn.queryBuilder; - -QueryBuilder.regional['ru'] = { - "__locale": "Russian (ru)", - "add_rule": "Добавить условие", - "add_group": "Добавить группу", - "delete_rule": "Удалить", - "delete_group": "Удалить", - "conditions": { - "AND": "И", - "OR": "ИЛИ" - }, - "operators": { - "equal": "равно", - "not_equal": "не равно", - "in": "из указанных", - "not_in": "не из указанных", - "less": "меньше", - "less_or_equal": "меньше или равно", - "greater": "больше", - "greater_or_equal": "больше или равно", - "between": "между", - "begins_with": "начинается с", - "not_begins_with": "не начинается с", - "contains": "содержит", - "not_contains": "не содержит", - "ends_with": "оканчивается на", - "not_ends_with": "не оканчивается на", - "is_empty": "пустая строка", - "is_not_empty": "не пустая строка", - "is_null": "пусто", - "is_not_null": "не пусто" - }, - "errors": { - "no_filter": "Фильтр не выбран", - "empty_group": "Группа пуста", - "radio_empty": "Не выбранно значение", - "checkbox_empty": "Не выбранно значение", - "select_empty": "Не выбранно значение", - "string_empty": "Не заполненно", - "string_exceed_min_length": "Должен содержать больше {0} символов", - "string_exceed_max_length": "Должен содержать меньше {0} символов", - "string_invalid_format": "Неверный формат ({0})", - "number_nan": "Не число", - "number_not_integer": "Не число", - "number_not_double": "Не число", - "number_exceed_min": "Должно быть больше {0}", - "number_exceed_max": "Должно быть меньше, чем {0}", - "number_wrong_step": "Должно быть кратно {0}", - "datetime_empty": "Не заполненно", - "datetime_invalid": "Неверный формат даты ({0})", - "datetime_exceed_min": "Должно быть, после {0}", - "datetime_exceed_max": "Должно быть, до {0}", - "boolean_not_valid": "Не логическое", - "operator_not_multiple": "Оператор \"{1}\" не поддерживает много значений" - }, - "invert": "Инвертировать" -}; - -QueryBuilder.defaults({ lang_code: 'ru' }); -})); diff --git a/webapp/src/main/webapp/themes/iph/js/query-builder.standalone.js b/webapp/src/main/webapp/themes/iph/js/query-builder.standalone.js deleted file mode 100644 index c899f05b..00000000 --- a/webapp/src/main/webapp/themes/iph/js/query-builder.standalone.js +++ /dev/null @@ -1,6477 +0,0 @@ -/*! - * jQuery.extendext 0.1.2 - * - * Copyright 2014-2016 Damien "Mistic" Sorel (http://www.strangeplanet.fr) - * Licensed under MIT (http://opensource.org/licenses/MIT) - * - * Based on jQuery.extend by jQuery Foundation, Inc. and other contributors - */ - -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - define('jQuery.extendext', ['jquery'], factory); - } - else if (typeof module === 'object' && module.exports) { - module.exports = factory(require('jquery')); - } - else { - factory(root.jQuery); - } -}(this, function ($) { - "use strict"; - - $.extendext = function () { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false, - arrayMode = 'default'; - - // Handle a deep copy situation - if (typeof target === "boolean") { - deep = target; - - // Skip the boolean and the target - target = arguments[i++] || {}; - } - - // Handle array mode parameter - if (typeof target === "string") { - arrayMode = target.toLowerCase(); - if (arrayMode !== 'concat' && arrayMode !== 'replace' && arrayMode !== 'extend') { - arrayMode = 'default'; - } - - // Skip the string param - target = arguments[i++] || {}; - } - - // Handle case when target is a string or something (possible in deep copy) - if (typeof target !== "object" && !$.isFunction(target)) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if (i === length) { - target = this; - i--; - } - - for (; i < length; i++) { - // Only deal with non-null/undefined values - if ((options = arguments[i]) !== null) { - // Special operations for arrays - if ($.isArray(options) && arrayMode !== 'default') { - clone = target && $.isArray(target) ? target : []; - - switch (arrayMode) { - case 'concat': - target = clone.concat($.extend(deep, [], options)); - break; - - case 'replace': - target = $.extend(deep, [], options); - break; - - case 'extend': - options.forEach(function (e, i) { - if (typeof e === 'object') { - var type = $.isArray(e) ? [] : {}; - clone[i] = $.extendext(deep, arrayMode, clone[i] || type, e); - - } else if (clone.indexOf(e) === -1) { - clone.push(e); - } - }); - - target = clone; - break; - } - - } else { - // Extend the base object - for (name in options) { - src = target[name]; - copy = options[name]; - - // Prevent never-ending loop - if (target === copy) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if (deep && copy && ( $.isPlainObject(copy) || - (copyIsArray = $.isArray(copy)) )) { - - if (copyIsArray) { - copyIsArray = false; - clone = src && $.isArray(src) ? src : []; - - } else { - clone = src && $.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[name] = $.extendext(deep, arrayMode, clone, copy); - - // Don't bring in undefined values - } else if (copy !== undefined) { - target[name] = copy; - } - } - } - } - } - - // Return the modified object - return target; - }; -})); - -// doT.js -// 2011-2014, Laura Doktorova, https://github.com/olado/doT -// Licensed under the MIT license. - -(function () { - "use strict"; - - var doT = { - name: "doT", - version: "1.1.1", - templateSettings: { - evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g, - interpolate: /\{\{=([\s\S]+?)\}\}/g, - encode: /\{\{!([\s\S]+?)\}\}/g, - use: /\{\{#([\s\S]+?)\}\}/g, - useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - defineParams:/^\s*([\w$]+):([\s\S]+)/, - conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, - iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - varname: "it", - strip: true, - append: true, - selfcontained: false, - doNotSkipEncoded: false - }, - template: undefined, //fn, compile template - compile: undefined, //fn, for express - log: true - }, _globals; - - doT.encodeHTMLSource = function(doNotSkipEncoded) { - var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" }, - matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; - return function(code) { - return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : ""; - }; - }; - - _globals = (function(){ return this || (0,eval)("this"); }()); - - /* istanbul ignore else */ - if (typeof module !== "undefined" && module.exports) { - module.exports = doT; - } else if (typeof define === "function" && define.amd) { - define('doT', function(){return doT;}); - } else { - _globals.doT = doT; - } - - var startend = { - append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" }, - split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" } - }, skip = /$^/; - - function resolveDefs(c, block, def) { - return ((typeof block === "string") ? block : block.toString()) - .replace(c.define || skip, function(m, code, assign, value) { - if (code.indexOf("def.") === 0) { - code = code.substring(4); - } - if (!(code in def)) { - if (assign === ":") { - if (c.defineParams) value.replace(c.defineParams, function(m, param, v) { - def[code] = {arg: param, text: v}; - }); - if (!(code in def)) def[code]= value; - } else { - new Function("def", "def['"+code+"']=" + value)(def); - } - } - return ""; - }) - .replace(c.use || skip, function(m, code) { - if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) { - if (def[d] && def[d].arg && param) { - var rw = (d+":"+param).replace(/'|\\/g, "_"); - def.__exp = def.__exp || {}; - def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2"); - return s + "def.__exp['"+rw+"']"; - } - }); - var v = new Function("def", "return " + code)(def); - return v ? resolveDefs(c, v, def) : v; - }); - } - - function unescape(code) { - return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " "); - } - - doT.template = function(tmpl, c, def) { - c = c || doT.templateSettings; - var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, - str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl; - - str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ") - .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str) - .replace(/'|\\/g, "\\$&") - .replace(c.interpolate || skip, function(m, code) { - return cse.start + unescape(code) + cse.end; - }) - .replace(c.encode || skip, function(m, code) { - needhtmlencode = true; - return cse.startencode + unescape(code) + cse.end; - }) - .replace(c.conditional || skip, function(m, elsecase, code) { - return elsecase ? - (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") : - (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='"); - }) - .replace(c.iterate || skip, function(m, iterate, vname, iname) { - if (!iterate) return "';} } out+='"; - sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate); - return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"} - * @readonly - */ - this.icons = this.settings.icons; - - /** - * List of operators - * @member {QueryBuilder.Operator[]} - * @readonly - */ - this.operators = this.settings.operators; - - /** - * List of templates - * @member {object.} - * @readonly - */ - this.templates = this.settings.templates; - - /** - * Plugins configuration - * @member {object.} - * @readonly - */ - this.plugins = this.settings.plugins; - - /** - * Translations object - * @member {object} - * @readonly - */ - this.lang = null; - - // translations : english << 'lang_code' << custom - if (QueryBuilder.regional['en'] === undefined) { - Utils.error('Config', '"i18n/en.js" not loaded.'); - } - this.lang = $.extendext(true, 'replace', {}, QueryBuilder.regional['en'], QueryBuilder.regional[this.settings.lang_code], this.settings.lang); - - // "allow_groups" can be boolean or int - if (this.settings.allow_groups === false) { - this.settings.allow_groups = 0; - } - else if (this.settings.allow_groups === true) { - this.settings.allow_groups = -1; - } - - // init templates - Object.keys(this.templates).forEach(function(tpl) { - if (!this.templates[tpl]) { - this.templates[tpl] = QueryBuilder.templates[tpl]; - } - if (typeof this.templates[tpl] == 'string') { - this.templates[tpl] = doT.template(this.templates[tpl]); - } - }, this); - - // ensure we have a container id - if (!this.$el.attr('id')) { - this.$el.attr('id', 'qb_' + Math.floor(Math.random() * 99999)); - this.status.generated_id = true; - } - this.status.id = this.$el.attr('id'); - - // INIT - this.$el.addClass('query-builder form-inline'); - - this.filters = this.checkFilters(this.filters); - this.operators = this.checkOperators(this.operators); - this.bindEvents(); - this.initPlugins(); -}; - -$.extend(QueryBuilder.prototype, /** @lends QueryBuilder.prototype */ { - /** - * Triggers an event on the builder container - * @param {string} type - * @returns {$.Event} - */ - trigger: function(type) { - var event = new $.Event(this._tojQueryEvent(type), { - builder: this - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 1)); - - return event; - }, - - /** - * Triggers an event on the builder container and returns the modified value - * @param {string} type - * @param {*} value - * @returns {*} - */ - change: function(type, value) { - var event = new $.Event(this._tojQueryEvent(type, true), { - builder: this, - value: value - }); - - this.$el.triggerHandler(event, Array.prototype.slice.call(arguments, 2)); - - return event.value; - }, - - /** - * Attaches an event listener on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - on: function(type, cb) { - this.$el.on(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Removes an event listener from the builder container - * @param {string} type - * @param {function} [cb] - * @returns {QueryBuilder} - */ - off: function(type, cb) { - this.$el.off(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Attaches an event listener called once on the builder container - * @param {string} type - * @param {function} cb - * @returns {QueryBuilder} - */ - once: function(type, cb) { - this.$el.one(this._tojQueryEvent(type), cb); - return this; - }, - - /** - * Appends `.queryBuilder` and optionally `.filter` to the events names - * @param {string} name - * @param {boolean} [filter=false] - * @returns {string} - * @private - */ - _tojQueryEvent: function(name, filter) { - return name.split(' ').map(function(type) { - return type + '.queryBuilder' + (filter ? '.filter' : ''); - }).join(' '); - } -}); - - -/** - * Allowed types and their internal representation - * @type {object.} - * @readonly - * @private - */ -QueryBuilder.types = { - 'string': 'string', - 'integer': 'number', - 'double': 'number', - 'date': 'datetime', - 'time': 'datetime', - 'datetime': 'datetime', - 'boolean': 'boolean' -}; - -/** - * Allowed inputs - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.inputs = [ - 'text', - 'number', - 'textarea', - 'radio', - 'checkbox', - 'select' -]; - -/** - * Runtime modifiable options with `setOptions` method - * @type {string[]} - * @readonly - * @private - */ -QueryBuilder.modifiable_options = [ - 'display_errors', - 'allow_groups', - 'allow_empty', - 'default_condition', - 'default_filter' -]; - -/** - * CSS selectors for common components - * @type {object.} - * @readonly - */ -QueryBuilder.selectors = { - group_container: '.rules-group-container', - rule_container: '.rule-container', - filter_container: '.rule-filter-container', - operator_container: '.rule-operator-container', - value_container: '.rule-value-container', - error_container: '.error-container', - condition_container: '.rules-group-header .group-conditions', - - rule_header: '.rule-header', - group_header: '.rules-group-header', - group_actions: '.group-actions', - rule_actions: '.rule-actions', - - rules_list: '.rules-group-body>.rules-list', - - group_condition: '.rules-group-header [name$=_cond]', - rule_filter: '.rule-filter-container [name$=_filter]', - rule_operator: '.rule-operator-container [name$=_operator]', - rule_value: '.rule-value-container [name*=_value_]', - - add_rule: '[data-add=rule]', - delete_rule: '[data-delete=rule]', - add_group: '[data-add=group]', - delete_group: '[data-delete=group]' -}; - -/** - * Template strings (see template.js) - * @type {object.} - * @readonly - */ -QueryBuilder.templates = {}; - -/** - * Localized strings (see i18n/) - * @type {object.} - * @readonly - */ -QueryBuilder.regional = {}; - -/** - * Default operators - * @type {object.} - * @readonly - */ -QueryBuilder.OPERATORS = { - equal: { type: 'equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - not_equal: { type: 'not_equal', nb_inputs: 1, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - in: { type: 'in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - not_in: { type: 'not_in', nb_inputs: 1, multiple: true, apply_to: ['string', 'number', 'datetime'] }, - less: { type: 'less', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - less_or_equal: { type: 'less_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater: { type: 'greater', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - greater_or_equal: { type: 'greater_or_equal', nb_inputs: 1, multiple: false, apply_to: ['number', 'datetime'] }, - between: { type: 'between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - not_between: { type: 'not_between', nb_inputs: 2, multiple: false, apply_to: ['number', 'datetime'] }, - begins_with: { type: 'begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_begins_with: { type: 'not_begins_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - contains: { type: 'contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_contains: { type: 'not_contains', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - ends_with: { type: 'ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - not_ends_with: { type: 'not_ends_with', nb_inputs: 1, multiple: false, apply_to: ['string'] }, - is_empty: { type: 'is_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_not_empty: { type: 'is_not_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] }, - is_null: { type: 'is_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] }, - is_not_null: { type: 'is_not_null', nb_inputs: 0, multiple: false, apply_to: ['string', 'number', 'datetime', 'boolean'] } -}; - -/** - * Default configuration - * @type {object} - * @readonly - */ -QueryBuilder.DEFAULTS = { - filters: [], - plugins: [], - - sort_filters: false, - display_errors: true, - allow_groups: -1, - allow_empty: false, - conditions: ['AND', 'OR'], - default_condition: 'AND', - inputs_separator: ' , ', - select_placeholder: '------', - display_empty_filter: true, - default_filter: null, - optgroups: {}, - - default_rule_flags: { - filter_readonly: false, - operator_readonly: false, - value_readonly: false, - no_delete: false - }, - - default_group_flags: { - condition_readonly: false, - no_add_rule: false, - no_add_group: false, - no_delete: false - }, - - templates: { - group: null, - rule: null, - filterSelect: null, - operatorSelect: null, - ruleValueSelect: null - }, - - lang_code: 'en', - lang: {}, - - operators: [ - 'equal', - 'not_equal', - 'in', - 'not_in', - 'less', - 'less_or_equal', - 'greater', - 'greater_or_equal', - 'between', - 'not_between', - 'begins_with', - 'not_begins_with', - 'contains', - 'not_contains', - 'ends_with', - 'not_ends_with', - 'is_empty', - 'is_not_empty', - 'is_null', - 'is_not_null' - ], - - icons: { - add_group: 'glyphicon glyphicon-plus-sign', - add_rule: 'glyphicon glyphicon-plus', - remove_group: 'glyphicon glyphicon-remove', - remove_rule: 'glyphicon glyphicon-remove', - error: 'glyphicon glyphicon-warning-sign' - } -}; - - -/** - * @module plugins - */ - -/** - * Definition of available plugins - * @type {object.} - */ -QueryBuilder.plugins = {}; - -/** - * Gets or extends the default configuration - * @param {object} [options] - new configuration - * @returns {undefined|object} nothing or configuration object (copy) - */ -QueryBuilder.defaults = function(options) { - if (typeof options == 'object') { - $.extendext(true, 'replace', QueryBuilder.DEFAULTS, options); - } - else if (typeof options == 'string') { - if (typeof QueryBuilder.DEFAULTS[options] == 'object') { - return $.extend(true, {}, QueryBuilder.DEFAULTS[options]); - } - else { - return QueryBuilder.DEFAULTS[options]; - } - } - else { - return $.extend(true, {}, QueryBuilder.DEFAULTS); - } -}; - -/** - * Registers a new plugin - * @param {string} name - * @param {function} fct - init function - * @param {object} [def] - default options - */ -QueryBuilder.define = function(name, fct, def) { - QueryBuilder.plugins[name] = { - fct: fct, - def: def || {} - }; -}; - -/** - * Adds new methods to QueryBuilder prototype - * @param {object.} methods - */ -QueryBuilder.extend = function(methods) { - $.extend(QueryBuilder.prototype, methods); -}; - -/** - * Initializes plugins for an instance - * @throws ConfigError - * @private - */ -QueryBuilder.prototype.initPlugins = function() { - if (!this.plugins) { - return; - } - - if ($.isArray(this.plugins)) { - var tmp = {}; - this.plugins.forEach(function(plugin) { - tmp[plugin] = null; - }); - this.plugins = tmp; - } - - Object.keys(this.plugins).forEach(function(plugin) { - if (plugin in QueryBuilder.plugins) { - this.plugins[plugin] = $.extend(true, {}, - QueryBuilder.plugins[plugin].def, - this.plugins[plugin] || {} - ); - - QueryBuilder.plugins[plugin].fct.call(this, this.plugins[plugin]); - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', plugin); - } - }, this); -}; - -/** - * Returns the config of a plugin, if the plugin is not loaded, returns the default config. - * @param {string} name - * @param {string} [property] - * @throws ConfigError - * @returns {*} - */ -QueryBuilder.prototype.getPluginOptions = function(name, property) { - var plugin; - if (this.plugins && this.plugins[name]) { - plugin = this.plugins[name]; - } - else if (QueryBuilder.plugins[name]) { - plugin = QueryBuilder.plugins[name].def; - } - - if (plugin) { - if (property) { - return plugin[property]; - } - else { - return plugin; - } - } - else { - Utils.error('Config', 'Unable to find plugin "{0}"', name); - } -}; - - -/** - * Final initialisation of the builder - * @param {object} [rules] - * @fires QueryBuilder.afterInit - * @private - */ -QueryBuilder.prototype.init = function(rules) { - /** - * When the initilization is done, just before creating the root group - * @event afterInit - * @memberof QueryBuilder - */ - this.trigger('afterInit'); - - if (rules) { - this.setRules(rules); - delete this.settings.rules; - } - else { - this.setRoot(true); - } -}; - -/** - * Checks the configuration of each filter - * @param {QueryBuilder.Filter[]} filters - * @returns {QueryBuilder.Filter[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkFilters = function(filters) { - var definedFilters = []; - - if (!filters || filters.length === 0) { - Utils.error('Config', 'Missing filters list'); - } - - filters.forEach(function(filter, i) { - if (!filter.id) { - Utils.error('Config', 'Missing filter {0} id', i); - } - if (definedFilters.indexOf(filter.id) != -1) { - Utils.error('Config', 'Filter "{0}" already defined', filter.id); - } - definedFilters.push(filter.id); - - if (!filter.type) { - filter.type = 'string'; - } - else if (!QueryBuilder.types[filter.type]) { - Utils.error('Config', 'Invalid type "{0}"', filter.type); - } - - if (!filter.input) { - filter.input = QueryBuilder.types[filter.type] === 'number' ? 'number' : 'text'; - } - else if (typeof filter.input != 'function' && QueryBuilder.inputs.indexOf(filter.input) == -1) { - Utils.error('Config', 'Invalid input "{0}"', filter.input); - } - - if (filter.operators) { - filter.operators.forEach(function(operator) { - if (typeof operator != 'string') { - Utils.error('Config', 'Filter operators must be global operators types (string)'); - } - }); - } - - if (!filter.field) { - filter.field = filter.id; - } - if (!filter.label) { - filter.label = filter.field; - } - - if (!filter.optgroup) { - filter.optgroup = null; - } - else { - this.status.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[filter.optgroup]) { - this.settings.optgroups[filter.optgroup] = filter.optgroup; - } - } - - switch (filter.input) { - case 'radio': - case 'checkbox': - if (!filter.values || filter.values.length < 1) { - Utils.error('Config', 'Missing filter "{0}" values', filter.id); - } - break; - - case 'select': - var cleanValues = []; - filter.has_optgroup = false; - - Utils.iterateOptions(filter.values, function(value, label, optgroup) { - cleanValues.push({ - value: value, - label: label, - optgroup: optgroup || null - }); - - if (optgroup) { - filter.has_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[optgroup]) { - this.settings.optgroups[optgroup] = optgroup; - } - } - }.bind(this)); - - if (filter.has_optgroup) { - filter.values = Utils.groupSort(cleanValues, 'optgroup'); - } - else { - filter.values = cleanValues; - } - - if (filter.placeholder) { - if (filter.placeholder_value === undefined) { - filter.placeholder_value = -1; - } - - filter.values.forEach(function(entry) { - if (entry.value == filter.placeholder_value) { - Utils.error('Config', 'Placeholder of filter "{0}" overlaps with one of its values', filter.id); - } - }); - } - break; - } - }, this); - - if (this.settings.sort_filters) { - if (typeof this.settings.sort_filters == 'function') { - filters.sort(this.settings.sort_filters); - } - else { - var self = this; - filters.sort(function(a, b) { - return self.translate(a.label).localeCompare(self.translate(b.label)); - }); - } - } - - if (this.status.has_optgroup) { - filters = Utils.groupSort(filters, 'optgroup'); - } - - return filters; -}; - -/** - * Checks the configuration of each operator - * @param {QueryBuilder.Operator[]} operators - * @returns {QueryBuilder.Operator[]} - * @throws ConfigError - */ -QueryBuilder.prototype.checkOperators = function(operators) { - var definedOperators = []; - - operators.forEach(function(operator, i) { - if (typeof operator == 'string') { - if (!QueryBuilder.OPERATORS[operator]) { - Utils.error('Config', 'Unknown operator "{0}"', operator); - } - - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator]); - } - else { - if (!operator.type) { - Utils.error('Config', 'Missing "type" for operator {0}', i); - } - - if (QueryBuilder.OPERATORS[operator.type]) { - operators[i] = operator = $.extendext(true, 'replace', {}, QueryBuilder.OPERATORS[operator.type], operator); - } - - if (operator.nb_inputs === undefined || operator.apply_to === undefined) { - Utils.error('Config', 'Missing "nb_inputs" and/or "apply_to" for operator "{0}"', operator.type); - } - } - - if (definedOperators.indexOf(operator.type) != -1) { - Utils.error('Config', 'Operator "{0}" already defined', operator.type); - } - definedOperators.push(operator.type); - - if (!operator.optgroup) { - operator.optgroup = null; - } - else { - this.status.has_operator_optgroup = true; - - // register optgroup if needed - if (!this.settings.optgroups[operator.optgroup]) { - this.settings.optgroups[operator.optgroup] = operator.optgroup; - } - } - }, this); - - if (this.status.has_operator_optgroup) { - operators = Utils.groupSort(operators, 'optgroup'); - } - - return operators; -}; - -/** - * Adds all events listeners to the builder - * @private - */ -QueryBuilder.prototype.bindEvents = function() { - var self = this; - var Selectors = QueryBuilder.selectors; - - // group condition change - this.$el.on('change.queryBuilder', Selectors.group_condition, function() { - if ($(this).is(':checked')) { - var $group = $(this).closest(Selectors.group_container); - self.getModel($group).condition = $(this).val(); - } - }); - - // rule filter change - this.$el.on('change.queryBuilder', Selectors.rule_filter, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).filter = self.getFilterById($(this).val()); - }); - - // rule operator change - this.$el.on('change.queryBuilder', Selectors.rule_operator, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.getModel($rule).operator = self.getOperatorByType($(this).val()); - }); - - // add rule button - this.$el.on('click.queryBuilder', Selectors.add_rule, function() { - var $group = $(this).closest(Selectors.group_container); - self.addRule(self.getModel($group)); - }); - - // delete rule button - this.$el.on('click.queryBuilder', Selectors.delete_rule, function() { - var $rule = $(this).closest(Selectors.rule_container); - self.deleteRule(self.getModel($rule)); - }); - - if (this.settings.allow_groups !== 0) { - // add group button - this.$el.on('click.queryBuilder', Selectors.add_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.addGroup(self.getModel($group)); - }); - - // delete group button - this.$el.on('click.queryBuilder', Selectors.delete_group, function() { - var $group = $(this).closest(Selectors.group_container); - self.deleteGroup(self.getModel($group)); - }); - } - - // model events - this.model.on({ - 'drop': function(e, node) { - node.$el.remove(); - self.refreshGroupsConditions(); - }, - 'add': function(e, parent, node, index) { - if (index === 0) { - node.$el.prependTo(parent.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(parent.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'move': function(e, node, group, index) { - node.$el.detach(); - - if (index === 0) { - node.$el.prependTo(group.$el.find('>' + QueryBuilder.selectors.rules_list)); - } - else { - node.$el.insertAfter(group.rules[index - 1].$el); - } - self.refreshGroupsConditions(); - }, - 'update': function(e, node, field, value, oldValue) { - if (node instanceof Rule) { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyRuleFlags(node); - break; - - case 'filter': - self.updateRuleFilter(node, oldValue); - break; - - case 'operator': - self.updateRuleOperator(node, oldValue); - break; - - case 'value': - self.updateRuleValue(node, oldValue); - break; - } - } - else { - switch (field) { - case 'error': - self.updateError(node); - break; - - case 'flags': - self.applyGroupFlags(node); - break; - - case 'condition': - self.updateGroupCondition(node, oldValue); - break; - } - } - } - }); -}; - -/** - * Creates the root group - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} root group - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.setRoot = function(addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, 1)); - - this.$el.append($group); - this.model.root = new Group(null, $group); - this.model.root.model = this.model; - - this.model.root.data = data; - this.model.root.flags = $.extend({}, this.settings.default_group_flags, flags); - this.model.root.condition = this.settings.default_condition; - - this.trigger('afterAddGroup', this.model.root); - - if (addRule) { - this.addRule(this.model.root); - } - - return this.model.root; -}; - -/** - * Adds a new group - * @param {Group} parent - * @param {boolean} [addRule=true] - adds a default empty rule - * @param {object} [data] - group custom data - * @param {object} [flags] - flags to apply to the group - * @returns {Group} - * @fires QueryBuilder.beforeAddGroup - * @fires QueryBuilder.afterAddGroup - */ -QueryBuilder.prototype.addGroup = function(parent, addRule, data, flags) { - addRule = (addRule === undefined || addRule === true); - - var level = parent.level + 1; - - /** - * Just before adding a group, can be prevented. - * @event beforeAddGroup - * @memberof QueryBuilder - * @param {Group} parent - * @param {boolean} addRule - if an empty rule will be added in the group - * @param {int} level - nesting level of the group, 1 is the root group - */ - var e = this.trigger('beforeAddGroup', parent, addRule, level); - if (e.isDefaultPrevented()) { - return null; - } - - var group_id = this.nextGroupId(); - var $group = $(this.getGroupTemplate(group_id, level)); - var model = parent.addGroup($group); - - model.data = data; - model.flags = $.extend({}, this.settings.default_group_flags, flags); - model.condition = this.settings.default_condition; - - /** - * Just after adding a group - * @event afterAddGroup - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterAddGroup', model); - - /** - * After any change in the rules - * @event rulesChanged - * @memberof QueryBuilder - */ - this.trigger('rulesChanged'); - - if (addRule) { - this.addRule(model); - } - - return model; -}; - -/** - * Tries to delete a group. The group is not deleted if at least one rule is flagged `no_delete`. - * @param {Group} group - * @returns {boolean} if the group has been deleted - * @fires QueryBuilder.beforeDeleteGroup - * @fires QueryBuilder.afterDeleteGroup - */ -QueryBuilder.prototype.deleteGroup = function(group) { - if (group.isRoot()) { - return false; - } - - /** - * Just before deleting a group, can be prevented - * @event beforeDeleteGroup - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeDeleteGroup', group); - if (e.isDefaultPrevented()) { - return false; - } - - var del = true; - - group.each('reverse', function(rule) { - del &= this.deleteRule(rule); - }, function(group) { - del &= this.deleteGroup(group); - }, this); - - if (del) { - group.drop(); - - /** - * Just after deleting a group - * @event afterDeleteGroup - * @memberof QueryBuilder - */ - this.trigger('afterDeleteGroup'); - - this.trigger('rulesChanged'); - } - - return del; -}; - -/** - * Performs actions when a group's condition changes - * @param {Group} group - * @param {object} previousCondition - * @fires QueryBuilder.afterUpdateGroupCondition - * @private - */ -QueryBuilder.prototype.updateGroupCondition = function(group, previousCondition) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).each(function() { - var $this = $(this); - $this.prop('checked', $this.val() === group.condition); - $this.parent().toggleClass('active', $this.val() === group.condition); - }); - - /** - * After the group condition has been modified - * @event afterUpdateGroupCondition - * @memberof QueryBuilder - * @param {Group} group - * @param {object} previousCondition - */ - this.trigger('afterUpdateGroupCondition', group, previousCondition); - - this.trigger('rulesChanged'); -}; - -/** - * Updates the visibility of conditions based on number of rules inside each group - * @private - */ -QueryBuilder.prototype.refreshGroupsConditions = function() { - (function walk(group) { - if (!group.flags || (group.flags && !group.flags.condition_readonly)) { - group.$el.find('>' + QueryBuilder.selectors.group_condition).prop('disabled', group.rules.length <= 1) - .parent().toggleClass('disabled', group.rules.length <= 1); - } - - group.each(null, function(group) { - walk(group); - }, this); - }(this.model.root)); -}; - -/** - * Adds a new rule - * @param {Group} parent - * @param {object} [data] - rule custom data - * @param {object} [flags] - flags to apply to the rule - * @returns {Rule} - * @fires QueryBuilder.beforeAddRule - * @fires QueryBuilder.afterAddRule - * @fires QueryBuilder.changer:getDefaultFilter - */ -QueryBuilder.prototype.addRule = function(parent, data, flags) { - /** - * Just before adding a rule, can be prevented - * @event beforeAddRule - * @memberof QueryBuilder - * @param {Group} parent - */ - var e = this.trigger('beforeAddRule', parent); - if (e.isDefaultPrevented()) { - return null; - } - - var rule_id = this.nextRuleId(); - var $rule = $(this.getRuleTemplate(rule_id)); - var model = parent.addRule($rule); - - model.data = data; - model.flags = $.extend({}, this.settings.default_rule_flags, flags); - - /** - * Just after adding a rule - * @event afterAddRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterAddRule', model); - - this.trigger('rulesChanged'); - - this.createRuleFilters(model); - - if (this.settings.default_filter || !this.settings.display_empty_filter) { - /** - * Modifies the default filter for a rule - * @event changer:getDefaultFilter - * @memberof QueryBuilder - * @param {QueryBuilder.Filter} filter - * @param {Rule} rule - * @returns {QueryBuilder.Filter} - */ - model.filter = this.change('getDefaultFilter', - this.getFilterById(this.settings.default_filter || this.filters[0].id), - model - ); - } - - return model; -}; - -/** - * Tries to delete a rule - * @param {Rule} rule - * @returns {boolean} if the rule has been deleted - * @fires QueryBuilder.beforeDeleteRule - * @fires QueryBuilder.afterDeleteRule - */ -QueryBuilder.prototype.deleteRule = function(rule) { - if (rule.flags.no_delete) { - return false; - } - - /** - * Just before deleting a rule, can be prevented - * @event beforeDeleteRule - * @memberof QueryBuilder - * @param {Rule} rule - */ - var e = this.trigger('beforeDeleteRule', rule); - if (e.isDefaultPrevented()) { - return false; - } - - rule.drop(); - - /** - * Just after deleting a rule - * @event afterDeleteRule - * @memberof QueryBuilder - */ - this.trigger('afterDeleteRule'); - - this.trigger('rulesChanged'); - - return true; -}; - -/** - * Creates the filters for a rule - * @param {Rule} rule - * @fires QueryBuilder.changer:getRuleFilters - * @fires QueryBuilder.afterCreateRuleFilters - * @private - */ -QueryBuilder.prototype.createRuleFilters = function(rule) { - /** - * Modifies the list a filters available for a rule - * @event changer:getRuleFilters - * @memberof QueryBuilder - * @param {QueryBuilder.Filter[]} filters - * @param {Rule} rule - * @returns {QueryBuilder.Filter[]} - */ - var filters = this.change('getRuleFilters', this.filters, rule); - var $filterSelect = $(this.getRuleFilterSelect(rule, filters)); - - rule.$el.find(QueryBuilder.selectors.filter_container).html($filterSelect); - - /** - * After creating the dropdown for filters - * @event afterCreateRuleFilters - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleFilters', rule); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the operators for a rule and init the rule operator - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleOperators - * @private - */ -QueryBuilder.prototype.createRuleOperators = function(rule) { - var $operatorContainer = rule.$el.find(QueryBuilder.selectors.operator_container).empty(); - - if (!rule.filter) { - return; - } - - var operators = this.getOperators(rule.filter); - var $operatorSelect = $(this.getRuleOperatorSelect(rule, operators)); - - $operatorContainer.html($operatorSelect); - - // set the operator without triggering update event - if (rule.filter.default_operator) { - rule.__.operator = this.getOperatorByType(rule.filter.default_operator); - } - else { - rule.__.operator = operators[0]; - } - - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - /** - * After creating the dropdown for operators - * @event afterCreateRuleOperators - * @memberof QueryBuilder - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - allowed operators for this rule - */ - this.trigger('afterCreateRuleOperators', rule, operators); - - this.applyRuleFlags(rule); -}; - -/** - * Creates the main input for a rule - * @param {Rule} rule - * @fires QueryBuilder.afterCreateRuleInput - * @private - */ -QueryBuilder.prototype.createRuleInput = function(rule) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container).empty(); - - rule.__.value = undefined; - - if (!rule.filter || !rule.operator || rule.operator.nb_inputs === 0) { - return; - } - - var self = this; - var $inputs = $(); - var filter = rule.filter; - - for (var i = 0; i < rule.operator.nb_inputs; i++) { - var $ruleInput = $(this.getRuleInput(rule, i)); - if (i > 0) $valueContainer.append(this.settings.inputs_separator); - $valueContainer.append($ruleInput); - $inputs = $inputs.add($ruleInput); - } - - $valueContainer.css('display', ''); - - $inputs.on('change ' + (filter.input_event || ''), function() { - if (!rule._updating_input) { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - }); - - if (filter.plugin) { - $inputs[filter.plugin](filter.plugin_config || {}); - } - - /** - * After creating the input for a rule and initializing optional plugin - * @event afterCreateRuleInput - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterCreateRuleInput', rule); - - if (filter.default_value !== undefined) { - rule.value = filter.default_value; - } - else { - rule._updating_value = true; - rule.value = self.getRuleInputValue(rule); - rule._updating_value = false; - } - - this.applyRuleFlags(rule); -}; - -/** - * Performs action when a rule's filter changes - * @param {Rule} rule - * @param {object} previousFilter - * @fires QueryBuilder.afterUpdateRuleFilter - * @private - */ -QueryBuilder.prototype.updateRuleFilter = function(rule, previousFilter) { - this.createRuleOperators(rule); - this.createRuleInput(rule); - - rule.$el.find(QueryBuilder.selectors.rule_filter).val(rule.filter ? rule.filter.id : '-1'); - - // clear rule data if the filter changed - if (previousFilter && rule.filter && previousFilter.id !== rule.filter.id) { - rule.data = undefined; - } - - /** - * After the filter has been updated and the operators and input re-created - * @event afterUpdateRuleFilter - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousFilter - */ - this.trigger('afterUpdateRuleFilter', rule, previousFilter); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when a rule's operator changes - * @param {Rule} rule - * @param {object} previousOperator - * @fires QueryBuilder.afterUpdateRuleOperator - * @private - */ -QueryBuilder.prototype.updateRuleOperator = function(rule, previousOperator) { - var $valueContainer = rule.$el.find(QueryBuilder.selectors.value_container); - - if (!rule.operator || rule.operator.nb_inputs === 0) { - $valueContainer.hide(); - - rule.__.value = undefined; - } - else { - $valueContainer.css('display', ''); - - if ($valueContainer.is(':empty') || !previousOperator || - rule.operator.nb_inputs !== previousOperator.nb_inputs || - rule.operator.optgroup !== previousOperator.optgroup - ) { - this.createRuleInput(rule); - } - } - - if (rule.operator) { - rule.$el.find(QueryBuilder.selectors.rule_operator).val(rule.operator.type); - - // refresh value if the format changed for this operator - rule.__.value = this.getRuleInputValue(rule); - } - - /** - * After the operator has been updated and the input optionally re-created - * @event afterUpdateRuleOperator - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} previousOperator - */ - this.trigger('afterUpdateRuleOperator', rule, previousOperator); - - this.trigger('rulesChanged'); -}; - -/** - * Performs actions when rule's value changes - * @param {Rule} rule - * @param {object} previousValue - * @fires QueryBuilder.afterUpdateRuleValue - * @private - */ -QueryBuilder.prototype.updateRuleValue = function(rule, previousValue) { - if (!rule._updating_value) { - this.setRuleInputValue(rule, rule.value); - } - - /** - * After the rule value has been modified - * @event afterUpdateRuleValue - * @memberof QueryBuilder - * @param {Rule} rule - * @param {*} previousValue - */ - this.trigger('afterUpdateRuleValue', rule, previousValue); - - this.trigger('rulesChanged'); -}; - -/** - * Changes a rule's properties depending on its flags - * @param {Rule} rule - * @fires QueryBuilder.afterApplyRuleFlags - * @private - */ -QueryBuilder.prototype.applyRuleFlags = function(rule) { - var flags = rule.flags; - var Selectors = QueryBuilder.selectors; - - rule.$el.find(Selectors.rule_filter).prop('disabled', flags.filter_readonly); - rule.$el.find(Selectors.rule_operator).prop('disabled', flags.operator_readonly); - rule.$el.find(Selectors.rule_value).prop('disabled', flags.value_readonly); - - if (flags.no_delete) { - rule.$el.find(Selectors.delete_rule).remove(); - } - - /** - * After rule's flags has been applied - * @event afterApplyRuleFlags - * @memberof QueryBuilder - * @param {Rule} rule - */ - this.trigger('afterApplyRuleFlags', rule); -}; - -/** - * Changes group's properties depending on its flags - * @param {Group} group - * @fires QueryBuilder.afterApplyGroupFlags - * @private - */ -QueryBuilder.prototype.applyGroupFlags = function(group) { - var flags = group.flags; - var Selectors = QueryBuilder.selectors; - - group.$el.find('>' + Selectors.group_condition).prop('disabled', flags.condition_readonly) - .parent().toggleClass('readonly', flags.condition_readonly); - - if (flags.no_add_rule) { - group.$el.find(Selectors.add_rule).remove(); - } - if (flags.no_add_group) { - group.$el.find(Selectors.add_group).remove(); - } - if (flags.no_delete) { - group.$el.find(Selectors.delete_group).remove(); - } - - /** - * After group's flags has been applied - * @event afterApplyGroupFlags - * @memberof QueryBuilder - * @param {Group} group - */ - this.trigger('afterApplyGroupFlags', group); -}; - -/** - * Clears all errors markers - * @param {Node} [node] default is root Group - */ -QueryBuilder.prototype.clearErrors = function(node) { - node = node || this.model.root; - - if (!node) { - return; - } - - node.error = null; - - if (node instanceof Group) { - node.each(function(rule) { - rule.error = null; - }, function(group) { - this.clearErrors(group); - }, this); - } -}; - -/** - * Adds/Removes error on a Rule or Group - * @param {Node} node - * @fires QueryBuilder.changer:displayError - * @private - */ -QueryBuilder.prototype.updateError = function(node) { - if (this.settings.display_errors) { - if (node.error === null) { - node.$el.removeClass('has-error'); - } - else { - var errorMessage = this.translate('errors', node.error[0]); - errorMessage = Utils.fmt(errorMessage, node.error.slice(1)); - - /** - * Modifies an error message before display - * @event changer:displayError - * @memberof QueryBuilder - * @param {string} errorMessage - the error message (translated and formatted) - * @param {array} error - the raw error array (error code and optional arguments) - * @param {Node} node - * @returns {string} - */ - errorMessage = this.change('displayError', errorMessage, node.error, node); - - node.$el.addClass('has-error') - .find(QueryBuilder.selectors.error_container).eq(0) - .attr('title', errorMessage); - } - } -}; - -/** - * Triggers a validation error event - * @param {Node} node - * @param {string|array} error - * @param {*} value - * @fires QueryBuilder.validationError - * @private - */ -QueryBuilder.prototype.triggerValidationError = function(node, error, value) { - if (!$.isArray(error)) { - error = [error]; - } - - /** - * Fired when a validation error occurred, can be prevented - * @event validationError - * @memberof QueryBuilder - * @param {Node} node - * @param {string} error - * @param {*} value - */ - var e = this.trigger('validationError', node, error, value); - if (!e.isDefaultPrevented()) { - node.error = error; - } -}; - - -/** - * Destroys the builder - * @fires QueryBuilder.beforeDestroy - */ -QueryBuilder.prototype.destroy = function() { - /** - * Before the {@link QueryBuilder#destroy} method - * @event beforeDestroy - * @memberof QueryBuilder - */ - this.trigger('beforeDestroy'); - - if (this.status.generated_id) { - this.$el.removeAttr('id'); - } - - this.clear(); - this.model = null; - - this.$el - .off('.queryBuilder') - .removeClass('query-builder') - .removeData('queryBuilder'); - - delete this.$el[0].queryBuilder; -}; - -/** - * Clear all rules and resets the root group - * @fires QueryBuilder.beforeReset - * @fires QueryBuilder.afterReset - */ -QueryBuilder.prototype.reset = function() { - /** - * Before the {@link QueryBuilder#reset} method, can be prevented - * @event beforeReset - * @memberof QueryBuilder - */ - var e = this.trigger('beforeReset'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 1; - this.status.rule_id = 0; - - this.model.root.empty(); - - this.model.root.data = undefined; - this.model.root.flags = $.extend({}, this.settings.default_group_flags); - this.model.root.condition = this.settings.default_condition; - - this.addRule(this.model.root); - - /** - * After the {@link QueryBuilder#reset} method - * @event afterReset - * @memberof QueryBuilder - */ - this.trigger('afterReset'); - - this.trigger('rulesChanged'); -}; - -/** - * Clears all rules and removes the root group - * @fires QueryBuilder.beforeClear - * @fires QueryBuilder.afterClear - */ -QueryBuilder.prototype.clear = function() { - /** - * Before the {@link QueryBuilder#clear} method, can be prevented - * @event beforeClear - * @memberof QueryBuilder - */ - var e = this.trigger('beforeClear'); - if (e.isDefaultPrevented()) { - return; - } - - this.status.group_id = 0; - this.status.rule_id = 0; - - if (this.model.root) { - this.model.root.drop(); - this.model.root = null; - } - - /** - * After the {@link QueryBuilder#clear} method - * @event afterClear - * @memberof QueryBuilder - */ - this.trigger('afterClear'); - - this.trigger('rulesChanged'); -}; - -/** - * Modifies the builder configuration.
- * Only options defined in QueryBuilder.modifiable_options are modifiable - * @param {object} options - */ -QueryBuilder.prototype.setOptions = function(options) { - $.each(options, function(opt, value) { - if (QueryBuilder.modifiable_options.indexOf(opt) !== -1) { - this.settings[opt] = value; - } - }.bind(this)); -}; - -/** - * Returns the model associated to a DOM object, or the root model - * @param {jQuery} [target] - * @returns {Node} - */ -QueryBuilder.prototype.getModel = function(target) { - if (!target) { - return this.model.root; - } - else if (target instanceof Node) { - return target; - } - else { - return $(target).data('queryBuilderModel'); - } -}; - -/** - * Validates the whole builder - * @param {object} [options] - * @param {boolean} [options.skip_empty=false] - skips validating rules that have no filter selected - * @returns {boolean} - * @fires QueryBuilder.changer:validate - */ -QueryBuilder.prototype.validate = function(options) { - options = $.extend({ - skip_empty: false - }, options); - - this.clearErrors(); - - var self = this; - - var valid = (function parse(group) { - var done = 0; - var errors = 0; - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - if (!rule.filter) { - self.triggerValidationError(rule, 'no_filter', null); - errors++; - return; - } - - if (!rule.operator) { - self.triggerValidationError(rule, 'no_operator', null); - errors++; - return; - } - - if (rule.operator.nb_inputs !== 0) { - var valid = self.validateValue(rule, rule.value); - - if (valid !== true) { - self.triggerValidationError(rule, valid, rule.value); - errors++; - return; - } - } - - done++; - - }, function(group) { - var res = parse(group); - if (res === true) { - done++; - } - else if (res === false) { - errors++; - } - }); - - if (errors > 0) { - return false; - } - else if (done === 0 && !group.isRoot() && options.skip_empty) { - return null; - } - else if (done === 0 && (!self.settings.allow_empty || !group.isRoot())) { - self.triggerValidationError(group, 'empty_group', null); - return false; - } - - return true; - - }(this.model.root)); - - /** - * Modifies the result of the {@link QueryBuilder#validate} method - * @event changer:validate - * @memberof QueryBuilder - * @param {boolean} valid - * @returns {boolean} - */ - return this.change('validate', valid); -}; - -/** - * Gets an object representing current rules - * @param {object} [options] - * @param {boolean|string} [options.get_flags=false] - export flags, true: only changes from default flags or 'all' - * @param {boolean} [options.allow_invalid=false] - returns rules even if they are invalid - * @param {boolean} [options.skip_empty=false] - remove rules that have no filter selected - * @returns {object} - * @fires QueryBuilder.changer:ruleToJson - * @fires QueryBuilder.changer:groupToJson - * @fires QueryBuilder.changer:getRules - */ -QueryBuilder.prototype.getRules = function(options) { - options = $.extend({ - get_flags: false, - allow_invalid: false, - skip_empty: false - }, options); - - var valid = this.validate(options); - if (!valid && !options.allow_invalid) { - return null; - } - - var self = this; - - var out = (function parse(group) { - var groupData = { - condition: group.condition, - rules: [] - }; - - if (group.data) { - groupData.data = $.extendext(true, 'replace', {}, group.data); - } - - if (options.get_flags) { - var flags = self.getGroupFlags(group.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - groupData.flags = flags; - } - } - - group.each(function(rule) { - if (!rule.filter && options.skip_empty) { - return; - } - - var value = null; - if (!rule.operator || rule.operator.nb_inputs !== 0) { - value = rule.value; - } - - var ruleData = { - id: rule.filter ? rule.filter.id : null, - field: rule.filter ? rule.filter.field : null, - type: rule.filter ? rule.filter.type : null, - input: rule.filter ? rule.filter.input : null, - operator: rule.operator ? rule.operator.type : null, - value: value - }; - - if (rule.filter && rule.filter.data || rule.data) { - ruleData.data = $.extendext(true, 'replace', {}, rule.filter.data, rule.data); - } - - if (options.get_flags) { - var flags = self.getRuleFlags(rule.flags, options.get_flags === 'all'); - if (!$.isEmptyObject(flags)) { - ruleData.flags = flags; - } - } - - /** - * Modifies the JSON generated from a Rule object - * @event changer:ruleToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Rule} rule - * @returns {object} - */ - groupData.rules.push(self.change('ruleToJson', ruleData, rule)); - - }, function(model) { - var data = parse(model); - if (data.rules.length !== 0 || !options.skip_empty) { - groupData.rules.push(data); - } - }, this); - - /** - * Modifies the JSON generated from a Group object - * @event changer:groupToJson - * @memberof QueryBuilder - * @param {object} json - * @param {Group} group - * @returns {object} - */ - return self.change('groupToJson', groupData, group); - - }(this.model.root)); - - out.valid = valid; - - /** - * Modifies the result of the {@link QueryBuilder#getRules} method - * @event changer:getRules - * @memberof QueryBuilder - * @param {object} json - * @returns {object} - */ - return this.change('getRules', out); -}; - -/** - * Sets rules from object - * @param {object} data - * @param {object} [options] - * @param {boolean} [options.allow_invalid=false] - silent-fail if the data are invalid - * @throws RulesError, UndefinedConditionError - * @fires QueryBuilder.changer:setRules - * @fires QueryBuilder.changer:jsonToRule - * @fires QueryBuilder.changer:jsonToGroup - * @fires QueryBuilder.afterSetRules - */ -QueryBuilder.prototype.setRules = function(data, options) { - options = $.extend({ - allow_invalid: false - }, options); - - if ($.isArray(data)) { - data = { - condition: this.settings.default_condition, - rules: data - }; - } - - if (!data || !data.rules || (data.rules.length === 0 && !this.settings.allow_empty)) { - Utils.error('RulesParse', 'Incorrect data object passed'); - } - - this.clear(); - this.setRoot(false, data.data, this.parseGroupFlags(data)); - - /** - * Modifies data before the {@link QueryBuilder#setRules} method - * @event changer:setRules - * @memberof QueryBuilder - * @param {object} json - * @param {object} options - * @returns {object} - */ - data = this.change('setRules', data, options); - - var self = this; - - (function add(data, group) { - if (group === null) { - return; - } - - if (data.condition === undefined) { - data.condition = self.settings.default_condition; - } - else if (self.settings.conditions.indexOf(data.condition) == -1) { - Utils.error(!options.allow_invalid, 'UndefinedCondition', 'Invalid condition "{0}"', data.condition); - data.condition = self.settings.default_condition; - } - - group.condition = data.condition; - - data.rules.forEach(function(item) { - var model; - - if (item.rules !== undefined) { - if (self.settings.allow_groups !== -1 && self.settings.allow_groups < group.level) { - Utils.error(!options.allow_invalid, 'RulesParse', 'No more than {0} groups are allowed', self.settings.allow_groups); - self.reset(); - } - else { - model = self.addGroup(group, false, item.data, self.parseGroupFlags(item)); - if (model === null) { - return; - } - - add(item, model); - } - } - else { - if (!item.empty) { - if (item.id === undefined) { - Utils.error(!options.allow_invalid, 'RulesParse', 'Missing rule field id'); - item.empty = true; - } - if (item.operator === undefined) { - item.operator = 'equal'; - } - } - - model = self.addRule(group, item.data, self.parseRuleFlags(item)); - if (model === null) { - return; - } - - if (!item.empty) { - model.filter = self.getFilterById(item.id, !options.allow_invalid); - } - - if (model.filter) { - model.operator = self.getOperatorByType(item.operator, !options.allow_invalid); - - if (!model.operator) { - model.operator = self.getOperators(model.filter)[0]; - } - } - - if (model.operator && model.operator.nb_inputs !== 0) { - if (item.value !== undefined) { - model.value = item.value; - } - else if (model.filter.default_value !== undefined) { - model.value = model.filter.default_value; - } - } - - /** - * Modifies the Rule object generated from the JSON - * @event changer:jsonToRule - * @memberof QueryBuilder - * @param {Rule} rule - * @param {object} json - * @returns {Rule} the same rule - */ - if (self.change('jsonToRule', model, item) != model) { - Utils.error('RulesParse', 'Plugin tried to change rule reference'); - } - } - }); - - /** - * Modifies the Group object generated from the JSON - * @event changer:jsonToGroup - * @memberof QueryBuilder - * @param {Group} group - * @param {object} json - * @returns {Group} the same group - */ - if (self.change('jsonToGroup', group, data) != group) { - Utils.error('RulesParse', 'Plugin tried to change group reference'); - } - - }(data, this.model.root)); - - /** - * After the {@link QueryBuilder#setRules} method - * @event afterSetRules - * @memberof QueryBuilder - */ - this.trigger('afterSetRules'); -}; - - -/** - * Performs value validation - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @fires QueryBuilder.changer:validateValue - */ -QueryBuilder.prototype.validateValue = function(rule, value) { - var validation = rule.filter.validation || {}; - var result = true; - - if (validation.callback) { - result = validation.callback.call(this, value, rule); - } - else { - result = this._validateValue(rule, value); - } - - /** - * Modifies the result of the rule validation method - * @event changer:validateValue - * @memberof QueryBuilder - * @param {array|boolean} result - true or an error array - * @param {*} value - * @param {Rule} rule - * @returns {array|boolean} - */ - return this.change('validateValue', result, value, rule); -}; - -/** - * Default validation function - * @param {Rule} rule - * @param {string|string[]} value - * @returns {array|boolean} true or error array - * @throws ConfigError - * @private - */ -QueryBuilder.prototype._validateValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - var validation = filter.validation || {}; - var result = true; - var tmp, tempValue; - - if (rule.operator.nb_inputs === 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - if (!operator.multiple && $.isArray(value[i]) && value[i].length > 1) { - result = ['operator_not_multiple', operator.type, this.translate('operators', operator.type)]; - break; - } - - switch (filter.input) { - case 'radio': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['radio_empty']; - } - break; - } - break; - - case 'checkbox': - if (value[i] === undefined || value[i].length === 0) { - if (!validation.allow_empty_value) { - result = ['checkbox_empty']; - } - break; - } - break; - - case 'select': - if (value[i] === undefined || value[i].length === 0 || (filter.placeholder && value[i] == filter.placeholder_value)) { - if (!validation.allow_empty_value) { - result = ['select_empty']; - } - break; - } - break; - - default: - tempValue = $.isArray(value[i]) ? value[i] : [value[i]]; - - for (var j = 0; j < tempValue.length; j++) { - switch (QueryBuilder.types[filter.type]) { - case 'string': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['string_empty']; - } - break; - } - if (validation.min !== undefined) { - if (tempValue[j].length < parseInt(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'string_exceed_min_length'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j].length > parseInt(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'string_exceed_max_length'), validation.max]; - break; - } - } - if (validation.format) { - if (typeof validation.format == 'string') { - validation.format = new RegExp(validation.format); - } - if (!validation.format.test(tempValue[j])) { - result = [this.getValidationMessage(validation, 'format', 'string_invalid_format'), validation.format]; - break; - } - } - break; - - case 'number': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['number_nan']; - } - break; - } - if (isNaN(tempValue[j])) { - result = ['number_nan']; - break; - } - if (filter.type == 'integer') { - if (parseInt(tempValue[j]) != tempValue[j]) { - result = ['number_not_integer']; - break; - } - } - else { - if (parseFloat(tempValue[j]) != tempValue[j]) { - result = ['number_not_double']; - break; - } - } - if (validation.min !== undefined) { - if (tempValue[j] < parseFloat(validation.min)) { - result = [this.getValidationMessage(validation, 'min', 'number_exceed_min'), validation.min]; - break; - } - } - if (validation.max !== undefined) { - if (tempValue[j] > parseFloat(validation.max)) { - result = [this.getValidationMessage(validation, 'max', 'number_exceed_max'), validation.max]; - break; - } - } - if (validation.step !== undefined && validation.step !== 'any') { - var v = (tempValue[j] / validation.step).toPrecision(14); - if (parseInt(v) != v) { - result = [this.getValidationMessage(validation, 'step', 'number_wrong_step'), validation.step]; - break; - } - } - break; - - case 'datetime': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['datetime_empty']; - } - break; - } - - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - var datetime = moment(tempValue[j], validation.format); - if (!datetime.isValid()) { - result = [this.getValidationMessage(validation, 'format', 'datetime_invalid'), validation.format]; - break; - } - else { - if (validation.min) { - if (datetime < moment(validation.min, validation.format)) { - result = [this.getValidationMessage(validation, 'min', 'datetime_exceed_min'), validation.min]; - break; - } - } - if (validation.max) { - if (datetime > moment(validation.max, validation.format)) { - result = [this.getValidationMessage(validation, 'max', 'datetime_exceed_max'), validation.max]; - break; - } - } - } - } - break; - - case 'boolean': - if (tempValue[j] === undefined || tempValue[j].length === 0) { - if (!validation.allow_empty_value) { - result = ['boolean_not_valid']; - } - break; - } - tmp = ('' + tempValue[j]).trim().toLowerCase(); - if (tmp !== 'true' && tmp !== 'false' && tmp !== '1' && tmp !== '0' && tempValue[j] !== 1 && tempValue[j] !== 0) { - result = ['boolean_not_valid']; - break; - } - } - - if (result !== true) { - break; - } - } - } - - if (result !== true) { - break; - } - } - - if ((rule.operator.type === 'between' || rule.operator.type === 'not_between') && value.length === 2) { - switch (QueryBuilder.types[filter.type]) { - case 'number': - if (value[0] > value[1]) { - result = ['number_between_invalid', value[0], value[1]]; - } - break; - - case 'datetime': - // we need MomentJS - if (validation.format) { - if (!('moment' in window)) { - Utils.error('MissingLibrary', 'MomentJS is required for Date/Time validation. Get it here http://momentjs.com'); - } - - if (moment(value[0], validation.format).isAfter(moment(value[1], validation.format))) { - result = ['datetime_between_invalid', value[0], value[1]]; - } - } - break; - } - } - - return result; -}; - -/** - * Returns an incremented group ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextGroupId = function() { - return this.status.id + '_group_' + (this.status.group_id++); -}; - -/** - * Returns an incremented rule ID - * @returns {string} - * @private - */ -QueryBuilder.prototype.nextRuleId = function() { - return this.status.id + '_rule_' + (this.status.rule_id++); -}; - -/** - * Returns the operators for a filter - * @param {string|object} filter - filter id or filter object - * @returns {object[]} - * @fires QueryBuilder.changer:getOperators - * @private - */ -QueryBuilder.prototype.getOperators = function(filter) { - if (typeof filter == 'string') { - filter = this.getFilterById(filter); - } - - var result = []; - - for (var i = 0, l = this.operators.length; i < l; i++) { - // filter operators check - if (filter.operators) { - if (filter.operators.indexOf(this.operators[i].type) == -1) { - continue; - } - } - // type check - else if (this.operators[i].apply_to.indexOf(QueryBuilder.types[filter.type]) == -1) { - continue; - } - - result.push(this.operators[i]); - } - - // keep sort order defined for the filter - if (filter.operators) { - result.sort(function(a, b) { - return filter.operators.indexOf(a.type) - filter.operators.indexOf(b.type); - }); - } - - /** - * Modifies the operators available for a filter - * @event changer:getOperators - * @memberof QueryBuilder - * @param {QueryBuilder.Operator[]} operators - * @param {QueryBuilder.Filter} filter - * @returns {QueryBuilder.Operator[]} - */ - return this.change('getOperators', result, filter); -}; - -/** - * Returns a particular filter by its id - * @param {string} id - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedFilterError - * @private - */ -QueryBuilder.prototype.getFilterById = function(id, doThrow) { - if (id == '-1') { - return null; - } - - for (var i = 0, l = this.filters.length; i < l; i++) { - if (this.filters[i].id == id) { - return this.filters[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedFilter', 'Undefined filter "{0}"', id); - - return null; -}; - -/** - * Returns a particular operator by its type - * @param {string} type - * @param {boolean} [doThrow=true] - * @returns {object|null} - * @throws UndefinedOperatorError - * @private - */ -QueryBuilder.prototype.getOperatorByType = function(type, doThrow) { - if (type == '-1') { - return null; - } - - for (var i = 0, l = this.operators.length; i < l; i++) { - if (this.operators[i].type == type) { - return this.operators[i]; - } - } - - Utils.error(doThrow !== false, 'UndefinedOperator', 'Undefined operator "{0}"', type); - - return null; -}; - -/** - * Returns rule's current input value - * @param {Rule} rule - * @returns {*} - * @fires QueryBuilder.changer:getRuleValue - * @private - */ -QueryBuilder.prototype.getRuleInputValue = function(rule) { - var filter = rule.filter; - var operator = rule.operator; - var value = []; - - if (filter.valueGetter) { - value = filter.valueGetter.call(this, rule); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - var tmp; - - switch (filter.input) { - case 'radio': - value.push($value.find('[name=' + name + ']:checked').val()); - break; - - case 'checkbox': - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + ']:checked').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - break; - - case 'select': - if (filter.multiple) { - tmp = []; - // jshint loopfunc:true - $value.find('[name=' + name + '] option:selected').each(function() { - tmp.push($(this).val()); - }); - // jshint loopfunc:false - value.push(tmp); - } - else { - value.push($value.find('[name=' + name + '] option:selected').val()); - } - break; - - default: - value.push($value.find('[name=' + name + ']').val()); - } - } - - value = value.map(function(val) { - if (operator.multiple && filter.value_separator && typeof val == 'string') { - val = val.split(filter.value_separator); - } - - if ($.isArray(val)) { - return val.map(function(subval) { - return Utils.changeType(subval, filter.type); - }); - } - else { - return Utils.changeType(val, filter.type); - } - }); - - if (operator.nb_inputs === 1) { - value = value[0]; - } - - // @deprecated - if (filter.valueParser) { - value = filter.valueParser.call(this, rule, value); - } - } - - /** - * Modifies the rule's value grabbed from the DOM - * @event changer:getRuleValue - * @memberof QueryBuilder - * @param {*} value - * @param {Rule} rule - * @returns {*} - */ - return this.change('getRuleValue', value, rule); -}; - -/** - * Sets the value of a rule's input - * @param {Rule} rule - * @param {*} value - * @private - */ -QueryBuilder.prototype.setRuleInputValue = function(rule, value) { - var filter = rule.filter; - var operator = rule.operator; - - if (!filter || !operator) { - return; - } - - rule._updating_input = true; - - if (filter.valueSetter) { - filter.valueSetter.call(this, rule, value); - } - else { - var $value = rule.$el.find(QueryBuilder.selectors.value_container); - - if (operator.nb_inputs == 1) { - value = [value]; - } - - for (var i = 0; i < operator.nb_inputs; i++) { - var name = Utils.escapeElementId(rule.id + '_value_' + i); - - switch (filter.input) { - case 'radio': - $value.find('[name=' + name + '][value="' + value[i] + '"]').prop('checked', true).trigger('change'); - break; - - case 'checkbox': - if (!$.isArray(value[i])) { - value[i] = [value[i]]; - } - // jshint loopfunc:true - value[i].forEach(function(value) { - $value.find('[name=' + name + '][value="' + value + '"]').prop('checked', true).trigger('change'); - }); - // jshint loopfunc:false - break; - - default: - if (operator.multiple && filter.value_separator && $.isArray(value[i])) { - value[i] = value[i].join(filter.value_separator); - } - $value.find('[name=' + name + ']').val(value[i]).trigger('change'); - break; - } - } - } - - rule._updating_input = false; -}; - -/** - * Parses rule flags - * @param {object} rule - * @returns {object} - * @fires QueryBuilder.changer:parseRuleFlags - * @private - */ -QueryBuilder.prototype.parseRuleFlags = function(rule) { - var flags = $.extend({}, this.settings.default_rule_flags); - - if (rule.readonly) { - $.extend(flags, { - filter_readonly: true, - operator_readonly: true, - value_readonly: true, - no_delete: true - }); - } - - if (rule.flags) { - $.extend(flags, rule.flags); - } - - /** - * Modifies the consolidated rule's flags - * @event changer:parseRuleFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} rule - not a Rule object - * @returns {object} - */ - return this.change('parseRuleFlags', flags, rule); -}; - -/** - * Gets a copy of flags of a rule - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getRuleFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_rule_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Parses group flags - * @param {object} group - * @returns {object} - * @fires QueryBuilder.changer:parseGroupFlags - * @private - */ -QueryBuilder.prototype.parseGroupFlags = function(group) { - var flags = $.extend({}, this.settings.default_group_flags); - - if (group.readonly) { - $.extend(flags, { - condition_readonly: true, - no_add_rule: true, - no_add_group: true, - no_delete: true - }); - } - - if (group.flags) { - $.extend(flags, group.flags); - } - - /** - * Modifies the consolidated group's flags - * @event changer:parseGroupFlags - * @memberof QueryBuilder - * @param {object} flags - * @param {object} group - not a Group object - * @returns {object} - */ - return this.change('parseGroupFlags', flags, group); -}; - -/** - * Gets a copy of flags of a group - * @param {object} flags - * @param {boolean} [all=false] - return all flags or only changes from default flags - * @returns {object} - * @private - */ -QueryBuilder.prototype.getGroupFlags = function(flags, all) { - if (all) { - return $.extend({}, flags); - } - else { - var ret = {}; - $.each(this.settings.default_group_flags, function(key, value) { - if (flags[key] !== value) { - ret[key] = flags[key]; - } - }); - return ret; - } -}; - -/** - * Translate a label either by looking in the `lang` object or in itself if it's an object where keys are language codes - * @param {string} [category] - * @param {string|object} key - * @returns {string} - * @fires QueryBuilder.changer:translate - */ -QueryBuilder.prototype.translate = function(category, key) { - if (!key) { - key = category; - category = undefined; - } - - var translation; - if (typeof key === 'object') { - translation = key[this.settings.lang_code] || key['en']; - } - else { - translation = (category ? this.lang[category] : this.lang)[key] || key; - } - - /** - * Modifies the translated label - * @event changer:translate - * @memberof QueryBuilder - * @param {string} translation - * @param {string|object} key - * @param {string} [category] - * @returns {string} - */ - return this.change('translate', translation, key, category); -}; - -/** - * Returns a validation message - * @param {object} validation - * @param {string} type - * @param {string} def - * @returns {string} - * @private - */ -QueryBuilder.prototype.getValidationMessage = function(validation, type, def) { - return validation.messages && validation.messages[type] || def; -}; - - -QueryBuilder.templates.group = '\ -
\ -
\ -
\ - \ - {{? it.settings.allow_groups===-1 || it.settings.allow_groups>=it.level }} \ - \ - {{?}} \ - {{? it.level>1 }} \ - \ - {{?}} \ -
\ -
\ - {{~ it.conditions: condition }} \ - \ - {{~}} \ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.rule = '\ -
\ -
\ -
\ - \ -
\ -
\ - {{? it.settings.display_errors }} \ -
\ - {{?}} \ -
\ -
\ -
\ -
'; - -QueryBuilder.templates.filterSelect = '\ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.operatorSelect = '\ -{{? it.operators.length === 1 }} \ - \ -{{= it.translate("operators", it.operators[0].type) }} \ - \ -{{?}} \ -{{ var optgroup = null; }} \ -'; - -QueryBuilder.templates.ruleValueSelect = '\ -{{ var optgroup = null; }} \ -'; - -/** - * Returns group's HTML - * @param {string} group_id - * @param {int} level - * @returns {string} - * @fires QueryBuilder.changer:getGroupTemplate - * @private - */ -QueryBuilder.prototype.getGroupTemplate = function(group_id, level) { - var h = this.templates.group({ - builder: this, - group_id: group_id, - level: level, - conditions: this.settings.conditions, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a group - * @event changer:getGroupTemplate - * @memberof QueryBuilder - * @param {string} html - * @param {int} level - * @returns {string} - */ - return this.change('getGroupTemplate', h, level); -}; - -/** - * Returns rule's HTML - * @param {string} rule_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleTemplate - * @private - */ -QueryBuilder.prototype.getRuleTemplate = function(rule_id) { - var h = this.templates.rule({ - builder: this, - rule_id: rule_id, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of a rule - * @event changer:getRuleTemplate - * @memberof QueryBuilder - * @param {string} html - * @returns {string} - */ - return this.change('getRuleTemplate', h); -}; - -/** - * Returns rule's filter HTML - * @param {Rule} rule - * @param {object[]} filters - * @returns {string} - * @fires QueryBuilder.changer:getRuleFilterTemplate - * @private - */ -QueryBuilder.prototype.getRuleFilterSelect = function(rule, filters) { - var h = this.templates.filterSelect({ - builder: this, - rule: rule, - filters: filters, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's filter dropdown - * @event changer:getRuleFilterSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Filter[]} filters - * @returns {string} - */ - return this.change('getRuleFilterSelect', h, rule, filters); -}; - -/** - * Returns rule's operator HTML - * @param {Rule} rule - * @param {object[]} operators - * @returns {string} - * @fires QueryBuilder.changer:getRuleOperatorTemplate - * @private - */ -QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) { - var h = this.templates.operatorSelect({ - builder: this, - rule: rule, - operators: operators, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's operator dropdown - * @event changer:getRuleOperatorSelect - * @memberof QueryBuilder - * @param {string} html - * @param {Rule} rule - * @param {QueryBuilder.Operator[]} operators - * @returns {string} - */ - return this.change('getRuleOperatorSelect', h, rule, operators); -}; - -/** - * Returns the rule's value select HTML - * @param {string} name - * @param {Rule} rule - * @returns {string} - * @fires QueryBuilder.changer:getRuleValueSelect - * @private - */ -QueryBuilder.prototype.getRuleValueSelect = function(name, rule) { - var h = this.templates.ruleValueSelect({ - builder: this, - name: name, - rule: rule, - icons: this.icons, - settings: this.settings, - translate: this.translate.bind(this) - }); - - /** - * Modifies the raw HTML of the rule's value dropdown (in case of a "select filter) - * @event changer:getRuleValueSelect - * @memberof QueryBuilder - * @param {string} html - * @param [string} name - * @param {Rule} rule - * @returns {string} - */ - return this.change('getRuleValueSelect', h, name, rule); -}; - -/** - * Returns the rule's value HTML - * @param {Rule} rule - * @param {int} value_id - * @returns {string} - * @fires QueryBuilder.changer:getRuleInput - * @private - */ -QueryBuilder.prototype.getRuleInput = function(rule, value_id) { - var filter = rule.filter; - var validation = rule.filter.validation || {}; - var name = rule.id + '_value_' + value_id; - var c = filter.vertical ? ' class=block' : ''; - var h = ''; - - if (typeof filter.input == 'function') { - h = filter.input.call(this, rule, name); - } - else { - switch (filter.input) { - case 'radio': - case 'checkbox': - Utils.iterateOptions(filter.values, function(key, val) { - h += ' ' + val + ' '; - }); - break; - - case 'select': - h = this.getRuleValueSelect(name, rule); - break; - - case 'textarea': - h += '";break;case"number":l+='
"})}})},{font:"glyphicons",color:"default"}),c.define("bt-selectpicker",function(r){$.fn.selectpicker&&$.fn.selectpicker.Constructor||h.error("MissingLibrary",'Bootstrap Select is required to use "bt-selectpicker" plugin. Get it here: http://silviomoreto.github.io/bootstrap-select');var n=c.selectors;this.on("afterCreateRuleFilters",function(e,t){t.$el.find(n.rule_filter).removeClass("form-control").selectpicker(r)}),this.on("afterCreateRuleOperators",function(e,t){t.$el.find(n.rule_operator).removeClass("form-control").selectpicker(r)}),this.on("afterUpdateRuleFilter",function(e,t){t.$el.find(n.rule_filter).selectpicker("render")}),this.on("afterUpdateRuleOperator",function(e,t){t.$el.find(n.rule_operator).selectpicker("render")}),this.on("beforeDeleteRule",function(e,t){t.$el.find(n.rule_filter).selectpicker("destroy"),t.$el.find(n.rule_operator).selectpicker("destroy")})},{container:"body",style:"btn-inverse btn-xs",width:"auto",showIcon:!1}),c.define("bt-tooltip-errors",function(n){$.fn.tooltip&&$.fn.tooltip.Constructor&&$.fn.tooltip.Constructor.prototype.fixTitle||h.error("MissingLibrary",'Bootstrap Tooltip is required to use "bt-tooltip-errors" plugin. Get it here: http://getbootstrap.com');var i=this;this.on("getRuleTemplate.filter getGroupTemplate.filter",function(e){var t=$(e.value);t.find(c.selectors.error_container).attr("data-toggle","tooltip"),e.value=t.prop("outerHTML")}),this.model.on("update",function(e,t,r){"error"==r&&i.settings.display_errors&&t.$el.find(c.selectors.error_container).eq(0).tooltip(n).tooltip("hide").tooltip("fixTitle")})},{placement:"right"}),c.extend({setFilters:function(e,t){var r=this;void 0===t&&(t=e,e=!1),t=this.checkFilters(t);var n=(t=this.change("setFilters",t)).map(function(e){return e.id});if(e||function e(t){t.each(function(e){e.filter&&-1===n.indexOf(e.filter.id)&&h.error("ChangeFilter",'A rule is using filter "{0}"',e.filter.id)},e)}(this.model.root),this.filters=t,function e(t){t.each(!0,function(e){e.filter&&-1===n.indexOf(e.filter.id)?(e.drop(),r.trigger("rulesChanged")):(r.createRuleFilters(e),e.$el.find(c.selectors.rule_filter).val(e.filter?e.filter.id:"-1"),r.trigger("afterUpdateRuleFilter",e))},e)}(this.model.root),this.settings.plugins&&(this.settings.plugins["unique-filter"]&&this.updateDisabledFilters(),this.settings.plugins["bt-selectpicker"]&&this.$el.find(c.selectors.rule_filter).selectpicker("render")),this.settings.default_filter)try{this.getFilterById(this.settings.default_filter)}catch(e){this.settings.default_filter=null}this.trigger("afterSetFilters",t)},addFilter:function(e,r){void 0===r||"#end"==r?r=this.filters.length:"#start"==r&&(r=0),$.isArray(e)||(e=[e]);var t=$.extend(!0,[],this.filters);parseInt(r)==r?Array.prototype.splice.apply(t,[r,0].concat(e)):this.filters.some(function(e,t){if(e.id==r)return r=t+1,!0})?Array.prototype.splice.apply(t,[r,0].concat(e)):Array.prototype.push.apply(t,e),this.setFilters(t)},removeFilter:function(t,e){var r=$.extend(!0,[],this.filters);"string"==typeof t&&(t=[t]),r=r.filter(function(e){return-1===t.indexOf(e.id)}),this.setFilters(e,r)}}),c.define("chosen-selectpicker",function(r){$.fn.chosen||h.error("MissingLibrary",'chosen is required to use "chosen-selectpicker" plugin. Get it here: https://github.com/harvesthq/chosen'),this.settings.plugins["bt-selectpicker"]&&h.error("Conflict","bt-selectpicker is already selected as the dropdown plugin. Please remove chosen-selectpicker from the plugin list");var n=c.selectors;this.on("afterCreateRuleFilters",function(e,t){t.$el.find(n.rule_filter).removeClass("form-control").chosen(r)}),this.on("afterCreateRuleOperators",function(e,t){t.$el.find(n.rule_operator).removeClass("form-control").chosen(r)}),this.on("afterUpdateRuleFilter",function(e,t){t.$el.find(n.rule_filter).trigger("chosen:updated")}),this.on("afterUpdateRuleOperator",function(e,t){t.$el.find(n.rule_operator).trigger("chosen:updated")}),this.on("beforeDeleteRule",function(e,t){t.$el.find(n.rule_filter).chosen("destroy"),t.$el.find(n.rule_operator).chosen("destroy")})}),c.define("filter-description",function(i){"inline"===i.mode?this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("p.filter-description"),n=e.builder.getFilterDescription(t.filter,t);n?(0===r.length?(r=$('

')).appendTo(t.$el):r.css("display",""),r.html(' '+n)):r.hide()}):"popover"===i.mode?($.fn.popover&&$.fn.popover.Constructor&&$.fn.popover.Constructor.prototype.fixTitle||h.error("MissingLibrary",'Bootstrap Popover is required to use "filter-description" plugin. Get it here: http://getbootstrap.com'),this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("button.filter-description"),n=e.builder.getFilterDescription(t.filter,t);n?(0===r.length?((r=$('')).prependTo(t.$el.find(c.selectors.rule_actions)),r.popover({placement:"left",container:"body",html:!0}),r.on("mouseout",function(){r.popover("hide")})):r.css("display",""),r.data("bs.popover").options.content=n,r.attr("aria-describedby")&&r.popover("show")):(r.hide(),r.data("bs.popover")&&r.popover("hide"))})):"bootbox"===i.mode&&("bootbox"in window||h.error("MissingLibrary",'Bootbox is required to use "filter-description" plugin. Get it here: http://bootboxjs.com'),this.on("afterUpdateRuleFilter afterUpdateRuleOperator",function(e,t){var r=t.$el.find("button.filter-description"),n=e.builder.getFilterDescription(t.filter,t);n?(0===r.length?((r=$('')).prependTo(t.$el.find(c.selectors.rule_actions)),r.on("click",function(){bootbox.alert(r.data("description"))})):r.css("display",""),r.data("description",n)):r.hide()}))},{icon:"glyphicon glyphicon-info-sign",mode:"popover"}),c.extend({getFilterDescription:function(e,t){return e?"function"==typeof e.description?e.description.call(this,t):e.description:void 0}}),c.define("invert",function(r){var n=this,i=c.selectors;this.on("afterInit",function(){n.$el.on("click.queryBuilder","[data-invert=group]",function(){var e=$(this).closest(i.group_container);n.invert(n.getModel(e),r)}),r.display_rules_button&&r.invert_rules&&n.$el.on("click.queryBuilder","[data-invert=rule]",function(){var e=$(this).closest(i.rule_container);n.invert(n.getModel(e),r)})}),r.disable_template||(this.on("getGroupTemplate.filter",function(e){var t=$(e.value);t.find(i.condition_container).after('"),e.value=t.prop("outerHTML")}),r.display_rules_button&&r.invert_rules&&this.on("getRuleTemplate.filter",function(e){var t=$(e.value);t.find(i.rule_actions).prepend('"),e.value=t.prop("outerHTML")}))},{icon:"glyphicon glyphicon-random",recursive:!0,invert_rules:!0,display_rules_button:!1,silent_fail:!1,disable_template:!1}),c.defaults({operatorOpposites:{equal:"not_equal",not_equal:"equal",in:"not_in",not_in:"in",less:"greater_or_equal",less_or_equal:"greater",greater:"less_or_equal",greater_or_equal:"less",between:"not_between",not_between:"between",begins_with:"not_begins_with",not_begins_with:"begins_with",contains:"not_contains",not_contains:"contains",ends_with:"not_ends_with",not_ends_with:"ends_with",is_empty:"is_not_empty",is_not_empty:"is_empty",is_null:"is_not_null",is_not_null:"is_null"},conditionOpposites:{AND:"OR",OR:"AND"}}),c.extend({invert:function(e,t){if(!(e instanceof i)){if(!this.model.root)return;t=e,e=this.model.root}if("object"!=typeof t&&(t={}),void 0===t.recursive&&(t.recursive=!0),void 0===t.invert_rules&&(t.invert_rules=!0),void 0===t.silent_fail&&(t.silent_fail=!1),void 0===t.trigger&&(t.trigger=!0),e instanceof a){if(this.settings.conditionOpposites[e.condition]?e.condition=this.settings.conditionOpposites[e.condition]:t.silent_fail||h.error("InvertCondition",'Unknown inverse of condition "{0}"',e.condition),t.recursive){var r=$.extend({},t,{trigger:!1});e.each(function(e){t.invert_rules&&this.invert(e,r)},function(e){this.invert(e,r)},this)}}else if(e instanceof l&&e.operator&&!e.filter.no_invert)if(this.settings.operatorOpposites[e.operator.type]){var n=this.settings.operatorOpposites[e.operator.type];e.filter.operators&&-1==e.filter.operators.indexOf(n)||(e.operator=this.getOperatorByType(n))}else t.silent_fail||h.error("InvertOperator",'Unknown inverse of operator "{0}"',e.operator.type);t.trigger&&(this.trigger("afterInvert",e,t),this.trigger("rulesChanged"))}}),c.defaults({mongoOperators:{equal:function(e){return e[0]},not_equal:function(e){return{$ne:e[0]}},in:function(e){return{$in:e}},not_in:function(e){return{$nin:e}},less:function(e){return{$lt:e[0]}},less_or_equal:function(e){return{$lte:e[0]}},greater:function(e){return{$gt:e[0]}},greater_or_equal:function(e){return{$gte:e[0]}},between:function(e){return{$gte:e[0],$lte:e[1]}},not_between:function(e){return{$lt:e[0],$gt:e[1]}},begins_with:function(e){return{$regex:"^"+h.escapeRegExp(e[0])}},not_begins_with:function(e){return{$regex:"^(?!"+h.escapeRegExp(e[0])+")"}},contains:function(e){return{$regex:h.escapeRegExp(e[0])}},not_contains:function(e){return{$regex:"^((?!"+h.escapeRegExp(e[0])+").)*$",$options:"s"}},ends_with:function(e){return{$regex:h.escapeRegExp(e[0])+"$"}},not_ends_with:function(e){return{$regex:"(? '+n.translate("NOT")+""),e.value=t.prop("outerHTML")}),this.on("groupToJson.filter",function(e,t){e.value.not=t.not}),this.on("jsonToGroup.filter",function(e,t){e.value.not=!!t.not}),this.on("groupToSQL.filter",function(e,t){t.not&&(e.value="NOT ( "+e.value+" )")}),this.on("parseSQLNode.filter",function(e){e.value.name&&"NOT"==e.value.name.toUpperCase()&&(e.value=e.value.arguments.value[0],-1===["AND","OR"].indexOf(e.value.operation.toUpperCase())&&(e.value=new SQLParser.nodes.Op(n.settings.default_condition,e.value,null)),e.value.not=!0)}),this.on("sqlGroupsDistinct.filter",function(e,t,r,n){r.not&&0"+c.selectors.group_not).toggleClass("active",e.not).find("i").attr("class",e.not?t.icon_checked:t.icon_unchecked),this.trigger("afterUpdateGroupNot",e),this.trigger("rulesChanged")}}),c.define("sortable",function(n){var i,o,l,s;"interact"in window||h.error("MissingLibrary",'interact.js is required to use "sortable" plugin. Get it here: http://interactjs.io'),void 0!==n.default_no_sortable&&(h.error(!1,"Config",'Sortable plugin : "default_no_sortable" options is deprecated, use standard "default_rule_flags" and "default_group_flags" instead'),this.settings.default_rule_flags.no_sortable=this.settings.default_group_flags.no_sortable=n.default_no_sortable),interact.dynamicDrop(!0),interact.pointerMoveTolerance(10),this.on("afterAddRule afterAddGroup",function(e,t){if(t!=i){var r=e.builder;n.inherit_no_sortable&&t.parent&&t.parent.flags.no_sortable&&(t.flags.no_sortable=!0),n.inherit_no_drop&&t.parent&&t.parent.flags.no_drop&&(t.flags.no_drop=!0),t.flags.no_sortable||interact(t.$el[0]).draggable({allowFrom:c.selectors.drag_handle,onstart:function(e){s=!1,l=r.getModel(e.target),o=l.$el.clone().appendTo(l.$el.parent()).width(l.$el.outerWidth()).addClass("dragging");var t=$('
 
').height(l.$el.outerHeight());i=l.parent.addRule(t,l.getPos()),l.$el.hide()},onmove:function(e){o[0].style.top=e.clientY-15+"px",o[0].style.left=e.clientX-15+"px"},onend:function(e){e.dropzone&&(u(l,$(e.relatedTarget),r),s=!0),o.remove(),o=void 0,i.drop(),i=void 0,l.$el.css("display",""),r.trigger("afterMove",l),r.trigger("rulesChanged")}}),t.flags.no_drop||(interact(t.$el[0]).dropzone({accept:c.selectors.rule_and_group_containers,ondragenter:function(e){u(i,$(e.target),r)},ondrop:function(e){s||u(l,$(e.target),r)}}),t instanceof a&&interact(t.$el.find(c.selectors.group_header)[0]).dropzone({accept:c.selectors.rule_and_group_containers,ondragenter:function(e){u(i,$(e.target),r)},ondrop:function(e){s||u(l,$(e.target),r)}}))}}),this.on("beforeDeleteRule beforeDeleteGroup",function(e,t){e.isDefaultPrevented()||(interact(t.$el[0]).unset(),t instanceof a&&interact(t.$el.find(c.selectors.group_header)[0]).unset())}),this.on("afterApplyRuleFlags afterApplyGroupFlags",function(e,t){t.flags.no_sortable&&t.$el.find(".drag-handle").remove()}),n.disable_template||(this.on("getGroupTemplate.filter",function(e,t){if(1
'),e.value=r.prop("outerHTML")}}),this.on("getRuleTemplate.filter",function(e){var t=$(e.value);t.find(c.selectors.rule_header).after('
'),e.value=t.prop("outerHTML")}))},{inherit_no_sortable:!0,inherit_no_drop:!0,icon:"glyphicon glyphicon-sort",disable_template:!1}),c.selectors.rule_and_group_containers=c.selectors.rule_container+", "+c.selectors.group_container,c.selectors.drag_handle=".drag-handle",c.defaults({default_rule_flags:{no_sortable:!1,no_drop:!1},default_group_flags:{no_sortable:!1,no_drop:!1}}),c.define("sql-support",function(e){},{boolean_as_integer:!0}),c.defaults({sqlOperators:{equal:{op:"= ?"},not_equal:{op:"!= ?"},in:{op:"IN(?)",sep:", "},not_in:{op:"NOT IN(?)",sep:", "},less:{op:"< ?"},less_or_equal:{op:"<= ?"},greater:{op:"> ?"},greater_or_equal:{op:">= ?"},between:{op:"BETWEEN ?",sep:" AND "},not_between:{op:"NOT BETWEEN ?",sep:" AND "},begins_with:{op:"LIKE(?)",mod:"{0}%"},not_begins_with:{op:"NOT LIKE(?)",mod:"{0}%"},contains:{op:"LIKE(?)",mod:"%{0}%"},not_contains:{op:"NOT LIKE(?)",mod:"%{0}%"},ends_with:{op:"LIKE(?)",mod:"%{0}"},not_ends_with:{op:"NOT LIKE(?)",mod:"%{0}"},is_empty:{op:"= ''"},is_not_empty:{op:"!= ''"},is_null:{op:"IS NULL"},is_not_null:{op:"IS NOT NULL"}},sqlRuleOperator:{"=":function(e){return{val:e,op:""===e?"is_empty":"equal"}},"!=":function(e){return{val:e,op:""===e?"is_not_empty":"not_equal"}},LIKE:function(e){return"%"==e.slice(0,1)&&"%"==e.slice(-1)?{val:e.slice(1,-1),op:"contains"}:"%"==e.slice(0,1)?{val:e.slice(1),op:"ends_with"}:"%"==e.slice(-1)?{val:e.slice(0,-1),op:"begins_with"}:void h.error("SQLParse",'Invalid value for LIKE operator "{0}"',e)},"NOT LIKE":function(e){return"%"==e.slice(0,1)&&"%"==e.slice(-1)?{val:e.slice(1,-1),op:"not_contains"}:"%"==e.slice(0,1)?{val:e.slice(1),op:"not_ends_with"}:"%"==e.slice(-1)?{val:e.slice(0,-1),op:"not_begins_with"}:void h.error("SQLParse",'Invalid value for NOT LIKE operator "{0}"',e)},IN:function(e){return{val:e,op:"in"}},"NOT IN":function(e){return{val:e,op:"not_in"}},"<":function(e){return{val:e,op:"less"}},"<=":function(e){return{val:e,op:"less_or_equal"}},">":function(e){return{val:e,op:"greater"}},">=":function(e){return{val:e,op:"greater_or_equal"}},BETWEEN:function(e){return{val:e,op:"between"}},"NOT BETWEEN":function(e){return{val:e,op:"not_between"}},IS:function(e){return null!==e&&h.error("SQLParse","Invalid value for IS operator"),{val:null,op:"is_null"}},"IS NOT":function(e){return null!==e&&h.error("SQLParse","Invalid value for IS operator"),{val:null,op:"is_not_null"}}},sqlStatements:{question_mark:function(){var r=[];return{add:function(e,t){return r.push(t),"?"},run:function(){return r}}},numbered:function(r){(!r||1"==l&&(l="!=");var s=f.settings.sqlRuleOperator[l];void 0===s&&h.error("UndefinedSQLOperator",'Invalid SQL operation "{0}".',t.operation);var a,u=s.call(this,o,t.operation);"values"in t.left?a=t.left.values.join("."):"value"in t.left?a=t.left.value:h.error("SQLParse","Cannot find field name in {0}",JSON.stringify(t.left));var p=f.getSQLFieldID(a,o),d=f.change("sqlToRule",{id:p,field:a,operator:u.op,value:u.val},t);g.rules.push(d)}}(n,0),i},setRulesFromSQL:function(e,t){this.setRules(this.getRulesFromSQL(e,t))},getSQLFieldID:function(t,e){var r=this.filters.filter(function(e){return e.field.toLowerCase()===t.toLowerCase()});return 1===r.length?r[0].id:this.change("getSQLFieldID",t,e)}}),c.define("unique-filter",function(){this.status.used_filters={},this.on("afterUpdateRuleFilter",this.updateDisabledFilters),this.on("afterDeleteRule",this.updateDisabledFilters),this.on("afterCreateRuleFilters",this.applyDisabledFilters),this.on("afterReset",this.clearDisabledFilters),this.on("afterClear",this.clearDisabledFilters),this.on("getDefaultFilter.filter",function(t,r){var n=t.builder;(n.updateDisabledFilters(),t.value.id in n.status.used_filters)&&(n.filters.some(function(e){if(!(e.id in n.status.used_filters)||0 .tocElement'); - for (let i = 0; i < elementChilds.length; i++) { - elementChilds[i].style.display = "block"; - setExpandImageToElement(elementChilds[i].id); - } - } - - function expandTOCElementDescendants(id){ - var tocElement = document.getElementById(id); - var elementChilds = tocElement.querySelectorAll('.tocElement'); - for (let i = 0; i < elementChilds.length; i++) { - elementChilds[i].style.display = "block"; - setExpandImageToElement(elementChilds[i].id); - } - } - - function collapseAllTOCElements(placeHolderId){ - var tocRoot = document.getElementById(placeHolderId); - var elementChilds = tocRoot.querySelectorAll('.tocElement'); - for (let i = 0; i < elementChilds.length; i++) { - collapseTOCElementDescendants(elementChilds[i].id); - setExpandImageToElement(elementChilds[i].id); - } - } - function expandAllTOCElements(placeHolderId){ - var tocRoot = document.getElementById(placeHolderId); - var elementChilds = tocRoot.querySelectorAll('.tocElement'); - for (let i = 0; i < elementChilds.length; i++) { - expandTOCElementDescendants(elementChilds[i].id); - setCollapseImageToElement(elementChilds[i].id); - } - } - - function collapseTOCElementDescendants(id){ - var tocElement = document.getElementById(id); - var elementChilds = tocElement.querySelectorAll('.tocElement'); - for (let i = 0; i < elementChilds.length; i++) { - elementChilds[i].style.display = "none"; - setCollapseImageToElement(elementChilds[i].id); - } - } - - function createTOCItem(docPart, tocElement){ - var newTOCElement = document.createElement("div"); - var newTOCElementName = document.createElement("div"); - var anchor = docPart.getAttribute('id'); - var tocElementID = "toc-" + anchor; - newTOCElement.id = tocElementID; - var docPartButton = docPart.previousElementSibling; - var itemName = docPartButton.textContent; - var link = document.createElement("a"); - link.setAttribute("href", "javascript:goToDocumentPart(\"" + anchor + "\");" ); - link.innerText = itemName; - newTOCElement.appendChild(newTOCElementName); - newTOCElementName.appendChild(link); - newTOCElement.className = "tocElement"; - newTOCElementName.className = "tocElementName"; - tocElement.appendChild(newTOCElement); - return newTOCElement; - } - function goToDocumentPart(targetId){ - if (targetId ===""){ - return; - } - var targetNode = document.getElementById(targetId); - if (targetNode === null){ - console.log("document has no target node to go to") - return; - } - showParents(targetNode); - document.getElementById(targetId).scrollIntoView(); - } - function showParents(targetNode){ - if (targetNode != null && "complexDocument" !== targetNode.id){ - if (targetNode.style.display === "none") { - targetNode.style.display = "block"; - } - showParents(targetNode.parentElement); - } - } - \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/templates/compilation.ftl b/webapp/src/main/webapp/themes/iph/templates/compilation.ftl deleted file mode 100644 index 73e9704b..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/compilation.ftl +++ /dev/null @@ -1,262 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Individual profile page template for foaf:Person individuals --> - -<#include "individual-setup.ftl"> -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -<#import "individual-qrCodeGenerator.ftl" as qr> -<#import "lib-vivo-properties.ftl" as vp> -<#include "text-lib.ftl"> - -<#--Number of labels present--> -<#if !labelCount??> - <#assign labelCount = 0 > - -<#--Number of available locales--> -<#if !localesCount??> - <#assign localesCount = 1> - -<#--Number of distinct languages represented, with no language tag counting as a language, across labels--> -<#if !languageCount??> - <#assign languageCount = 1> - -<#assign qrCodeIcon = "qr-code-icon.png"> -<#assign visRequestingTemplate = "foaf-person-2column"> -<#--add the VIVO-ORCID interface --> -<#include "individual-orcidInterface.ftl"> -
-
- <#include "individual-adminPanel.ftl"> -
-
-
- <#if relatedSubject??> -

${relatedSubject.relatingPredicateDomainPublic} ${i18n().for} ${relatedSubject.name}

-

← ${i18n().return_to(relatedSubject.name)}

- <#else> -

style="float:left;border-right:1px solid #A6B1B0;"> - <#-- Label --> - <@p.label individual editable labelCount localesCount/> - <#if editable> - <@p.deleteIndividualLink individual /> - -

- <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> - <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> - <#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> - <#if (title.statements?size < 1) > - <@p.addLinkWithLabel title editable /> - <#elseif editable> -

${title.name?capitalize!}

- <@p.verboseDisplay title /> - - <#list title.statements as statement> - <#if !editable > -
${statement.preferredTitle}
- <#else> - ${statement.preferredTitle} - <@p.editingLinks "${title.localName}" "${title.name}" statement editable title.rangeUri /> - - - - <#-- If preferredTitle is unpopulated, display mostSpecificTypes --> - <#if ! (title.statements)?has_content> - <@p.mostSpecificTypesPerson individual editable/> - - -
-
-
- <@expandMetadataSwitch /> -
-
-
- > - <#include "individual-iconControls-iph.ftl"> - - - <#if editable && profilePageTypesEnabled > - <#include "individual-profilePageTypes.ftl"> - - <@userSettingsModal /> - -
-<@expandSwitch /> -
-
-
- - <#include "individual-positions.ftl"> - - - <#if !editable> - - <#include "individual-overview.ftl"> - - - <#include "individual-researchAreas.ftl"> - - - <#include "individual-geographicFocus.ftl"> - - <#include "individual-openSocial.ftl"> -
-
- -<#assign nameForOtherGroup = "${i18n().other}"> -<#if !editable> - <#-- We don't want to see the first name and last name unless we might edit them. --> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> - - -<#assign rawQuery = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#rawQueryString")!> -<#assign queryBuilderRules = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#queryBuilderRules")!> - -<#if rawQuery?has_content && queryBuilderRules?has_content> - <#list queryBuilderRules.statements as statement> - <#assign queryBuilderRulesString = statement.value!> - - <#list rawQuery.statements as statement> - <#assign rawQueryString = statement.value!> - - <#if queryBuilderRulesString?? && rawQueryString??> -
- - - -
- - - - - - -<@arrangeDocumentParts /> - -<@authors_underline /> - - <#-- <@dumpAll /> --> - - <#assign selectedTemplate = "individual--foaf-person-2column.ftl" > - -<#if profilePageTypesEnabled > - <#assign profilePageType = profileType > - - <#-- targetedView takes precedence over the profilePageType. --> - - <#if targetedView?has_content> - <#if targetedView != "standardView"> - <#assign selectedTemplate = "individual--foaf-person-quickview.ftl" > - - <#elseif profilePageType == "quickView" > - <#assign selectedTemplate = "individual--foaf-person-quickview.ftl" > - - -<#-- <#include "individual-property-group-tabs.ftl"> --> - -<#if profilePageTypesEnabled && (targetedView?has_content || user.loggedIn) > - - - ${i18n().quick_view_icon} - - - - -<#if !editable> - - - -<#assign rdfUrl = individual.rdfUrl> - -<#if rdfUrl??> - - - - -${stylesheets.add('', - '', - '', - '', - '')} - -${headScripts.add('', - '', - '', - '')} - -${scripts.add('', - '', - '', - '', - '', - '', - '', - '', - '')} - - diff --git a/webapp/src/main/webapp/themes/iph/templates/compilationForm.ftl b/webapp/src/main/webapp/themes/iph/templates/compilationForm.ftl deleted file mode 100644 index 349fc0ba..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/compilationForm.ftl +++ /dev/null @@ -1,98 +0,0 @@ -1<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for adding a new individual from the Site Admin page: VIVO version --> - -<#import "lib-vivo-form.ftl" as lvf> - -<#--Retrieve certain edit configuration information--> -<#assign typeName = editConfiguration.pageData.typeName /> -<#assign isCompilationType = editConfiguration.pageData.isCompilationType /> - -<#--Get existing value for specific data literals and uris--> -<#assign newCompilationLabel = lvf.getFormFieldValue(editSubmission, editConfiguration, "newCompilationLabel")/> -<#assign excerptsCounter = editConfiguration.pageData.excerptsCounter/> - - - -<#--If edit submission exists, then retrieve validation errors if they exist--> -<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content> - <#assign submissionErrors = editSubmission.validationErrors/> - - - -

${i18n().create_new} ${typeName}

- - -<#if submissionErrors?has_content > - - - -<#assign requiredHint = " *" /> - -
- -
- - <#if isCompilationType = "true"> -

- - -

- <#if excerptsCounter > 0 > - <#list 1..excerptsCounter as i> -

- - -

-

- - -

-

- - -

- - -

- - -

-

- - -

- <#else> -

- - -

- - -

- - - ${i18n().or} ${i18n().cancel_link} -

- -

* ${i18n().required_fields}

- -
-
- -${stylesheets.add('')} -${scripts.add('')} diff --git a/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl b/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl deleted file mode 100644 index 87376701..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl +++ /dev/null @@ -1,18 +0,0 @@ -
- <#if flash?has_content> - <#if flash?starts_with(i18n().menu_welcomestart) > -
- -
- <#else> -
- -
- - - - \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/templates/customSearchForm.ftl b/webapp/src/main/webapp/themes/iph/templates/customSearchForm.ftl deleted file mode 100644 index c6697646..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/customSearchForm.ftl +++ /dev/null @@ -1,25 +0,0 @@ -
- -
-<#macro classGroupOptions classGroups> - <#list classGroups as group> - <#if (group.individualCount > 0)> - - - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/customsearchpanel.ftl b/webapp/src/main/webapp/themes/iph/templates/customsearchpanel.ftl deleted file mode 100644 index 9dcdd595..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/customsearchpanel.ftl +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl b/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl deleted file mode 100644 index 267ba7e6..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl +++ /dev/null @@ -1,238 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Individual profile page template for foaf:Person individuals --> - -<#include "individual-setup.ftl"> -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -<#import "individual-qrCodeGenerator.ftl" as qr> -<#import "lib-vivo-properties.ftl" as vp> -<#include "text-lib.ftl"> - -<#--Number of labels present--> -<#if !labelCount??> - <#assign labelCount = 0 > - -<#--Number of available locales--> -<#if !localesCount??> - <#assign localesCount = 1> - -<#--Number of distinct languages represented, with no language tag counting as a language, across labels--> -<#if !languageCount??> - <#assign languageCount = 1> - -<#assign qrCodeIcon = "qr-code-icon.png"> -<#assign visRequestingTemplate = "foaf-person-2column"> -<#--add the VIVO-ORCID interface --> -<#include "individual-orcidInterface.ftl"> -
-
- <#include "individual-adminPanel.ftl"> -
-
-
- <#if relatedSubject??> -

${relatedSubject.relatingPredicateDomainPublic} ${i18n().for} ${relatedSubject.name}

-

← ${i18n().return_to(relatedSubject.name)}

- <#else> -

style="border-right:1px solid #A6B1B0;"> - <#-- Label --> - <@p.label individual editable labelCount localesCount/> - <#if editable> - <@p.deleteIndividualLink individual /> - -

- <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> - <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> - <#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> - <#if (title.statements?size < 1) > - <@p.addLinkWithLabel title editable /> - <#elseif editable> -

${title.name?capitalize!}

- <@p.verboseDisplay title /> - - <#list title.statements as statement> - <#if !editable > -
${statement.preferredTitle}
- <#else> - ${statement.preferredTitle} - <@p.editingLinks "${title.localName}" "${title.name}" statement editable title.rangeUri /> - - - - <#-- If preferredTitle is unpopulated, display mostSpecificTypes --> - <#if ! (title.statements)?has_content> - <@p.mostSpecificTypesPerson individual editable/> - - -
-
-
- <@expandMetadataSwitch /> -
-
-
- > - <#include "individual-iconControls-iph.ftl"> - - - <#if editable && profilePageTypesEnabled > - <#include "individual-profilePageTypes.ftl"> - - <@userSettingsModal /> - - -
-<@expandSwitch /> -
-
-
- - <#include "individual-positions.ftl"> - - - <#if !editable> - - <#include "individual-overview.ftl"> - - - <#include "individual-researchAreas.ftl"> - - - <#include "individual-geographicFocus.ftl"> - - <#include "individual-openSocial.ftl"> -
-
- -<#assign nameForOtherGroup = "${i18n().other}"> -<#if !editable> - <#-- We don't want to see the first name and last name unless we might edit them. --> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> - - - -<@arrangeDocumentParts /> - -<@authors_underline /> - -<#assign selectedTemplate = "individual--foaf-person-2column.ftl" > - -<#if profilePageTypesEnabled > - <#assign profilePageType = profileType > - - <#-- targetedView takes precedence over the profilePageType. --> - - <#if targetedView?has_content> - <#if targetedView != "standardView"> - <#assign selectedTemplate = "individual--foaf-person-quickview.ftl" > - - <#elseif profilePageType == "quickView" > - <#assign selectedTemplate = "individual--foaf-person-quickview.ftl" > - - -<#-- <#include "individual-property-group-tabs.ftl"> --> - -<#if profilePageTypesEnabled && (targetedView?has_content || user.loggedIn) > - - - ${i18n().quick_view_icon} - - - - -<#if !editable> - - - -<#assign rdfUrl = individual.rdfUrl> - -<#if rdfUrl??> - - - - -${stylesheets.add('', - '', - '', - '', - '')} - -${headScripts.add('', - '', - '', - '')} - -${scripts.add('', - '', - '', - '', - '', - '', - '', - '', - '')} - - diff --git a/webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl b/webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl deleted file mode 100644 index ee59304b..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl +++ /dev/null @@ -1,300 +0,0 @@ -<#include "individual-setup.ftl"> - -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} -${scripts.add('')} - - - -<#-- Individual profile page template for foaf:Person individuals --> - - -<#-- <#include "individual-setup.ftl"> --> -<#import "individual-qrCodeGenerator.ftl" as qr> -<#import "lib-vivo-properties.ftl" as vp> -<#include "text-lib.ftl"> - -<#--Number of labels present--> -<#if !labelCount??> - <#assign labelCount = 0 > - -<#--Number of available locales--> -<#if !localesCount??> - <#assign localesCount = 1> - -<#--Number of distinct languages represented, with no language tag counting as a language, across labels--> -<#if !languageCount??> - <#assign languageCount = 1> - -<#assign qrCodeIcon = "qr-code-icon.png"> -<#assign visRequestingTemplate = "foaf-person-2column"> -<#--add the VIVO-ORCID interface --> -<#include "individual-orcidInterface.ftl"> -
-
- <#include "individual-adminPanel.ftl"> -
-
-
- <#if relatedSubject??> -

${relatedSubject.relatingPredicateDomainPublic} ${i18n().for} ${relatedSubject.name}

-

← ${i18n().return_to(relatedSubject.name)}

- <#else> -

style="float:left;border-right:1px solid #A6B1B0;"> - <#-- Label --> - <@p.label individual editable labelCount localesCount/> -

- <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> - <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> - <#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> - <#if (title.statements?size < 1) > - <@p.addLinkWithLabel title editable /> - <#elseif editable> -

${title.name?capitalize!}

- <@p.verboseDisplay title /> - - <#list title.statements as statement> - <#if !editable > -
${statement.preferredTitle}
- <#else> - ${statement.preferredTitle} - <@p.editingLinks "${title.localName}" "${title.name}" statement editable title.rangeUri /> - - - - <#-- If preferredTitle is unpopulated, display mostSpecificTypes --> - <#if ! (title.statements)?has_content> - <@p.mostSpecificTypesPerson individual editable/> - - -
-
-
- <@expandMetadataSwitch /> -
-
-
- > - <#include "individual-iconControls-iph.ftl"> - - <#if editable && profilePageTypesEnabled > - <#include "individual-profilePageTypes.ftl"> - - <@userSettingsModal /> - -
-
-
-
- - <#include "individual-positions.ftl"> - - - <#if !editable> - - <#include "individual-overview.ftl"> - - - <#include "individual-researchAreas.ftl"> - - - <#include "individual-geographicFocus.ftl"> - - <#include "individual-openSocial.ftl"> -
-
- -<#assign nameForOtherGroup = "${i18n().other}"> -<#if !editable> - <#-- We don't want to see the first name and last name unless we might edit them. --> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> - - - - <#assign htmlExcerpt = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#htmlExcerpt")!> - <#if htmlExcerpt?has_content > - <#if htmlExcerpt.statements?has_content && htmlExcerpt.type == "data"> -
- <@p.dataPropertyList htmlExcerpt editable /> - <#-- object property --> -
- <#else> -
${i18n().metadata_html_text} <@p.addLink htmlExcerpt editable /> <@p.verboseDisplay htmlExcerpt />
- - - - <#assign works = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#works")!> - <#if works.statements?has_content || editable > -
-

${i18n().sources_excerpt_button_text} <@p.addLink works editable /> <@p.verboseDisplay works />

- <@p.dataPropertyList works editable /> -
- - - <#assign biblio= propertyGroups.pullProperty("https://litvinovg.pro/text_structures#bibliography")!> - <#if biblio.statements?has_content || editable > -
-

${i18n().literature_excerpt_button_text} <@p.addLink biblio editable /> <@p.verboseDisplay biblio />

- <@p.dataPropertyList biblio editable /> -
- - -<#-- <#include "individual-property-group-tabs.ftl"> --> - -<#if profilePageTypesEnabled && (targetedView?has_content || user.loggedIn) > - - - ${i18n().quick_view_icon} - - - -<#if !editable> - - - -<#assign rdfUrl = individual.rdfUrl> - -<#if rdfUrl??> - - - - -${stylesheets.add('', - '', - '', - '', - '')} - -${headScripts.add('', - '', - '', - '')} - -${scripts.add('', - '', - '', - '', - '', - '', - '', - '', - '')} - - diff --git a/webapp/src/main/webapp/themes/iph/templates/elenphExcerptShortView.ftl b/webapp/src/main/webapp/themes/iph/templates/elenphExcerptShortView.ftl deleted file mode 100644 index bae63143..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/elenphExcerptShortView.ftl +++ /dev/null @@ -1,48 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#-- Default individual search view --> - -<#import "lib-vivo-properties.ftl" as p> - -<#-- <@dumpAll /> --> -<#list excerptInfo as excerptProperties> - <#if excerptProperties.property == "https://litvinovg.pro/text_structures#htmlExcerpt"> - <#assign excerptText = excerptProperties.value > - - <#if excerptProperties.property == "http://www.w3.org/2000/01/rdf-schema#label"> - <#assign excerptTextName = excerptProperties.value > - - <#if excerptProperties.property == "https://litvinovg.pro/text_structures#author"> - <#assign excerptAuthor = excerptProperties.value > - - -<#if excerptText?? && excerptTextName?? && excerptTextName?has_content && excerptText?has_content> - - - -
- ${individual.name} - <@p.displayTitle individual /> -

${individual.snippet}

-
diff --git a/webapp/src/main/webapp/themes/iph/templates/elenph_issue.ftl b/webapp/src/main/webapp/themes/iph/templates/elenph_issue.ftl deleted file mode 100644 index 5f1ed9eb..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/elenph_issue.ftl +++ /dev/null @@ -1,45 +0,0 @@ - -<#if issueInfo??> -
- <#list issueInfo as article> - <#if !issueName??> - <#assign issueName = article.issue> - <#assign divOpened = true > - -
-

${article.name}

- <#elseif issueName == article.issue> -

${article.name}

- <#else> - <#assign issueName = article.issue> -
- -
-

${article.name}

- - - <#if divOpened> -
<#-- Close div --> - -
- - diff --git a/webapp/src/main/webapp/themes/iph/templates/footer.ftl b/webapp/src/main/webapp/themes/iph/templates/footer.ftl deleted file mode 100644 index cce1dd26..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/footer.ftl +++ /dev/null @@ -1,48 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> -<#import "lib-home-page.ftl" as lh> -
- -
- -
- - - <#-- - - -
-
- -<#include "scripts.ftl"> diff --git a/webapp/src/main/webapp/themes/iph/templates/gadgetDetails.ftl b/webapp/src/main/webapp/themes/iph/templates/gadgetDetails.ftl deleted file mode 100644 index 47e9afb1..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/gadgetDetails.ftl +++ /dev/null @@ -1,12 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for the body of the GadgetDetails page --> - -

${title!}

- -<#-- VIVO OpenSocial Extension by UCSF --> -<#if openSocial??> - <#if openSocial.visible> -
- - diff --git a/webapp/src/main/webapp/themes/iph/templates/gadgetLogin.ftl b/webapp/src/main/webapp/themes/iph/templates/gadgetLogin.ftl deleted file mode 100644 index 2b4b50ec..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/gadgetLogin.ftl +++ /dev/null @@ -1,54 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Template for the body of the GadgetDetails page --> - - - -

${title!}

- -<#-- VIVO OpenSocial Extension by UCSF --> -<#if openSocial??> -
- - - - - - - - - - - - - - - - - -
- Gadget URLs
- One Per Line -
- -
- Debug mode - - -
- Use Cache - - -
- - -
-
- diff --git a/webapp/src/main/webapp/themes/iph/templates/googleAnalytics.ftl b/webapp/src/main/webapp/themes/iph/templates/googleAnalytics.ftl deleted file mode 100644 index 1da2ed4c..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/googleAnalytics.ftl +++ /dev/null @@ -1,26 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- NOTICE: This is SAMPLE Google Analytics code. You must replace it with your institution's code. -Please see documentation at https://confluence.cornell.edu/display/ennsrd/Google+Analytics+for+UI. --> - -<#-- - - - ---> diff --git a/webapp/src/main/webapp/themes/iph/templates/head.ftl b/webapp/src/main/webapp/themes/iph/templates/head.ftl deleted file mode 100644 index b67f8456..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/head.ftl +++ /dev/null @@ -1,39 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - - - - - - -${(title?html)!siteName!} - -<#-- VIVO OpenSocial Extension by UCSF --> -<#if openSocial??> - <#if openSocial.visible> - <#-- Required to add these BEFORE stylesheets.flt and headScripts.ftl are processed --> - ${stylesheets.add('')} - ${headScripts.add('', - '', - '')} - - - -<#include "stylesheets.ftl"> - - -<#include "headScripts.ftl"> - -<#if metaTags??> - ${metaTags.list()} - - - - -<#-- Inject head content specified in the controller. Currently this is used only to generate an rdf link on -an individual profile page. --> -${headContent!} - - -<#include "statistic_counters.ftl"> diff --git a/webapp/src/main/webapp/themes/iph/templates/identity.ftl b/webapp/src/main/webapp/themes/iph/templates/identity.ftl deleted file mode 100644 index 45017254..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/identity.ftl +++ /dev/null @@ -1,54 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - - diff --git a/webapp/src/main/webapp/themes/iph/templates/individual--foaf-person.ftl b/webapp/src/main/webapp/themes/iph/templates/individual--foaf-person.ftl deleted file mode 100644 index 1abe11bb..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/individual--foaf-person.ftl +++ /dev/null @@ -1,202 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- - Individual profile page template for foaf:Person individuals. This is the default template for foaf persons - in the Wilma theme and should reside in the themes/wilma/templates directory. ---> - -<#include "individual-setup.ftl"> -<#import "lib-vivo-properties.ftl" as vp> -<#--Number of labels present--> - <#if !labelCount??> - <#assign labelCount = 0 > - -<#--Number of available locales--> - <#if !localesCount??> - <#assign localesCount = 1> - -<#--Number of distinct languages represented, with no language tag counting as a language, across labels--> -<#if !languageCount??> - <#assign languageCount = 1> - -<#assign visRequestingTemplate = "foaf-person-wilma"> - -<#--add the VIVO-ORCID interface --> -<#include "individual-orcidInterface.ftl"> - -
- -
- - <#assign individualImage> - <@p.image individual=individual - propertyGroups=propertyGroups - namespaces=namespaces - editable=editable - showPlaceholder="always" /> - - - <#if ( individualImage?contains(' - <#assign infoClass = 'class="withThumb"'/> - - -
${individualImage}
- -
- - ${i18n().uri_icon} - <#if checkNamesResult?has_content > - ${i18n().qr_icon} - - - -
- <#include "individual-contactInfo.ftl"> - - - <#include "individual-webpage.ftl"> -
- -
-
- <#include "individual-visualizationFoafPerson.ftl"> - <#if editable> - <#if claimSources?size > 0> -
${i18n().claim_publications_by}
- <#if claimSources?seq_contains("doi")> -
- - -
- - <#if claimSources?seq_contains("pmid")> -
- - -
- - - -
- <#include "individual-adminPanel.ftl"> - -
- <#if relatedSubject??> -

${relatedSubject.relatingPredicateDomainPublic} ${i18n().indiv_foafperson_for} ${relatedSubject.name}

-

← ${i18n().indiv_foafperson_return} ${relatedSubject.name}

- <#else> -

- <#-- Label --> - <@p.label individual editable labelCount localesCount/> -

-
- <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> - <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> - <#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> - <#if (title.statements?size < 1) > - <@p.addLinkWithLabel title editable /> - <#elseif editable> -

${title.name?capitalize!}

- <@p.verboseDisplay title /> - - <#list title.statements as statement> - ${statement.preferredTitle} - <@p.editingLinks "${title.localName}" "${title.name}" statement editable title.rangeUri /> - - - <#-- If preferredTitle is unpopulated, display mostSpecificTypes --> - <#if ! (title.statements)?has_content> - <@p.mostSpecificTypes individual /> - -
- - - <#include "individual-positions.ftl"> -
- - - <#include "individual-overview.ftl"> - - - <#include "individual-researchAreas.ftl"> - - - <#include "individual-geographicFocus.ftl"> - - <#include "individual-openSocial.ftl"> -
- -
- -<#assign nameForOtherGroup = "${i18n().other}"> - -<#-- Ontology properties --> -<#if !editable> - <#-- We don't want to see the first name and last name unless we might edit them. --> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> - <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> - - - -<#-- - With release 1.6 there are now two types of property group displays: the original property group - menu and the horizontal tab display, which is the default. If you prefer to use the property - group menu, simply substitute the include statement below with the one that appears after this - comment section. - - <#include "individual-property-group-menus.ftl"> ---> - -<#include "individual-property-group-tabs.ftl"> - -<#assign rdfUrl = individual.rdfUrl> - -<#if rdfUrl??> - - - - -${stylesheets.add('', - '', - '', - '')} - -${headScripts.add('', - '', - '')} - -${scripts.add('', - '', - '', - '', - '', - '', - '', - '')} - - diff --git a/webapp/src/main/webapp/themes/iph/templates/individual-iconControls-iph.ftl b/webapp/src/main/webapp/themes/iph/templates/individual-iconControls-iph.ftl deleted file mode 100644 index 82607783..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/individual-iconControls-iph.ftl +++ /dev/null @@ -1,28 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- Icon controls displayed in upper-right corner --> - -${i18n().share_the_uri} -<#if checkNamesResult?has_content > - ${i18n().qr_icon} - - - - -<#-- - -Some contact information is displayed on the profile page by default; e.g., phone numbes and -email addresses. If an institution has an additional location for contact info, such as a -university directory, a third "contact" icon is available that can be used to direct users to -that directory. The tag below shows an example using Cornell University's directory. - -<#assign netid = individual.selfEditingId()!> -<#if netid?has_content> - - contact info - - - ---> diff --git a/webapp/src/main/webapp/themes/iph/templates/menu.ftl b/webapp/src/main/webapp/themes/iph/templates/menu.ftl deleted file mode 100644 index f54ecc91..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/menu.ftl +++ /dev/null @@ -1,13 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - - - -<#include "developer.ftl"> - - \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/iph/templates/page-home.ftl b/webapp/src/main/webapp/themes/iph/templates/page-home.ftl deleted file mode 100644 index b533b050..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/page-home.ftl +++ /dev/null @@ -1,131 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<@widget name="login" include="assets" /> - -<#-- - With release 1.6, the home page no longer uses the "browse by" class group/classes display. - If you prefer to use the "browse by" display, replace the import statement below with the - following include statement: - - <#include "browse-classgroups.ftl"> - - Also ensure that the homePage.geoFocusMaps flag in the runtime.properties file is commented - out. ---> -<#import "lib-home-page.ftl" as lh> - - - - - <#include "head.ftl"> - <#if geoFocusMapsEnabled > - <#include "geoFocusMapScripts.ftl"> - - - - - - <#-- supplies the faculty count to the js function that generates a random row number for the search query --> - <@lh.facultyMemberCount vClassGroups! /> - <#include "identity.ftl"> - - <#include "menu.ftl"> - <#include "contentWrapper.ftl"> -
- <#--

${i18n().intro_title}

- -

${i18n().intro_para1}

-

${i18n().intro_para2}

--> - - -
-

filteredSearch

- -
- ${i18n().search_form} -
- <#include "searchSelector.ftl"> -
- -
-
О проекте
-
-

Электронная Философская Энциклопедия (ЭФЭ) — открытый научно-исследовательский проект Института философии РАН, ставящий своей целью анализ и систематизацию достижений философских наук за последние десятилетия, создание на этой основе обобщающей картины развития философской мысли в мире во всем ее тематическом и содержательном многообразии. В отличие от прежних энциклопедических изданий, ЭФЭ призвана рассмотреть достижения философии прошлого сквозь призму современных дискуссий, отразить новейшие результаты исследований российских учёных и актуальные тенденции гуманитарного знания. Она нацелена на обобщающий взгляд, который не только фиксирует многообразие имен, понятий, терминов, школ и произведений мировой философии, но, прежде всего, выявляет ее сложную, противоречивую и плюралистичную целостность. Одной из ее доминант является преодоление европоцентризма в понимании философии, всечеловеческое расширение духовного горизонта. Создаваемая ведущими специалистами, ЭФЭ должна способствовать повышению философской культуры общества, стать надежным и авторитетным источником информации, составив конкуренцию всевозможным "пиратским" сайтам, бездумно копирующим сведения из неизвестных и непроверенных источников. Как полноценное электронное издание с выходными данными и закрепленными за отдельными статьями DOI, ЭФЭ позволит специалистам представлять результаты своих исследований в виде энциклопедических статей.

-
-
-

Редакционно-издательский совет

-

А.А. Гусейнов, В.А. Лекторский, А.В. Смирнов, С.В. Месяц

-

Редколлегия

-

Н.С. Автономова, Р.Г. Апресян, В.В. Бычков, В.Г. Буданов,
В.В. Васильев, П.А. Гаджикурбанова, А.Л. Доброхотов, А.А. Кара-Мурза,
И.Т. Касавин, В.Г. Лысенко, М.А. Маслин, В.В. Миронов,
Н.В. Мотрошилова, В.А. Подорога, Ю.В. Синеокая, М.Т. Степанянц,
В.Г. Федотова, В.К. Шохин, А.В. Черняев

-

Экспертный совет

-

Р.Г. Апресян, В.Г. Буданов, Г.В. Вдовина, И.Д. Джохадзе, Л.Б. Карелова,
В.Г. Лысенко, Н.Б. Маньковская, А.В. Павлов, В.В. Петров,
С.Ю. Рыков, Ю.В. Синеокая, М.А. Солопова, Ю.Е. Федорова,
В.И. Шалак, В.К. Шохин, А.В. Черняев

-

Научный редактор

-

Ю.Н. Попов

-

Научно-техническая редакция

-

М.В. Егорочкин, Г.В. Литвинов, С.Л. Гурко, С.В. Лаврентьева

-
- -
-

ISSN (Online): 2658-7092

-

Учредитель и издатель: Федеральное государственное бюджетное учреждение науки Институт философии Российской Академии наук.

-

Периодичность: 4 раза в год. Выходит с 2018 г.

-

Адрес учредителя и издателя: Российская Федерация, 109240, г. Москва, ул. Гончарная, д. 12, стр. 1.

-

Сайт: www.elenph.org

- -
- -
-

Энциклопедия зарегистрирована Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор). Свидетельство о регистрации СМИ: серия ЭЛ № ФС77 -74569 от 14.12.2018.

-

Энциклопедия включена в: базу ROAD (справочник электронных научных ресурсов с полностью открытым доступом к статьям).

- -
-
-
- - - <#-- <@lh.researchClasses /> --> - - - <#-- <@lh.facultyMbrHtml /> --> - - - <#-- <@lh.academicDeptsHtml /> --> - - <#if geoFocusMapsEnabled > - - <@lh.geographicFocusHtml /> - - - - - - <#include "footer.ftl"> - <#-- builds a json object that is used by js to render the academic departments section --> - <@lh.listAcademicDepartments /> - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/page.ftl b/webapp/src/main/webapp/themes/iph/templates/page.ftl deleted file mode 100644 index 224f8745..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/page.ftl +++ /dev/null @@ -1,44 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#import "lib-list.ftl" as l> - - - - - <#include "head.ftl"> - - - - <#include "identity.ftl"> - <#include "menu.ftl"> - -
- <#if currentServlet = "individual"||currentServlet = "display"||currentServlet = "entity"> - <#include "rightPanel.ftl"> - - <#include "contentWrapper.ftl"> - <#if currentServlet != "individual" && currentServlet != "login" && currentServlet != "display" && currentServlet != "customsearch" && currentServlet != "entity"> -
-

filteredSearch

- -
- ${i18n().search_form} -
- - <#include "searchSelector.ftl"> - -
- - - <#-- VIVO OpenSocial Extension by UCSF --> - <#if openSocial??> - <#if openSocial.visible> -
- - - - ${body} -
- <#include "footer.ftl"> - - diff --git a/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl b/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl deleted file mode 100644 index 81062b49..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl +++ /dev/null @@ -1,288 +0,0 @@ - - - - -<#macro freeField field > - { - id: '${field.field}', - label: '${field.name}', - type: 'string', - operators: ['contains', 'not_contains'] - }, - - -<#macro multivalueField field > - { - id: '${field.field}', - label: '${field.name}', - type: 'string', - input: 'select', - values: { - - <#if searchFields??> - <#list searchFilters as filter> - <#if filter.field == field.field> - '"${filter.id}"':'${filter.name}', - - - <#else> - { - id: 'ALLTEXT', - label: 'Everywhere', - type: 'string', - operators: ['contains', 'not_contains'] - }, - - }, - operators: ['contains', 'not_contains'] - }, - - -<#macro selectHitsPerPage> - <#if !hitsPerPage?? > - <#assign hitsPerPage = 20 > - - <#assign hitsValues= [20,40,60,80,100]> - - diff --git a/webapp/src/main/webapp/themes/iph/templates/rightPanel.ftl b/webapp/src/main/webapp/themes/iph/templates/rightPanel.ftl deleted file mode 100644 index bd8b287b..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/rightPanel.ftl +++ /dev/null @@ -1,17 +0,0 @@ -
-
-
- <#include "customsearchpanel.ftl" > - -
- diff --git a/webapp/src/main/webapp/themes/iph/templates/rubric.ftl b/webapp/src/main/webapp/themes/iph/templates/rubric.ftl deleted file mode 100644 index cddbd8b1..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/rubric.ftl +++ /dev/null @@ -1,116 +0,0 @@ -<#import "lib-vivo-properties.ftl" as vp> -<#include "individual-setup.ftl"> - -${scripts.add('')} -${scripts.add('')} - -
- -
- <#include "individual-adminPanel.ftl"> -
-
- <#if relatedSubject??> -

${relatedSubject.relatingPredicateDomainPublic} ${i18n().for} ${relatedSubject.name}

-

← ${i18n().return_to(relatedSubject.name)}

- <#else> -

style="width:100%;border-right:1px solid #A6B1B0;"> - <@p.label individual editable labelCount localesCount/> -

- - - <#if editable && profilePageTypesEnabled > - <#include "individual-profilePageTypes.ftl"> - -
-
-
-
-
- - <#assign parent = propertyGroups.pullProperty("https://iph.ras.ru/relationships#hasParent")!> - <#if parent?has_content> -
${i18n().rubricator_parent_rubric}<#if !parent.statements?has_content> <@p.addLink parent editable /> <@p.verboseDisplay parent />
- <#if parent.statements?has_content > -
- <@p.objectProperty parent editable /> -
- - -<#if editable > - - <#assign order = propertyGroups.pullProperty("https://iph.ras.ru/relationships#rubricOrder")!> - <#if order?has_content> -
${i18n().rubricator_rubric_order}<#if !order.statements?has_content> <@p.addLink order editable /> <@p.verboseDisplay order />
- <#if order.statements?has_content > -
- <@p.dataPropertyList order editable /> -
- - - - - <#if childRubrics?has_content> - -
- <#list childRubrics as childRubric> - <#if childRubric?has_content > - - - -
- - - <#if childArticles?has_content> - -
- <#list childArticles as childArticle> - <#if childArticle?has_content > - - - -
- - - <#if childExcerpts?has_content> - -
- <#list childExcerpts as childExcerpt> - <#if childExcerpt?has_content > - - - -
- - - <#if articles?has_content> - - - - - <#if excerpts?has_content> - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/rubrics.ftl b/webapp/src/main/webapp/themes/iph/templates/rubrics.ftl deleted file mode 100644 index 16f4c88b..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/rubrics.ftl +++ /dev/null @@ -1,52 +0,0 @@ -${scripts.add('')} -${scripts.add('')} - -<#list rubrics as rubric> - <#if !rubric.parentUri??> - <#assign childs = rubric.childs?number> - - - - - - - -<#macro openButton childs> - <#if childs > 0> -
+
- <#else> -
- - - -<#macro nestedRubrics allrubrics parentUri deep level> - <#assign count = 0> - <#list allrubrics as innerRubric> - <#if innerRubric.parentUri?? && innerRubric.parentUri == parentUri> - <#assign childs = innerRubric.childs?number> - <#assign count = count + 1 > - - - - <#if count = childs > - <#break> - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/search.ftl b/webapp/src/main/webapp/themes/iph/templates/search.ftl deleted file mode 100644 index eae3a484..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/search.ftl +++ /dev/null @@ -1,17 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#--Breaking this out so this can be utilized by other pages such as the jsp advanced tools pages--> - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/searchSelector.ftl b/webapp/src/main/webapp/themes/iph/templates/searchSelector.ftl deleted file mode 100644 index 7c950df7..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/searchSelector.ftl +++ /dev/null @@ -1,18 +0,0 @@ -
- <#include "customSearchForm.ftl"> - -
-<#include "queryBuilder.ftl"> - - - diff --git a/webapp/src/main/webapp/themes/iph/templates/statistic_counters.ftl b/webapp/src/main/webapp/themes/iph/templates/statistic_counters.ftl deleted file mode 100644 index e69de29b..00000000 diff --git a/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl b/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl deleted file mode 100644 index 56b90055..00000000 --- a/webapp/src/main/webapp/themes/iph/templates/text-lib.ftl +++ /dev/null @@ -1,254 +0,0 @@ -<#macro showRubrics> - <#assign currentRubrics = propertyGroups.pullProperty("https://iph.ras.ru/relationships#belongsTo")!> - <#if currentRubrics?? && currentRubrics?has_content> -
${i18n().metadata_relates_to_rubrics} <@p.addLink currentRubrics editable /> <@p.verboseDisplay currentRubrics />
- <#if rubrics?? && rubrics?has_content> - <#list rubrics as rubric> -
  • - ${rubric.rubricName} -
  • - - -
    - - - -<#macro showIssue> - <#assign issue = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#issue")!> - <#if issue.statements?has_content && issue.type == "data"> -
    -
    ${i18n().metadata_relates_to_issue}
    - <@p.dataPropertyList issue editable /> -
    - - - -<#macro showYear> - <#assign year = propertyGroups.pullProperty("https://litvinovg.pro/text_structures#year")!> - <#if year.statements?has_content && year.type == "data"> -
    -
    ${i18n().metadata_year}
    - <@p.dataPropertyList year editable /> -
    - - - -<#macro documentRubrics > - <#assign docRubrics = propertyGroups.pullProperty("https://iph.ras.ru/relationships#belongsTo")!> - <#if ( docRubrics?? && docRubrics?has_content ) || (rubrics?? && rubrics?has_content)> -
    - <#if docRubrics?? && docRubrics?has_content > - <@p.addLink docRubrics editable /> <@p.verboseDisplay docRubrics />
    - -
    - - <#if rubrics?? && rubrics?has_content> - - - - -<#macro arrangeDocumentParts > -
    - <#assign lastLevel = 0 > - <#list paths as order> - <#-- ${order.path} --> - <#list excerpts as excerptProperties> - <#if order.elenphExcerpt?has_content && excerptProperties.elenphExcerpt == order.elenphExcerpt> - <#assign excerptText = excerptProperties.htmlContent > - <#assign excerptTextName = excerptProperties.htmlLabel > - <#assign worksCounter = excerptProperties.worksCounter > - <#assign bibliographyCounter = excerptProperties.bibliographyCounter > - - - <@startDocumentPart order.level?number order.path lastLevel/> - <#if excerptText?? && excerptTextName?? && excerptTextName?has_content && excerptText?has_content> -
    - ${excerptText} -
    - <@arrangeSources works worksCounter?number order.path order.elenphExcerpt /> - <@arrangeLiterature bibliography bibliographyCounter?number order.path order.elenphExcerpt /> - - <#assign lastLevel = order.level?number > - - <@endDocumentPart lastLevel /> - <@arrangeSources works works?size "anchor-all-sources" /> - <@arrangeLiterature bibliography bibliography?size "anchor-all-literature" /> -
    - - - -<#macro startDocumentPart newLevel path lastLevel=0 > - <#assign depth = newLevel - lastLevel > - <#if depth == 0> - <@closeDocPart 1 /> - <@openDocPart 1 path /> - <#elseif depth > 0> - <@openDocPart depth path /> - <#else > - <@closeDocPart -depth+1 /> - <@openDocPart 1 path /> - - - -<#macro endDocumentPart lastLevel newLevel=0> - <#assign depth = lastLevel - newLevel > - <#if depth > 0> - <@closeDocPart depth /> - - - -<#macro closeDocPart count> - <#list 1..count as x> -
    - - - -<#macro openDocPart count path > - <#if excerptTextName??> - <#assign buttonText = excerptTextName > - <#else> - <#assign buttonText = "No text" > - - <#list 1..count as x> - -
    - - - -<#macro arrangeSources sources counter identifier filter="none"> - <#if sources?? && sources?has_content && counter > 0> - <@compress single_line=true> - - -
    - <#assign lastSource = ""/> - <#list sources as source> - <#if filter == "none" && lastSource != source.works || source.excerpt == filter > - <#assign lastSource = source.works/> -
    -

    ${source.works}

    -
    - - -
    - - - -<#macro arrangeLiterature literature counter identifier filter="none"> - - <#if literature?? && literature?has_content && counter > 0> - <@compress single_line=true> - - -
    - <#assign lastLiterature = ""/> - <#list literature as literatureItem> - <#if filter == "none" && lastLiterature != literatureItem.bibliography || literatureItem.excerpt == filter > - <#assign lastLiterature = literatureItem.bibliography/> -
    -

    ${literatureItem.bibliography}

    -
    - - -
    - - - - -<#macro authors_metadata> - <#if authors?? && authors?has_content> - - - - - - -<#macro authors_underline> - <#if authors?? && authors?has_content> -
    - <#list authors as author> - <#if author.authorFamily??>${author.authorFamily?trim}<#if author.authorInitials??> ${author.authorInitials?trim}<#sep>, - -
    - - - -<#macro expandMetadataSwitch> -
    - -
    - - -<#macro expandSwitch> -
    - -
    - - -<#macro userSettingsModal> - - - - - - - diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css index 31d88826..93298420 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css @@ -1,7 +1,7 @@ /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ .btn-default, .btn-primary, diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css.map b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css.map index d876f60f..277a8d21 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css.map +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.css.map @@ -1 +1 @@ -{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css index 7c1405dc..8b87cfbf 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css @@ -1,6 +1,6 @@ /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.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:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.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:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.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:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.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:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.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:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.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:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} /*# sourceMappingURL=bootstrap-theme.min.css.map */ diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css.map b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css.map index 94813e90..d1f1a237 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css.map +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap-theme.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css index 6167622c..b6161467 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css @@ -1,7 +1,7 @@ /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html { @@ -187,7 +187,7 @@ td, th { padding: 0; } -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/main/src/css/main.css */ @media print { *, *:before, diff --git a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css.map b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css.map index f010c82d..93b9b16f 100644 --- a/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css.map +++ b/webapp/src/main/webapp/themes/tenderfoot/bootstrap/css/bootstrap.css.map @@ -1 +1 @@ -{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;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ukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBA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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n 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');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on