diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SparqlQueryServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SparqlQueryServlet.java index 69521e6b5..72cbc005c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SparqlQueryServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/SparqlQueryServlet.java @@ -151,18 +151,13 @@ public class SparqlQueryServlet extends BaseEditController { String queryParam = vreq.getParameter("query"); boolean graphPresent = false; - StringTokenizer tokenizer = new StringTokenizer(queryParam, " "); - while(tokenizer.hasMoreTokens()){ - if("graph".equalsIgnoreCase(tokenizer.nextToken())){ - graphPresent = true; - break; + String[] tokens = queryParam.split("\\s"); + for(int i = 0; i < tokens.length; i++){ + if("graph".equalsIgnoreCase(tokens[i])){ + return vreq.getDataset(); } } - Dataset dataset = vreq.getDataset(); - if (dataset != null && graphPresent) { - return dataset; - } - + DataSource dataSource = DatasetFactory.create(); dataSource.setDefaultModel(vreq.getJenaOntModel()); return dataSource; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java index 107333107..7c35231c5 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java @@ -70,6 +70,10 @@ public class VitroRequest extends HttpServletRequestWrapper { setAttribute("dataset", dataset); } + public void setJenaOntModel(OntModel ontModel) { + setAttribute("jenaOntModel", ontModel); + } + /** gets assertions + inferences WebappDaoFactory with no filtering **/ public WebappDaoFactory getFullWebappDaoFactory() { Object webappDaoFactoryAttr = _req.getAttribute("fullWebappDaoFactory"); @@ -106,6 +110,10 @@ public class VitroRequest extends HttpServletRequestWrapper { } public OntModel getJenaOntModel() { + Object ontModel = getAttribute("jenaOntModel"); + if (ontModel instanceof OntModel) { + return (OntModel) ontModel; + } OntModel jenaOntModel = (OntModel)_req.getSession().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME ); if ( jenaOntModel == null ) { jenaOntModel = (OntModel)_req.getSession().getServletContext().getAttribute( JenaBaseDao.JENA_ONT_MODEL_ATTRIBUTE_NAME ); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java index b8b875deb..57ed0b27e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java @@ -78,6 +78,7 @@ public class IndividualController extends FreemarkerHttpServlet { private static final String INCLUDE_ALL = "all"; private static final Map namespaces = new HashMap() {{ + put("display", VitroVocabulary.DISPLAY); put("vitro", VitroVocabulary.vitroURI); put("vitroPublic", VitroVocabulary.VITRO_PUBLIC); }}; @@ -334,13 +335,7 @@ public class IndividualController extends FreemarkerHttpServlet { private ResponseValues doRdf(VitroRequest vreq, Individual individual, ContentType rdfFormat) throws IOException, ServletException { - OntModel ontModel = null; - HttpSession session = vreq.getSession(false); - if( session != null ) - ontModel = (OntModel)session.getAttribute("jenaOntModel"); - if( ontModel == null) - ontModel = (OntModel)getServletContext().getAttribute("jenaOntModel"); - + OntModel ontModel = vreq.getJenaOntModel(); String[] includes = vreq.getParameterValues("include"); Model newModel = getRDF(individual,ontModel,ModelFactory.createDefaultModel(),0,includes); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoSDB.java index 7e12cf122..eaaf641d2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoSDB.java @@ -10,6 +10,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; @@ -26,18 +27,14 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.AnonId; import com.hp.hpl.jena.rdf.model.Literal; -import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.RDFNode; -import com.hp.hpl.jena.rdf.model.ResIterator; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.util.iterator.ClosableIterator; -import com.hp.hpl.jena.vocabulary.OWL; -import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; import edu.cornell.mannlib.vitro.webapp.beans.Individual; @@ -105,67 +102,42 @@ public class IndividualDaoSDB extends IndividualDaoJena { ents.addAll(getIndividualsByVClass(vc)); } } else { - DatasetWrapper w = getDatasetWrapper(); - Dataset dataset = w.getDataset(); - dataset.getLock().enterCriticalSection(Lock.READ); - try { - String[] graphVars = {"?g", "?h", "?i"}; - String query = - "SELECT DISTINCT ?ind ?label ?moniker " + - "WHERE " + - "{ \n" + - "{ ?ind a <" + theClass.getURI() + "> } \n" + - "UNION { \n" + - " ?ind a <" + theClass.getURI() + "> . \n" + - " ?ind <" + RDFS.label.getURI() + "> ?label \n" + - "} \n" + - "UNION { \n" + - " ?ind a <" + theClass.getURI() + "> . \n" + - " ?ind <" + VitroVocabulary.MONIKER + "> ?moniker \n" + - "} \n" + - "} ORDER BY ?ind ?label"; - ResultSet rs =QueryExecutionFactory.create( - QueryFactory.create(query), dataset) - .execSelect(); - String uri = null; - String label = null; - String moniker = null; - while (rs.hasNext()) { - QuerySolution sol = rs.nextSolution(); - Resource currRes = sol.getResource("ind"); - if (currRes.isAnon()) { - continue; - } - if (uri != null && !uri.equals(currRes.getURI())) { - Individual ent = makeIndividual(uri, label, moniker); - if (ent != null) { - ents.add(ent); - } - uri = currRes.getURI(); - label = null; - moniker = null; - } else if (uri == null) { - uri = currRes.getURI(); - } - Literal labelLit = sol.getLiteral("label"); - if (labelLit != null) { - label = labelLit.getLexicalForm(); - } - Literal monikerLit = sol.getLiteral("moniker"); - if (monikerLit != null) { - moniker = monikerLit.getLexicalForm(); - } - if (!rs.hasNext()) { - Individual ent = makeIndividual(uri, label, moniker); - if (ent != null) { - ents.add(ent); - } - } - } - } finally { - dataset.getLock().leaveCriticalSection(); - w.close(); - } + + List individualList; + + // Check if there is a graph filter. + // If so, we will use it in a slightly strange way. Unfortunately, + // performance is quite bad if we add several graph variables in + // order to account for the fact that an individual's type + // declaration may be in a different graph from its label or + // moniker. Thus, we will run two queries: one with a single + // graph variable to get the list of URIs, and a second against + // the union graph to get individuals with their labels and + // monikers. We will then toss out any individual in the second + // list that is not also in the first list. + // Annoying, yes, but better than the alternative. + // Note that both queries need to sort identically or + // the results may be very strange. + String[] graphVars = {"?g"}; + String filterStr = WebappDaoFactorySDB.getFilterBlock( + graphVars, datasetMode); + if (!StringUtils.isEmpty(filterStr)) { + List graphFilteredIndividualList = + getGraphFilteredIndividualList(theClass, filterStr); + List unfilteredIndividualList = getIndividualList( + theClass); + Iterator unfilteredIt = unfilteredIndividualList + .iterator(); + for (Individual filt : graphFilteredIndividualList) { + Individual unfilt = unfilteredIt.next(); + while (!unfilt.getURI().equals(filt.getURI())) { + unfilt = unfilteredIt.next(); + } + ents.add(unfilt); + } + } else { + ents = getIndividualList(theClass); + } } java.util.Collections.sort(ents); @@ -181,6 +153,105 @@ public class IndividualDaoSDB extends IndividualDaoJena { return ents; } + + private List getIndividualList(Resource theClass) { + List ents = new ArrayList(); + DatasetWrapper w = getDatasetWrapper(); + Dataset dataset = w.getDataset(); + dataset.getLock().enterCriticalSection(Lock.READ); + try { + + String query = + "SELECT DISTINCT ?ind ?label ?moniker " + + "WHERE " + + "{ \n" + + "{ ?ind a <" + theClass.getURI() + "> } \n" + + "UNION { \n" + + " ?ind a <" + theClass.getURI() + "> . \n" + + " ?ind <" + RDFS.label.getURI() + "> ?label \n" + + "} \n" + + "UNION { \n" + + " ?ind a <" + theClass.getURI() + "> . \n" + + " ?ind <" + VitroVocabulary.MONIKER + "> ?moniker \n" + + "} \n" + + "} ORDER BY ?ind ?label"; + ResultSet rs =QueryExecutionFactory.create( + QueryFactory.create(query), dataset) + .execSelect(); + String uri = null; + String label = null; + String moniker = null; + while (rs.hasNext()) { + QuerySolution sol = rs.nextSolution(); + Resource currRes = sol.getResource("ind"); + if (currRes.isAnon()) { + continue; + } + if (uri != null && !uri.equals(currRes.getURI())) { + Individual ent = makeIndividual(uri, label, moniker); + if (ent != null) { + ents.add(ent); + } + uri = currRes.getURI(); + label = null; + moniker = null; + } else if (uri == null) { + uri = currRes.getURI(); + } + Literal labelLit = sol.getLiteral("label"); + if (labelLit != null) { + label = labelLit.getLexicalForm(); + } + Literal monikerLit = sol.getLiteral("moniker"); + if (monikerLit != null) { + moniker = monikerLit.getLexicalForm(); + } + if (!rs.hasNext()) { + Individual ent = makeIndividual(uri, label, moniker); + if (ent != null) { + ents.add(ent); + } + } + } + } finally { + dataset.getLock().leaveCriticalSection(); + w.close(); + } + return ents; + } + + private List getGraphFilteredIndividualList(Resource theClass, + String filterStr) { + List filteredIndividualList = new ArrayList(); + DatasetWrapper w = getDatasetWrapper(); + Dataset dataset = w.getDataset(); + dataset.getLock().enterCriticalSection(Lock.READ); + try { + String query = + "SELECT DISTINCT ?ind ?label ?moniker " + + "WHERE " + + "{ GRAPH ?g { \n" + + "{ ?ind a <" + theClass.getURI() + "> } \n" + + " } \n" + filterStr + + "} ORDER BY ?ind"; + ResultSet rs =QueryExecutionFactory.create( + QueryFactory.create(query), dataset) + .execSelect(); + while (rs.hasNext()) { + QuerySolution sol = rs.nextSolution(); + Resource currRes = sol.getResource("ind"); + if (currRes.isAnon()) { + continue; + } + filteredIndividualList.add( + makeIndividual(currRes.getURI(), null, null)); + } + } finally { + dataset.getLock().leaveCriticalSection(); + w.close(); + } + return filteredIndividualList; + } private Individual makeIndividual(String uri, String label, String moniker) { Individual ent = new IndividualSDB(uri, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java index a91740814..f7b3e6b92 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualSDB.java @@ -933,21 +933,18 @@ public class IndividualSDB extends IndividualImpl implements Individual { if (ind.getModel().contains((Resource) null, RDF.type, (RDFNode) null)){ tempModel = ind.getModel(); } else { + String[] graphVars = { "?g" }; String getTypes = "CONSTRUCT{ <" + this.individualURI + "> <" + RDF.type + "> ?types }\n" + - "WHERE{ GRAPH " + - ((direct) - ? "" - : "?g") - + " { <" + this.individualURI +"> <" +RDF.type+ "> ?types } \n" ; - - if (!direct) { - String[] graphVars = { "?g" }; - getTypes += WebappDaoFactorySDB.getFilterBlock(graphVars, datasetMode); - } - - getTypes += "} \n"; + "WHERE{ GRAPH ?g" + + " { <" + this.individualURI +"> <" +RDF.type+ "> ?types } \n" + + WebappDaoFactorySDB.getFilterBlock( + graphVars, (direct + ? WebappDaoFactorySDB.SDBDatasetMode + .ASSERTIONS_ONLY + : datasetMode)) + + "} \n"; DatasetWrapper w = getDatasetWrapper(); Dataset dataset = w.getDataset(); dataset.getLock().enterCriticalSection(Lock.READ); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java index 65c038937..6ceee057d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/WebappDaoFactorySDB.java @@ -23,6 +23,7 @@ import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase; public class WebappDaoFactorySDB extends WebappDaoFactoryJena { + public static final String UNION_GRAPH = "urn:x-arq:UnionGraph"; private SDBDatasetMode datasetMode = SDBDatasetMode.ASSERTIONS_AND_INFERENCES; /** diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java index 8b9a9d566..caa1214de 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/WebappDaoFactorySDBPrep.java @@ -21,7 +21,9 @@ import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.query.Dataset; +import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.sdb.SDBFactory; import com.hp.hpl.jena.sdb.Store; import com.hp.hpl.jena.sdb.StoreDesc; @@ -106,6 +108,9 @@ public class WebappDaoFactorySDBPrep implements Filter { vreq.setWebappDaoFactory(wadf); vreq.setFullWebappDaoFactory(wadf); vreq.setDataset(dataset); + vreq.setJenaOntModel(ModelFactory.createOntologyModel( + OntModelSpec.OWL_MEM, dataset.getNamedModel( + WebappDaoFactorySDB.UNION_GRAPH))); } } catch (Throwable t) { log.error("Unable to filter request to set up SDB connection", t); diff --git a/webapp/web/css/vitro.css b/webapp/web/css/vitro.css index 1b8b1d2c6..24c265cc0 100644 --- a/webapp/web/css/vitro.css +++ b/webapp/web/css/vitro.css @@ -113,4 +113,93 @@ .searchTOC ul a { display: block; padding-left: 15px; +} + +/* -------------------------------------------------> */ +/* DROP DOWN USER MENU ----------------------------> */ +/* -------------------------------------------------> */ + +/* LEVEL ONE */ +ul.dropdown { + position: relative; +} +ul.dropdown li { + float: left; + zoom: 1; + padding: 0 !important; +} +ul.dropdown li a { + display: block; + font-size: 1.4em; +} +ul.dropdown li#user-menu { + background: url(../images/arrowDownOverAccount.gif) right 9px no-repeat; + min-width:110px; +} +ul.dropdown li#user-menu a { + margin-right: 28px; + margin-left:10px; +} +ul.dropdown li#user-menu.hover, +ul.dropdown li#user-menu:hover { + color: #000 !important; + position: relative; + background: #fff url(../images/arrowDownAccount.gif) right 9px no-repeat; + border-bottom: 1px solid #cdcfcf; +} +ul.dropdown li.hover a, +ul.dropdown li:hover a { + color: #000 !important; + margin-left:10px; +} +/* LEVEL TWO */ +ul.dropdown ul.sub_menu { + background-color: #fff; + font-size: 1.4em; + visibility: hidden; + position: absolute; + top: 100%; + right: 0; + z-index: 999; + color: #000; +} +ul.dropdown ul.sub_menu li { + float: none; + clear: both; + padding-left: 14px !important; + width: 96px; + border-right: none !important; + border-bottom: 1px solid #cdcfcf; + background: #fff url(../images/arrowMenuAccount.gif) 7px 8px no-repeat; +} +ul.dropdown ul.sub_menu li:last-child { + width: 96px; +} +/* IE 6 & 7 Needs Inline Block */ +/* ADD IN IE6.css and IE7.css*/ +ul.dropdown ul.sub_menu li a { + width: 90%; + display: inline-block; + color: #000 !important; + background-color: #fff; + padding: 0; + padding-left: 0px; + height: 24px; +} +ul.dropdown ul.sub_menu li.inactive { + color: #aab0ae !important; + font-size: 1em !important; + padding-left: 22px !important; + width: 88px; +} +ul.dropdown ul.sub_menu li a:hover, +ul.dropdown ul.sub_menu li a.hover { + color: #999 !important; +} +/* LEVEL THREE */ +ul.dropdown ul ul { + left: 100%; top: 0; +} +ul.dropdown li:hover > ul { + visibility: visible; } \ No newline at end of file diff --git a/webapp/web/images/arrowDownAccount.gif b/webapp/web/images/arrowDownAccount.gif new file mode 100644 index 000000000..0f5463eba Binary files /dev/null and b/webapp/web/images/arrowDownAccount.gif differ diff --git a/webapp/web/images/arrowDownOverAccount.gif b/webapp/web/images/arrowDownOverAccount.gif new file mode 100644 index 000000000..4db412c98 Binary files /dev/null and b/webapp/web/images/arrowDownOverAccount.gif differ diff --git a/webapp/web/images/arrowMenuAccount.gif b/webapp/web/images/arrowMenuAccount.gif new file mode 100644 index 000000000..f37a72ec7 Binary files /dev/null and b/webapp/web/images/arrowMenuAccount.gif differ diff --git a/webapp/web/images/individual/uriIcon.gif b/webapp/web/images/individual/uriIcon.gif index f8f22c335..89dc94140 100644 Binary files a/webapp/web/images/individual/uriIcon.gif and b/webapp/web/images/individual/uriIcon.gif differ diff --git a/webapp/web/templates/freemarker/body/accounts/userAccounts-edit.ftl b/webapp/web/templates/freemarker/body/accounts/userAccounts-edit.ftl index e6e2e0374..2117e3b5e 100644 --- a/webapp/web/templates/freemarker/body/accounts/userAccounts-edit.ftl +++ b/webapp/web/templates/freemarker/body/accounts/userAccounts-edit.ftl @@ -65,7 +65,7 @@ - + <#if roles?has_content> diff --git a/webapp/web/templates/freemarker/body/individual/individual-menu.ftl b/webapp/web/templates/freemarker/body/individual/individual-menu.ftl index 302e452b8..98aa83d7c 100644 --- a/webapp/web/templates/freemarker/body/individual/individual-menu.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual-menu.ftl @@ -1,25 +1,29 @@ <#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> -<#-- Default VIVO individual profile page template (extends individual.ftl in vitro) --> +<#-- Menu management page (uses individual display mechanism) --> <#include "individual-setup.ftl"> -<#assign individualProductExtension> - <#-- Include for any class specific template additions --> - ${classSpecificExtension!} - - <#include "individual-overview.ftl"> - - - - -<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl --> -

Menu management

-<#-- Menu Ontology properties --> -<#include "individual-menu-properties.ftl"> +<#assign hasElement = propertyGroups.pullProperty("${namespaces.display}hasElement")> +<#-- List the menu items --> +<#list hasElement.statements as statement> + Position | <#include "${hasElement.template}"> | <@p.editingLinks "hasElement" statement editable />
+ + +
<#-- remove this once styles are applied --> + +<#-- Link to add a new menu item --> +<#if editable> + <#assign addUrl = hasElement.addUrl> + <#if addUrl?has_content> + Add menu item + + + +<#-- Remove unneeded scripts and stylesheets --> ${stylesheets.add('', '')} diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-menu-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-menu-properties.ftl deleted file mode 100644 index 06870cc31..000000000 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-menu-properties.ftl +++ /dev/null @@ -1,24 +0,0 @@ -<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> - -<#-- Template for menu management page --> - -<#import "lib-properties.ftl" as p> - -<#list propertyGroups.all as group> - <#assign groupName = group.getName(nameForOtherGroup)> - - <#-- Display the group heading --> - <#if groupName?has_content> -

${groupName?capitalize}

- - - <#-- List the menu items(properties) in the group --> - <#list group.properties as property> - <#if property.localName == "hasElement"> - <#-- List menu Items --> - <@p.objectProperty property editable property.template /> -
<#--remove break--> - <@p.addLink property editable /> - - - \ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl index 89d82af59..47f27fff0 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl @@ -75,11 +75,7 @@ Assumes property is non-null. --> <#macro objectPropertyList property editable statements=property.statements template=property.template> <#list statements as statement> - <#if property.localName == "hasElement"> - <@menuItem property statement editable><#include "${template}"> - <#else> <@propertyListItem property statement editable><#include "${template}"> - @@ -96,14 +92,9 @@ name will be used as the label. --> <#macro addLink property editable label="${property.name}" extraParams=""> <#if editable> - <#--@dump var="property"/--> <#local url = property.addUrl> <#if url?has_content> - <#if property.localName == "hasElement"> - <@showAddMenuItemLink property.localName label addParamsToEditUrl(url, extraParams) /> - <#else> - <@showAddLink property.localName label addParamsToEditUrl(url, extraParams) /> - + <@showAddLink property.localName label addParamsToEditUrl(url, extraParams) /> @@ -249,12 +240,3 @@ name will be used as the label. --> <@editingLinks "label" label editable /> -<#-- Add menu item button --> -<#macro showAddMenuItemLink propertyLocalName label url> - Add menu item - - -<#-- List menu items --> -<#macro menuItem property statement editable > - Position | <#nested> | <@editingLinks "${property.localName}" statement editable/>
- diff --git a/webapp/web/themes/vitro/css/vitroTheme.css b/webapp/web/themes/vitro/css/vitroTheme.css index c504f499b..c881a14c6 100644 --- a/webapp/web/themes/vitro/css/vitroTheme.css +++ b/webapp/web/themes/vitro/css/vitroTheme.css @@ -422,6 +422,7 @@ ul#header-nav li.last { border-right: none; } ul#header-nav li:last-child { + padding-left: 1px; padding-right: 0; border-right: none; } @@ -437,6 +438,9 @@ ul#header-nav a:active { text-decoration: none; color: #999; } +ul#header-nav a.log-out { + padding-left: 10px; +} /* SEARCH ------> */ #search { position: absolute; @@ -1319,7 +1323,7 @@ p.view-all-coauthors { } section.property-group h2 { font-size: 1.25em; - color: #47B6D0; + color: #006279; font-weight: normal; } article.property { @@ -1328,7 +1332,7 @@ article.property { article.property h3 { background: #fafaf9; font-size: 1.063em; - color: #8aa149; + color: #a8833e; } article.property ul.property-list li.subclass h3 { font-size: 1.063em; diff --git a/webapp/web/themes/vitro/images/arrow-green.gif b/webapp/web/themes/vitro/images/arrow-green.gif deleted file mode 100644 index b3a75c25d..000000000 Binary files a/webapp/web/themes/vitro/images/arrow-green.gif and /dev/null differ diff --git a/webapp/web/themes/vitro/images/arrow.gif b/webapp/web/themes/vitro/images/arrow.gif deleted file mode 100644 index 8d9199e7a..000000000 Binary files a/webapp/web/themes/vitro/images/arrow.gif and /dev/null differ diff --git a/webapp/web/themes/vitro/images/arrowSmall.gif b/webapp/web/themes/vitro/images/arrowSmall.gif deleted file mode 100644 index 1e050cd48..000000000 Binary files a/webapp/web/themes/vitro/images/arrowSmall.gif and /dev/null differ diff --git a/webapp/web/themes/vitro/images/individual/uriIcon.gif b/webapp/web/themes/vitro/images/individual/uriIcon.gif deleted file mode 100644 index 654040b12..000000000 Binary files a/webapp/web/themes/vitro/images/individual/uriIcon.gif and /dev/null differ diff --git a/webapp/web/themes/vitro/images/search-field-and-button.gif b/webapp/web/themes/vitro/images/search-field-and-button.gif deleted file mode 100644 index 4c8f71ebd..000000000 Binary files a/webapp/web/themes/vitro/images/search-field-and-button.gif and /dev/null differ diff --git a/webapp/web/themes/vitro/images/selected-main-nav.jpg b/webapp/web/themes/vitro/images/selected-main-nav.jpg deleted file mode 100644 index 1b2059ba8..000000000 Binary files a/webapp/web/themes/vitro/images/selected-main-nav.jpg and /dev/null differ diff --git a/webapp/web/themes/vitro/templates/footer.ftl b/webapp/web/themes/vitro/templates/footer.ftl index ada24d0df..fc258004a 100644 --- a/webapp/web/themes/vitro/templates/footer.ftl +++ b/webapp/web/themes/vitro/templates/footer.ftl @@ -25,6 +25,7 @@ <#if urls.contact??>
  • Contact Us
  • +
  • Support
  • diff --git a/webapp/web/themes/vitro/templates/identity.ftl b/webapp/web/themes/vitro/templates/identity.ftl index 41b24a35e..645f67354 100644 --- a/webapp/web/themes/vitro/templates/identity.ftl +++ b/webapp/web/themes/vitro/templates/identity.ftl @@ -9,23 +9,29 @@