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 new file mode 100644 index 00000000..59dd0144 --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddRubricToELENPHArticleGenerator.java @@ -0,0 +1,649 @@ +/* $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/CompilationGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/CompilationGenerator.java new file mode 100644 index 00000000..d11c7213 --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/CompilationGenerator.java @@ -0,0 +1,306 @@ +/* $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/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 b/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 index deceee35..3bc0bb3a 100644 --- a/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 +++ b/home/src/main/resources/rdf/display/everytime/article_custom_fields.n3 @@ -1,24 +1,77 @@ @prefix : . +@prefix searchIndex: . + @prefix rdfs: . -:vivodocumentModifier_excerptsInArticles +:vivodocumentModifier_excerptsInComplexPublications a , ; - rdfs:label "Elenph article excerpts" ; + rdfs:label "Populate complex publications with excerpts" ; :hasTargetField "ALLTEXT" ; :hasSelectQuery """ PREFIX rdfs: - PREFIX ts_: + PREFIX ts: PREFIX rdf: - SELECT DISTINCT ?elenphExcerpt ?property ?value + SELECT DISTINCT ?value WHERE { - ?uri rdf:type ts_:elenphArticle . - ?uri ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ?property ?value . + ?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 , ; @@ -26,22 +79,22 @@ :hasTargetField "rubrics" ; :hasSelectQuery """ PREFIX rdfs: - PREFIX ts_: + PREFIX ts: PREFIX rdf: PREFIX pr: SELECT DISTINCT ?rubric WHERE { { - ?uri rdf:type ts_:elenphExcerpt . + ?uri rdf:type ts:textExcerpt . ?uri pr:belongsTo ?assignedRubric . ?assignedRubric (pr:hasParent)* ?rubric . } UNION { - ?uri rdf:type ts_:elenphArticle . - ?uri ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?artExcerpt . - ?artExcerpt pr:belongsTo ?assignedRubric . + ?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 . } } @@ -69,20 +122,20 @@ :hasTargetField "keywords" ; :hasSelectQuery """ PREFIX rdfs: - PREFIX ts_: + 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 . + ?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 . + ?uri rdf:type ts:elenphExcerpt . + ?uri ts:keywords ?keywords . } } """ . @@ -94,20 +147,20 @@ :hasTargetField "bibliography" ; :hasSelectQuery """ PREFIX rdfs: - PREFIX ts_: + 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 . + ?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 . + ?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 new file mode 100644 index 00000000..eab30a54 --- /dev/null +++ b/home/src/main/resources/rdf/display/everytime/compilationDataGetters.n3 @@ -0,0 +1,144 @@ +@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 index b5829a4f..746d5a88 100644 --- a/home/src/main/resources/rdf/display/everytime/customSearchDataGetters.n3 +++ b/home/src/main/resources/rdf/display/everytime/customSearchDataGetters.n3 @@ -35,7 +35,8 @@ display:customSearchFiltersDataGetter ?searchFilter search:id ?id . ?searchFilter search:filterFiled ?searchField . ?searchField search:indexField ?field . + BIND (replace ( ?name, "«", "" ) AS ?sortName) - } ORDER BY ?field ?name + } 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 new file mode 100644 index 00000000..6431a4f9 --- /dev/null +++ b/home/src/main/resources/rdf/display/everytime/deleteQueries.n3 @@ -0,0 +1,48 @@ +@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 index 647aa06c..3c7a3977 100644 --- a/home/src/main/resources/rdf/display/everytime/elenphArticleDataGetters.n3 +++ b/home/src/main/resources/rdf/display/everytime/elenphArticleDataGetters.n3 @@ -26,12 +26,15 @@ display:getArticleExcerptsContentDataGetter """ PREFIX rdfs: PREFIX ts_: - SELECT ?elenphExcerpt ?property ?value + 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 ?property ?value . - } ORDER BY ?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 @@ -39,11 +42,11 @@ display:getArticleExcerptPathsDataGetter 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 ) ?tocElement ?elenphExcerpt - WHERE { + 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 . @@ -53,12 +56,11 @@ display:getArticleExcerptPathsDataGetter ?tocElement ts_:hasText ?elenphExcerpt . } { - SELECT ?elenphArticle ?tocElement + SELECT ?elenphArticle ?tocElement WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement . + ?individualURI ts_:hasTOC ?toc . + ?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement . ?tocElement rdf:type ts_:TOCLevel . - ?individualURI rdf:type ts_:elenphArticle . } } } GROUP BY ?tocElement ?elenphExcerpt ORDER BY ?path @@ -72,11 +74,11 @@ display:getArticleBibliographyDataGetter PREFIX rdfs: PREFIX ts_: PREFIX rdf: - SELECT DISTINCT ?bibliography + SELECT DISTINCT ?bibliography ?excerpt WHERE { ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:bibliography ?bibliography . + ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . + ?excerpt ts_:bibliography ?bibliography . } ORDER BY ?bibliography """ . @@ -88,11 +90,11 @@ display:getArticleWorksDataGetter PREFIX rdfs: PREFIX ts_: PREFIX rdf: - SELECT DISTINCT ?works + SELECT DISTINCT ?works ?excerpt WHERE { ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:works ?works . + ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt . + ?excerpt ts_:works ?works . } ORDER BY ?works """ . @@ -104,12 +106,21 @@ display:getArticleAuthorsDataGetter PREFIX rdfs: PREFIX ts_: PREFIX rdf: - SELECT DISTINCT ?author - WHERE { - ?individualURI ts_:hasTOC ?toc . - ?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt . - ?elenphExcerpt ts_:author ?author . - } ORDER BY ?author + 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 diff --git a/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 b/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 index bf9c94e7..8cbf13e7 100644 --- a/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 +++ b/home/src/main/resources/rdf/display/everytime/elenphExcerptDataGetters.n3 @@ -8,6 +8,7 @@ display:hasDataGetter display:getExcerptAssignedArticlesDataGetter . + display:hasDataGetter display:getExcerptAuthorsDataGetter . display:getExcerptAssignedArticlesDataGetter @@ -27,3 +28,25 @@ display:getExcerptAssignedArticlesDataGetter } 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 new file mode 100644 index 00000000..bf183cda --- /dev/null +++ b/home/src/main/resources/rdf/display/everytime/excluded_classes.n3 @@ -0,0 +1,11 @@ +@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/tbox/filegraph/philosophical_relations.owl b/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl index d98c7605..e2aa1a3d 100644 --- a/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl +++ b/home/src/main/resources/rdf/tbox/filegraph/philosophical_relations.owl @@ -72,6 +72,7 @@ + edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.AddRubricToELENPHArticleGenerator belongs to @@ -79,7 +80,7 @@ true - + diff --git a/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl b/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl index f29d37ae..ef5adf7e 100644 --- a/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl +++ b/home/src/main/resources/rdf/tbox/filegraph/text_structures.owl @@ -1,5 +1,6 @@ - ts Text structures Ontology + Text structures Ontology + ts - - - - - - - - -1 - -1 - Book - - Table of contents - -1 - -1 - + Table of contents + Table of contents + + -1 + -1 + -1 + -1 - - Publication + + Complex Publication -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 + + -1 -1 - - - - TOC Item - - - + @@ -96,56 +195,53 @@ elenphExcerpt.ftl - - - + Elenph Excerpt - - - - elenphAritcle.ftl - Electronic philosophical encyclopedia article - - - - - - - - Text excerpt - - - - - - - - - Journal - -1 - -1 - - - - - - - Table of contents element - TOC Level - - + TOC Level + TOC Level + + Table of contents element + + + + has author + + + + + + true + + + affiliated with + + + + + + true + + + compilatorOf + + + + + + true + @@ -160,22 +256,13 @@ - - has TOC - - - - - - - true - has text + has text @@ -200,29 +287,31 @@ true - - - author - - + + Query Builder Rules + - - - + + + - - + + Raw Query String + + - - - - Works - + + + + + + + + Publication Participant Initials + @@ -237,6 +326,14 @@ + + Publication Participant Given Name + + + + + + @@ -249,6 +346,15 @@ >First publication + + Modification time + + + + + + + Keywords @@ -274,6 +380,46 @@ html Excerpt + + Publication Participant Family + + + + + + + + + + Issue + + + + + + + + + Publication Participant email + + + + + + + + + + + + + + + Works + + Year and month @@ -287,18 +433,6 @@ - - - - - - - - - - Affiliation - @@ -324,18 +458,31 @@ - - - - Issue - - - - - + + Organization Address - + + + + + + + Organization Postal Code + + + + + + + + + Official Organization Name + + + + + + @@ -362,4 +509,17 @@ + + + + + true + + + has TOC + has TOC + + diff --git a/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 b/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 new file mode 100644 index 00000000..c912bc22 --- /dev/null +++ b/webapp/src/main/webapp/WEB-INF/resources/shortview_config.n3 @@ -0,0 +1,27 @@ +@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/favicon.ico b/webapp/src/main/webapp/favicon.ico index fe936708..d6f769bc 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/js/toc.js b/webapp/src/main/webapp/js/toc.js new file mode 100644 index 00000000..3d46e7c7 --- /dev/null +++ b/webapp/src/main/webapp/js/toc.js @@ -0,0 +1,18 @@ +{ + let content = document.getElementById("wrapper-content"); + let toc = document.getElementById("TOC"); + createTOC(content, toc); + + function createTOC(content, toc){ + if (toc === null){ + alert("no TOC element found"); + return; + } + if (content === null){ + alert("no content element found"); + return; + } + + } + +} diff --git a/webapp/src/main/webapp/robots.txt b/webapp/src/main/webapp/robots.txt index ed35ce7c..659b6c36 100644 --- a/webapp/src/main/webapp/robots.txt +++ b/webapp/src/main/webapp/robots.txt @@ -22,4 +22,3 @@ 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/partials/menupage/menupage-browse.ftl b/webapp/src/main/webapp/templates/freemarker/body/partials/menupage/menupage-browse.ftl new file mode 100644 index 00000000..5f94bcdb --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/body/partials/menupage/menupage-browse.ftl @@ -0,0 +1,49 @@ +<#-- $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> + + + + 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 be693ca2..33db0830 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,8 +4,10 @@ <#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 new file mode 100644 index 00000000..3f08f55d --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/body/search/search-error.ftl @@ -0,0 +1,16 @@ +<#-- $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 new file mode 100644 index 00000000..e892f96d --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/body/search/search-help.ftl @@ -0,0 +1,49 @@ +<#-- $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 new file mode 100644 index 00000000..83c45e9f --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/body/search/search-pagedResults.ftl @@ -0,0 +1,252 @@ +<#-- $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/elenphExcerpt.ftl b/webapp/src/main/webapp/templates/freemarker/elenphExcerpt.ftl deleted file mode 100644 index 893cbea3..00000000 --- a/webapp/src/main/webapp/templates/freemarker/elenphExcerpt.ftl +++ /dev/null @@ -1,42 +0,0 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> - -<#-- - - This version of individual--foaf-person.ftl is a "router" template. The original VIVO - version of this template now resides in the /themes/wilma/templates directory. - - This version of the template is used when the profile page types feature is enabled. - This template serves to "rout" the user to the correct template based (1) the - profile page type of the foaf person being displayed or (2) the targeted view that - the user wants to see. For example, when a user is routed to a quick view template, - the user has the option of displaying the full view. If the user chooses that option, - the targetedView variable gets set. - - This template could also be used to load just the "individual--foaf-person-2column.ftl" - without enabling profile page types. "individual--foaf-person-2column.ftl" is a slightly - different design than the "individual--foaf-person.ftl" template in the themes/wilma - directory. - - --> - -<#include "individual-setup.ftl"> - -${scripts.add('')} -${scripts.add('')} - -<#assign selectedTemplate = "elenphExcerpt-internal.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 selectedTemplate > diff --git a/webapp/src/main/webapp/themes/iph/css/iph.css b/webapp/src/main/webapp/themes/iph/css/iph.css index 981ce15a..637c7189 100644 --- a/webapp/src/main/webapp/themes/iph/css/iph.css +++ b/webapp/src/main/webapp/themes/iph/css/iph.css @@ -20,19 +20,35 @@ html, body { padding: 0; height: 100%; /* needed for container min-height */ - font-family: "Lucida Sans Unicode","Lucida Grande", Geneva, helvetica, sans-serif; + 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 { - background: #f3f3f0 url(../images/header-background.png) center 0 no-repeat; + 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: #2485AE; + color: #000000; + text-decoration: none; + font-size: 1.2rem; } -a:hover, +a:hover { + color: #8B4513; +} + h2 a:hover, h2 a:active, ul#header-nav a:link, @@ -48,11 +64,13 @@ h2 { padding: 10px 0 12px 0; margin: 0; font-size: 1.375em; - color: #064d68; + color: #000000; line-height: 1.5em; + font-family: "IPH Astra Serif"; + font-size: 1.2rem; } h2 a { - color: #2485ae; + color: #8B4513; } h2 a:link, h2 a:visited { @@ -62,7 +80,7 @@ h3 { padding: 10px 0 12px 0; margin: 0; font-size: 1.125em; - color: #064d68; + color: #8B4513; } h4 { padding: 10px 0 12px 0; @@ -74,7 +92,7 @@ h5 { padding: 10px 0 12px 0; margin: 0; font-size: .875em; - color: #064d68; + color: #8B4513; } /* -------------------------------------------------> */ /* EDITING STYLES ----------------------------------> */ @@ -83,21 +101,60 @@ input[type="text"], select, input[type="password"] { border: 0; - font-size: 14px; + font-size: 1rem; + font-family: "Roboto"; padding: .5em; + font-style: italic; background: #fff; - border: 1px solid #e0dfdf; - border-radius: 5px; + border: 1px dashed #000000; + /*border-radius: 5px; -moz-border-radius: 5px; - -webkit-border-radius: 5px; - margin-bottom: .8em; + -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 { +.label { margin-top: .5em; margin-bottom: .5em; + font-size: 1.2rem; + font-family: "IPH Astra Serif"; + color: #000000; } label.inline { display: inline; @@ -128,9 +185,9 @@ input.form-button:visited { position: relative; border: 0; margin: 0; - background-color: #749a02; + background-color: #DD9F00; color: #fff; - font-size: 14px; + font-size: 1rem; font-weight: normal; line-height: 1; margin-right: .6em; @@ -163,9 +220,9 @@ input#delete:visited { cursor: pointer; border: 0; margin: 0; - background-color: #398aac; + background-color: #DD9F00; color: #fff; - font-size: 14px; + font-size: 1rem; font-weight: normal; line-height: 1; margin-right: .6em; @@ -176,7 +233,7 @@ input.submit:hover, input#submit:hover, input.form-button:hover { color: #fff; - background-color: #b2d15a; + background-color: #DD9F00; } input.delete:hover, input#delete:hover { @@ -264,7 +321,7 @@ a.return:active { } .database_header { background-color: #f1f2ee; - color: #2485ae; + color: #DD9F00; font-size: 1em; } .database_upperleftcorner { @@ -382,7 +439,7 @@ a.ingestMenu:visited, a.account-menu:link, a.account-menu:visited { text-decoration: none; - color: #2485AE; + color: #DD9F00; } a.ingestMenu:hover, a.ingestMenu:active, @@ -395,6 +452,9 @@ ul#vgraph-classes a { text-decoration: none; color: #5E6363; } +ul#browse-classes a { + width: 90%; +} ul.ingestMenu { margin-bottom: 1.5em; } @@ -424,11 +484,11 @@ tr.editformcell td textarea.matchingInput { width: 95%; height:10ex; margin-top:0.7em; - font-family: "Lucida Sans Unicode","Lucida Grande", Geneva, helvetica, sans-serif; + font-family: "IPH Serif","Roboto","Lucida Sans Unicode","Lucida Grande", Geneva, helvetica, sans-serif; font-size:0.95em; } hr.formDivider { - background-color: #3196C4; + background-color: #DD9F00; border: 0 none; height: 1px; margin-bottom: 20px; @@ -446,19 +506,25 @@ hr.formDivider { /* HEADER ------> */ #branding { position: relative; - width: 70%; - height: 114px; + width: 100%; + height: 200px; margin: 0 auto; - padding: 0px 20px 0px 20px; + 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: 442px; - height: 59px; - top: 28px; - left: 0; - background: url(../images/VIVO-logo.png) 0 0 no-repeat; + 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; @@ -471,20 +537,25 @@ ul#header-nav { list-style: none; height: 30px; padding-top: 10px; - margin-right: 13px; + /*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: 10px; - padding-right: 10px; + padding-left: 20px; + padding-right: 20px; border-right: 1px solid #7c7d7f; - font-size: .7em; + font-size: 1rem; color: #fff; } ul#header-nav li:last-child { - padding-left: 1px; - padding-right: 0; + /*padding-left: 1px; + padding-right: 0;*/ border-right: none; } ul#header-nav a:hover, @@ -493,16 +564,167 @@ ul#header-nav a:active { color: #999; } ul#header-nav a.log-out { - padding-left: 10px; + /* 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: 396px; + /*position: absolute;*/ + width: 100%; height: 38px; - top: 40px; - right: 10px; - padding-top: 5px; + /* top: 90px; + right: 10px;*/ } #search-field { width: 396px; @@ -533,48 +755,253 @@ input.search-vivo { #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: block; - width: 70%; - padding: 0px 20px 0px 20px; + 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: #f7f9f9; - margin: 0 auto; + /* border: 1px solid #dce4e3;*/ + background-color: #000000; + opacity: 0.8; + margin-left: auto; + margin-right: auto; + margin-top: -46px; list-style: none; - font-size: 1em; - color: #706a66; + font-size: 1.2rem; + color: #ffffff; } + +#main-nav li:last-child { + background: none; +} + #main-nav li { - float: left; + float: left; line-height: 46px; - background: url(../images/separator-main-nav.jpg) right -2px no-repeat; + background: url(../images/separator-main-nav.jpg) right no-repeat; } #main-nav li a { - padding-left: 16px; - padding-right: 16px; + padding-left: 20px; + font-family: "Roboto"; + font-style: normal; + padding-right: 20px; display: block; - color: #706a66; + color: #ffffff; text-decoration: none; } #main-nav li a:hover { - color: #002b44; + color: #EECFA1; } #main-nav li a.selected { - color: #002b44; - background: url(../images/selected-main-nav.jpg) left -1px no-repeat; - margin-left: 18px; + color: #DD9F00; + /* background: url(../images/selected-main-nav.jpg) left -1px no-repeat; */ + /* margin-left: 18px; */ } /* WRAPPER CONTENT------> */ #wrapper-content { clear: both; - width: 70%; - margin: 0 auto; + width: 80%; + /*margin: 0 auto;*/ background: #fff; min-height: 710px; - padding: 20px ; + 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; @@ -590,10 +1017,10 @@ body.loggedIn #intro { color: #2485AE; } #intro p { - font-size: 16px; + /* font-size: 16px; color: #5f6464; line-height: 1.3em; - padding: 0 24px 0 24px; + padding: 0 24px 0 24px;*/ } #intro a, #individual-intro ul.individual-urls li a, @@ -605,7 +1032,7 @@ p.forgot-password a, ul#individual-personInPosition li a, ul.individual-urls li a, ul.individual-urls-people li a { - color: #2485ae + color: #8B4513 } /* LOG IN------> */ #login { @@ -620,13 +1047,16 @@ ul.individual-urls-people li a { } body.login #login { float: none; + margin-left: auto; + margin-right: auto; } #login h2 { - font-size: 22px; - color: #2485ae; - padding-left: 15px; + 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; @@ -672,8 +1102,8 @@ h3.internal-auth:hover { -webkit-border-radius: 5px; } #login-form input.text-field:focus { - border: 1px solid rgba(57, 138, 172, .5); - background-color: rgba(57, 138, 172, .1); + border: 1px solid #8B4513; + background-color: #ffffff; } #login-form p.submit { width: 100px; @@ -763,16 +1193,33 @@ p.external-auth a.blue:hover { } /* HOME SEARCH ------> */ #search-home { - float: left; - width: 100%; - margin: 30px 0 0 0; + /*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; + /*padding-left: 24px;*/ } #search-home-field { width: 483px; @@ -801,6 +1248,21 @@ input.search-home-vivo { 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 { @@ -822,6 +1284,36 @@ input.search-homepage { 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; @@ -846,6 +1338,7 @@ input.search-homepage { p.request-account a, ul#header-nav a { color: #fff; + font-family: "Roboto"; } #filter-search-nav a { border-bottom: 1px dotted #4f5656; @@ -881,37 +1374,105 @@ a.view-all-style { } /* HOME STATS-----> */ + .home-sections { - border-top: 1px dotted #dbe3e3; /* stroke */ - border-bottom: 1px dotted #dbe3e3; /* stroke */ - background-color: #fff; /* layer fill content */ + /* 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: #395d7f; /* layer fill content */ - border-bottom: 2px solid #62b6d7; - color: #fff; + /*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: 30px; + 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 */ - background: #5e6363 url(../images/stats-bg.png) repeat-x 0 0; + 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: .5; + 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; + color: #fff; + opacity: .5; } #home-research { width: 297px; @@ -1023,34 +1584,79 @@ div#adjImgHeight { 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 20px 0px 20px; + padding: 0px 0px 0px 0px; clear: both; - width: 70%; - height: 88px; + width: 100%; + height: 120px; margin: 0 auto; font-size: .7em; - color: #4e5051; - background-color: #fff; + color: #ffffff; + background-color: #4c4c4c; } footer p.copyright { float: left; padding-top: 55px; - padding-left: 30px; - width: 600px; + /*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: 1em; + 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: 200px; + /* width: 30%;*/ height: 20px; margin: 0; padding: 0; padding-top: 55px; - padding-right: 20px; + /*padding-right: 20px;*/ + color: #ffffff; } ul#footer-nav li { float: left; @@ -1066,21 +1672,34 @@ ul#individual-facultyMemberships li:last-child { border-right: none; } #footer-nav a { - color: #4e5051 + color: #ffffff; + font-family: "IPH Astra Serif"; + font-size: 1.2rem; } #footer-nav a:hover, -a.terms, -a.powered-by-vivo { - color: #09C; +a.terms { + color: #DD9F00; text-decoration: none; } -a.terms:hover, -a.powered-by-vivo:hover { +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: 1.3em; + margin-bottom: 0.3em; } /* STYLED BUTTONS ------> */ @@ -1119,11 +1738,11 @@ ul#individual-tools-people li a { } .green.button, .green.button:visited { - background-color: #749a02; + background-color: #DD9F00; color: #fff; } .green.button:hover { - background-color: #b2d15a; + background-color: #DD9F00; } .blue.button, .blue.button:visited { @@ -1165,13 +1784,20 @@ ul#individual-tools-people li a { /* VISUAL GRAPH------> */ .property-group, #menupage-intro { - width: 920px; + width: 100%; + text-align: left; background: #fff; } +#menupage-intro { + margin: 0.7em auto; +} #menupage-intro h2 { - font-size: 1.375em; - color: #064d68; + 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; @@ -1245,13 +1871,13 @@ ul#find-filters a.selected { } /* BROWSE BY ------> */ #browse-by { -/* width: 920px;*/ + width: 100%; } nav#alpha-browse-container { - width: 894px; + /* width: 894px;*/ float: left; - padding-left: 10px; - margin-left: 1px; + padding-left: 20px; + margin-left: 0px; } #browse-by h2 { @@ -1261,19 +1887,33 @@ nav#alpha-browse-container { } /* BROWSE CLASSES ------> */ ul#browse-classes { - border: 1px solid #dde4e3; + border: 1px solid #efe9d9; border-right: 0; - background-color: #f1f2ee; + 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.gif) 4px 5px no-repeat; - color: #2ea0cf; + background: url(../images/arrow_brown.png) 4px 5px no-repeat; + color: #000000; } ul#browse-classes .count-classes { font-size: 12px; @@ -1281,39 +1921,60 @@ ul#browse-classes .count-classes { /* 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/arrowSmall.gif) -3px 7px no-repeat; - color: #2ea0cf; + 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, -.pagination.menupage, 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: 1px solid #dde4e3; + border-top: 1px solid #efe9d9; background-color: #fff; - border-left: 1px solid #dde4e3; + border-left: 1px solid #efe9d9; border-bottom: none; + width: 73%; } /* BROWSE INDIVIDUALS------> */ #individuals-in-class { - width: 904px; - border: 1px solid #dde4e3; + width: 100%; + border-top: 1px solid #dde4e3; background-color: #fff; + margin-right: 0; + margin-top: 10px; } -ul#alpha-browse-individuals { - float: left; - width: auto; - list-style: none; + +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; } @@ -1327,7 +1988,20 @@ article.property ul.property-list { font-size: 1em; } .pagination.menupage li a:hover { - background: #5e6363; + 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; } /* -------------------------------------------------> */ @@ -1365,10 +2039,10 @@ article.property ul.property-list { /* ADMIN PANEL ------> */ #admin { - background-color: #f2f9fb; + background-color: #efe9d9; } #admin h3 { - background: #2485AE; + background: #DD9F00; color: #fff; } #admin .uri-link, @@ -1376,7 +2050,7 @@ article.property ul.property-list { color: #888c8c; } #admin a { - color: #2a98bc; + color: #8B4513; } /* INDIVIDUAL INTRO FOR ANY CLASS ------> */ .preferred { @@ -1384,7 +2058,7 @@ article.property ul.property-list { } #individual-intro h1 { font-size: 1.375em; - color: #2485ae; + color: #000000; } #individual-intro span.display-title, h1.fn .display-title { @@ -1417,7 +2091,7 @@ ul#individual-tools { color: #5f6464; } ul.individual-urls { - list-style: url(../../../images/individual/arrow-green.gif); + list-style: url(../images/arrow-brown.png); } ul.individual-urls li { font-size: .875em; @@ -1430,16 +2104,33 @@ ul.individual-urls-people { #individual-info, #property-group-menu a, .grey, -.pagination.menupage li.selected, 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.375em; + font-size: 1.7rem; color: #595B5B; - line-height: 1.3em; + 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; @@ -1452,7 +2143,7 @@ h3.internal-auth { } ul#individual-personInPosition { font-size: 1em; - list-style: url("../../../images/individual/arrow-green.gif"); + list-style: url("../images/arrow-brown.png"); } ul#individual-personInPosition li { line-height: 1.8em; @@ -1469,6 +2160,16 @@ ul#individual-hasResearchArea li { 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 { @@ -1513,16 +2214,18 @@ img.co-author { section.property-group h2, #menupage-content h4 { font-size: 1.25em; - color: #2485ae; + color: #8B4513; font-weight: normal; } article.property { - width: 852px; + width: 95%; } article.property h3 { background: #fafaf9; - font-size: 1.063em; - color: #8aa149; + 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; @@ -1542,9 +2245,7 @@ article.property ul.property-list li a { position: absolute; left: -9999px; } -a { - text-decoration: underline -} + .middle { vertical-align: middle; } @@ -1559,7 +2260,8 @@ p.address-line { } /* EDITING DISPLAY------> */ .edit-individual { - border-left: 1px dotted #B2D15A; + border-left: 1px dotted #8B4513; + margin-left: 5px; } /* -------------------------------------------------> */ /* SITE ADMIN DASHBOARD ----------------------------> */ @@ -1572,7 +2274,7 @@ p.address-line { border-bottom: 1px dotted #AFB2B2; font-weight: bold; padding: .625em; - color: #064D68; + color: #8B4513; margin-bottom: .625em; } #adminDashboard .pageBodyGroup ul { @@ -1590,7 +2292,13 @@ p.address-line { 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; +} @@ -1656,13 +2364,13 @@ form.customForm p { section.accounts input.delete, section.accounts input.delete:visited { background-color: #FFF; - color: #2485AE; - border: 1px solid #96c5da; + color: #8B4513; + border: 1px solid #8B4513; } section.accounts input.delete:hover { color: #fff; - background-color: #88acbb; - border: 1px solid #88acbb; + background-color: #ffffff; + border: 1px solid #8B4513; } input.add-account, input.add-account:visited { @@ -1672,12 +2380,12 @@ input.add-account:visited { } input.add-account:hover { color: #fff; - background-color: #88acbb; + background-color: #ffffff; background: url(../images/addNewAccountOver.png) 0 center no-repeat; } .disabledSubmit { - color: #ede ! important; - background-color: #b2d15a ! important; + color: #000000 ! important; + background-color: #DD9F00 ! important; cursor: default ! important; } /* -------------------------------------------------> */ @@ -1738,3 +2446,1471 @@ span.subclassExpandMinus { 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/query-builder-theme.css b/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css index eaaa2036..87398f3a 100644 --- a/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css +++ b/webapp/src/main/webapp/themes/iph/css/query-builder-theme.css @@ -5,7 +5,7 @@ icons: { } .rule-value-container > select{ - max-width: 800px; + max-width: 380px; } .query-builder, .query-builder * { @@ -16,6 +16,7 @@ icons: { .query-builder { font-family: sans-serif; + width: 100%; } .query-builder .hide { @@ -24,6 +25,7 @@ icons: { .query-builder .pull-right { float: right !important; + /*box-shadow: 0px 4px 2px #aeaeae;*/ } .query-builder .btn { @@ -31,7 +33,7 @@ icons: { display: inline-block; padding: 6px 12px; margin-bottom: 0px; - font-size: 14px; + font-size: 16px; font-weight: 400; line-height: 1.42857; text-align: center; @@ -41,12 +43,11 @@ icons: { cursor: pointer; user-select: none; background-image: none; - border: 1px solid transparent; - border-radius: 4px; + /*border: 1px solid transparent;*/ + /*border-radius: 4px;*/ } -.query-builder .btn.focus, .query-builder .btn:focus, .query-builder .btn:hover - { +.query-builder .btn.focus, .query-builder .btn:focus, .query-builder .btn:hover { color: #333; text-decoration: none; } @@ -54,48 +55,62 @@ icons: { .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; +/* box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.125) inset; */ } .query-builder .btn-success { - color: #FFF; - background-color: #5CB85C; - border-color: #4CAE4C; + 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: #FFF; - background-color: #337AB7; - border-color: #2E6DA4; + color: #000000; + background-color: #ffffff; + border: 1px dashed #000000 !important; } .query-builder .btn-danger { - color: #FFF; - background-color: #D9534F; - border-color: #D43F3A; + 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: #FFF; - background-color: #449D44; - border-color: #398439; + 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: #FFF; - background-color: #286090; - border-color: #204D74; + 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: #FFF; - background-color: #C9302C; + color: #000000; + background-color: #ffffff; border-color: #AC2925; } @@ -108,10 +123,12 @@ icons: { .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) { @@ -131,8 +148,8 @@ icons: { } .query-builder .btn-xs, .query-builder .btn-group-xs>.btn { - padding: 1px 5px; - font-size: 12px; + padding: 5px 8px; + font-size: 1rem; line-height: 1.5; - border-radius: 3px; + /*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 index 22e8fcec..50018156 100644 --- a/webapp/src/main/webapp/themes/iph/css/query-builder.css +++ b/webapp/src/main/webapp/themes/iph/css/query-builder.css @@ -6,26 +6,61 @@ .query-builder .rules-group-container, .query-builder .rule-container, .query-builder .rule-placeholder { position: relative; - margin: 4px 0; - border-radius: 5px; + /*margin: 10px 10px 0 10px;*/ + /*border-radius: 5px;*/ padding: 5px; - border: 1px solid #EEE; + /*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; + /*vertical-align: middle;*/ } .query-builder .rules-group-container { - padding: 10px; - padding-bottom: 6px; - border: 1px solid #DCC896; - background: rgba(250, 240, 210, 0.5); + 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 { @@ -52,12 +87,13 @@ .query-builder .rules-list { list-style: none; - padding: 0 0 0 15px; + padding: 0 0 0 10px; margin: 0; + box-shadow: 0px 0px #aeaeae; } .query-builder .rule-value-container { - border-left: 1px solid #DDD; + /*border-left: 1px solid #DDD;*/ padding-left: 5px; } @@ -72,7 +108,7 @@ .query-builder .rule-value-container select, .query-builder .rule-value-container input[type='text'], .query-builder .rule-value-container input[type='number'] { - padding: 1px; + padding: 5px; } .query-builder .error-container { @@ -97,18 +133,18 @@ left: -10px; width: 10px; height: calc(50% + 4px); - border-color: #CCC; - border-style: solid; + border-color: #000000; + border-style: dashed; } .query-builder .rules-list>*::before { top: -4px; - border-width: 0 0 2px 2px; + border-width: 0 0 1px 1px; } .query-builder .rules-list>*::after { top: 50%; - border-width: 0 0 0 2px; + border-width: 0 0 0 1px; } .query-builder .rules-list>*:first-child::before { @@ -117,7 +153,7 @@ } .query-builder .rules-list>*:last-child::before { - border-radius: 0 0 0 4px; + /*border-radius: 0 0 0 4px;*/ } .query-builder .rules-list>*:last-child::after { 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 new file mode 100644 index 00000000..465fe2d6 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/css/query-builder.default.css @@ -0,0 +1,173 @@ +/*! + * 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 new file mode 100644 index 00000000..19d64ae9 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/css/query-builder.default.min.css @@ -0,0 +1,6 @@ +/*! + * 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 index 08780ef5..2115fce7 100644 --- a/webapp/src/main/webapp/themes/iph/css/reset.css +++ b/webapp/src/main/webapp/themes/iph/css/reset.css @@ -56,7 +56,7 @@ td { font-size: 100%; font-family: inherit; vertical-align: baseline; - color: #595b5b; + color: #000000; font-weight: normal; } body { diff --git a/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf new file mode 100644 index 00000000..ea1371a7 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.ttf 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 new file mode 100644 index 00000000..82adb525 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Bold.woff2 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 new file mode 100644 index 00000000..c970a092 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.ttf 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 new file mode 100644 index 00000000..5367fe0d Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-BoldItalic.woff2 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 new file mode 100644 index 00000000..e5f8bcf9 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.ttf 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 new file mode 100644 index 00000000..cfc93a85 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Italic.woff2 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 new file mode 100644 index 00000000..a5e82cda Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.ttf 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 new file mode 100644 index 00000000..6b3b5abd Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHAstraSerif-Regular.woff2 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 new file mode 100644 index 00000000..10b87aec Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.ttf 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 new file mode 100644 index 00000000..6bf967ca Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Bold.woff2 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 new file mode 100644 index 00000000..f74c308e Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.ttf 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 new file mode 100644 index 00000000..96ca83f2 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-BoldItalic.woff2 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 new file mode 100644 index 00000000..c1660aa7 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.ttf 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 new file mode 100644 index 00000000..7d307b16 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Italic.woff2 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 new file mode 100644 index 00000000..e8045e37 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.ttf 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 new file mode 100644 index 00000000..2f216440 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/IPHSerif-Regular.woff2 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 new file mode 100644 index 00000000..2d452383 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.ttf 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 new file mode 100644 index 00000000..fd744582 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Black.woff2 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 new file mode 100644 index 00000000..29a4359e Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.ttf 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 new file mode 100644 index 00000000..572b6f79 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BlackItalic.woff2 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 new file mode 100644 index 00000000..d998cf5b Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.ttf 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 new file mode 100644 index 00000000..6f0180e5 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Bold.woff2 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 new file mode 100644 index 00000000..b4e22103 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.ttf 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 new file mode 100644 index 00000000..7876f81b Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-BoldItalic.woff2 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 new file mode 100644 index 00000000..5b390ff9 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.ttf 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 new file mode 100644 index 00000000..dabad09a Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Italic.woff2 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 new file mode 100644 index 00000000..35267989 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.ttf 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 new file mode 100644 index 00000000..eb4b36a0 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Light.woff2 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 new file mode 100644 index 00000000..46e9bf7c Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.ttf 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 new file mode 100644 index 00000000..0bfba543 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-LightItalic.woff2 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 new file mode 100644 index 00000000..f714a514 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.ttf 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 new file mode 100644 index 00000000..abcfd77c Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Medium.woff2 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 new file mode 100644 index 00000000..5dc6a2dc Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.ttf 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 new file mode 100644 index 00000000..05411264 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-MediumItalic.woff2 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 new file mode 100644 index 00000000..2b6392ff Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.ttf 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 new file mode 100644 index 00000000..3b78bd51 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Regular.woff2 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 new file mode 100644 index 00000000..4e797cf7 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.ttf 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 new file mode 100644 index 00000000..f4d250f7 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-Thin.woff2 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 new file mode 100644 index 00000000..eea836f4 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.ttf 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 new file mode 100644 index 00000000..6b5de918 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/fonts/Roboto-ThinItalic.woff2 differ diff --git a/webapp/src/main/webapp/themes/iph/i18n/all.properties b/webapp/src/main/webapp/themes/iph/i18n/all.properties index e66f906a..dbeff3f9 100644 --- a/webapp/src/main/webapp/themes/iph/i18n/all.properties +++ b/webapp/src/main/webapp/themes/iph/i18n/all.properties @@ -1,32 +1,32 @@ -menu_contactus = Contact Us -menu_welcomestart = Welcome -menu_copyright = copyright -menu_support = Support -menu_logout = Log out +menu_contactus = Контакты +menu_welcomestart = Добро пожаловать +menu_copyright = права +menu_support = Поддержка +menu_logout = Выйти 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 +menu_login = Войти +menu_version = Версия +menu_about = О нас +menu_termuse = Правила использования +menu_powered = Сделано с помощью -intro_title = Welcome to VIVO +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 = Search VIVO -intro_filtersearch = Filter search +intro_searchvivo = Поиск VIVO +intro_filtersearch = Ограничить поиск -identity_title = VIVO | connect share discover +identity_title = VIVO | соединяй делись познавай identity_index = Index -identity_edit = Edit Page -identity_admin = Site Admin -identity_myprofile = My profile -identity_myaccount = My account -identity_user = user +identity_edit = Редактировать страницу +identity_admin = Админка +identity_myprofile = Мой профиль +identity_myaccount = Моя учётная запись +identity_user = пользователь -collection_capitalized = Collection -place_of_grant = Place of grant -email_address = Email Address +collection_capitalized = Коллекция +place_of_grant = Место получения гранта +email_address = email адрес # # menupage templates ( /templates/freemarker/body/menupage ) @@ -41,69 +41,126 @@ grants_two = This technique could be used to define pages without menu items, th 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 +address_street_one = первая строка адреса +address_street_two = вторая строка адреса +address_street_three = третья строка адреса +address_label = подпись адреса -loading_website_image = Loading website image +loading_website_image = Загрузка изображения сайта -researchers_in = researchers in -view = view -grant_type = grant Type +researchers_in = исследователь в +view = вид +grant_type = тип гранта grant_entry_for = grant entry for -regions = regions -grant_date = grant Date -map_states_string = states. -map_state_string = state. +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 = 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 +first_name = Имя +last_name = Фамилия +first_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 +reviewer_role = Роль рецензента +vivo_profile = профиль VIVO +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 +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 = 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 +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 new file mode 100644 index 00000000..406a7b63 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/i18n/all_en_US.properties @@ -0,0 +1,115 @@ +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 new file mode 100644 index 00000000..ae45b193 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/i18n/all_ru_RU.properties @@ -0,0 +1,109 @@ +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/images/all-toc-collapse.svg b/webapp/src/main/webapp/themes/iph/images/all-toc-collapse.svg new file mode 100644 index 00000000..f2f6f449 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/all-toc-collapse.svg @@ -0,0 +1,6 @@ + + + + + + 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 new file mode 100644 index 00000000..fd8c4338 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/all-toc-expand.svg @@ -0,0 +1,6 @@ + + + + + + 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 new file mode 100644 index 00000000..e470467a --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-down-big.svg @@ -0,0 +1,3 @@ + + + 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 new file mode 100644 index 00000000..6121c8da Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/arrow-down-small.png 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 new file mode 100644 index 00000000..e470467a --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-down-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-down.svg b/webapp/src/main/webapp/themes/iph/images/arrow-down.svg new file mode 100644 index 00000000..44de0c5d --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-green.gif b/webapp/src/main/webapp/themes/iph/images/arrow-green.gif index b3a75c25..d4d79c31 100644 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-green.gif and b/webapp/src/main/webapp/themes/iph/images/arrow-green.gif 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 index f37a72ec..6dcb3239 100644 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow-menu-account.gif and b/webapp/src/main/webapp/themes/iph/images/arrow-menu-account.gif 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 new file mode 100644 index 00000000..fca54213 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-right.svg @@ -0,0 +1,61 @@ + + + + + + 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 new file mode 100644 index 00000000..4a9456ed --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-top-big.svg @@ -0,0 +1,3 @@ + + + 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 new file mode 100644 index 00000000..4a9456ed --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-top-small.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/arrow-top.svg b/webapp/src/main/webapp/themes/iph/images/arrow-top.svg new file mode 100644 index 00000000..f43e7765 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/arrow-top.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/arrow.gif b/webapp/src/main/webapp/themes/iph/images/arrow.gif index 8d9199e7..01f51333 100644 Binary files a/webapp/src/main/webapp/themes/iph/images/arrow.gif and b/webapp/src/main/webapp/themes/iph/images/arrow.gif differ diff --git a/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif b/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif index 1e050cd4..b464f9bb 100644 Binary files a/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif and b/webapp/src/main/webapp/themes/iph/images/arrowSmall.gif 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 new file mode 100644 index 00000000..b577fd8c Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/arrow_brown.png 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 new file mode 100644 index 00000000..6121c8da Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/arrow_down.png 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 new file mode 100644 index 00000000..cf1fa977 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/arrow_small.png 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 new file mode 100644 index 00000000..8fad5896 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/book_icon.png 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 new file mode 100644 index 00000000..476f38d9 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/bullet_icon.png 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 new file mode 100644 index 00000000..51c9036a --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/check-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/circle-item.svg b/webapp/src/main/webapp/themes/iph/images/circle-item.svg new file mode 100644 index 00000000..def917f5 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/circle-item.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/circle.png b/webapp/src/main/webapp/themes/iph/images/circle.png new file mode 100644 index 00000000..3385c075 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/circle.png 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 new file mode 100644 index 00000000..f853a102 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/circle_title.png 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 new file mode 100644 index 00000000..3519e9c9 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/custom_search_button.png 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 new file mode 100644 index 00000000..01a98a88 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/download-icon.svg @@ -0,0 +1,79 @@ + + + + + + + + + + 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 new file mode 100644 index 00000000..881a6676 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/expand-label-image.svg @@ -0,0 +1,3 @@ + + + diff --git a/webapp/src/main/webapp/themes/iph/images/expand_button.png b/webapp/src/main/webapp/themes/iph/images/expand_button.png new file mode 100644 index 00000000..b5e1aac0 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/expand_button.png differ diff --git a/webapp/src/main/webapp/themes/iph/images/exportPdf.svg b/webapp/src/main/webapp/themes/iph/images/exportPdf.svg new file mode 100644 index 00000000..3e39df79 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/exportPdf.svg @@ -0,0 +1,68 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/webapp/src/main/webapp/themes/iph/images/header-image.png b/webapp/src/main/webapp/themes/iph/images/header-image.png new file mode 100644 index 00000000..6e7597a4 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/header-image.png 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 new file mode 100644 index 00000000..b3a54282 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/print-icon.png differ diff --git a/webapp/src/main/webapp/themes/iph/images/print.svg b/webapp/src/main/webapp/themes/iph/images/print.svg new file mode 100644 index 00000000..e7c22d3c --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/print.svg @@ -0,0 +1,108 @@ + + + + + + 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 new file mode 100644 index 00000000..6bc8f5bb Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/save-icon.png 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 new file mode 100644 index 00000000..acb7e624 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/save-pdf-icon.png differ diff --git a/webapp/src/main/webapp/themes/iph/images/save.svg b/webapp/src/main/webapp/themes/iph/images/save.svg new file mode 100644 index 00000000..df7f3aff --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/save.svg @@ -0,0 +1,99 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/webapp/src/main/webapp/themes/iph/images/search-icon.png b/webapp/src/main/webapp/themes/iph/images/search-icon.png new file mode 100644 index 00000000..8a43549f Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/search-icon.png 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 new file mode 100644 index 00000000..f7553d65 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/select_button.png 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 index 4423a099..60c157cb 100644 Binary files a/webapp/src/main/webapp/themes/iph/images/separator-main-nav.jpg and b/webapp/src/main/webapp/themes/iph/images/separator-main-nav.jpg differ diff --git a/webapp/src/main/webapp/themes/iph/images/settings.svg b/webapp/src/main/webapp/themes/iph/images/settings.svg new file mode 100644 index 00000000..e53e92e9 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/images/settings.svg @@ -0,0 +1,111 @@ + + + + + + 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 new file mode 100644 index 00000000..b5491e0d Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/share-icon.png 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 new file mode 100644 index 00000000..b4082a63 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/site-title-padding.png 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 new file mode 100644 index 00000000..ae91e899 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/small-dot.png differ diff --git a/webapp/src/main/webapp/themes/iph/images/title.png b/webapp/src/main/webapp/themes/iph/images/title.png new file mode 100644 index 00000000..c1fc0eae Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/title.png 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 new file mode 100644 index 00000000..f5cad4d8 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/to_up.png 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 new file mode 100644 index 00000000..4e263a0e Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/to_up_hover.png 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 new file mode 100644 index 00000000..0600d164 Binary files /dev/null and b/webapp/src/main/webapp/themes/iph/images/uricon-icon.png 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 new file mode 100644 index 00000000..9cca3c92 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/js/collapsible_elements.js @@ -0,0 +1,123 @@ +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 new file mode 100644 index 00000000..7c23db47 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/js/print.js @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000..e69de29b diff --git a/webapp/src/main/webapp/themes/iph/js/toc.js b/webapp/src/main/webapp/themes/iph/js/toc.js new file mode 100644 index 00000000..212b1346 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/js/toc.js @@ -0,0 +1,178 @@ + document.addEventListener('DOMContentLoaded', createTOC(), false); + + function createTOC(){ + var complexDocElement = document.getElementById("complexDocument"); + var tocElement = document.getElementById("tocPlaceHolder"); + + if (complexDocElement === null || tocElement === null){ + console.log("no complex document or no placeholder"); + return; + } + addItemsToTOC(complexDocElement,tocElement); + + collapseAllTOCElements("tocPlaceHolder"); + //show created TOC + tocElement.style.display = "block"; + } + + function addItemsToTOC(docPart, tocElement){ + var docPartChilds = docPart.childNodes; + for (var i = 0; i < docPartChilds.length; i++){ + var docPartChild = docPartChilds[i]; + if ( docPartChild.nodeType === Node.ELEMENT_NODE && docPartChild.classList.contains("documentPart")){ + var tocElementChild = createTOCItem(docPartChild, tocElement); + addItemsToTOC(docPartChild,tocElementChild); + addElementControls(tocElementChild); + } + } + } + function addElementControls(tocElement){ + + var nameContainer = tocElement.querySelector('.tocElementName'); + if (nameContainer === null){ + console.log("no nameContainer found"); + return; + } + if (tocElement.id === null){ + console.log("no tocElement id found"); + return; + } + + var elementChild = tocElement.querySelector('.tocElement'); + if (elementChild === null){ + var leafImage = document.createElement("img"); + leafImage.className = "tocElementLeafImage"; + leafImage.src = urlsBase + "/themes/iph/images/circle-item.svg"; + nameContainer.prepend(leafImage); + } else { + var switchImage = document.createElement("img"); + switchImage.onclick = function() {switchTOCElement(tocElement.id);}; + switchImage.className = "tocElementSwitchImage"; + nameContainer.prepend(switchImage); + } + } + + function switchTOCElement(id){ + var tocElement = document.getElementById(id); + var elementChild = tocElement.querySelector('.tocElement'); + if (elementChild.style.display === "none"){ + expandTOCElementChilds(id); + setCollapseImageToElement(id); + } else { + collapseTOCElementDescendants(id); + setExpandImageToElement(id); + } + } + + function setCollapseImageToElement(id){ + var tocElement = document.getElementById(id); + var nameContainer = tocElement.querySelector('.tocElementName'); + if (nameContainer === null){ + console.log("no nameContainer found"); + return; + } + $.extend(this, urlsBase); + var imgElement = nameContainer.querySelector('.tocElementSwitchImage'); + if (imgElement != null){ + imgElement.src = urlsBase + "/themes/iph/images/arrow-top-small.svg"; + } + } + + function setExpandImageToElement(id){ + var tocElement = document.getElementById(id); + var nameContainer = tocElement.querySelector('.tocElementName'); + if (nameContainer === null){ + console.log("no nameContainer found"); + return; + } + $.extend(this, urlsBase); + var imgElement = nameContainer.querySelector('.tocElementSwitchImage'); + if (imgElement != null){ + imgElement.src = urlsBase + "/themes/iph/images/arrow-down-small.svg"; + } + + } + + function expandTOCElementChilds(id){ + var tocElement = document.getElementById(id); + var elementChilds = tocElement.querySelectorAll(':scope > .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/templates/freemarker/elenphAritcle.ftl b/webapp/src/main/webapp/themes/iph/templates/compilation.ftl similarity index 69% rename from webapp/src/main/webapp/templates/freemarker/elenphAritcle.ftl rename to webapp/src/main/webapp/themes/iph/templates/compilation.ftl index 24f93877..73e9704b 100644 --- a/webapp/src/main/webapp/templates/freemarker/elenphAritcle.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/compilation.ftl @@ -7,8 +7,13 @@ <#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 > @@ -29,6 +34,8 @@ ${scripts.add(' <#-- <@dumpAll /> --> <#assign selectedTemplate = "individual--foaf-person-2column.ftl" > @@ -239,6 +183,7 @@ for (i = 0; i < coll.length; i++) { + <#if !editable> ')} diff --git a/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl b/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl new file mode 100644 index 00000000..87376701 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/templates/contentWrapper.ftl @@ -0,0 +1,18 @@ +
+ <#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 new file mode 100644 index 00000000..c6697646 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/templates/customSearchForm.ftl @@ -0,0 +1,25 @@ +
+ +
+<#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 new file mode 100644 index 00000000..9dcdd595 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/templates/customsearchpanel.ftl @@ -0,0 +1,3 @@ + diff --git a/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl b/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl new file mode 100644 index 00000000..267ba7e6 --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/templates/elenphAritcle.ftl @@ -0,0 +1,238 @@ +<#-- $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/templates/freemarker/elenphExcerpt-internal.ftl b/webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl similarity index 68% rename from webapp/src/main/webapp/templates/freemarker/elenphExcerpt-internal.ftl rename to webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl index cdc49ba0..ee59304b 100644 --- a/webapp/src/main/webapp/templates/freemarker/elenphExcerpt-internal.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/elenphExcerpt.ftl @@ -1,12 +1,23 @@ -<#-- $This file is distributed under the terms of the license in LICENSE$ --> +<#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 > @@ -27,6 +38,8 @@
<#include "individual-adminPanel.ftl">
+
+
<#if relatedSubject??>

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

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

@@ -58,20 +71,31 @@ <@p.mostSpecificTypesPerson individual editable/> - style="top:5px"> - <#include "individual-iconControls.ftl"> - - <#if editable && profilePageTypesEnabled > - <#include "individual-profilePageTypes.ftl"> - +
+
+
+ <@expandMetadataSwitch /> +
+
+
+ > + <#include "individual-iconControls-iph.ftl"> + + <#if editable && profilePageTypesEnabled > + <#include "individual-profilePageTypes.ftl"> + + <@userSettingsModal /> + +
+
+
<#include "individual-positions.ftl"> <#if !editable> -

- + <#include "individual-overview.ftl"> @@ -90,54 +114,77 @@ <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> <#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> + +
- <@widget name="login" /> - - - <@lh.researchClasses /> + + <#-- <@lh.researchClasses /> --> - <@lh.facultyMbrHtml /> + <#-- <@lh.facultyMbrHtml /> --> - <@lh.academicDeptsHtml /> + <#-- <@lh.academicDeptsHtml /> --> <#if geoFocusMapsEnabled > <@lh.geographicFocusHtml /> - - <@lh.allClassGroups vClassGroups! /> + + <#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 index f1a2d5b2..224f8745 100644 --- a/webapp/src/main/webapp/themes/iph/templates/page.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/page.ftl @@ -7,12 +7,29 @@ <#include "head.ftl"> - + <#include "identity.ftl"> - <#include "search.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> @@ -21,7 +38,7 @@ ${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 index 619835fc..81062b49 100644 --- a/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/queryBuilder.ftl @@ -1,64 +1,148 @@ -
-
- - - - + <#macro freeField field > { @@ -106,13 +251,38 @@ type: 'string', input: 'select', values: { + + <#if searchFields??> <#list searchFilters as filter> <#if filter.field == field.field> - '${filter.id}':'${filter.name}', + '"${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 new file mode 100644 index 00000000..bd8b287b --- /dev/null +++ b/webapp/src/main/webapp/themes/iph/templates/rightPanel.ftl @@ -0,0 +1,17 @@ +
+
+
+ <#include "customsearchpanel.ftl" > + +
+ diff --git a/webapp/src/main/webapp/templates/freemarker/rubric.ftl b/webapp/src/main/webapp/themes/iph/templates/rubric.ftl similarity index 70% rename from webapp/src/main/webapp/templates/freemarker/rubric.ftl rename to webapp/src/main/webapp/themes/iph/templates/rubric.ftl index f2330967..cddbd8b1 100644 --- a/webapp/src/main/webapp/templates/freemarker/rubric.ftl +++ b/webapp/src/main/webapp/themes/iph/templates/rubric.ftl @@ -1,16 +1,20 @@ <#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="float:left;width:100%;border-right:1px solid #A6B1B0;"> +

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

@@ -18,6 +22,7 @@ <#if editable && profilePageTypesEnabled > <#include "individual-profilePageTypes.ftl"> +
@@ -25,7 +30,7 @@ <#assign parent = propertyGroups.pullProperty("https://iph.ras.ru/relationships#hasParent")!> <#if parent?has_content> -
Родительская рубрика<#if !parent.statements?has_content> <@p.addLink parent editable /> <@p.verboseDisplay parent />
+
${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 /> @@ -36,7 +41,7 @@ <#assign order = propertyGroups.pullProperty("https://iph.ras.ru/relationships#rubricOrder")!> <#if order?has_content> -
Порядок рубрики<#if !order.statements?has_content> <@p.addLink order editable /> <@p.verboseDisplay order />
+
${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 /> @@ -46,11 +51,11 @@ <#if childRubrics?has_content> - +
<#list childRubrics as childRubric> <#if childRubric?has_content > -
+ @@ -59,11 +64,11 @@ <#if childArticles?has_content> - +
<#list childArticles as childArticle> <#if childArticle?has_content > -
+ @@ -72,11 +77,11 @@ <#if childExcerpts?has_content> - +
<#list childExcerpts as childExcerpt> <#if childExcerpt?has_content > -
+ @@ -85,7 +90,7 @@ <#if articles?has_content> - +