diff --git a/productMods/templates/freemarker/body/individual/individual--foaf-person.ftl b/productMods/templates/freemarker/body/individual/individual--foaf-person.ftl
index cc5cc81f..0e22b4ba 100644
--- a/productMods/templates/freemarker/body/individual/individual--foaf-person.ftl
+++ b/productMods/templates/freemarker/body/individual/individual--foaf-person.ftl
@@ -131,6 +131,7 @@
+
<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl -->
<#-- Property group menu -->
@@ -139,7 +140,6 @@
<#-- Ontology properties -->
<#include "individual-properties.ftl">
-
${stylesheets.add("/css/individual/individual.css")}
${stylesheets.add("/css/individual/individual-vivo.css")}
diff --git a/productMods/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl b/productMods/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl
index 69aff107..5385ca7c 100644
--- a/productMods/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl
+++ b/productMods/templates/freemarker/body/partials/individual/individual-visualizationFoafPerson.ftl
@@ -18,7 +18,7 @@
<#if isAuthor>
<#assign coAuthorIcon = "${urls.images}/visualization/co_author_icon.png">
- <#assign coAuthorURL = "${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${individual.uri}&vis_mode=coauthor">
+ <#assign coAuthorVisUrl = individual.coAuthorVisUrl>
<#assign googleJSAPI = "https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22imagesparkline%22%5D%7D%5D%7D">
@@ -29,9 +29,9 @@
-

+
-
+
${scripts.add(googleJSAPI)}
@@ -48,14 +48,14 @@
#if>
<#if isInvestigator>
- <#assign coInvestigatorURL = "${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${individual.uri}&vis_mode=copi">
+ <#assign coInvestigatorVisUrl = individual.coInvestigatorVisUrl>
<#assign coInvestigatorIcon = "${urls.images}/visualization/co_investigator_icon.png">
-

+
-
+
#if>
diff --git a/productMods/templates/freemarker/body/partials/individual/individual-visualizationTemporalGraph.ftl b/productMods/templates/freemarker/body/partials/individual/individual-visualizationTemporalGraph.ftl
index e6316e84..2846046b 100644
--- a/productMods/templates/freemarker/body/partials/individual/individual-visualizationTemporalGraph.ftl
+++ b/productMods/templates/freemarker/body/partials/individual/individual-visualizationTemporalGraph.ftl
@@ -3,5 +3,5 @@
<#-- Temporal graph visualization -->
\ No newline at end of file
diff --git a/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java
new file mode 100644
index 00000000..d3f32844
--- /dev/null
+++ b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java
@@ -0,0 +1,72 @@
+/* $This file is distributed under the terms of the license in /doc/license.txt$ */
+
+package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import edu.cornell.mannlib.vitro.webapp.beans.Individual;
+import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
+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;
+
+public class IndividualTemplateModel extends BaseIndividualTemplateModel {
+
+ private static final Log log = LogFactory.getLog(IndividualTemplateModel.class);
+
+ public IndividualTemplateModel(Individual individual, VitroRequest vreq) {
+ super(individual, vreq);
+ }
+
+ private String getBaseVisUrl() {
+ return getUrl(Route.VISUALIZATION.path(), "uri", getUri());
+ }
+
+ private String getVisUrl(ParamMap params) {
+ String baseVisUrl = getBaseVisUrl();
+ return UrlBuilder.addParams(baseVisUrl, params);
+ }
+
+ private String getVisUrl(String...params) {
+ return getVisUrl(new ParamMap(params));
+ }
+
+ private String getPersonVisUrl(ParamMap params) {
+ if (!isPerson()) {
+ return null;
+ }
+ ParamMap paramMap = new ParamMap("vis", "person_level");
+ paramMap.put(params);
+ return getVisUrl(paramMap);
+ }
+
+
+ /* Access methods for templates */
+
+ public boolean isPerson() {
+ return isVClass("http://xmlns.com/foaf/0.1/Person");
+ }
+
+ public boolean isOrganization() {
+ return isVClass("http://xmlns.com/foaf/0.1/Organization");
+ }
+
+ public String getCoAuthorVisUrl() {
+ return getPersonVisUrl(new ParamMap("vis_mode", "coauthor"));
+ }
+
+ public String getCoInvestigatorVisUrl() {
+ return getPersonVisUrl(new ParamMap("vis_mode", "copi"));
+ }
+
+ public String getTemporalGraphUrl() {
+ if (!isOrganization()) {
+ return null;
+ }
+ return getVisUrl("vis", "entity_comparison");
+ }
+}