NIHVIVO-1332 Modifications to controller, template models, and templates for editing controls
This commit is contained in:
parent
e13564c983
commit
3451bb4786
14 changed files with 103 additions and 98 deletions
|
@ -115,8 +115,6 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
|
||||
Map<String, Object> body = new HashMap<String, Object>();
|
||||
|
||||
body.put("editStatus", getEditingData(vreq));
|
||||
|
||||
body.put("title", individual.getName());
|
||||
|
||||
body.put("relatedSubject", getRelatedSubject(vreq));
|
||||
|
@ -151,20 +149,6 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
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) {
|
||||
Map<String, Object> map = null;
|
||||
|
||||
|
@ -215,13 +199,14 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
//setup highlighter for search terms
|
||||
//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.
|
||||
// If not, return the default individual template.
|
||||
private String getIndividualTemplate(Individual individual) {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
String vclassName = "unknown";
|
||||
String customTemplate = null;
|
||||
|
||||
|
@ -232,7 +217,7 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
customTemplate = clas.getCustomDisplayView();
|
||||
if (customTemplate != null) {
|
||||
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");
|
||||
break;
|
||||
} else {
|
||||
|
|
|
@ -38,10 +38,10 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses;
|
||||
|
||||
CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject,
|
||||
VitroRequest vreq, EditingHelper editLinkHelper)
|
||||
VitroRequest vreq, EditingHelper editingHelper)
|
||||
throws InvalidConfigurationException {
|
||||
|
||||
super(op, subject, vreq, editLinkHelper);
|
||||
super(op, subject, vreq, editingHelper);
|
||||
|
||||
String invalidConfigMessage = checkConfiguration();
|
||||
if ( ! invalidConfigMessage.isEmpty() ) {
|
||||
|
@ -62,7 +62,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
|
||||
/* Collate the data */
|
||||
Map<String, List<ObjectPropertyStatementTemplateModel>> unsortedSubclasses =
|
||||
collate(subjectUri, propertyUri, statementData, vreq, editLinkHelper);
|
||||
collate(subjectUri, propertyUri, statementData, vreq, editingHelper);
|
||||
|
||||
/* Sort by subclass name */
|
||||
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,
|
||||
List<Map<String, String>> statementData, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
List<Map<String, String>> statementData, VitroRequest vreq, EditingHelper editingHelper) {
|
||||
|
||||
Map<String, List<ObjectPropertyStatementTemplateModel>> subclassMap =
|
||||
new HashMap<String, List<ObjectPropertyStatementTemplateModel>>();
|
||||
|
@ -117,7 +117,7 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
subclassMap.put(subclassName, currentList);
|
||||
}
|
||||
currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri,
|
||||
propertyUri, objectKey, map, editLinkHelper));
|
||||
propertyUri, objectKey, map, editingHelper));
|
||||
}
|
||||
return subclassMap;
|
||||
}
|
||||
|
|
|
@ -13,11 +13,11 @@ public class DataPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class);
|
||||
|
||||
private DataPropertyStatement statement;
|
||||
private EditingHelper editLinkHelper;
|
||||
private EditingHelper editingHelper;
|
||||
|
||||
DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editLinkHelper) {
|
||||
DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editingHelper) {
|
||||
this.statement = statement;
|
||||
this.editLinkHelper = editLinkHelper;
|
||||
this.editingHelper = editingHelper;
|
||||
}
|
||||
|
||||
/* Access methods for templates */
|
||||
|
|
|
@ -22,10 +22,10 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
|||
private static final String TYPE = "data";
|
||||
|
||||
private List<DataPropertyStatementTemplateModel> statements;
|
||||
private EditingHelper editLinkHelper;
|
||||
private EditingHelper editingHelper;
|
||||
|
||||
DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(dp, editLinkHelper);
|
||||
DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
|
||||
super(dp, editingHelper);
|
||||
|
||||
setName(dp.getPublicName());
|
||||
|
||||
|
@ -34,7 +34,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
|||
List<DataPropertyStatement> dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp);
|
||||
statements = new ArrayList<DataPropertyStatementTemplateModel>(dpStatements.size());
|
||||
for (DataPropertyStatement dps : dpStatements) {
|
||||
statements.add(new DataPropertyStatementTemplateModel(dps, editLinkHelper));
|
||||
statements.add(new DataPropertyStatementTemplateModel(dps, editingHelper));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -45,19 +45,21 @@ public class GroupedPropertyList extends BaseTemplateModel {
|
|||
private Individual subject;
|
||||
private VitroRequest vreq;
|
||||
private WebappDaoFactory wdf;
|
||||
private LoginStatusBean loginStatusBean;
|
||||
private List<PropertyGroupTemplateModel> groups;
|
||||
|
||||
GroupedPropertyList(Individual subject, VitroRequest vreq) {
|
||||
GroupedPropertyList(Individual subject, VitroRequest vreq, LoginStatusBean loginStatusBean) {
|
||||
this.subject = subject;
|
||||
this.vreq = vreq;
|
||||
this.wdf = vreq.getWebappDaoFactory();
|
||||
this.loginStatusBean = loginStatusBean;
|
||||
|
||||
// Determine whether we're editing or not.
|
||||
boolean userCanEditThisProfile = getEditingStatus();
|
||||
|
||||
EditingHelper editLinkHelper = null;
|
||||
EditingHelper editingHelper = null;
|
||||
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.
|
||||
|
@ -106,7 +108,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
|
|||
// Build the template data model from the groupList
|
||||
groups = new ArrayList<PropertyGroupTemplateModel>(propertyGroupList.size());
|
||||
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() {
|
||||
boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq);
|
||||
boolean isCurator = LoginStatusBean.getBean(vreq).isLoggedInAtLeast(LoginStatusBean.CURATOR);
|
||||
boolean isCurator = loginStatusBean.isLoggedInAtLeast(LoginStatusBean.CURATOR);
|
||||
return isSelfEditing || isCurator;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import org.apache.commons.logging.LogFactory;
|
|||
import org.openrdf.model.URI;
|
||||
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.Link;
|
||||
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.Route;
|
||||
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.ClassView;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
|
||||
|
@ -32,6 +34,7 @@ public class IndividualTemplateModel extends BaseTemplateModel {
|
|||
protected VitroRequest vreq;
|
||||
protected UrlBuilder urlBuilder;
|
||||
protected GroupedPropertyList propertyList = null;
|
||||
protected LoginStatusBean loginStatusBean = null;
|
||||
|
||||
public IndividualTemplateModel(Individual individual, VitroRequest vreq) {
|
||||
this.individual = individual;
|
||||
|
@ -40,6 +43,14 @@ public class IndividualTemplateModel extends BaseTemplateModel {
|
|||
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 */
|
||||
|
||||
public String getProfileUrl() {
|
||||
|
@ -129,11 +140,22 @@ public class IndividualTemplateModel extends BaseTemplateModel {
|
|||
|
||||
public GroupedPropertyList getPropertyList() {
|
||||
if (propertyList == null) {
|
||||
propertyList = new GroupedPropertyList(individual, vreq);
|
||||
propertyList = new GroupedPropertyList(individual, vreq, loginStatusBean);
|
||||
}
|
||||
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
|
||||
* 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.
|
||||
|
|
|
@ -27,20 +27,20 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
private String propertyUri;
|
||||
private Map<String, String> data;
|
||||
|
||||
private EditingHelper editLinkHelper;
|
||||
private EditingHelper editingHelper;
|
||||
private String objectUri = null;
|
||||
private ObjectPropertyStatement objectPropertyStatement = null;
|
||||
|
||||
|
||||
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.propertyUri = propertyUri;
|
||||
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 (this.editLinkHelper != null) {
|
||||
// If the editingHelper is non-null, we are in edit mode, so create the necessary objects.
|
||||
if (this.editingHelper != null) {
|
||||
objectUri = data.get(objectKey);
|
||||
objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
public String getEditUrl() {
|
||||
String editUrl = "";
|
||||
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) {
|
||||
ParamMap params = new ParamMap(
|
||||
"subjectUri", subjectUri,
|
||||
|
|
|
@ -61,8 +61,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
|
|||
private PropertyListConfig config;
|
||||
private String objectKey;
|
||||
|
||||
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(op, editLinkHelper);
|
||||
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
|
||||
super(op, editingHelper);
|
||||
setName(op.getDomainPublic());
|
||||
|
||||
// Get the config for this object property
|
||||
|
@ -107,16 +107,16 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
|
|||
}
|
||||
|
||||
protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op,
|
||||
Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
|
||||
if (op.getCollateBySubclass()) {
|
||||
try {
|
||||
return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
|
||||
} catch (InvalidConfigurationException e) {
|
||||
log.error(e);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
|
||||
}
|
||||
} else {
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editingHelper);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
|
|||
private String name;
|
||||
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();
|
||||
|
||||
List<Property> propertyList = group.getPropertyList();
|
||||
|
@ -32,9 +32,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
|
|||
for (Property p : propertyList) {
|
||||
if (p instanceof ObjectProperty) {
|
||||
ObjectProperty op = (ObjectProperty)p;
|
||||
properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper));
|
||||
properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editingHelper));
|
||||
} else {
|
||||
properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editLinkHelper));
|
||||
properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editingHelper));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,15 +18,15 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel {
|
|||
private String name;
|
||||
private String uri;
|
||||
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
|
||||
// label differs between object and data properties.
|
||||
// this.name = property.getLabel();
|
||||
this.uri = property.getURI();
|
||||
this.property = property;
|
||||
this.editLinkHelper = editLinkHelper;
|
||||
this.editingHelper = editingHelper;
|
||||
}
|
||||
|
||||
protected void setName(String name) {
|
||||
|
|
|
@ -22,8 +22,8 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
|
|||
|
||||
private List<ObjectPropertyStatementTemplateModel> statements;
|
||||
|
||||
UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(op, subject, vreq, editLinkHelper);
|
||||
UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editingHelper) {
|
||||
super(op, subject, vreq, editingHelper);
|
||||
|
||||
/* Get the data */
|
||||
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
|
||||
|
@ -41,7 +41,7 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
|
|||
String objectKey = getObjectKey();
|
||||
for (Map<String, String> map : statementData) {
|
||||
statements.add(new ObjectPropertyStatementTemplateModel(subjectUri,
|
||||
propertyUri, objectKey, map, editLinkHelper));
|
||||
propertyUri, objectKey, map, editingHelper));
|
||||
}
|
||||
|
||||
postprocessStatementList(statements);
|
||||
|
|
|
@ -1,21 +1,13 @@
|
|||
<#-- $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>
|
||||
<#import "lib-properties.ftl" as p>
|
||||
<#assign core = "http://vivoweb.org/ontology/core#">
|
||||
<#include "individual-setup.ftl">
|
||||
|
||||
<#assign editingClass>
|
||||
<#if editStatus.showEditingLinks>editing<#else></#if>
|
||||
</#assign>
|
||||
|
||||
<#if editStatus.showAdminPanel>
|
||||
<#if individual.showAdminPanel>
|
||||
<#include "individual-adminPanel.ftl">
|
||||
</#if>
|
||||
|
||||
<#assign propertyGroups = individual.propertyList>
|
||||
|
||||
<section id="individual-intro" class="vcard" role="region">
|
||||
<section id="share-contact" role="region">
|
||||
<#-- Thumbnail -->
|
||||
|
@ -48,6 +40,7 @@
|
|||
<#assign overview = propertyGroups.getPropertyAndRemoveFromList("${core}overview")!>
|
||||
<#if overview?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
|
||||
<#list overview.statements as statement>
|
||||
<@p.editingLinks statement showEditingLinks />
|
||||
<p class="individual-overview">${statement.value}</p>
|
||||
</#list>
|
||||
</#if>
|
||||
|
@ -87,8 +80,9 @@
|
|||
</section>
|
||||
</section>
|
||||
|
||||
<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl -->
|
||||
|
||||
<#-- Property group menu -->
|
||||
<#assign nameForOtherGroup = "other">
|
||||
<#include "individual-propertyGroupMenu.ftl">
|
||||
|
||||
<#-- Ontology properties -->
|
||||
|
|
|
@ -30,13 +30,13 @@
|
|||
<ul class="property-list" role="list">
|
||||
<#-- data property -->
|
||||
<#if property.type == "data">
|
||||
<@p.dataPropertyList property.statements />
|
||||
<@p.dataPropertyList property.statements showEditingLinks />
|
||||
|
||||
<#-- object property -->
|
||||
<#elseif property.collatedBySubclass> <#-- collated -->
|
||||
<@p.collatedObjectPropertyList property />
|
||||
<@p.collatedObjectPropertyList property showEditingLinks />
|
||||
<#else> <#-- uncollated -->
|
||||
<@p.objectPropertyList property.statements property.template />
|
||||
<@p.objectPropertyList property.statements property.template showEditingLinks />
|
||||
</#if>
|
||||
</ul>
|
||||
</article> <!-- end property -->
|
||||
|
|
|
@ -4,56 +4,58 @@
|
|||
Macros for generating property lists
|
||||
------------------------------------------------------------------------------>
|
||||
|
||||
<#macro dataPropertyList statements>
|
||||
<#macro dataPropertyList statements showEditingLinks>
|
||||
<#list statements as statement>
|
||||
<@propertyListItem statement>${statement.value}</@propertyListItem>
|
||||
<@propertyListItem statement showEditingLinks>${statement.value}</@propertyListItem>
|
||||
</#list>
|
||||
</#macro>
|
||||
|
||||
<#macro collatedObjectPropertyList property>
|
||||
<#macro collatedObjectPropertyList property showEditingLinks>
|
||||
<#assign subclasses = property.subclasses>
|
||||
<#list subclasses?keys as subclass>
|
||||
<li class="subclass">
|
||||
<h3>${subclass?lower_case}</h3>
|
||||
<ul class="subclass-property-list">
|
||||
<@objectPropertyList subclasses[subclass] property.template />
|
||||
<@objectPropertyList subclasses[subclass] property.template showEditingLinks />
|
||||
</ul>
|
||||
</li>
|
||||
</#list>
|
||||
</#macro>
|
||||
|
||||
<#macro simpleObjectPropertyList property>
|
||||
<@objectPropertyList property.statements "propStatement-simple.ftl" />
|
||||
<#macro simpleObjectPropertyList property showEditingLinks>
|
||||
<@objectPropertyList property.statements "propStatement-simple.ftl" showEditingLinks />
|
||||
</#macro>
|
||||
|
||||
<#macro objectPropertyList statements template>
|
||||
<#macro objectPropertyList statements template showEditingLinks>
|
||||
<#list statements as statement>
|
||||
<@propertyListItem statement><#include "${template}"></@propertyListItem>
|
||||
<@propertyListItem statement showEditingLinks><#include "${template}"></@propertyListItem>
|
||||
</#list>
|
||||
</#macro>
|
||||
|
||||
<#macro propertyListItem statement>
|
||||
<#macro propertyListItem statement showEditingLinks>
|
||||
<li role="listitem">
|
||||
<@editLink statement />
|
||||
<@deleteLink statement />
|
||||
<@editingLinks statement showEditingLinks />
|
||||
<#nested>
|
||||
</li>
|
||||
</#macro>
|
||||
|
||||
<#macro editingLinks statement showEditingLinks>
|
||||
<#if showEditingLinks>
|
||||
<@editLink statement />
|
||||
<@deleteLink statement />
|
||||
</#if>
|
||||
</#macro>
|
||||
|
||||
<#macro editLink statement>
|
||||
<#if editStatus.showEditingLinks>
|
||||
<#local url = statement.editUrl>
|
||||
<#if url?has_content>
|
||||
<a href="${url}">edit</a>
|
||||
</#if>
|
||||
</#if>
|
||||
</#macro>
|
||||
|
||||
<#macro deleteLink statement>
|
||||
<#if editStatus.showEditingLinks>
|
||||
<#local url = statement.deleteUrl>
|
||||
<#if url?has_content>
|
||||
<a href="${url}">delete</a>
|
||||
</#if>
|
||||
</#if>
|
||||
</#macro>
|
Loading…
Add table
Reference in a new issue