From 63a3e318eabd77a0f54c7e14a802b3244667db9f Mon Sep 17 00:00:00 2001 From: cdtank Date: Thu, 13 Jan 2011 21:30:15 +0000 Subject: [PATCH] 1. Added comment about the new visualization.topLevelOrg property for deploy.proeprties. Added similar content for install.txt. 2. Made front-end improvements to temporal graph vis per Katy's suggestions. 3. Made improvements to person level vis front-end. --- doc/install.txt | 17 + example.deploy.properties | 10 + .../visualization/entitycomparison/layout.css | 225 +++++---- .../jquery_plugins/datatable/demo_table.css | 66 +-- .../js/visualization/entitycomparison/util.js | 25 +- .../entityComparisonStandaloneActivator.ftl | 460 +++++++++--------- .../personlevel/coAuthorPersonLevel.ftl | 283 ++++++----- .../personlevel/coPIPersonLevel.ftl | 290 +++++------ 8 files changed, 703 insertions(+), 673 deletions(-) diff --git a/doc/install.txt b/doc/install.txt index d3c9b1bb..7df4c674 100644 --- a/doc/install.txt +++ b/doc/install.txt @@ -164,6 +164,23 @@ example value: defaultAdmin property name: selfEditing.idMatchingProperty example value: http://vivo.mydomain.edu/ns#networkId +NOTE: If you want to use an external authentication system like Shibboleth or +CUWebAuth, you will need to set two additional properties in this file. See +the section below entitled "Using an External Authentication System with VIVO". + + Temporal Graph Visualization is used to compare different + organizations/people within an organization on different parameters + like number of publications, grants. This parameter will be used + as a default in case a URI is not provided. It will be also used + whenever this visualization is to be rendered for top level organization. + In absence of this parameter a SPARQL query will be fired which will + attempt to provide a top level organization.The name of a property + that can be used to associate an Individual with a user account. + When a user logs in with a name that matches the value of this property, + the user will be authorized to edit that Individual. +property name: visualization.topLevelOrg +example value: http://vivo-trunk.indiana.edu/individual/topLevelOrgURI + NOTE: If you want to use an external authentication system like Shibboleth or CUWebAuth, you will need to set two additional properties in this file. See the section below entitled "Using an External Authentication System with VIVO". diff --git a/example.deploy.properties b/example.deploy.properties index 416b29f7..7fc922c6 100644 --- a/example.deploy.properties +++ b/example.deploy.properties @@ -124,3 +124,13 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId # #externalAuth.buttonText = Log in using BearCat Shibboleth #externalAuth.netIdHeaderName = remote_userID + +# +# Temporal Graph Visualization is used to compare different organizations/people +# within an organization on different parameters like number of publications, grants. +# This parameter will be used as a default in case a URI is not provided. It will be +# also used whenever this visualization is to be rendered for top level organization. +# In absence of this parameter a SPARQL query will be fired which will attempt to +# provide a top level organization. + +# visualization.topLevelOrg = http://vivo-trunk.indiana.edu/individual/topLevelOrgURI \ No newline at end of file diff --git a/productMods/css/visualization/entitycomparison/layout.css b/productMods/css/visualization/entitycomparison/layout.css index 8d5ea50b..dcd5714a 100644 --- a/productMods/css/visualization/entitycomparison/layout.css +++ b/productMods/css/visualization/entitycomparison/layout.css @@ -3,67 +3,69 @@ @CHARSET "UTF-8"; head,#body { - font: 0.9em Helvetica; + font: 0.9em Helvetica; } #body { - background-color: #fff; - min-height: 800px; - width: 100%; - min-width: 900px; - margin: auto; + background-color: #fff; + min-height: 800px; + width: 100%; + min-width: 900px; + margin: auto; } h1 { - padding-top: 10px; -/* font-size: 1.5em; */ - margin-left: 5%; + padding-top: 10px; +/* font-size: 1.5em; */ + margin-left: 5%; } h2 { -/* font-size: 1.1em; */ - margin-top: 10px; - margin-bottom: 5px; +/* font-size: 1.1em; */ + margin-top: 10px; + margin-bottom: 5px; } a.temporalGraphLinks { - margin-top: 10px; - float:right; - height: 20px; - text-decoration: none; - width: 30%; - margin: 0 1% 0 1%; - background-color: #EAEAEA; - text-align: center; - padding: 3px; - padding-top: 4px; + margin-top: 10px; + /*float:right;*/ + height: 20px; + text-decoration: none; + width: 30%; + /*margin: 0 1% 0 1%;*/ + background-color: #EAEAEA; + text-align: center; + padding: 3px; + padding-top: 4px; + cursor: pointer; } #reset-search { - color: #2485AE; + color: #2485AE; cursor: pointer; margin-left: 10px; } form{ - margin-top:70px; - margin-bottom: -50px; + margin-top:70px; + margin-bottom: -50px; } -#yaxislabel{ - font-size: 12px; - float:right; - background-color: white; - color:black; - display: block; - height: 150px; - text-align: center; - padding-top: 50px; +#yaxislabel { + font-size: 12px; + float:right; + background-color: white; + color: #595B5B; + display: block; + height: 150px; + text-align: center; + padding-top: 50px; + position: absolute !important; } #xaxislabel{ - font-size: 12px; - margin-top: -5px; - text-align: center; + font-size: 12px; + margin-top: -5px; + text-align: center; } #notification-container { @@ -78,36 +80,47 @@ position: inherit; } #functions{ - margin-top: 20px; - margin-bottom: -40px; + margin-top: 20px; + margin-bottom: -40px; } #bar { - height: 20px; - float: left; - background-color: #fff; - width: 250px; - margin-left: 10px; + height: 20px; + float: left; + background-color: #fff; + width: 250px; + margin-left: 10px; } #checkbox{ - float:left; + float:left; } .easy-deselect-label { - float: left; - font-size: 12px; - width: 160px; - text-align: right; + float: left; + font-size: 12px; + width: 160px; + text-align: right; } .easy-deselect-label a, #text { - text-decoration: none; - color: black; - font-family: Helvetica; - font-size: 1em; + text-decoration: none; + color: black; + font-family: Helvetica; + font-size: 1em; } .easy-deselect-label .entity-label { - color:red; + color:red; +} + +#header-entity-label { + + font-size: 1.1em; + font-weight: bold; + +} + +#header-entity-label a { + color: #13968C; } .ellipsis { @@ -116,9 +129,10 @@ position: inherit; } .entity-label-url { - width: 125px; - margin-right: 10px; - display:inline-block; + width: 125px; + margin-right: 10px; + display:inline-block; + text-decoration: underline; } .ellipsis.multiline { @@ -126,113 +140,116 @@ position: inherit; } #searchresult { - margin-top: 50px; + margin-top: 50px; } #bottom,#graphContainer { - float: right; + /*float: right;*/ } #graphContainer { - margin-bottom: 15px; + margin-bottom: 15px; + width: 450px; + height: 250px; + margin-left: 23px; } #leftblock { - float: left; - margin-left: 5%; - width: 36%; + float: left; + /*margin-left: 5%;*/ + width: 39%; } #text { - margin-left: 5px; + margin-left: 5px; } #searchresult a { - text-decoration: none; - color: black; - font-family: Helvetica; - font-size: 13px; - font-weight: normal; + text-decoration: none; + color: black; + font-family: Helvetica; + font-size: 13px; + font-weight: normal; } #rightblock { - float:right; - margin-right:5%; - width:54%; - margin-top: -43px; + float:right; + margin-right:3%; + width:54%; + margin-top: -43px; } #counter,#total { - color: red; + color: red; } #heading { - margin-top: 10px; + margin-top: 10px; } li{ - padding: 5px; - list-style: none; + padding: 5px; + list-style: none; } #paginatedTable{ - margin-top:0px; + margin-top:0px; } .sDomSearchBar{ - margin-bottom: -10px; - margin-left: 41%; + margin-bottom: -10px; + margin-left: 41%; } .datatablerowhighlight { - background-color: #ECFFB3 !important; + background-color: #ECFFB3 !important; } .datatablerowhighlight td { - font-weight: bold !important; + font-weight: bold !important; } /* .metallic{ - background-color: #212D34; - color: white; + background-color: #212D34; + color: white; } */ #leftUpper{ /* - border: 1px #3D454E solid; - border-top: 10px #3D454E solid; - background-color: #D9D9D9; - - padding-left: 10px; -*/ + border: 1px #3D454E solid; + border-top: 10px #3D454E solid; + background-color: #D9D9D9; + + padding-left: 10px; +*/ } #leftLower{ -/* - border: 1px #3D454E solid; - border-top: 10px #3D454E solid; +/* + border: 1px #3D454E solid; + border-top: 10px #3D454E solid; - padding-left: 10px; - */ + padding-left: 10px; + */ } - + #bottomButtons{ - width: 100%; - float:right; - margin: 20px 0 20px 0; + width: 100%; + float:right; + margin: 20px 0 20px 0; } #stopwordsdiv{ - margin-top: 10px; - margin-left: 10px; + margin-top: 10px; + margin-left: 10px; } p.displayCounter{ - padding-bottom: 4px; - border-bottom: 1px solid gray; + padding-bottom: 4px; + border-bottom: 1px solid gray; } #comparisonHeader, #entityHeader, #entitylevelheading, #comparisonParameter, #headerText{ - color: #2485ae; + color: #2485ae; } \ No newline at end of file diff --git a/productMods/js/visualization/entitycomparison/jquery_plugins/datatable/demo_table.css b/productMods/js/visualization/entitycomparison/jquery_plugins/datatable/demo_table.css index 2b61015d..4205fb95 100644 --- a/productMods/js/visualization/entitycomparison/jquery_plugins/datatable/demo_table.css +++ b/productMods/js/visualization/entitycomparison/jquery_plugins/datatable/demo_table.css @@ -1,85 +1,85 @@ @CHARSET "UTF-8"; thead th, tr.even td{ - background-color: white; + background-color: white; } .paginatedtabs{ -/* border-top: 1px #3D454E solid; */ - text-align: center; - margin-bottom: 10px; - padding-top: 10px; - font-size: 1.2em; +/* border-top: 1px #3D454E solid; */ + text-align: center; + margin-bottom: 10px; + padding-top: 10px; + font-size: 1.2em; } .paginatedtabs span{ - padding-right: 5px; - cursor: pointer; + padding-right: 5px; + cursor: pointer; } .datatablewrapper td, th{ - border-bottom: 1px #F1F2EE solid; - border-right: 1px #F1F2EE solid; - border-left: 1px #F1F2EE solid; - text-align: left; - padding: 5px; - font-size: 10px; + border-bottom: 1px #F1F2EE solid; + border-right: 1px #F1F2EE solid; + border-left: 1px #F1F2EE solid; + text-align: left; + padding: 5px; + font-size: 12px; } .showentries { - text-align: center; - margin-bottom: 10px; + text-align: center; + margin-bottom: 10px; } .searchbar{ - margin-bottom: -10px; - text-align: left; + margin-bottom: -10px; + text-align: left; } .datatablewrapper th{ - border-top: 1px #3D454E solid; - background:#F1F2ee; - font-weight:bold; - font-size:12px; + border-top: 1px #3D454E solid; + background:#F1F2ee; + font-weight:bold; + font-size:12px; } /* .datatablewrapper th{ - border-top: 1px #3D454E solid; - border-bottom: 1px #3D454E solid; - border-right: 1px #3D454E solid; - padding: 5px; + border-top: 1px #3D454E solid; + border-bottom: 1px #3D454E solid; + border-right: 1px #3D454E solid; + padding: 5px; } */ .sorting_asc { - background: url('sort_asc.png') no-repeat center right; + background: url('sort_asc.png') no-repeat center right; } .sorting_desc { - background: url('sort_desc.png') no-repeat center right; + background: url('sort_desc.png') no-repeat center right; } .sorting { - background: url('sort_both.png') no-repeat center right; + background: url('sort_both.png') no-repeat center right; } .sorting_asc_disabled { - background: url('sort_asc_disabled.png') no-repeat center right; + background: url('sort_asc_disabled.png') no-repeat center right; } .sorting_desc_disabled { - background: url('sort_desc_disabled.png') no-repeat center right; + background: url('sort_desc_disabled.png') no-repeat center right; } /* tr.odd { - background-color: #E2E4FF; + background-color: #E2E4FF; } tr.even { - background-color: white; + background-color: white; } */ diff --git a/productMods/js/visualization/entitycomparison/util.js b/productMods/js/visualization/entitycomparison/util.js index 8eaf2842..d40e94ca 100644 --- a/productMods/js/visualization/entitycomparison/util.js +++ b/productMods/js/visualization/entitycomparison/util.js @@ -48,7 +48,6 @@ */ function init(graphContainer) { - $('#yaxislabel').css("color", "#595B5B"); var optionSelected = $("select.comparisonValues option:selected").val(); // TODO: make use of the id on the select field instead of a generic one. $("#comparisonParameter").text("Total Number of " + $("select.comparisonValues option:selected").val()); @@ -395,7 +394,15 @@ function createLegendRow(entity, bottomDiv) { var labelDiv = $('
'); labelDiv.attr('class', 'easy-deselect-label'); labelDiv.html('
'); - labelDiv.append(''); + + /* + * We should display a further drill-down option only when available. In case of people + * there is no drill-down possible, so don't diaply the temporal graph icon. + * */ + if (entity.visMode !== "PERSON") { + labelDiv.append(''); + } + var checkbox = $(''); checkbox.attr('type', 'checkbox'); @@ -456,19 +463,7 @@ function getVIVOURL(entity){ function getTemporalVisURL(entity) { - var result = ''; - - if(entity.visMode == "PERSON"){ - - result = subOrganizationVivoProfileURL + "uri="+ entity.entityURI; - - } else{ - - result = subOrganizationTemporalGraphURL + "&" + - "uri=" + entity.entityURI ; - } - - return result; + return subOrganizationTemporalGraphURL + "&uri=" + entity.entityURI ; } function getVIVOProfileURL(given_uri) { diff --git a/productMods/templates/freemarker/visualization/entitycomparison/entityComparisonStandaloneActivator.ftl b/productMods/templates/freemarker/visualization/entitycomparison/entityComparisonStandaloneActivator.ftl index 06ef22c2..9096ff60 100644 --- a/productMods/templates/freemarker/visualization/entitycomparison/entityComparisonStandaloneActivator.ftl +++ b/productMods/templates/freemarker/visualization/entitycomparison/entityComparisonStandaloneActivator.ftl @@ -81,7 +81,7 @@ <#-- variables passed from server-side code -->
-

-
-
-

How do you want to compare?

- -
- - - -
-
- -
- -

Who do you want to compare?

-
-
-
-<#-- -
- * The entity types core:Person, foaf:Organization have been excluded as they are too general. -
---> -
-
- -

Comparing Publications of Institutions in

-
-
- -
-
Year
- -
- -

- -

You have selected 0 of a maximum 10 schools to compare.

- -
-
+

+ +
+
+

How do you want to compare?

+ +
+ + + +
+
+ +
+ +

Who do you want to compare?

+
+
+ Save as CSV +
+<#-- +
+ * The entity types core:Person, foaf:Organization have been excluded as they are too general. +
+--> +
+ +
+ +

Comparing Publications of Institutions in

+ +
+
+
+
Year
+
+ +
+

+

You have selected 0 of a maximum + 10 schools to compare. + Clear

+ +
+
\ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl index 91ab492d..d261ed0a 100644 --- a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl +++ b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl @@ -66,161 +66,158 @@ var visualizationDataRoot = "${dataVisualizationURLRoot}"; $(document).ready(function(){ - <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) > - $("#coauth_table_container").empty().html(''); - - - processProfileInformation("ego_label", - "ego_moniker", - "ego_profile_image", - jQuery.parseJSON(getWellFormedURLs("${egoURIParam}", "profile_info"))); - - <#if (numOfCoAuthorShips?? && numOfCoAuthorShips <= 0) || (numOfAuthors?? && numOfAuthors <= 0) > - if ($('#ego_label').text().length > 0) { - setProfileName('no_coauthorships_person', $('#ego_label').text()); - } - - + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) > + $("#coauth_table_container").empty().html(''); + + + processProfileInformation("ego_label", + "ego_moniker", + "ego_profile_image", + jQuery.parseJSON(getWellFormedURLs("${egoURIParam}", "profile_info"))); + + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips <= 0) || (numOfAuthors?? && numOfAuthors <= 0) > + if ($('#ego_label').text().length > 0) { + setProfileName('no_coauthorships_person', $('#ego_label').text()); + } + + });
-
- - <#-- Label --> -

- - <#-- Moniker--> - +
+ + <#-- Label --> +

+ + <#-- Moniker--> + -
- arrow iconBack to Profile - -
- -
- +
+
+ +
+ + <#if (numOfAuthors?? && numOfAuthors > 0) > + +

Co-Author Network

+ + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) || (numOfAuthors?? && numOfAuthors > 0) > + + <#else> - <#if numOfAuthors?? && numOfAuthors <= 0 > - <#assign authorsText = "multi-author" /> - - -
Currently there are no ${authorsText!} papers for - this author - in the VIVO database. -
- - - <#else> - - Currently there are no papers for - this author in the - VIVO database. - - - - - <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) || (numOfAuthors?? && numOfAuthors > 0) > - -
-
- -
-
-

Profile

- -
-
- -

 

- - - + <#if numOfAuthors?? && numOfAuthors <= 0 > + <#assign authorsText = "multi-author" /> + + +
Currently there are no ${authorsText!} papers for + this author + in the VIVO database. +
+ + + <#else> + + Currently there are no papers for + this author in the + VIVO database. + + + + + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) || (numOfAuthors?? && numOfAuthors > 0) > + +
+
+ +
+
+

Profile

+ +
+
+ +

 

+ + + -
   - Publication(s)
-
-   Co-author(s)
- - - -
Note: This information is based solely on publications which have been loaded into the VIVO system. - This may only be a small sample of the person's total work.
-
-
-
- - - <#-- Sparkline --> -
- - <#assign displayTable = false /> - - <#assign sparklineVO = egoPubSparklineVO /> -
<#include "personPublicationSparklineContent.ftl">
+
   + Publication(s)
+
+   Co-author(s)
+ + + +
Note: This information is based solely on publications which have been loaded into the VIVO system. + This may only be a small sample of the person's total work.
+
+
+
+ - <#assign sparklineVO = uniqueCoauthorsSparklineVO /> -
<#include "coAuthorshipSparklineContent.ftl">
-
- - <#if (numOfAuthors?? && numOfAuthors > 0) > + <#if (numOfAuthors?? && numOfAuthors > 0) > -
- -

Tables

- -
- -

+ <#-- Sparkline --> +

+ + <#assign displayTable = false /> + + <#assign sparklineVO = egoPubSparklineVO /> +
<#include "personPublicationSparklineContent.ftl">
+ + <#assign sparklineVO = uniqueCoauthorsSparklineVO /> +
<#include "coAuthorshipSparklineContent.ftl">
+
+ +
+ +

Tables

+ +
+ +

- <#assign tableID = "publication_data_table" /> - <#assign tableCaption = "Publications per year " /> - <#assign tableActivityColumnName = "Publications" /> - <#assign tableContent = egoPubSparklineVO.yearToActivityCount /> - <#assign fileDownloadLink = egoPubSparklineVO.downloadDataLink /> - - <#include "yearToActivityCountTable.ftl"> + <#assign tableID = "publication_data_table" /> + <#assign tableCaption = "Publications per year " /> + <#assign tableActivityColumnName = "Publications" /> + <#assign tableContent = egoPubSparklineVO.yearToActivityCount /> + <#assign fileDownloadLink = egoPubSparklineVO.downloadDataLink /> + + <#include "yearToActivityCountTable.ftl"> -

- -
- - <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) > - -
-

-
- - - -
- -
- - - +

+ +
+ + <#if (numOfCoAuthorShips?? && numOfCoAuthorShips > 0) > + +
+

+
+ + + +
+ +
+ + +
\ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl index b36bd4fb..7baae342 100644 --- a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl +++ b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl @@ -63,163 +63,163 @@ var visualizationDataRoot = "${dataVisualizationURLRoot}";
-
- - <#-- Label --> -

- - <#-- Moniker--> - -
- arrow iconBack to Profile - -
- -
- +
+ +
+ + <#if (numOfInvestigators?? && numOfInvestigators > 0) > + +

Co-Investigator Network

+ + <#if (numOfCoInvestigations?? && numOfCoInvestigations > 0) || (numOfInvestigators?? && numOfInvestigators > 0) > + + <#else> - <#if numOfInvestigators?? && numOfInvestigators <= 0 > - <#assign investigatorsText = "multi-investigator" /> - - - Currently there are no ${investigatorsText!} grants for - this investigator - in the VIVO database. - - - - <#else> - - Currently there are no grants for - this investigator in the - VIVO database. - - - - - <#if (numOfCoInvestigations?? && numOfCoInvestigations > 0) || (numOfInvestigators?? && numOfInvestigators > 0) > - -
-
- -
-
-

Profile

- -
-
- -

 

- - - - + <#if numOfInvestigators?? && numOfInvestigators <= 0 > + <#assign investigatorsText = "multi-investigator" /> + + + Currently there are no ${investigatorsText!} grants for + this investigator + in the VIVO database. + + + + <#else> + + Currently there are no grants for + this investigator in the + VIVO database. + + + + + <#if (numOfCoInvestigations?? && numOfCoInvestigations > 0) || (numOfInvestigators?? && numOfInvestigators > 0) > + +
+
+ +
+
+

Profile

+ +
+
+ +

 

+ + + + -
   - Grant(s)
-
-   Co-investigator(s)
- - - -
Note: This information is based solely on grants which have been loaded into the VIVO system. - This may only be a small sample of the person's total work.
-
-
-
- +
   + Grant(s)
+
+   Co-investigator(s)
+ + + +
Note: This information is based solely on grants which have been loaded into the VIVO system. + This may only be a small sample of the person's total work.
+
+
+
+ - <#-- Sparkline --> -
- - <#assign displayTable = false /> - - <#assign sparklineVO = egoGrantSparklineVO /> -
<#include "personGrantSparklineContent.ftl">
- <#assign sparklineVO = uniqueCoInvestigatorsSparklineVO /> -
<#include "coInvestigationSparklineContent.ftl">
-
- - <#if (numOfInvestigators?? && numOfInvestigators > 0) > + <#if (numOfInvestigators?? && numOfInvestigators > 0) > -
- -

Tables

- -
+ <#-- Sparkline --> +
+ + <#assign displayTable = false /> + + <#assign sparklineVO = egoGrantSparklineVO /> +
<#include "personGrantSparklineContent.ftl">
+ + <#assign sparklineVO = uniqueCoInvestigatorsSparklineVO /> +
<#include "coInvestigationSparklineContent.ftl">
+
+ -

+

+ +

Tables

+ +
- <#assign tableID = "grant_data_table" /> - <#assign tableCaption = "Grants per year " /> - <#assign tableActivityColumnName = "Grants" /> - <#assign tableContent = egoGrantSparklineVO.yearToActivityCount /> - <#assign fileDownloadLink = egoGrantSparklineVO.downloadDataLink /> - - <#include "yearToActivityCountTable.ftl"> +

-

- -
- - <#if (numOfCoInvestigations?? && numOfCoInvestigations > 0) > - -
- -

-
- - - -
- -
- - - + <#assign tableID = "grant_data_table" /> + <#assign tableCaption = "Grants per year " /> + <#assign tableActivityColumnName = "Grants" /> + <#assign tableContent = egoGrantSparklineVO.yearToActivityCount /> + <#assign fileDownloadLink = egoGrantSparklineVO.downloadDataLink /> + + <#include "yearToActivityCountTable.ftl"> + +

+ +
+ + <#if (numOfCoInvestigations?? && numOfCoInvestigations > 0) > + +
+ +

+
+ + + +
+ +
+ + +
\ No newline at end of file