viva la property groups! NIHVIVO-398

This commit is contained in:
nac26 2010-07-16 12:48:12 +00:00
parent bd8b6e8da4
commit 84b458402e
12 changed files with 1275 additions and 1 deletions

View file

@ -0,0 +1,317 @@
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Individual" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.VClass" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditConfiguration" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditSubmission" %>
<%@ page import="edu.cornell.mannlib.vedit.beans.LoginFormBean" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest"%>
<%@ page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Link" %>
<%@ page import="org.apache.commons.logging.Log" %>
<%@ page import="org.apache.commons.logging.LogFactory" %>
<%@ page import="java.util.List" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://vitro.mannlib.cornell.edu/vitro/tags/StringProcessorTag" prefix="p" %>
<%@ taglib uri="http://vitro.mannlib.cornell.edu/vitro/tags/PropertyEditLink" prefix="edLnk" %>
<%@ page errorPage="/error.jsp"%>
<%!
public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.templates.entity.entityBasic.jsp");
%>
<%
log.debug("Starting entityBasic.jsp");
Individual entity = (Individual)request.getAttribute("entity");
%>
<c:set var="labelUri" value="http://www.w3.org/2000/01/rdf-schema#label" />
<c:set var="typeUri" value="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" />
<c:set var="vitroUri" value="http://vitro.mannlib.cornell.edu/ns/vitro/0.7#" />
<c:if test="${!empty entityURI}">
<c:set var="myEntityURI" scope="request" value="${entityURI}"/>
<%
try {
VitroRequest vreq = new VitroRequest(request);
entity = vreq.getWebappDaoFactory().getIndividualDao().getIndividualByURI((String)request.getAttribute("myEntityURI"));
} catch (Exception e) {
e.printStackTrace();
}
%>
</c:if>
<%
if (entity == null){
String e="entityBasic.jsp expects that request attribute 'entity' be set to the Entity object to display.";
throw new JspException(e);
}
if (VitroRequestPrep.isSelfEditing(request) || LoginFormBean.loggedIn(request, LoginFormBean.NON_EDITOR) /* minimum level*/) {
request.setAttribute("showSelfEdits",Boolean.TRUE);
}%>
<c:if test="${sessionScope.loginHandler != null &&
sessionScope.loginHandler.loginStatus == 'authenticated' &&
sessionScope.loginHandler.loginRole >= LoginFormBean.NON_EDITOR}">
<c:set var="showCuratorEdits" value="${true}"/>
</c:if>
<c:set var="showEdits" value="${showSelfEdits || showCuratorEdits}" scope="request"/>
<c:set var="editingClass" value="${showEdits ? 'editing' : ''}" scope="request"/>
<c:set var="themeDir"><c:out value="${portalBean.themeDir}" /></c:set>
<%
//anytime we are at an entity page we shouldn't have an editing config or submission
session.removeAttribute("editjson");
EditConfiguration.clearAllConfigsInSession(session);
EditSubmission.clearAllEditSubmissionsInSession(session);
%>
<c:set var='entity' value='${requestScope.entity}'/><%/* just moving this into page scope for easy use */ %>
<c:set var='entityMergedPropsListJsp' value='/entityMergedPropList'/>
<c:set var='portal' value='${currentPortalId}'/>
<c:set var='portalBean' value='${currentPortal}'/>
<c:set var='themeDir'><c:out value='${portalBean.themeDir}' /></c:set>
<div id="content">
<div id="personWrap">
<jsp:include page="entityAdmin.jsp"/>
<div class="contents entity ${editingClass}">
<div id="labelAndMoniker">
<c:choose>
<c:when test="${!empty relatedSubject}">
<h2><p:process>${relatingPredicate.domainPublic} for ${relatedSubject.name}</p:process></h2>
<c:url var="backToSubjectLink" value="/entity">
<c:param name="home" value="${portalBean.portalId}"/>
<c:param name="uri" value="${relatedSubject.URI}"/>
</c:url>
<p><a href="${backToSubjectLink}">&larr; return to ${relatedSubject.name}</a></p>
</c:when>
<c:otherwise>
<%-- Label --%>
<div class="datatypePropertyValue" id="label">
<div class="statementWrap">
<h2><p:process>${entity.name}</p:process></h2>
<c:if test="${showEdits}">
<c:set var="editLinks"><edLnk:editLinks item="<%= VitroVocabulary.LABEL %>" data="${entity.name}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
</c:if>
</div>
</div>
<%-- Moniker--%>
<c:if test="${!empty entity.moniker}">
<div class="datatypeProperties">
<div class="datatypePropertyValue" id="moniker">
<div class="statementWrap">
<p:process><em class="moniker">${entity.moniker}</em></p:process>
</div>
</div>
</div>
</c:if>
</c:otherwise>
</c:choose>
</div> <!-- end labelAndMoniker -->
<!-- START Sparkline Visualization -->
<jsp:include page="sparklineVisualization.jsp"/>
<!-- END Sparkline Visualization -->
<%-- Thumbnail --%>
<c:set var="isPerson" value='<%= entity.isVClass("http://xmlns.com/foaf/0.1/Person") %>' />
<c:set var="hasImage" value="${!empty entity.thumbUrl}" />
<c:set var="imageLinks"><edLnk:editLinks item="<%= VitroVocabulary.IND_MAIN_IMAGE %>" icons="false" /></c:set>
<c:choose>
<c:when test="${!isPerson && !hasImage}">
<c:if test="${showEdits && !empty imageLinks}">
<div id="dprop-vitro-image" class="propsItem ${editingClass}">
<h3 class="propertyName">image</h3>
${imageLinks}
</div>
</c:if>
</c:when>
<c:when test="${isPerson && !hasImage}">
<div id="dprop-vitro-image" class="propsItem ${editingClass}">
<div class="datatypeProperties">
<div class="datatypePropertyValue">
<div class="statementWrap thumbnail">
<img src="<c:url value='/images/dummyImages/person.thumbnail.jpg'/>"
title="no image" alt="" width="115"/>
<c:if test="${showEdits}">
<span class="editLinks">${imageLinks}</span>
</c:if>
</div>
</div>
</div>
</div>
</c:when>
<c:otherwise> <%-- hasImage --%>
<div id="dprop-vitro-image" class="propsItem ${editingClass}">
<div class="datatypeProperties">
<div class="datatypePropertyValue">
<div class="statementWrap thumbnail">
<a class="image" href="<c:url value='${entity.imageUrl}'/>">
<img src="<c:url value='${entity.thumbUrl}'/>"
title="click to view larger image"
alt="" width="115"/>
</a>
<c:if test="${showEdits}">
<span class="editLinks">${imageLinks}</span>
</c:if>
</div>
</div>
</div>
</div>
<jsp:include page="entityCitation.jsp" />
</c:otherwise>
</c:choose>
<%-- Links --%>
<c:if test="${ showEdits || !empty entity.url || !empty entity.linksList }">
<div id="dprop-vitro-links" class="propsItem ${editingClass}">
<c:set var="canEditPrimaryLinks"><edLnk:editLinks item="<%= VitroVocabulary.PRIMARY_LINK %>" icons="false"/></c:set>
<c:set var="canEditAdditionalLinks"><edLnk:editLinks item="<%= VitroVocabulary.ADDITIONAL_LINK %>" icons="false"/></c:set>
<c:if test="${showEdits and !empty canEditPrimaryLinks and !empty canEditAdditionalLinks}">
<h3 class="propertyName">web pages</h3>
<c:choose>
<c:when test="${empty entity.url}">
<c:set var="addUrlPredicate" value="<%= VitroVocabulary.PRIMARY_LINK %>" />
</c:when>
<c:otherwise>
<c:set var="addUrlPredicate" value="<%= VitroVocabulary.ADDITIONAL_LINK %>" />
</c:otherwise>
</c:choose>
<edLnk:editLinks item="${addUrlPredicate}" icons="false" />
</c:if>
<ul class="externalLinks properties">
<%-- Primary link --%>
<c:if test="${!empty entity.anchor}">
<c:choose>
<c:when test="${!empty entity.url}">
<c:url var="entityUrl" value="${entity.url}" />
<li class="primary">
<span class="statementWrap">
<a class="externalLink" href="<c:out value="${entityUrl}"/>"><p:process>${entity.anchor}</p:process></a>
<c:if test="${showEdits}">
<em>(primary link)</em>
<c:set var="editLinks"><edLnk:editLinks item="<%= VitroVocabulary.PRIMARY_LINK %>" data="${entity.primaryLink.URI}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
</c:if>
</span>
</li>
</c:when>
<c:otherwise>
<%-- RY For now, not providing editing links for anchor text with no url. Should fix. --%>
<li class="primary"><span class="externalLink"><p:process>${entity.anchor}</p:process></span></li>
</c:otherwise>
</c:choose>
</c:if>
<%-- Additional links --%>
<c:if test="${!empty entity.linksList }">
<c:forEach items="${entity.linksList}" var='link' varStatus="count">
<c:url var="linkUrl" value="${link.url}" />
<c:choose>
<c:when test="${empty entity.url && count.first==true}"><li class="first"></c:when>
<c:otherwise><li></c:otherwise>
</c:choose>
<span class="statementWrap">
<a class="externalLink" href="<c:out value="${linkUrl}"/>"><p:process>${link.anchor}</p:process></a>
<c:if test="${showEdits}">
<em>(additional link)</em>
<c:set var="editLinks"><edLnk:editLinks item="<%= VitroVocabulary.ADDITIONAL_LINK %>" data="${link.URI}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
</c:if>
</span>
</li>
</c:forEach>
</c:if>
</ul>
</div> <!-- end dprop-vitro-links -->
</c:if>
<%-- Description --%>
<c:if test="${ showEdits || !empty entity.description}">
<c:if test="${not empty entity.description }">
<c:set var="editLinksForExisitngDesc"><edLnk:editLinks item="<%= VitroVocabulary.DESCRIPTION %>" data="${entity.description}" icons="false"/></c:set>
</c:if>
<c:set var="editLinksForNewDesc"><edLnk:editLinks item="<%= VitroVocabulary.DESCRIPTION %>" icons="false"/></c:set>
<c:set var="mayEditDesc" value="${showEdits && ((empty entity.description and not empty editLinksForNewDesc) or (not empty entity.description and not empty editLinksForExisitngDesc))}"/>
<c:if test="${mayEditDesc || ! empty entity.description }">
<div id="dprop-vitro-description" class="propsItem ${editingClass}">
<h3 class="propertyName">description</h3> ${editLinksForNewDesc}
</c:if>
<c:if test="${!empty entity.description}">
<div class="datatypeProperties">
<div class="datatypePropertyValue">
<div class="statementWrap">
<div class="description"><p:process>${entity.description}</p:process></div>
<c:if test="${showEdits && !empty editLinksForExisitngDesc}">
<span class="editLinks">${editLinksForExisitngDesc}</span>
</c:if>
</div>
</div>
</div>
</c:if>
<c:if test="${mayEditDesc || ! empty entity.description }">
</div>
</c:if>
</c:if>
<%-- Ontology properties --%>
<c:import url="${entityMergedPropsListJsp}">
<c:param name="mode" value="${showEdits ? 'edit' : ''}"/>
<c:param name="grouped" value="true"/>
<%-- unless a value is provided, properties not assigned to a group will not have a tab or appear on the page --%>
<c:param name="unassignedPropsGroupName" value=""/>
</c:import>
<%-- Blurb --%>
<c:if test="${!empty entity.blurb}">
<div class="datatypeProperties">
<div class="datatypePropertyValue">
<div class="statementWrap">
<p:process><div class="description">${entity.blurb}</div></p:process>
</div>
</div>
</div>
</c:if>
<%-- Citation, if no thumbnail --%>
<c:if test="${empty entity.thumbUrl}">
<jsp:include page="entityCitation.jsp" />
</c:if>
<%-- Keywords --%>
<c:if test="${!empty entity.keywordString}">
<p:process><p id="keywords">Keywords: ${entity.keywordString}</p></p:process>
</c:if>
${requestScope.servletButtons}
<!--
<c:if test="${not empty entityLinkedDataURL}">
<c:url var="rdfImg" value="/images/edit_icons/rdf_w3c_icon48.gif"/>
<a href="${entityLinkedDataURL}" title="get this as RDF/XML"><img src="${rdfImg}"/></a>
</c:if>
-->
</div> <!-- contents -->
</div> <!-- personWrap -->
</div> <!-- content -->
<script type="text/javascript" src="/vivo/js/imageUpload/imageUploadUtils.js"></script>

View file

@ -0,0 +1,306 @@
<%-- $This file is distributed under the terms of the license in /doc/license.txt$ --%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://vitro.mannlib.cornell.edu/vitro/tags/PropertyEditLink" prefix="edLnk" %>
<%@ taglib uri="http://vitro.mannlib.cornell.edu/vitro/tags/StringProcessorTag" prefix="p" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Individual" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Portal" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.controller.VitroRequest" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.PropertyInstanceDao" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.PropertyInstance" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Property" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.KeywordProperty" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.DataProperty" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.edit.n3editing.RdfLiteralHash" %>
<%@ page import="java.util.Collection" %>
<%@ page import="java.util.Collections" %>
<%@ page import="java.util.Comparator" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.util.HashSet" %>
<%@ page import="org.apache.commons.logging.Log" %>
<%@ page import="org.apache.commons.logging.LogFactory" %>
<%@ page import="edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep" %>
<%@ page import="edu.cornell.mannlib.vedit.beans.LoginFormBean" %>
<jsp:useBean id="loginHandler" class="edu.cornell.mannlib.vedit.beans.LoginFormBean" scope="session" />
<%!
public static Log log = LogFactory.getLog("edu.cornell.mannlib.vitro.webapp.jsp.templates.entity.entityMergedPropsList.jsp");
%>
<% if( VitroRequestPrep.isSelfEditing(request) ) {
log.debug("setting showSelfEdits true");%>
<c:set var="showSelfEdits" value="${true}"/>
<% }
if (loginHandler!=null && loginHandler.getLoginStatus()=="authenticated" && Integer.parseInt(loginHandler.getLoginRole())>=loginHandler.getNonEditor()) {
log.debug("setting showCuratorEdits true");%>
<c:set var="showCuratorEdits" value="${true}"/>
<c:set var='themeDir'><c:out value='${portalBean.themeDir}' /></c:set>
<% }
String unassignedPropGroupName=null;
String unassignedName = (String) request.getAttribute("unassignedPropsGroupName");
if (unassignedName != null && unassignedName.length()>0) {
unassignedPropGroupName=unassignedName;
log.debug("found temp group attribute \""+unassignedName+"\" for unassigned properties");
}%>
<c:set var='entity' value='${requestScope.entity}'/><%-- just moving this into page scope for easy use --%>
<c:set var='portal' value='${requestScope.portalBean}'/><%-- likewise --%>
<c:set var="hiddenDivCount" value="0"/>
<% Individual subject = (Individual) request.getAttribute("entity");
if (subject==null) {
throw new Error("Subject individual must be in request scope for entityMergedPropsList.jsp");
}
// Nick wants not to use explicit parameters to trigger visibility of a div, but for now we don't just want to always show the 1st one
String openingGroupLocalName = (String) request.getParameter("curgroup");
VitroRequest vreq = new VitroRequest(request);
// added to permit distinguishing links outside the current portal
int currentPortalId = -1;
Portal currentPortal = vreq.getPortal();
if (currentPortal!=null) {
currentPortalId = currentPortal.getPortalId();
}
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
PropertyGroupDao pgDao = wdf.getPropertyGroupDao();
ArrayList<PropertyGroup> groupsList = (ArrayList) request.getAttribute("groupsList");
if (groupsList!=null && groupsList.size()>0) { // first do the list of headers
if (groupsList.size()==1) {
for (PropertyGroup pg : groupsList) {
if (unassignedPropGroupName != null && !unassignedPropGroupName.equalsIgnoreCase(pg.getName())) {
log.debug("only one group ["+pg.getName() +"] so rendering without group headers");
}
request.setAttribute("mergedList",pg.getPropertyList());
}
%><jsp:include page="entityMergedPropsListUngrouped.jsp" flush="true"/><%
return;
}%>
<%--
<ul id="profileCats">
<% for (PropertyGroup pg : groupsList ) {
if (openingGroupLocalName == null || openingGroupLocalName.equals("")) {
openingGroupLocalName = pg.getLocalName();
}
String styleStr = "display: inline;";
if (openingGroupLocalName.equals(pg.getLocalName())) {%>
<li class="currentCat"><a id="currentCat" href="#<%=pg.getLocalName()%>" title="<%=pg.getName()%>"><%=pg.getName()%></a></li>
<% } else { %>
<li><a href="#<%=pg.getLocalName()%>" title="<%=pg.getName()%>"><%=pg.getName()%></a></li>
<% }
} %>
</ul>
--%>
<% // now display the properties themselves, by group
for (PropertyGroup g : groupsList) {%>
<c:set var="group" value="<%=g%>"/>
<c:set var="groupStyle" value="display: block;"/>
<c:if test="${group.statementCount==0}"><c:set var="groupStyle" value="display: block"/></c:if>
<%-- Getting the count of properties in each group --%>
<c:set var="counter" value="0"/>
<c:set var="propTotal" value="0"/>
<% int propTotal = g.getPropertyList().size(); %>
<c:set var="propTotal" value="<%=propTotal%>" />
<div class="propsCategory" id="<%=g.getLocalName()%>">
<h3><strong><%=g.getName()%></strong></h3>
<div class="propsWrap">
<% for (Property p : g.getPropertyList()) {%>
<% if (p instanceof ObjectProperty) {
ObjectProperty op = (ObjectProperty)p;%>
<c:set var="objProp" value="<%=op%>"/>
<c:set var="editableInSomeWay" value="${false}"/>
<c:if test="${showSelfEdits || showCuratorEdits}">
<edLnk:editLinks item="${objProp}" var="links" />
<c:if test="${!empty links}">
<c:set var="editableInSomeWay" value="${true}"/>
</c:if>
</c:if>
<c:set var="objStyle" value="display: block;"/>
<%-- rjy7 We have a logic problem here: if the custom short view dictates that the item NOT be rendered,
and because of this there are NO items to render, we shouldn't show the label when not in edit mode.
Example: people ( = positionHistory) of an organization don't render if the position end date is in the past.
So the organization might not have any current people, in which case we shouldn't show the "people" label.
We need to compute objRows on the basis of the rendering, not the number of objectPropertyStatements.
See NIHVIVO-512. --%>
<c:set var="objRows" value="${fn:length(objProp.objectPropertyStatements)}"/>
<c:if test="${objRows==0}"><c:set var="objStyle" value="display: block;"/></c:if>
<c:if test="${editableInSomeWay || objRows>0}">
<c:set var="first" value=""/><c:if test="${counter == 0}"><c:set var="first" value=" first"/></c:if>
<c:set var="last" value=""/><c:if test="${(counter+1) == propTotal}"><c:set var="last" value=" last"/></c:if>
<div class="propsItem${first}${last}" id="${objProp.localName}">
<h4>${objProp.editLabel}</h4>
<c:if test="${showSelfEdits || showCuratorEdits}"><edLnk:editLinks item="${objProp}" icons="false" /></c:if>
<c:set var="displayLimit" value="${objProp.domainDisplayLimit}"/>
<c:if test="${displayLimit<0}">
<c:set var="displayLimit" value="32"/> <% /* arbitrary limit if value is unset, i.e. -1 */ %>
</c:if>
<c:if test="${objRows>0}">
<ul class='properties'>
</c:if>
<c:forEach items="${objProp.objectPropertyStatements}" var="objPropertyStmt">
<li><span class="statementWrap">
<c:set var="opStmt" value="${objPropertyStmt}" scope="request"/>
<c:url var="propertyLink" value="/entity">
<c:param name="home" value="${portal.portalId}"/>
<c:param name="uri" value="${objPropertyStmt.object.URI}"/>
<%--
<% ObjectPropertyStatement oStmt = (ObjectPropertyStatement)request.getAttribute("opStmt");
if (oStmt!=null) {
Individual obj= (Individual)oStmt.getObject();
if (obj != null) {
if (!obj.doesFlag1Match(currentPortalId)) {%>
<c:param name="jump" value="true"/>
<% }
}
}%>
--%>
</c:url>
<c:remove var="opStmt" scope="request"/>
<c:forEach items="${objPropertyStmt.object.VClasses}" var="type">
<c:if test="${!empty type.customShortView}">
<c:set var="altRenderJsp" value="${type.customShortView}"/>
</c:if>
</c:forEach>
<c:choose>
<c:when test="${!empty altRenderJsp}">
<c:set scope="request" var="individual" value="${objPropertyStmt.object}"/>
<c:set scope="request" var="predicateUri" value="${objProp.URI}"/>
<jsp:include page="${altRenderJsp}" flush="true"/>
<c:remove var="altRenderJsp"/>
</c:when>
<c:otherwise>
<a class="propertyLink" href='<c:out value="${propertyLink}"/>'><p:process><c:out value="${objPropertyStmt.object.name}"/></p:process></a>
<c:if test="${!empty objPropertyStmt.object.moniker}">
<p:process><c:out value="| ${objPropertyStmt.object.moniker}"/></p:process>
</c:if>
</c:otherwise>
</c:choose>
<c:if test="${showSelfEdits || showCuratorEdits}">
<c:set var="editLinks"><edLnk:editLinks item="${objPropertyStmt}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
<c:if test="${empty editLinks}"><em class="nonEditable">(non-editable)</em></c:if>
</c:if>
</span></li>
</c:forEach>
<c:if test="${objRows > 0}"></ul></c:if>
</div><!-- ${objProp.localName} -->
</c:if>
<% } else if (p instanceof DataProperty) {
DataProperty dp = (DataProperty)p;%>
<c:set var="dataProp" value="<%=dp%>"/>
<c:set var="dataRows" value="${fn:length(dataProp.dataPropertyStatements)}"/>
<c:set var="dataStyle" value="display: block;"/>
<c:set var="displayLimit" value="${dataProp.displayLimit}"/>
<c:if test="${dataRows==0}"><c:set var="dataStyle" value="display: block;"/></c:if>
<c:set var="first" value=""/><c:if test="${counter == 0}"><c:set var="first" value=" first"/></c:if>
<c:set var="last" value=""/><c:if test="${(counter+1) == propTotal}"><c:set var="last" value=" last"/></c:if>
<c:set var="multiItem" value=""/><c:if test="${dataRows > 1 && displayLimit == 1}"><c:set var="multiItem" value=" multiItem"/></c:if>
<c:set var="addable" value=""/><c:if test="${dataRows >= 1 && displayLimit > 1}"><c:set var="addable" value=" addable"/></c:if>
<div id="${dataProp.localName}" class="propsItem dataItem${first}${last}${multiItem}${addable}" style="${dataStyle}">
<h4>${dataProp.editLabel}</h4>
<c:if test="${showSelfEdits || showCuratorEdits}">
<c:choose>
<c:when test="${dataRows == 1 && displayLimit==1 }">
<%-- just put in a single "edit" link, not an "add" link that expands to reveal edit/delete links --%>
<c:set var="editLinks"><edLnk:editLinks item="${dataProp.dataPropertyStatements[0]}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
<c:if test="${empty editLinks}"><em class="nonEditable">(non-editable)</em></c:if>
</c:when>
<c:otherwise><%-- creates an add link, even if displayLimit is unset, i.e. -1 --%>
<edLnk:editLinks item="${dataProp}" icons="false"/>
</c:otherwise>
</c:choose>
</c:if>
<c:if test="${displayLimit<0}">
<%-- set to an arbitrary but high positive limit if unset on property, i.e. -1 --%>
<c:set var="displayLimit" value="32"/>
</c:if>
<c:if test="${fn:length(dataProp.dataPropertyStatements)-displayLimit==1}">
<%-- don't leave just one statement to expand --%>
<c:set var="displayLimit" value="${displayLimit+1}"/>
</c:if>
<%-- c:if test="${displayLimit < 0}"><c:set var="displayLimit" value="20"/></c:if --%>
<c:if test="${dataRows > 0}">
<div class="datatypeProperties">
<c:if test="${dataRows > 1}"><ul class="datatypePropertyValue"></c:if>
<c:if test="${dataRows == 1}"><div class="datatypePropertyValue"></c:if>
<c:forEach items="${dataProp.dataPropertyStatements}" var="dataPropertyStmt">
<p:process>
<c:choose>
<c:when test='${dataRows==1}'>
<span class="statementWrap">
${dataPropertyStmt.data}
<c:if test='${displayLimit>1 && (showSelfEdits || showCuratorEdits)}'>
<c:set var="editLinks"><edLnk:editLinks item="${dataPropertyStmt}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
<c:if test="${empty editLinks}"><em class="nonEditable">(non-editable)</em></c:if>
</c:if>
</span>
</c:when>
<c:otherwise>
<li><span class="statementWrap">
${dataPropertyStmt.data}
<c:if test="${dataRows > 1 || displayLimit != 1 }">
<c:if test="${showSelfEdits || showCuratorEdits}">
<c:set var="editLinks"><edLnk:editLinks item="${dataPropertyStmt}" icons="false"/></c:set>
<c:if test="${!empty editLinks}"><span class="editLinks">${editLinks}</span></c:if>
<c:if test="${empty editLinks}"><em class="nonEditable">(non-editable)</em></c:if>
</c:if>
</c:if>
</span></li>
</c:otherwise>
</c:choose>
</p:process>
</c:forEach>
<c:choose>
<c:when test="${dataRows==1}"></div></c:when>
<c:otherwise></ul></c:otherwise>
</c:choose>
</div><!-- datatypeProperties -->
</c:if>
</div><!-- ${dataProp.localName} -->
<% } else { // keyword property -- ignore
if (p instanceof KeywordProperty) {%>
<p>Not expecting keyword properties here.</p>
<% } else {
log.warn("unexpected unknown property type found");%>
<p>Unknown property type found</p>
<% }
}
%><c:set var="counter" value="${counter+1}"/><%
} // end for (Property p : g.getPropertyList()
%>
</div><!-- propsWrap -->
</div><!-- class="propsCategory" -->
<c:if test="${showSelfEdits || showCuratorEdits}">
<a class="backToTop" href="#wrap" title="jump to top of the page">back to top</a>
</c:if>
<% } // end for (PropertyGroup g : groupsList)
} else {
log.debug("incoming groups list with merged properties not found as request attribute for subject "+subject.getName()+"\n");
}
%>

View file

@ -0,0 +1,650 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/*************************************************
vivo-basic theme: TEMPORARY individual styles
**************************************************/
/*@import url("thickbox.css");*/
#personWrap #vitroPropertyGroupname {
/* display: none;*/
}
#personWrap #content.person {
padding: 30px 0 20px 4px;
/* width: 69%;*/
width: auto;
/* min-width: 600px;*/
/* margin-right: 280px;*/
/* padding-top: 10px;*/
}
#personWrap #contentwrap {
/* background: #fff url(../site_icons/grouping/bg_page_person.gif) no-repeat right top;*/
}
#personWrap {
/* background: url(../site_icons/grouping/bg_innerwrap_person.gif) repeat-y right top;*/
padding-top: 20px;
/* margin-top: 25px;*/
clear: both;
}
#personWrap .entity {
padding-top: 0;
}
/* ------ duplicate styles for department pages ----- */
#deptWrap div.admin {
/* display: none;*/
}
#deptWrap #content {
/* padding: 0 0 20px 4px;*/
padding-top: 0;
/* width: 69%;*/
width: auto;
min-width: 600px;
margin-right: 280px;
}
#deptWrap {
background: url(../site_icons/grouping/bg_innerwrap_person.gif) repeat-y right top;
padding-top: 26px;
clear: both;
}
#deptWrap #dashboard {
padding: 0 0 100px 0;
display: inline-block; /* fixes IE double top-padding bug, discussed at: http://exscale.se/archives/2007/06/13/ie-double-padding-bug/ */
background: none;
text-align: left;
width: 255px;
}
#deptWrap em.moniker {
color: #888888;
}
#deptWrap div.description {
/* font-size: 1.2em;*/
}
#deptWrap div.description p,
#deptWrap div.description li {
/* font-size: 1em;*/
}
img.screenshot {
display: block;
margin: 4px 0;
border: 3px solid #C7C3BB;
}
#deptWrap #dashboard a:link {
/* color: #55AABB;*/
/* border-color: #55AABB;*/
}
#deptWrap ul.externalLinks {
padding-left: 21px;
padding-right: 20px;
}
#deptWrap ul.externalLinks li {
display: block;
margin-bottom: 21px;
padding-left: 0;
border: 0;
}
/* ------------------------------------------------- */
#personWrap #entity {
clear: left;
margin: 0;
padding-bottom: 10px;
}
#personWrap #entity h2,
#personWrap #entity em.moniker {
float: none;
/* display: inline;*/
display: block;
}
#personWrap #entity h2 {
/* padding-right: 16px;*/
/* line-height: 2.5em;*/
line-height: 1.3em;
margin: 0;
padding-top: 10px;
}
#personWrap em.moniker {
clear: none;
display: inline-block;
padding: 2px 0 0 0;
}
#personWrap div#profileImage {
width: 87px;
float: left;
}
#personWrap img.headshot,
#personWrap a.img img.headshot {
width: 75px;
float: left;
margin: 0 12px 3px 0;
/* border: 1px solid #333333;*/
border: 1px solid #777;
}
#personWrap #entity div.citation {
clear: left;
display: inline;
font-size: .8em;
line-height: 1.2em;
color: #888;
}
#personWrap div#overview {
position: relative;
clear: left;
margin: 0;
padding-top: 6px;
font-size: 1.1em;
}
#personWrap div#overview.loggedIn {
/* padding-right: 4em;*/
}
#personWrap ol,
#personWrap ul {
padding-left: 0;
margin-left: 0;
}
#personWrap #content ol li,
#personWrap #content ul li {
padding-left: 0;
/* font-size: 1em;*/
}
#personWrap div.propsCategory h3 {
float: left;
display: inline;
height: 24px;
margin: 0 0 0 -1px;
padding: 0 0 0 12px;
font-size: 1.08em;
color: #fff;
background: url(../site_icons/grouping/h3_tab_left.gif) left top no-repeat;
border: 0;
}
#personWrap div.propsCategory h3 strong {
float: left;
display: inline;
height: 19px;
padding: 5px 16px 0 0;
background: url(../site_icons/grouping/h3_tab_right.gif) right top no-repeat;
}
#personWrap div.propsCategory {
clear: left;
background: #fff url(../site_icons/grouping/bg_propsCategory.gif) right top no-repeat;
/* border-left: 1px solid #d9d9d9;*/
border-left: 1px solid #dedede;
/* border-bottom: 1px solid #d9d9d9;*/
border-bottom: 1px solid #dedede;
/* margin-bottom: 30px;*/
margin: 25px 0;
}
#personWrap div.propsWrap {
clear: left;
margin: 0;
padding: 8px 16px;
/* background: url(../site_icons/grouping/bg_propsWrap.gif) right top no-repeat;*/
/* border-top: 1px solid transparent;*/
/* border-right: 1px solid transparent;*/
/* background: #f7f7f7;*/
}
#personWrap div.propsItem {
position: relative;
background: none;
border: 0;
margin: 0;
padding: 14px 0;
}
#personWrap div.propsCategory div.propsItem { /* being more specific here to leave borders off ungrouped (single) properties */
padding-bottom: 3em;
/* border-top: 1px solid #fff;*/
/* border-bottom: 1px solid #f0ede4;*/
border-bottom: 1px solid #f2f2f2;
/* background: #faf8f3;*/
}
/* temporary patch - can't reliably apply class of first to some properties */
#personWrap div.propsCategory div.propsItem.first,
#personWrap div.propsCategory div.propsItem:first-child {
border-top: 0;
}
#personWrap div.propsCategory div.propsItem.last,
#personWrap div.propsCategory div.propsItem:last-child {
border-bottom: 0;
}
#personWrap div.propsCategory div.propsItem:first-child { /* temporary patch - can't apply class of first to initial property under affiliations group */
border-top: 0;
}
#personWrap div.propsCategory div.propsItem:last-child {
border-bottom: 0;
}
#personWrap div.propsItem h4 {
margin-bottom: 1.25em;
margin-left: -16px;
}
#personWrap ul.properties {
/* font-size: 1.2em;*/
padding-left: 0;
color: #888;
}
#personWrap div.datatypeProperties {
/* font-size: 1.2em;*/
}
#personWrap div.datatypeProperties p, /* resetting font sizes for html inside data props */
#personWrap div.datatypeProperties ul {
/* font-size: 1em;*/
line-height: 1.5em;
}
#personWrap div.datatypeProperties ul {
margin: 0;
padding: 0 0 .5em 1.5em;
}
#personWrap div.datatypeProperties ol {
list-style-type: decimal;
margin: 0;
padding: 0 0 .5em 2em;
}
#personWrap div.datatypeProperties ul li {
list-style-type: disc;
}
#personWrap div.datatypeProperties ul.datatypePropertyValue {
padding-left: 0;
}
/* multi-item data properties should not have initial bullets */
#personWrap div.datatypeProperties ul.datatypePropertyValue li {
list-style-type: none;
}
#personWrap div.datatypeProperties ul.datatypePropertyValue ul li {
list-style-type: disc;
}
#personWrap div.datatypeProperties ul.datatypePropertyValue ol li {
list-style-type: decimal;
}
#personWrap div.datatypeProperties ul ol,
#personWrap div.datatypeProperties ul ul {
margin-left: 1.5em;
list-style-position: inside; /* resetting from vivo.css */
}
/* ----------------- Dashboard ---------------- */
#personWrap #dashboard {
padding: 32px 0 100px 0;
display: inline-block; /* fixes IE double top-padding bug, discussed at: http://exscale.se/archives/2007/06/13/ie-double-padding-bug/ */
background: none;
text-align: left;
width: 256px;
}
#personWrap #dashboard li {
list-style-type: none;
}
#personWrap #dashboard a {
/* color: #B31B1B;*/
}
#personWrap #propGroupNav {
margin-bottom: 20px;
border: 2px solid #F0EEE4;
border-left: 0;
border-right: 0;
}
#personWrap #propGroupNav li {
padding: 0 0 1px 0;
}
#personWrap #propGroupNav h2 {
margin: 0;
padding: 0;
font-size: 1.08em;
text-align: left;
text-transform: uppercase;
/* background: #6d8e80;*/
}
#personWrap #dashboard #propGroupNav h2 a {
display: block;
padding: 5px 14px 5px 14px;
border: 0;
color: #fff;
/* background: #6d8e80;*/
background: #baa280 url(../site_icons/grouping/bg_propGroupNav-active.gif) top right repeat-y;
}
#personWrap #dashboard #propGroupNav h2 a.inactive {
color: #b4bfba;
background: #baa280 url(../site_icons/grouping/bg_propGroupNav-inactive.gif) top right repeat-y;
}
#personWrap #dashboard #propGroupNav h2 a:hover {
color: #fff;
background: #b31b1b;
background-image: none;
}
#personWrap #dashboard #propGroupNav h2 a#currentCat {
background: #b3a37c;
}
#personWrap #dashboard strong.contactLink {
padding-left: 22px;
margin-left: 14px;
margin-bottom: 2em;
margin-top: 2em;
background: url(../site_icons/contactinfo.gif) left center no-repeat;
font-weight: bold;
display: block;
}
#personWrap #dashboardExtras {
position: relative;
height: 1%;
margin: 10px 14px;
/* padding: 10px;*/
/* border: 1px solid #CBCBCB;*/
/* background: #e6e6e6;*/
}
#personWrap #dashboardExtras h3 {
display: inline;
font-size: 1em;
line-height: 1.5em;
margin: 0 0 .5em 0;
}
#personWrap #dashboardExtras a img {
/* border: 1px solid #ccc;*/
/* display: block;*/
/* width: auto;*/
/* margin: 4px 0 0 0;*/
/* text-decoration: none;*/
}
#personWrap ul.profileLinks {
margin-left: 0;
margin-bottom: 0;
}
#personWrap ul.profileLinks li {
padding-left: 0;
margin-bottom: 10px;
background: none;
}
ul.keywords li {
font-size: 0.9em;
}
#personWrap #links,
#personWrap #keywords {
/* position: relative;*/
clear: both;
width: 100%;
}
#personWrap #links {
margin-bottom: 1em;
}
/* ----------------- Editing Controls ---------------- */
#personWrap #dashboard #dashboardExtras a.add,
#personWrap #dashboard #dashboardExtras a.edit,
#personWrap #dashboard #dashboardExtras a.delete { /* being overly specific because IE6 had difficulties */
color: #209ae0;
}
#personWrap #dashboardExtras a.add {
position: absolute;
/* top: 0;*/
right: 8px;
margin: 0;
padding: 0;
}
#personWrap #content a.delete {
/* display: none;*/
}
#personWrap #overview a.delete {
display: none;
}
#personWrap #overview a.edit {
padding-left: 5px;
/* position: absolute;*/
/* top: 0;*/
/* right: 16px;*/
}
#personWrap a.add, #personWrap a.edit, #personWrap a.delete {
color: #209ae0;
text-decoration: underline;
}
#personWrap a.add:hover, #personWrap a.edit:hover, #personWrap a.delete:hover,
#personWrap a.add:active, #personWrap a.edit:active, #personWrap a.delete:active {
color: #FF8811;
}
/*#personWrap div.propsCategory a.add,
#personWrap div.propsCategory a.edit {
margin: 0;
padding: 0;
}
#personWrap div.propsCategory div.highlighted a.add,
#personWrap div.propsCategory div.highlighted a.edit {
right: 15px;
}*/
#personWrap div.dataItem a.delete {
display: none;
}
#personWrap div.datatypeProperties a.delete {
display: inline;
}
#personWrap #content .properties a.edit,
#personWrap #content .properties a.delete,
#personWrap #content .datatypeProperties a.edit,
#personWrap #content .datatypeProperties a.delete {
position: static; /* reset for edit links for property statements */
padding-right: 2px;
}
div.editBox.editMode {
border: 2px solid #b5d6e8;
background: #FFFEDB;
/* padding: 12px 10px;*/
padding: 12px 10px;
margin-top: 3px;
}
#personWrap div.datatypeProperties div.editMode ol li,
#personWrap div.datatypeProperties div.editMode ul li {
list-style-type: none;
}
div.editBox.editMode.editing {
background: #F4F8FE;
}
#personWrap div.editing ul.properties,
#personWrap div.editing div.datatypeProperties {
color: #888;
/* display: none;*/
}
div.button {
padding: 16px 0 0 0;
}
div.editBox button {
color: #209ae0;
padding: 3px 6px 3px 6px;
}
a.addNewButton {
/* color: #209ae0;
border: 1px solid #5394c3;
padding: 6px 16px;
line-height: 3em;
background: url(../site_icons/grouping/bg_links_addnew.gif) center center repeat-x;*/
}
a.addNewButton button {
color: #209AE0;
}
#personWrap a.cancel {
color: red;
border-color: #E7B6B9;
}
#personWrap .editForm input#submit {
color: #209AE0;
}
#personWrap div.editBox .editForm {
margin: 10px 0;
}
#personWrap table.mceEditor,
#personWrap div.editBox textarea {
margin: 5px 0;
}
#personWrap p.propEntryHelpText {
font-weight: bold;
font-style: italic;
margin: 0;
padding: 5px 0;
line-height: 1.2em;
color: #439CBD;
}
#personWrap #keywords div.editBox a.edit {
display: none;
}
a.backToTop {
float: right;
margin-top: -22px;
font-size: .9em;
color: #aaa;
border-color: #ddd;
}
a.backToTop:link,
a.backToTop:visited {
/* color: #118855; */
}
#personWrap div.propsCategory div.highlighted {
/* background: #faf8f3 url(../site_icons/grouping/bg_propsItem_highlighted.gif) left top repeat-y;*/
border-top-color: #faf8f3;
/* border-top-color: #F0EDE4;*/
border-bottom-color: #faf8f3;
/* border-top: 1px solid #F0EDE4;*/
margin-left: -16px;
padding-left: 16px;
margin-right: -15px;
padding-right: 15px;
}
/* ----------------- Colors ----------------
Light Blue (edit links): #209ae0
Bright Orange (link hover): #FF8811
Dark Green (links): #118855
*/
/* fixes IE double top-padding bug, discussed at: http://exscale.se/archives/2007/06/13/ie-double-padding-bug/
-- recent versions of Firefox and Safari don't ignore inline-block anymore */
* html #personWrap div.propsWrap {
display: inline-block;
}
*:first-child+html #personWrap div.propsWrap {
display: inline-block;
}
* html div.editBox button {
padding: 1px 3px 2px 3px;
}
*:first-child+html div.editBox button {
padding: 1px 3px 2px 3px;}
}
* html #personWrap #entity h2,
* html #personWrap #entity em.moniker {
height: 1%; /* fixes IE6 peekaboo bug */
}
* html #personWrap #dashboardExtras,
* html #personWrap div.propsCategory,
* html #personWrap div.propsItem {
height: 1%; /* fixes IE6 peekaboo and absolute position bug described at http://www.positioniseverything.net/abs_relbugs.html */
}
* html #personWrap div.admin {
height: 1%;
}
* html #personWrap #content div.propsItem {
border-color: #f0ede4;
border-top: 0;
}

View file

@ -266,7 +266,8 @@ a.externalLink { color: #84a655; }
div.description { margin-bottom: 1.5em; }
.propertyName {
.propertyName,
.propsItem h4 {
font-size: 1em;
line-height: 1em;
color: #666;

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 710 B