NIHVIVO-1332 Modifications to controller, template models, and templates for editing controls

This commit is contained in:
rjy7 2011-01-11 17:03:52 +00:00
parent e13564c983
commit 3451bb4786
14 changed files with 103 additions and 98 deletions

View file

@ -115,8 +115,6 @@ public class IndividualController extends FreemarkerHttpServlet {
Map<String, Object> body = new HashMap<String, Object>(); Map<String, Object> body = new HashMap<String, Object>();
body.put("editStatus", getEditingData(vreq));
body.put("title", individual.getName()); body.put("title", individual.getName());
body.put("relatedSubject", getRelatedSubject(vreq)); body.put("relatedSubject", getRelatedSubject(vreq));
@ -151,20 +149,6 @@ public class IndividualController extends FreemarkerHttpServlet {
EditSubmission.clearAllEditSubmissionsInSession(session); EditSubmission.clearAllEditSubmissionsInSession(session);
} }
private Map<String, Object> getEditingData(VitroRequest vreq) {
LoginStatusBean loginBean = LoginStatusBean.getBean(vreq);
Map<String, Object> editingData = new HashMap<String, Object>();
// RY This will be improved later. What is important is not whether the user is a self-editor,
// but whether he has editing privileges on this profile.
editingData.put("showEditingLinks", VitroRequestPrep.isSelfEditing(vreq) ||
loginBean.isLoggedInAtLeast(LoginStatusBean.NON_EDITOR));
editingData.put("showAdminPanel", loginBean.isLoggedInAtLeast(LoginStatusBean.EDITOR));
return editingData;
}
private Map<String, Object> getRelatedSubject(VitroRequest vreq) { private Map<String, Object> getRelatedSubject(VitroRequest vreq) {
Map<String, Object> map = null; Map<String, Object> map = null;
@ -215,13 +199,14 @@ public class IndividualController extends FreemarkerHttpServlet {
//setup highlighter for search terms //setup highlighter for search terms
//checkForSearch(vreq, individual); //checkForSearch(vreq, individual);
return new IndividualTemplateModel(individual, vreq); return new IndividualTemplateModel(individual, vreq, LoginStatusBean.getBean(vreq));
} }
// Determine whether the individual has a custom display template based on its class membership. // Determine whether the individual has a custom display template based on its class membership.
// If not, return the default individual template. // If not, return the default individual template.
private String getIndividualTemplate(Individual individual) { private String getIndividualTemplate(Individual individual) {
@SuppressWarnings("unused")
String vclassName = "unknown"; String vclassName = "unknown";
String customTemplate = null; String customTemplate = null;
@ -232,7 +217,7 @@ public class IndividualController extends FreemarkerHttpServlet {
customTemplate = clas.getCustomDisplayView(); customTemplate = clas.getCustomDisplayView();
if (customTemplate != null) { if (customTemplate != null) {
if (customTemplate.length()>0) { if (customTemplate.length()>0) {
vclassName = clas.getName(); // reset entity vclassname to name of class where a custom view vclassName = clas.getName(); // reset entity vclassname to name of class where a custom view; this call has side-effects
log.debug("Found direct class [" + clas.getName() + "] with custom view " + customTemplate + "; resetting entity vclassName to this class"); log.debug("Found direct class [" + clas.getName() + "] with custom view " + customTemplate + "; resetting entity vclassName to this class");
break; break;
} else { } else {

View file

@ -38,10 +38,10 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses; private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses;
CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject,
VitroRequest vreq, EditingHelper editLinkHelper) VitroRequest vreq, EditingHelper editingHelper)
throws InvalidConfigurationException { throws InvalidConfigurationException {
super(op, subject, vreq, editLinkHelper); super(op, subject, vreq, editingHelper);
String invalidConfigMessage = checkConfiguration(); String invalidConfigMessage = checkConfiguration();
if ( ! invalidConfigMessage.isEmpty() ) { if ( ! invalidConfigMessage.isEmpty() ) {
@ -62,7 +62,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
/* Collate the data */ /* Collate the data */
Map<String, List<ObjectPropertyStatementTemplateModel>> unsortedSubclasses = Map<String, List<ObjectPropertyStatementTemplateModel>> unsortedSubclasses =
collate(subjectUri, propertyUri, statementData, vreq, editLinkHelper); collate(subjectUri, propertyUri, statementData, vreq, editingHelper);
/* Sort by subclass name */ /* Sort by subclass name */
Comparator<String> comparer = new Comparator<String>() { Comparator<String> comparer = new Comparator<String>() {
@ -97,7 +97,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
} }
private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri, String propertyUri, private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri, String propertyUri,
List<Map<String, String>> statementData, VitroRequest vreq, EditingHelper editLinkHelper) { List<Map<String, String>> statementData, VitroRequest vreq, EditingHelper editingHelper) {
Map<String, List<ObjectPropertyStatementTemplateModel>> subclassMap = Map<String, List<ObjectPropertyStatementTemplateModel>> subclassMap =
new HashMap<String, List<ObjectPropertyStatementTemplateModel>>(); new HashMap<String, List<ObjectPropertyStatementTemplateModel>>();
@ -117,7 +117,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
subclassMap.put(subclassName, currentList); subclassMap.put(subclassName, currentList);
} }
currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri,
propertyUri, objectKey, map, editLinkHelper)); propertyUri, objectKey, map, editingHelper));
} }
return subclassMap; return subclassMap;
} }

View file

@ -13,11 +13,11 @@ public class DataPropertyStatementTemplateModel extends BaseTemplateModel {
private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class); private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class);
private DataPropertyStatement statement; private DataPropertyStatement statement;
private EditingHelper editLinkHelper; private EditingHelper editingHelper;
DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editLinkHelper) { DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editingHelper) {
this.statement = statement; this.statement = statement;
this.editLinkHelper = editLinkHelper; this.editingHelper = editingHelper;
} }
/* Access methods for templates */ /* Access methods for templates */

View file

@ -22,10 +22,10 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
private static final String TYPE = "data"; private static final String TYPE = "data";
private List<DataPropertyStatementTemplateModel> statements; private List<DataPropertyStatementTemplateModel> statements;
private EditingHelper editLinkHelper; private EditingHelper editingHelper;
DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
super(dp, editLinkHelper); super(dp, editingHelper);
setName(dp.getPublicName()); setName(dp.getPublicName());
@ -34,7 +34,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
List<DataPropertyStatement> dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp); List<DataPropertyStatement> dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp);
statements = new ArrayList<DataPropertyStatementTemplateModel>(dpStatements.size()); statements = new ArrayList<DataPropertyStatementTemplateModel>(dpStatements.size());
for (DataPropertyStatement dps : dpStatements) { for (DataPropertyStatement dps : dpStatements) {
statements.add(new DataPropertyStatementTemplateModel(dps, editLinkHelper)); statements.add(new DataPropertyStatementTemplateModel(dps, editingHelper));
} }
} }

View file

@ -45,19 +45,21 @@ public class GroupedPropertyList extends BaseTemplateModel {
private Individual subject; private Individual subject;
private VitroRequest vreq; private VitroRequest vreq;
private WebappDaoFactory wdf; private WebappDaoFactory wdf;
private LoginStatusBean loginStatusBean;
private List<PropertyGroupTemplateModel> groups; private List<PropertyGroupTemplateModel> groups;
GroupedPropertyList(Individual subject, VitroRequest vreq) { GroupedPropertyList(Individual subject, VitroRequest vreq, LoginStatusBean loginStatusBean) {
this.subject = subject; this.subject = subject;
this.vreq = vreq; this.vreq = vreq;
this.wdf = vreq.getWebappDaoFactory(); this.wdf = vreq.getWebappDaoFactory();
this.loginStatusBean = loginStatusBean;
// Determine whether we're editing or not. // Determine whether we're editing or not.
boolean userCanEditThisProfile = getEditingStatus(); boolean userCanEditThisProfile = getEditingStatus();
EditingHelper editLinkHelper = null; EditingHelper editingHelper = null;
if (userCanEditThisProfile) { if (userCanEditThisProfile) {
editLinkHelper = new EditingHelper(vreq, getServletContext()); editingHelper = new EditingHelper(vreq, getServletContext());
} }
// Create the property list for the subject. The properties will be put into groups later. // Create the property list for the subject. The properties will be put into groups later.
@ -106,7 +108,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
// Build the template data model from the groupList // Build the template data model from the groupList
groups = new ArrayList<PropertyGroupTemplateModel>(propertyGroupList.size()); groups = new ArrayList<PropertyGroupTemplateModel>(propertyGroupList.size());
for (PropertyGroup pg : propertyGroupList) { for (PropertyGroup pg : propertyGroupList) {
groups.add(new PropertyGroupTemplateModel(vreq, pg, subject, editLinkHelper)); groups.add(new PropertyGroupTemplateModel(vreq, pg, subject, editingHelper));
} }
} }
@ -118,7 +120,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
*/ */
private boolean getEditingStatus() { private boolean getEditingStatus() {
boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq); boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq);
boolean isCurator = LoginStatusBean.getBean(vreq).isLoggedInAtLeast(LoginStatusBean.CURATOR); boolean isCurator = loginStatusBean.isLoggedInAtLeast(LoginStatusBean.CURATOR);
return isSelfEditing || isCurator; return isSelfEditing || isCurator;
} }

View file

@ -10,6 +10,7 @@ import org.apache.commons.logging.LogFactory;
import org.openrdf.model.URI; import org.openrdf.model.URI;
import org.openrdf.model.impl.URIImpl; import org.openrdf.model.impl.URIImpl;
import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.Link; import edu.cornell.mannlib.vitro.webapp.beans.Link;
import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup;
@ -18,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep;
import edu.cornell.mannlib.vitro.webapp.web.ViewFinder; import edu.cornell.mannlib.vitro.webapp.web.ViewFinder;
import edu.cornell.mannlib.vitro.webapp.web.ViewFinder.ClassView; import edu.cornell.mannlib.vitro.webapp.web.ViewFinder.ClassView;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
@ -32,6 +34,7 @@ public class IndividualTemplateModel extends BaseTemplateModel {
protected VitroRequest vreq; protected VitroRequest vreq;
protected UrlBuilder urlBuilder; protected UrlBuilder urlBuilder;
protected GroupedPropertyList propertyList = null; protected GroupedPropertyList propertyList = null;
protected LoginStatusBean loginStatusBean = null;
public IndividualTemplateModel(Individual individual, VitroRequest vreq) { public IndividualTemplateModel(Individual individual, VitroRequest vreq) {
this.individual = individual; this.individual = individual;
@ -40,6 +43,14 @@ public class IndividualTemplateModel extends BaseTemplateModel {
this.urlBuilder = new UrlBuilder(vreq.getPortal()); this.urlBuilder = new UrlBuilder(vreq.getPortal());
} }
public IndividualTemplateModel(Individual individual, VitroRequest vreq, LoginStatusBean loginStatusBean) {
this.individual = individual;
this.vreq = vreq;
this.loginStatusBean = loginStatusBean;
// Needed for getting portal-sensitive urls. Remove if multi-portal support is removed.
this.urlBuilder = new UrlBuilder(vreq.getPortal());
}
/* These methods perform some manipulation of the data returned by the Individual methods */ /* These methods perform some manipulation of the data returned by the Individual methods */
public String getProfileUrl() { public String getProfileUrl() {
@ -129,11 +140,22 @@ public class IndividualTemplateModel extends BaseTemplateModel {
public GroupedPropertyList getPropertyList() { public GroupedPropertyList getPropertyList() {
if (propertyList == null) { if (propertyList == null) {
propertyList = new GroupedPropertyList(individual, vreq); propertyList = new GroupedPropertyList(individual, vreq, loginStatusBean);
} }
return propertyList; return propertyList;
} }
public boolean getShowEditingLinks() {
// RY This will be improved later. What is important is not whether the user is a self-editor,
// but whether he has editing privileges on this profile.
return VitroRequestPrep.isSelfEditing(vreq) ||
loginStatusBean.isLoggedInAtLeast(LoginStatusBean.NON_EDITOR);
}
public boolean getShowAdminPanel() {
return loginStatusBean.isLoggedInAtLeast(LoginStatusBean.EDITOR);
}
/* These methods simply forward to the methods of the wrapped individual. It would be desirable to /* These methods simply forward to the methods of the wrapped individual. It would be desirable to
* implement a scheme for proxying or delegation so that the methods don't need to be simply listed here. * implement a scheme for proxying or delegation so that the methods don't need to be simply listed here.
* A Ruby-style method missing method would be ideal. * A Ruby-style method missing method would be ideal.

View file

@ -27,20 +27,20 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
private String propertyUri; private String propertyUri;
private Map<String, String> data; private Map<String, String> data;
private EditingHelper editLinkHelper; private EditingHelper editingHelper;
private String objectUri = null; private String objectUri = null;
private ObjectPropertyStatement objectPropertyStatement = null; private ObjectPropertyStatement objectPropertyStatement = null;
ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri, ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri,
String objectKey, Map<String, String> data, EditingHelper editLinkHelper) { String objectKey, Map<String, String> data, EditingHelper editingHelper) {
this.subjectUri = subjectUri; this.subjectUri = subjectUri;
this.propertyUri = propertyUri; this.propertyUri = propertyUri;
this.data = data; this.data = data;
this.editLinkHelper = editLinkHelper; this.editingHelper = editingHelper;
// If the editLinkHelper is non-null, we are in edit mode, so create the necessary objects. // If the editingHelper is non-null, we are in edit mode, so create the necessary objects.
if (this.editLinkHelper != null) { if (this.editingHelper != null) {
objectUri = data.get(objectKey); objectUri = data.get(objectKey);
objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri); objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri);
} }
@ -57,7 +57,7 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
public String getEditUrl() { public String getEditUrl() {
String editUrl = ""; String editUrl = "";
RequestedAction action = new EditObjPropStmt(objectPropertyStatement); RequestedAction action = new EditObjPropStmt(objectPropertyStatement);
PolicyDecision decision = editLinkHelper.getPolicy().isAuthorized(editLinkHelper.getIds(), action); PolicyDecision decision = editingHelper.getPolicy().isAuthorized(editingHelper.getIds(), action);
if (decision != null && decision.getAuthorized() == Authorization.AUTHORIZED) { if (decision != null && decision.getAuthorized() == Authorization.AUTHORIZED) {
ParamMap params = new ParamMap( ParamMap params = new ParamMap(
"subjectUri", subjectUri, "subjectUri", subjectUri,

View file

@ -61,8 +61,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
private PropertyListConfig config; private PropertyListConfig config;
private String objectKey; private String objectKey;
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
super(op, editLinkHelper); super(op, editingHelper);
setName(op.getDomainPublic()); setName(op.getDomainPublic());
// Get the config for this object property // Get the config for this object property
@ -107,16 +107,16 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
} }
protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op,
Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
if (op.getCollateBySubclass()) { if (op.getCollateBySubclass()) {
try { try {
return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
} catch (InvalidConfigurationException e) { } catch (InvalidConfigurationException e) {
log.error(e); log.error(e);
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
} }
} else { } else {
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper); return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
} }
} }

View file

@ -24,7 +24,7 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
private String name; private String name;
private List<PropertyTemplateModel> properties; private List<PropertyTemplateModel> properties;
PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject, EditingHelper editLinkHelper) { PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject, EditingHelper editingHelper) {
this.name = group.getName(); this.name = group.getName();
List<Property> propertyList = group.getPropertyList(); List<Property> propertyList = group.getPropertyList();
@ -32,9 +32,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
for (Property p : propertyList) { for (Property p : propertyList) {
if (p instanceof ObjectProperty) { if (p instanceof ObjectProperty) {
ObjectProperty op = (ObjectProperty)p; ObjectProperty op = (ObjectProperty)p;
properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper)); properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editingHelper));
} else { } else {
properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editLinkHelper)); properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editingHelper));
} }
} }
} }

View file

@ -18,15 +18,15 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel {
private String name; private String name;
private String uri; private String uri;
protected Property property; // needed to get the edit links protected Property property; // needed to get the edit links
protected EditingHelper editLinkHelper; protected EditingHelper editingHelper;
PropertyTemplateModel(Property property, EditingHelper editLinkHelper) { PropertyTemplateModel(Property property, EditingHelper editingHelper) {
// Do in subclass constructor. The label has not been set on the property, and getting the // Do in subclass constructor. The label has not been set on the property, and getting the
// label differs between object and data properties. // label differs between object and data properties.
// this.name = property.getLabel(); // this.name = property.getLabel();
this.uri = property.getURI(); this.uri = property.getURI();
this.property = property; this.property = property;
this.editLinkHelper = editLinkHelper; this.editingHelper = editingHelper;
} }
protected void setName(String name) { protected void setName(String name) {

View file

@ -22,8 +22,8 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
private List<ObjectPropertyStatementTemplateModel> statements; private List<ObjectPropertyStatementTemplateModel> statements;
UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) { UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
super(op, subject, vreq, editLinkHelper); super(op, subject, vreq, editingHelper);
/* Get the data */ /* Get the data */
WebappDaoFactory wdf = vreq.getWebappDaoFactory(); WebappDaoFactory wdf = vreq.getWebappDaoFactory();
@ -41,7 +41,7 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
String objectKey = getObjectKey(); String objectKey = getObjectKey();
for (Map<String, String> map : statementData) { for (Map<String, String> map : statementData) {
statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, statements.add(new ObjectPropertyStatementTemplateModel(subjectUri,
propertyUri, objectKey, map, editLinkHelper)); propertyUri, objectKey, map, editingHelper));
} }
postprocessStatementList(statements); postprocessStatementList(statements);

View file

@ -1,21 +1,13 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> <#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for individual profile page --> <#-- Generic template for individual profile page -->
<#import "lib-list.ftl" as l> <#include "individual-setup.ftl">
<#import "lib-properties.ftl" as p>
<#assign core = "http://vivoweb.org/ontology/core#">
<#assign editingClass> <#if individual.showAdminPanel>
<#if editStatus.showEditingLinks>editing<#else></#if>
</#assign>
<#if editStatus.showAdminPanel>
<#include "individual-adminPanel.ftl"> <#include "individual-adminPanel.ftl">
</#if> </#if>
<#assign propertyGroups = individual.propertyList>
<section id="individual-intro" class="vcard" role="region"> <section id="individual-intro" class="vcard" role="region">
<section id="share-contact" role="region"> <section id="share-contact" role="region">
<#-- Thumbnail --> <#-- Thumbnail -->
@ -48,6 +40,7 @@
<#assign overview = propertyGroups.getPropertyAndRemoveFromList("${core}overview")!> <#assign overview = propertyGroups.getPropertyAndRemoveFromList("${core}overview")!>
<#if overview?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> <#if overview?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#list overview.statements as statement> <#list overview.statements as statement>
<@p.editingLinks statement showEditingLinks />
<p class="individual-overview">${statement.value}</p> <p class="individual-overview">${statement.value}</p>
</#list> </#list>
</#if> </#if>
@ -87,8 +80,9 @@
</section> </section>
</section> </section>
<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl -->
<#-- Property group menu --> <#-- Property group menu -->
<#assign nameForOtherGroup = "other">
<#include "individual-propertyGroupMenu.ftl"> <#include "individual-propertyGroupMenu.ftl">
<#-- Ontology properties --> <#-- Ontology properties -->

View file

@ -30,13 +30,13 @@
<ul class="property-list" role="list"> <ul class="property-list" role="list">
<#-- data property --> <#-- data property -->
<#if property.type == "data"> <#if property.type == "data">
<@p.dataPropertyList property.statements /> <@p.dataPropertyList property.statements showEditingLinks />
<#-- object property --> <#-- object property -->
<#elseif property.collatedBySubclass> <#-- collated --> <#elseif property.collatedBySubclass> <#-- collated -->
<@p.collatedObjectPropertyList property /> <@p.collatedObjectPropertyList property showEditingLinks />
<#else> <#-- uncollated --> <#else> <#-- uncollated -->
<@p.objectPropertyList property.statements property.template /> <@p.objectPropertyList property.statements property.template showEditingLinks />
</#if> </#if>
</ul> </ul>
</article> <!-- end property --> </article> <!-- end property -->

View file

@ -4,56 +4,58 @@
Macros for generating property lists Macros for generating property lists
------------------------------------------------------------------------------> ------------------------------------------------------------------------------>
<#macro dataPropertyList statements> <#macro dataPropertyList statements showEditingLinks>
<#list statements as statement> <#list statements as statement>
<@propertyListItem statement>${statement.value}</@propertyListItem> <@propertyListItem statement showEditingLinks>${statement.value}</@propertyListItem>
</#list> </#list>
</#macro> </#macro>
<#macro collatedObjectPropertyList property> <#macro collatedObjectPropertyList property showEditingLinks>
<#assign subclasses = property.subclasses> <#assign subclasses = property.subclasses>
<#list subclasses?keys as subclass> <#list subclasses?keys as subclass>
<li class="subclass"> <li class="subclass">
<h3>${subclass?lower_case}</h3> <h3>${subclass?lower_case}</h3>
<ul class="subclass-property-list"> <ul class="subclass-property-list">
<@objectPropertyList subclasses[subclass] property.template /> <@objectPropertyList subclasses[subclass] property.template showEditingLinks />
</ul> </ul>
</li> </li>
</#list> </#list>
</#macro> </#macro>
<#macro simpleObjectPropertyList property> <#macro simpleObjectPropertyList property showEditingLinks>
<@objectPropertyList property.statements "propStatement-simple.ftl" /> <@objectPropertyList property.statements "propStatement-simple.ftl" showEditingLinks />
</#macro> </#macro>
<#macro objectPropertyList statements template> <#macro objectPropertyList statements template showEditingLinks>
<#list statements as statement> <#list statements as statement>
<@propertyListItem statement><#include "${template}"></@propertyListItem> <@propertyListItem statement showEditingLinks><#include "${template}"></@propertyListItem>
</#list> </#list>
</#macro> </#macro>
<#macro propertyListItem statement> <#macro propertyListItem statement showEditingLinks>
<li role="listitem"> <li role="listitem">
<@editLink statement /> <@editingLinks statement showEditingLinks />
<@deleteLink statement />
<#nested> <#nested>
</li> </li>
</#macro> </#macro>
<#macro editingLinks statement showEditingLinks>
<#if showEditingLinks>
<@editLink statement />
<@deleteLink statement />
</#if>
</#macro>
<#macro editLink statement> <#macro editLink statement>
<#if editStatus.showEditingLinks>
<#local url = statement.editUrl> <#local url = statement.editUrl>
<#if url?has_content> <#if url?has_content>
<a href="${url}">edit</a> <a href="${url}">edit</a>
</#if> </#if>
</#if>
</#macro> </#macro>
<#macro deleteLink statement> <#macro deleteLink statement>
<#if editStatus.showEditingLinks>
<#local url = statement.deleteUrl> <#local url = statement.deleteUrl>
<#if url?has_content> <#if url?has_content>
<a href="${url}">delete</a> <a href="${url}">delete</a>
</#if> </#if>
</#if>
</#macro> </#macro>