<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> <#----------------------------------------------------------------------------- Macros and functions for working with properties and property lists ------------------------------------------------------------------------------> <#-- Return true iff there are statements for this property --> <#function hasStatements propertyGroups propertyName> <#local property = propertyGroups.getProperty(propertyName)!> <#-- First ensure that the property is defined (an unpopulated property while logged out is undefined) --> <#if ! property?has_content> <#return false> <#if property.collatedBySubclass!false> <#-- collated object property--> <#return property.subclasses?has_content> <#else> <#return property.statements?has_content> <#-- data property or uncollated object property --> <#-- Return true iff there are statements for this property --> <#function hasVisualizationStatements propertyGroups propertyName rangeUri> <#local property = propertyGroups.getProperty(propertyName, rangeUri)!> <#-- First ensure that the property is defined (an unpopulated property while logged out is undefined) --> <#if ! property?has_content> <#return false> <#if property.collatedBySubclass!false> <#-- collated object property--> <#return property.subclasses?has_content> <#else> <#return property.statements?has_content> <#-- data property or uncollated object property --> <#----------------------------------------------------------------------------- Macros for generating property lists ------------------------------------------------------------------------------> <#macro dataPropertyListing property editable> <#if property?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> <@addLinkWithLabel property editable /> <@dataPropertyList property editable /> <#macro dataPropertyList property editable template=property.template> <#list property.statements as statement> <@propertyListItem property statement editable ><#include "${template}"> <#macro objectProperty property editable template=property.template> <#if property.collatedBySubclass> <#-- collated --> <@collatedObjectPropertyList property editable template /> <#else> <#-- uncollated --> <#-- We pass property.statements and property.template even though we are also passing property, because objectPropertyList can get other values, and doesn't necessarily use property.statements and property.template --> <@objectPropertyList property editable property.statements template /> <#macro collatedObjectPropertyList property editable template=property.template > <#local subclasses = property.subclasses> <#list subclasses as subclass> <#local subclassName = subclass.name!> <#if subclassName?has_content>
  • ${subclassName?lower_case}

  • <#else> <#-- If not in a real subclass, the statements are in a dummy subclass with an empty name. List them in the top level ul, not nested. --> <@objectPropertyList property editable subclass.statements template/> <#-- Full object property listing, including heading and ul wrapper element. Assumes property is non-null. --> <#macro objectPropertyListing property editable template=property.template> <#local localName = property.localName>

    ${property.name?capitalize} <@addLink property editable /> <@verboseDisplay property />

    <#macro objectPropertyList property editable statements=property.statements template=property.template> <#list statements as statement> <@propertyListItem property statement editable><#include "${template}"> <#-- Some properties usually display without a label. But if there's an add link, we need to also show the property label. If no label is specified, the property name will be used as the label. --> <#macro addLinkWithLabel property editable label="${property.name?capitalize}"> <#local addLink><@addLink property editable label /> <#local verboseDisplay><@verboseDisplay property /> <#-- Changed to display the label when user is in edit mode, even if there's no add link (due to displayLimitAnnot, for example). Otherwise the display looks odd, since neighboring properties have labels. <#if addLink?has_content || verboseDisplay?has_content>

    ${label} ${addLink!} ${verboseDisplay!}

    --> <#if editable>

    ${label} ${addLink!} ${verboseDisplay!}

    <#macro addLink property editable label="${property.name}"> <#if property.rangeUri?? > <#local rangeUri = property.rangeUri /> <#else> <#local rangeUri = "" /> <#if property.domainUri?? > <#local domainUri = property.domainUri /> <#else> <#local domainUri = "" /> <#if editable> <#if property.addUrl?has_content> <#local url = property.addUrl> <@showAddLink property.localName label url rangeUri domainUri/> <#macro showAddLink propertyLocalName label url rangeUri domainUri=""> <#if (rangeUri?contains("Authorship") && domainUri?contains("IAO_0000030")) || (rangeUri?contains("Editorship") && domainUri?contains("IAO_0000030"))|| rangeUri?contains("URL") || propertyLocalName == "hasResearchArea"> ${i18n().manage} <#else> ${i18n().add} <#macro propertyLabel property label="${property.name?capitalize}">

    ${label} <@verboseDisplay property />

    <#macro propertyListItem property statement editable > <#if property.rangeUri?? > <#local rangeUri = property.rangeUri /> <#else> <#local rangeUri = "" />
  • <#nested> <@editingLinks "${property.localName}" "${property.name}" statement editable rangeUri/>
  • <#macro editingLinks propertyLocalName propertyName statement editable rangeUri=""> <#if editable > <#if (!rangeUri?contains("Authorship") && !rangeUri?contains("URL") && !rangeUri?contains("Editorship") && propertyLocalName != "hasResearchArea")> <@editLink propertyLocalName propertyName statement rangeUri/> <@deleteLink propertyLocalName propertyName statement rangeUri/> <#macro editLink propertyLocalName propertyName statement rangeUri=""> <#if propertyLocalName?contains("ARG_2000028")> <#if rangeUri?contains("Address")> <#local url = statement.editUrl + "&addressUri=" + "${statement.address!}"> <#elseif rangeUri?contains("Telephone") || rangeUri?contains("Fax")> <#local url = statement.editUrl + "&phoneUri=" + "${statement.phone!}"> <#elseif rangeUri?contains("Work") || rangeUri?contains("Email")> <#local url = statement.editUrl + "&emailUri=" + "${statement.email!}"> <#elseif rangeUri?contains("Name")> <#local url = statement.editUrl + "&fullNameUri=" + "${statement.fullName!}"> <#elseif rangeUri?contains("Title")> <#local url = statement.editUrl + "&titleUri=" + "${statement.title!}"> <#else> <#local url = statement.editUrl> <#if url?has_content> <@showEditLink propertyLocalName url /> <#macro showEditLink propertyLocalName url> ${i18n().edit_entry} <#macro deleteLink propertyLocalName propertyName statement rangeUri=""> <#local url = statement.deleteUrl> <#if url?has_content> <#--We need to specify the actual object to be deleted as it is different from the object uri--> <#if propertyLocalName?contains("ARG_2000028")> <#if rangeUri?contains("Address")> <#local url = url + "&deleteObjectUri=" + "${statement.address!}"> <#elseif rangeUri?contains("Telephone") || rangeUri?contains("Fax")> <#local url = url + "&deleteObjectUri=" + "${statement.phone!}"> <#elseif rangeUri?contains("Work") || rangeUri?contains("Email")> <#local url = url + "&deleteObjectUri=" + "${statement.email!}"> <#elseif rangeUri?contains("Name")> <#local url = url + "&deleteObjectUri=" + "${statement.fullName!}"> <#elseif rangeUri?contains("Title")> <#local url = url + "&deleteObjectUri=" + "${statement.title!}"> <@showDeleteLink propertyLocalName url /> <#macro showDeleteLink propertyLocalName url> ${i18n().delete_entry} <#macro verboseDisplay property> <#local verboseDisplay = property.verboseDisplay!> <#if verboseDisplay?has_content>
    <#if verboseDisplay.fauxProperty?has_content> ${verboseDisplay.fauxProperty.displayName} , a faux property of ${verboseDisplay.localName} (${property.type?lower_case} property); order in group: ${verboseDisplay.displayRank}; display level: ${verboseDisplay.displayLevel}; update level: ${verboseDisplay.updateLevel}; publish level: ${verboseDisplay.publishLevel}
    <#----------------------------------------------------------------------------- Macros for specific properties ------------------------------------------------------------------------------> <#-- Image Values for showPlaceholder: "always", "never", "with_add_link" Note that this macro has a side-effect in the call to propertyGroups.pullProperty(). --> <#macro image individual propertyGroups namespaces editable showPlaceholder="never" imageWidth=160 > <#local mainImage = propertyGroups.pullProperty("${namespaces.vitroPublic}mainImage")!> <#local thumbUrl = individual.thumbUrl!> <#-- Don't assume that if the mainImage property is populated, there is a thumbnail image (though that is the general case). If there's a mainImage statement but no thumbnail image, treat it as if there is no image. --> <#if (mainImage.statements)?has_content && thumbUrl?has_content> ${individual.name} <@editingLinks "${mainImage.localName}" "" mainImage.first() editable /> <#else> <#local imageLabel><@addLinkWithLabel mainImage editable "${i18n().photo}" /> ${imageLabel} <#if showPlaceholder == "always" || (showPlaceholder="with_add_link" && imageLabel?has_content)> ${i18n().placeholder_image} <#-- Label --> <#macro label individual editable labelCount localesCount=1 languageCount=1> <#assign labelPropertyUri = ("http://www.w3.org/2000/01/rdf-schema#label"?url) /> <#assign useEditLink = false /> <#--edit link used if in edit mode and only one label and one language--> <#--locales count may be 0 in case where no languages/selectable locales are specified--> <#if labelCount = 1 && editable && (localesCount >= 0) > <#assign useEditLink = true/> <#local label = individual.nameStatement> ${label.value} <#if useEditLink> <@editingLinks "label" "" label editable ""/> <#elseif (editable && (labelCount > 0)) || (languageCount > 1)> <#--We display the link even when the user is not logged in case of multiple labels with different languages--> <#assign labelLink = ""/> <#-- Manage labels now goes to generator --> <#assign individualUri = individual.uri!""/> <#assign individualUri = (individualUri?url)/> <#assign individualProfileUrl = individual.profileUrl /> <#assign profileParameters = individualProfileUrl?substring(individualProfileUrl?index_of("?") + 1)/> <#assign extraParameters = ""/> <#if profileParameters?contains("uri=")> <#assign extraParameters = profileParameters?replace("uri=" + individualUri, "") /> <#--IF there are special parameters, then get those--> <#if editable> <#assign imageAlt = "${i18n().manage}" /> <#assign linkTitle = "${i18n().manage_list_of_labels}"> <#assign labelLink= "${urls.base}/editRequestDispatch?subjectUri=${individualUri}&editForm=edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManageLabelsGenerator&predicateUri=${labelPropertyUri}${extraParameters}"> <#else> <#assign linkTitle = "${i18n().view_list_of_labels}"> <#assign imageAlt = "${i18n().view}" /> <#assign labelLink= "${urls.base}/viewLabels?subjectUri=${individualUri}${extraParameters}"> ${imageAlt} <#-- Most specific types --> <#macro mostSpecificTypes individual > <#list individual.mostSpecificTypes as type> ${type} <#macro mostSpecificTypesPerson individual editable> <#list individual.mostSpecificTypes as type>
    ${type}
    <#--Property group names may have spaces in them, replace spaces with underscores for html id/hash--> <#function createPropertyGroupHtmlId propertyGroupName> <#return propertyGroupName?replace(" ", "_")>