more refactoring for multiple profile view support

This commit is contained in:
tworrall 2013-02-08 16:18:01 -05:00
parent 0faa3630c2
commit 867370adb9
26 changed files with 542 additions and 184 deletions

View file

@ -0,0 +1,161 @@
# $This file is distributed under the terms of the license in /doc/license.txt$
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix core: <http://vivoweb.org/ontology/core#> .
@prefix vivoweb: <http://vivoweb.org/ontology#> .
#### queries for departmental pages ####
<http://vivoweb.org/ontology/core#AcademicDepartment> display:hasDataGetter display:getResearchAreaDataGetter .
display:getResearchAreaDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "researchAreaResults";
display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX vivo: <http://vivoweb.org/ontology/core#>
SELECT DISTINCT (str(?researchAreaLabel) AS ?raLabel) ?ra
WHERE {
?individualURI vivo:organizationForPosition ?posn .
?posn vivo:positionForPerson ?person .
?person vivo:hasResearchArea ?ra .
?ra rdfs:label ?researchAreaLabel
}
ORDER BY ?raLabel
""" .
## This is a working example of another type of data getter that can be used. This one retrieves ##
## the organizational memberships (vivo:hasMemberRole) of all the people in an academic department. ##
## You can use this or adapt it to your needs; for example, to display clinical activities of people ##
## in a department. The templates are available for this query and the appropriate freemarker code ##
## is commented out in the individual.ftl and individual--foaf-organization.ftl templates. ##
#<http://vivoweb.org/ontology/core#AcademicDepartment> display:hasDataGetter display:getMembershipsDataGetter .
#
#display:getMembershipsDataGetter
# a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
# display:saveToVar "membershipResults";
# display:query """
# PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
# PREFIX vivo: <http://vivoweb.org/ontology/core#>
# SELECT DISTINCT (str(?organizationLabel) AS ?orgLabel) ?organization
# WHERE {
# ?individualURI vivo:organizationForPosition ?posn .
# ?posn vivo:positionForPerson ?person .
# ?person vivo:hasMemberRole ?mbrRole .
# ?mbrRole vivo:roleContributesTo ?organization.
# ?organization rdfs:label ?organizationLabel
# }
# ORDER BY ?organizationLabel
# """ .
#### detail pages for department links ####
<http://vitro.mannlib.cornell.edu/ns/default#n1697>
a <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter>
<http://vitro.mannlib.cornell.edu/ns/default#n4170> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#requiresBodyTemplate>
"individual-dept-active-grants.ftl" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title>
"Departmental Grants" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping>
"/deptGrants" .
<http://vitro.mannlib.cornell.edu/ns/default#n4170>
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#query>
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX vivo: <http://vivoweb.org/ontology/core#>
PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
SELECT DISTINCT (str (?actLabel) AS ?activityLabel) ?dt (str(?departmentLabel) AS ?deptLabel) ?activity
WHERE {
?individualURI vivo:organizationForPosition ?posn .
?individualURI rdfs:label ?departmentLabel .
?posn vivo:positionForPerson ?person .
?person ?roleProperty ?role .
?roleProperty rdfs:subPropertyOf vivo:hasResearcherRole .
?role vivo:roleContributesTo ?activity .
?activity rdfs:label ?actLabel .
?activity vivo:dateTimeInterval ?dti .
?dti vivo:end ?end.
?end vivo:dateTime ?dt
FILTER (?dt > afn:now())
}
ORDER BY ?activityLabel
""" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#saveToVar>
"deptGrants" .
<http://vitro.mannlib.cornell.edu/ns/default#n5100>
a <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter>
<http://vitro.mannlib.cornell.edu/ns/default#n3450> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#requiresBodyTemplate>
"individual-dept-res-area-details.ftl" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title>
"Departmental Research Areas" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping>
"/deptResearchAreas" .
<http://vitro.mannlib.cornell.edu/ns/default#n3450>
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#query>
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX vivo: <http://vivoweb.org/ontology/core#>
SELECT DISTINCT (str (?prsnLabel) AS ?personLabel) ?person (Str(?researchAreaLabel) AS ?raLabel) (str(?departmentLabel) AS ?deptLabel) ?raURI
WHERE {
?deptURI vivo:organizationForPosition ?posn .
?deptURI rdfs:label ?departmentLabel .
?posn vivo:positionForPerson ?person .
?person rdfs:label ?prsnLabel .
?person vivo:hasResearchArea ?raURI .
?raURI rdfs:label ?researchAreaLabel
}
ORDER BY ?personLabel
""" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#saveToVar>
"deptResearchAreas" .
## This is another part of the departmental memberships working example. This data getter gets called ##
## when a membership organization links is clicked on the academic department page. The template for ##
## this data getter (individual-dept-membership-details.ftl) is included in the VIVO source code. ##
#<http://vitro.mannlib.cornell.edu/ns/default#n1835>
# a <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page> ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter>
# <http://vitro.mannlib.cornell.edu/ns/default#n5312> ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#requiresBodyTemplate>
# "individual-dept-membership-details.ftl" ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title>
# "Departmental Memberships" ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping>
# "/deptMemberships" .
#<http://vitro.mannlib.cornell.edu/ns/default#n5312>
# a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#query>
# """PREFIX vivoc: <http://vivo.library.cornell.edu/ns/0.1#>
# PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
# PREFIX vivo: <http://vivoweb.org/ontology/core#>
# SELECT DISTINCT (str (?prsnLabel) AS ?personLabel) (str (?departmentLabel) AS ?deptLabel) ?person #(str(?organizationLabel) AS ?orgLabel) ?orgURI
# WHERE {
# ?deptURI vivo:organizationForPosition ?posn .
# ?deptURI rdfs:label ?departmentLabel .
# ?posn vivo:positionForPerson ?person .
# ?person rdfs:label ?prsnLabel .
# ?person vivo:hasMemberRole ?role .
# ?role vivo:roleContributesTo ?orgURI .
# ?orgURI rdfs:label ?organizationLabel
# }
# ORDER BY ?personLabel
# """ ;
# <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#saveToVar>
# "deptMemberships" .
#

View file

@ -3,7 +3,7 @@
/* <------ INDIVIDUAL INTRO */
#individual-intro {
margin-top: 15px;
margin-bottom: 0px; /* margin-bottom: 20px; out for redesign*/
margin-bottom: 0px;
position: relative;
overflow: hidden;
}
@ -13,7 +13,7 @@
width: 166px;
float: left;
padding-right: 1.5em;
margin-right: 12px; /* added for redesign */
margin-right: 12px;
margin-bottom: 20px;
}
img.individual-photo {
@ -21,17 +21,22 @@ img.individual-photo {
margin-left: 0;
float: left;
margin-right: 20px;
margin-bottom: 10px; /* changed for redesign, was 20px */
margin-bottom: 10px;
}
ul#phone-list {
font-size:0.9em;
}
ul#individual-phone {
clear: both;
list-style-type: circle;
margin-top:-8px;
}
#primary-email {
margin-top: 0;
}
#primary-email li:last-child, /* added for redesign */
#primary-email li:last-child,
#additional-emails li:last-child {
margin-bottom: 0; /* changed for redesign, was 18px */
margin-bottom: 0;
}
/* <------ INDIVIDUAL INTRO - RIGHT SIDE CONTENT */
@ -54,8 +59,8 @@ div#titleContainer {
margin-top:6px;
}
#individual-info h2 {
padding: 25px 0 10px 0; /* changed for redesign, was padding-bottom: 10px */
clear:both; /* added for redesign */
padding: 25px 0 10px 0;
clear:both;
}
#individual-info h2#contactHeading {
margin-bottom: 8px;
@ -68,7 +73,7 @@ h3.primary-email {
margin-top: -8px !important;
}
#individual-intro.person {
margin-bottom: 0; /* changed for redesign, was 30px */
margin-bottom: 0;
position: relative;
width: 100%;
}
@ -113,29 +118,34 @@ span.iconControlsNotEditable {
top:3px;
}
#overview {
clear: both; /* changed for redesign, was left */
clear: both;
}
/* <------ INDIVIDUAL VISUALIZATION */
#visualization {
padding: 0 0 0 0; /* changed for redesign, was 0 0 0 20px */
background: #fff; /* added for redesign */
width:174px; /* added for redesign */
float:none; /* float:right; out for redesign */
padding: 0 0 0 0;
background: #fff;
width:174px;
float:none;
}
#visualization h3 {
padding-top: 10px;
margin-bottom: 0; /* changed for redesign, was 10px */
margin-bottom: 0;
}
p#networks {
margin-bottom:10px;
}
.collaboratorship-link-separator { /* added for redesign */
.collaboratorship-link-separator {
margin-top: 10px;
border-top: 1px solid #DDE4E3;
padding-top: 10px;
}
.collaboratorship-link-separator-solid {
margin-top: 10px;
border-top: 1px solid #DDE4E3;
padding-top: 10px;
}
.sparkline_text {
font-size: .9em; /* changed for redesign, was .8em */
font-size: .9em;
text-align: left;
line-height: 1.5em;
width: 180px;
@ -143,7 +153,7 @@ p#networks {
span.collaboratorship-link a img{
vertical-align:middle;
}
td#totalPubs { /* added for redesign */
td#totalPubs {
font-size: 1.35em;
background: url(../../images/individual/pub-total-bkgrnd.png) top left no-repeat;
text-align:center;
@ -151,7 +161,7 @@ td#totalPubs { /* added for redesign */
width:48px;
height:48px;
}
td#tenYearCount { /* added for redesign */
td#tenYearCount {
font-size: .85em;
padding-left:10px;
vertical-align:middle;
@ -166,37 +176,37 @@ div#pub_count_short_sparkline_vis {
}
/* <------ INDIVIDUAL TEMPORAL GRAPH */
#temporal-graph {
padding: 0 3px 8px 0; /* changed for redesign, was 0 3px 20px 0 */
padding: 0 3px 8px 0;
background-color: #fff;
margin-top: -4px; /* added for redesign */
margin-top: -4px;
}
#temporal-graph h3 img {
padding-right: 10px;
vertical-align: middle; /* changed for redesign, was text-top */
vertical-align: middle;
}
/* <------ INDIVIDUAL MAP O' SCIENCE */
#map-of-science {
padding: 0 3px 24px 0; /* changed for redesign, was 0 3px 20x 0 */
padding: 0 3px 24px 0;
background-color: #fff;
}
#map-of-science h3 img {
padding-right: 10px;
vertical-align: middle; /* changed for redesign, was text-top */
vertical-align: middle;
}
/* <------ POSITIONS */
ul#individual-personInPosition {
list-style-type: circle;
padding-left: 10px; /* changed for redesign, was 20px */
margin: 10px 0 0 0; /* added for redesign */
padding-left: 10px;
margin: 10px 0 0 0;
}
ul#individual-personInPosition li {
line-height: 1em;
padding-bottom:10px; /* changed for redesign, was 15px */
padding-bottom:10px;
}
ul#individual-personInPosition li:last-child {
padding-bottom: 3px; /* changed for redesign, was 15px */
padding-bottom: 3px;
}
/* <------ CONTACTS AND WEBPAGES */
@ -235,8 +245,8 @@ div#contactPhoneDiv {
ul#individual-hasResearchArea li {
float: left;
padding-right: 10px;
margin-right: 10px; /* added for redesign */
padding-left: 0; /* padding-left: 10px; out for redesign */
margin-right: 10px;
padding-left: 0;
border-right: 1px solid #5e6363;
}
h2#researchAreas {
@ -245,21 +255,22 @@ h2#researchAreas {
/* <------ QR Code */
span#qrCodeImage {
position: absolute;
top: 30px; /* changed for redesign, was -9em */
left: -120px !important; /* added for redesign */
width:180px; /* added for redesign */
top: 30px;
left: -120px !important;
width:180px;
border: solid 2px #ccc;
background: #fff; /* changed for redesign, was #fff */
text-align:middle; /* added for redesign */
background: #fff;
text-align:middle;
overflow:visible;
z-index:1000;
}
span#qrCodeImage img {
padding: 1.7em 1.7em 0 1.7em; /* changed for redesign, was 1.7em 1.7 em 0 1.7 em */
padding: 1.7em 1.7em 0 1.7em;
}
a.qrCloseLink {
float: right;
padding-right: 1em; /* added for redesign */
margin-right: 0; /* margin-right: .5em out for redesign */
padding-right: 1em;
margin-right: 0;
font-size: .8em;
}
/* MISCELLANEOUS------> */
@ -270,8 +281,7 @@ span#quickViewLink {
span#quickViewLink img {
margin-top:35px;
}
a#manageLabels { /* added for redesign but will work with existing templates */
a#manageLabels {
margin-left:20px;
font-size:0.7em;
}

View file

@ -70,21 +70,20 @@ h2#preferredTitle {
/* <------ QR Code */
span#qrCodeImage {
position: absolute;
top: 30px; /* changed for redesign, was -9em */
left: 76% !important; /* added for redesign */
width:180px; /* added for redesign */
top: 30px;
left: 76% !important;
width:180px;
border: solid 2px #ccc;
background: #fff; /* changed for redesign, was #fff */
text-align:middle; /* added for redesign */
background: #fff;
text-align:middle;
overflow:visible;
}
span#qrCodeImage img {
padding: 1.7em 1.7em 0 1.7em; /* changed for redesign, was 1.7em 1.7 em 0 1.7 em */
padding: 1.7em 1.7em 0 1.7em;
}
/* <----- WEBPAGE CONTENT LEFT SIDE -----> */
.edit-mainImage {
position: absolute;
/* background: rgba(255, 255, 255, 0.6); */
padding: 0 0 0 0;
top: 44px;
left: 0;
@ -93,7 +92,6 @@ span#qrCodeImage img {
position: absolute;
top: 44px;
left: 26px;
/* background: rgba(255, 255, 255, 0.6); */
padding: 0 0 0 8px;
}
div#webpage-wrapper {
@ -204,14 +202,14 @@ ul#individual-visualization li:last-child {
/* <------ POSITIONS ------> */
ul#individual-personInPosition {
list-style-type: circle;
padding-left: 10px; /* changed for redesign, was 20px */
margin: 10px 0 0 0; /* added for redesign */
padding-left: 10px;
margin: 10px 0 0 0;
}
ul#individual-hasResearchArea li {
float: left;
padding-right: 10px;
margin-right: 10px; /* added for redesign */
padding-left: 0; /* padding-left: 10px; out for redesign */
margin-right: 10px;
padding-left: 0;
border-right: 1px solid #5e6363 ;
white-space:nowrap !important;
}
@ -252,6 +250,6 @@ ul#individual-personInPosition li:last-child {
padding-bottom: 0;
}
#individual-info h2 {
padding: 25px 0 10px 0; /* changed for redesign, was padding-bottom: 10px */
clear:both; /* added for redesign */
padding: 25px 0 10px 0;
clear:both;
}

View file

@ -13,7 +13,7 @@ ul#individual-tools li {
}
ul#individual-phone {
clear: both;
list-style-type: circle;
list-style: circle outside url(../../images/phoneIconSmall.gif);
margin-left: 15px;
}
ul#individual-phone li {
@ -24,14 +24,18 @@ ul#individual-phone li:last-child {
margin-bottom: 10px;
}
ul#individual-phone li:first-child {
margin-top: 10px;
margin-top: -4px;
}
.icon-phone, .icon-email {
padding-right: 2px;
}
#individual-intro.person ul.individual-urls {
list-style-type: circle;
margin: 0 0 0 15px;
}
#individual-intro ul.individual-urls {
list-style-type: circle;
margin-left: 15px;
margin: 0 0 15px 15px;
}
#individual-intro ul.individual-urls li {
font-size: .875em;
@ -41,7 +45,7 @@ ul#individual-phone li:first-child {
ul.individual-emails {
clear: both;
padding-left: 0;
list-style-type: circle;
list-style: circle outside url(../../images/emailIconSmall.gif);
margin-left: 20px;
}
#additional-emails li:last-child {
@ -49,13 +53,8 @@ ul.individual-emails {
}
ul.individual-emails li {
font-size: .875em;
line-height: 1.5em;
}
ul#individual-phone {
list-style: url(../../images/phoneIconSmall.gif);
}
ul.individual-emails {
list-style: url(../../images/emailIconSmall.gif);
line-height: 1.2em;
padding-bottom: 6px;
}
ul#webpages{
margin-bottom: 5px;
@ -73,12 +72,15 @@ ul#additional-emails li {
width: 78%;
}
#individual-intro .individual-overview {
/* margin-bottom: 10px;
margin-top: 10px; */
margin: 0;
display: inline;
clear: both;
float: left;
float: none;
}
div#activeGrantsLink {
float:right;
clear:right;
margin-bottom: 25px;
}
/* <------ INDIVIDUAL INTRO FOR PERSON*/
#individual-intro.person {
@ -96,10 +98,7 @@ ul#additional-emails li {
float: none;
}
div#individual-tools-people {
height: 20px;
padding-bottom: 24px;
clear: both;
margin-bottom: 15px;
float: right;
}
ul#individual-tools-people li {
position: relative;
@ -119,7 +118,7 @@ ul.individual-urls-people li {
}
/* <------ INDIVIDUAL CORE:OVERVIEW */
#overview {
clear: both;
/* clear: both; */
}
.overview-value {
display: inline;
@ -185,7 +184,7 @@ p.view-all-coauthors {
/* <------ INDIVIDUAL MAP O' SCIENCE */
#map-of-science {
padding: 0 3px 20px 0;
padding: 0 29px 20px 0;
background-color: #fff;
}
#map-of-science h3 {
@ -210,15 +209,18 @@ ul#individual-personInPosition li:last-child {
}
/* <------ RESEARCH AREA */
ul#individual-hasResearchArea {
padding-bottom: 24px;
}
ul#individual-hasResearchArea li {
float: left;
padding-right: 10px;
margin-right: 10px;
border-right: 1px solid #5e6363;
}
ul#individual-facultyMemberships li {
float: left;
padding-right: 10px;
margin-right: 10px;
border-right: 1px solid #5e6363;
}
/* <------ QR Code */
h5.qrCode {
margin-top: 1em;
@ -226,20 +228,24 @@ h5.qrCode {
}
span#qrCodeImage {
position: absolute;
top: -9em;
left: 2em;
border: solid 1px #ccc;
background: white;
top: 27px;
left: 175px !important;
width:180px;
border: solid 2px #ccc;
background: #fff;
text-align:middle;
overflow:visible;
z-index:1000;
}
span#qrCodeImage img {
padding: 1.7em 1.7em 0 1.7em;
padding: 1.7em 1.7em 0 1.7em;
}
a.qrCloseLink {
float: right;
margin-right: .5em;
float: right;
padding-right: 1em;
margin-right: 0;
font-size: .8em;
}
/* MISCELLANEOUS------> */
}/* MISCELLANEOUS------> */
.listDateTime {
padding: 0 0.4em;
font-size: 0.8em;
@ -254,10 +260,10 @@ a.manageLinks {
/* individual-vivo.css merger ------> */
#individual-info h2#overview {
padding-bottom: 0;
padding-top: 20px;
/* padding-top: 20px; */
}
ul#individual-webpage li:first-child {
padding: 0 0 0 0;
padding: 0 0 5px 0;
}
ul.webpages-withThumbnails li:nth-child(2) {
padding: 105px 0 0 15px;
@ -268,7 +274,12 @@ ul.webpages-withThumbnails li {
float:left;
}
h2#facultyResearchAreas {
clear:both;
clear:left;
padding-bottom:3px;
padding-top:25px
}
h2#facultyMemberships {
clear:left;
padding-bottom:3px;
padding-top:25px
}

View file

@ -44,9 +44,9 @@ span.incomplete-data-holder,
width: 180px;
}
.collaboratorship-link-separator {
margin-top: 20px;
margin-top: 15px;
border-top: 1px dotted #A6B1B0;
padding-top: 20px;
padding-top: 15px;
}
.sparkline_text, .grey-text {
font-size: .9em;

View file

@ -4,6 +4,12 @@ $(document).ready(function(){
$.extend(this, individualLocalName);
// ensures proper layout when an organization has its webpage link displayed as a thumnail.
if ( $('ul.webpages-withThumnails') ) {
$('div.individual-overview').css("float","left");
$('div#activeGrantsLink').css("margin-top","30px");
$('section#individual-info').children('h2#overview').css("clear","both");
}
// "more"/"less" HTML truncator for showing more or less content in data property core:overview
$('.overview-value').truncate({max_length: 500});

View file

@ -3,13 +3,34 @@
<#-- Individual profile page template for foaf:Organization individuals (extends individual.ftl in vivo)-->
<#-- Do not show the link for temporal visualization unless it's enabled -->
<#if temporalVisualizationEnabled>
<#assign classSpecificExtension>
<section id="right-hand-column" role="region">
<#include "individual-visualizationTemporalGraph.ftl">
<#include "individual-visualizationMapOfScience.ftl">
</section> <!-- #visualization -->
</section> <!-- #right-hand-column -->
</#assign>
</#if>
<#include "individual.ftl">
<#if individual.mostSpecificTypes?seq_contains("Academic Department")>
<#assign departmentalGrantsExtension>
<div id="activeGrantsLink">
<img src="${urls.base}/images/individual/arrow-green.gif">
<a href="${urls.base}/deptGrants?individualURI=${individual.uri}">
View all active grants
</a>
</div>
</#assign>
<#assign departmentalResearchAreas>
<#include "individual-dept-research-areas.ftl">
</#assign>
<#assign departmentalMemberships>
<#include "individual-dept-memberships.ftl">
</#assign>
</#if>
<#include "individual.ftl">

View file

@ -10,6 +10,8 @@
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<#assign qrCodeIcon = "qr-code-icon.png">
<#assign visRequestingTemplate = "foaf-person-2column">
<section id="individual-intro" class="vcard person" role="region">
<section id="share-contact" role="region">
<#-- Image -->
@ -58,12 +60,13 @@
<@p.mostSpecificTypesPerson individual editable/>
</#if>
</#if>
<span class="<#if editable>iconControlsEditable<#else>iconControlsNotEditable</#if>">
<span id="iconControlsRightSide" class="<#if editable>iconControlsEditable<#else>iconControlsNotEditable</#if>">
<#include "individual-iconControls.ftl">
</span>
<#if editable && profilePageTypesEnabled >
<div id="profileTypeContainer">
<h2>Profile type</h2>
<!-- The text in this h2 element is set via the wilma.css file -->
<h2></h2>
<select id="profilePageType">
<option value="standard" <#if profileType == "standard" || profileType == "none">selected</#if> >Standard profile view</option>
<option value="quickView" <#if profileType == "quickView">selected</#if> >Quick profile view</option>
@ -84,7 +87,6 @@
<#include "individual-researchAreas.ftl">
<!-- Contact and Webpages -->
<!-- VIVO Cornell does not use the contacts properties, so that include has been removed. -->
<div id="contactsWebpages">
<div id="contactContainer" >
<#include "individual-contactInfo-2column.ftl">
@ -162,7 +164,6 @@ ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/indi
${headScripts.add('<script type="text/javascript" src="${urls.base}/js/tiny_mce/tiny_mce.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery_plugins/qtip/jquery.qtip-1.0.0-rc3.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/amplify/amplify.store.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/json2.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.truncator.js"></script>')}

View file

@ -12,7 +12,7 @@
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<#assign qrCodeIcon = "qr-code-icon.png">
<#assign individualImage>
<@p.image individual=individual
propertyGroups=propertyGroups
@ -76,12 +76,13 @@
</section> <!-- end label-title -->
<#include "individual-adminPanel.ftl">
<span class="<#if editable >iconControlsEditable<#else>iconControlsNotEditable</#if>">
<span id="iconControlsRightSide" class="<#if editable >iconControlsEditable<#else>iconControlsNotEditable</#if>">
<#include "individual-iconControls.ftl">
</span>
<#if editable && profilePageTypesEnabled >
<div id="profileTypeContainer" <#if editable>style="margin-top:22px"</#if>>
<h2>Profile type</h2>
<!-- The text in this h2 element is set via the wilma.css file -->
<h2></h2>
<select id="profilePageType">
<option value="standard" <#if profileType == "standard" || profileType == "none">selected</#if> >Standard profile view</option>
<option value="quickView" <#if profileType == "quickView">selected</#if> >Quick profile view</option>

View file

@ -8,17 +8,25 @@
<#assign individualProductExtension>
<#-- Include for any class specific template additions -->
${classSpecificExtension!}
${departmentalGrantsExtension!}
<!--PREINDIVIDUAL OVERVIEW.FTL-->
<#include "individual-webpage.ftl">
<#include "individual-overview.ftl">
${departmentalResearchAreas!}
${departmentalMemberships!}
</section> <!-- #individual-info -->
</section> <!-- #individual-intro -->
<!--postindiviudal overiew tfl-->
<!--postindividual overview ftl-->
</#assign>
<#include "individual-vitro.ftl">
<script>
var individualLocalName = "${individual.localName}";
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />')}
${headScripts.add('<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.truncator.js"></script>')}
${headScripts.add('<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.truncator.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/json2.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>')}

View file

@ -6,8 +6,8 @@
<#assign primaryEmail = propertyGroups.pullProperty("${core}primaryEmail")!>
<#assign addlEmail = propertyGroups.pullProperty("${core}email")!>
<#if !editable && (phone?has_content || primaryEmail?has_content || addlEmail?has_content) >
<ul style="font-size:0.9em;padding-bottom:4px"><li><strong>Contact Info</strong></li></ul>
<#if phone?has_content || primaryEmail?has_content || addlEmail?has_content >
<ul style="font-size:1em;padding-bottom:4px"><li><strong>Contact Info</strong></li></ul>
</#if>
<#-- Primary Email -->
@ -21,10 +21,10 @@
<#if phone?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel phone editable />
<#if phone.statements?has_content> <#-- if there are any statements -->
<ul id="individual-phone" role="list">
<ul id="individual-phone" role="list" <#if editable>style="list-style:none;margin-left:0;"</#if>>
<#list phone.statements as statement>
<li role="listitem">
<#-- <img class ="icon-phone middle" src="${urls.images}/individual/phoneIcon.gif" alt="phone icon"/> -->${statement.value}
<li role="listitem">
${statement.value}
<@p.editingLinks "${phone.localName}" statement editable />
</li>
</#list>
@ -43,10 +43,9 @@
<#if email?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel email editable label/>
<#if email.statements?has_content> <#-- if there are any statements -->
<ul id="${listId}" class="individual-emails" role="list">
<ul id="${listId}" class="individual-emails" role="list" <#if editable>style="list-style:none;margin-left:0;"</#if>>
<#list email.statements as statement>
<li role="listitem">
<#-- <img class ="icon-email middle" src="${urls.images}/individual/emailIcon.gif" alt="email icon"/> -->
<a class="email" href="mailto:${statement.value}" title="email">${statement.value}</a>
<@p.editingLinks "${email.localName}" statement editable />
</li>

View file

@ -0,0 +1,32 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#import "lib-datetime.ftl" as dt>
<#if deptGrants?has_content>
<section id="pageList">
<#list deptGrants as firstRow>
<h2>Active Grants for ${firstRow["deptLabel"]}</h2>
<#break>
</#list>
<table id="pageList" >
<tr>
<th>Grant Name</th>
<th>Close Date</th>
</tr>
<#list deptGrants as resultRow>
<tr>
<td><a href="${urls.base}/individual${resultRow["activity"]?substring(resultRow["activity"]?last_index_of("/"))}">${resultRow["activityLabel"]}</a></td>
<td>${dt.formatXsdDateTimeShort(resultRow["dt"], "yearMonthDayPrecision")}</td>
</tr>
</#list>
</table>
<#else>
There are currently no active grants for this department.
</#if>
</section>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/menupage/pageList.css" />')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>')}

View file

@ -0,0 +1,26 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#if deptMemberships?has_content>
<section id="pageList">
<#list deptMemberships as firstRow>
<div class="tab">
<h2>${firstRow["orgLabel"]}</h2>
<p>Here are the faculty in the ${firstRow["deptLabel"]} department who are members of this organization. <a href="${urls.base}/display${firstRow["orgURI"]?substring(firstRow["orgURI"]?last_index_of("/"))}" title="view all cornell faculty">View all the members of this organization.</a></p>
</div>
<#break>
</#list>
<section id="deptGraduateFields">
<ul role="list" class="deptDetailsList">
<#list deptMemberships as resultRow>
<li class="deptDetailsListItem">
<a href="${urls.base}/individual${resultRow["person"]?substring(resultRow["person"]?last_index_of("/"))}">${resultRow["personLabel"]}</a>
</li>
</#list>
</ul>
</section>
</#if>
</section>

View file

@ -0,0 +1,15 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#if membershipResults?has_content>
<h2 id="facultyMemberships" class="mainPropGroup">Faculty Memberships</h2>
<#assign numberRows = membershipResults?size/>
<ul id="individual-facultyMemberships" role="list">
<#list membershipResults as resultRow>
<li class="raLink">
<a class="raLink" href="${urls.base}/deptGradFields?deptURI=${individual.uri}&actURI=${resultRow["activity"]}">
${resultRow["actLabel"]}
</a>
</li>
</#list>
</ul>
</#if>

View file

@ -0,0 +1,24 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#if deptResearchAreas?has_content>
<section id="pageList">
<#list deptResearchAreas as firstRow>
<div class="tab">
<h2>${firstRow["raLabel"]}</h2>
<p>Here are the faculty in the ${firstRow["deptLabel"]} department who have an interest in this research area. <a href="${urls.base}/display${firstRow["raURI"]?substring(firstRow["raURI"]?last_index_of("/"))}">View all Cornell faculty with an interest in this area.</a></p>
</div>
<#break>
</#list>
<section id="deptResearchAreas">
<ul role="list" class="deptDetailsList">
<#list deptResearchAreas as resultRow>
<li class="deptDetailsListItem">
<a href="${urls.base}/individual${resultRow["person"]?substring(resultRow["person"]?last_index_of("/"))}">${resultRow["personLabel"]}</a>
</li>
</#list>
</ul>
</section>
</#if>
</section>

View file

@ -0,0 +1,45 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#if researchAreaResults?has_content>
<h2 id="facultyResearchAreas" class="mainPropGroup">
Faculty Research Areas
</h2>
<#assign numberRows = researchAreaResults?size/>
<ul id="individual-hasResearchArea" role="list">
<#assign totalLength = 0 >
<#assign moreDisplayed = false>
<#list researchAreaResults as resultRow>
<#if ( totalLength > 380 ) && !moreDisplayed >
<li id="raMoreContainer" style="border:none">(...<a id="raMore" href="javascript:">more</a>)</li>
<li class="raLinkMore" style="display:none">
<#assign moreDisplayed = true>
<#elseif ( totalLength > 380 ) && moreDisplayed >
<li class="raLinkMore" style="display:none">
<#else>
<li class="raLink">
</#if>
<a class="raLink" href="${urls.base}/deptResearchAreas?deptURI=${individual.uri}&raURI=${resultRow["ra"]}">
${resultRow["raLabel"]}
</a>
</li>
<#assign totalLength = totalLength + resultRow["raLabel"]?length >
</#list>
<#if ( totalLength > 380 ) ><li id="raLessContainer" style="display:none">(<a id="raLess" href="javascript:">less</a>)</li></#if>
</ul>
</#if>
<script>
$('a#raMore').click(function() {
$('li.raLinkMore').each(function() {
$(this).show();
});
$('li#raMoreContainer').hide();
$('li#raLessContainer').show();
});
$('a#raLess').click(function() {
$('li.raLinkMore').each(function() {
$(this).hide();
});
$('li#raMoreContainer').show();
$('li#raLessContainer').hide();
});
</script>

View file

@ -1,10 +1,9 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Icon controls displayed in upper-right corner -->
<#-- CU directory link -->
<#assign netid = individual.selfEditingId()!>
<img id="uriIcon" title="${individual.uri}" src="${urls.images}/individual/share-uri-icon.png" alt="share the uri" />
<@qr.renderCode />
<@qr.renderCode qrCodeIcon />
<#--
@ -12,6 +11,7 @@ Some contact information is displayed on the profile page by default; e.g., phon
has an additional location for contact info, such as a university directory, a third "contact" icon is available that can be used
to direct users to that directory. The <a> tag below shows an example using Cornell University's directory.
<#assign netid = individual.selfEditingId()!>
<#if netid?has_content>
<a href="http://www.cornell.edu/search/?tab=people&netid=${netid}" title="Cornell University directory entry for ${netid}" target="_blank">
<img src="${urls.images}/individual/contact-info-icon.png" title="view additional contact information" alt="contact info" />

View file

@ -1,40 +0,0 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for property listing on individual profile page -->
<#list group.properties as property>
<article class="property" role="article">
<#-- Property display name -->
<#if property.localName == "authorInAuthorship" && editable >
<h3 id="${property.localName}">${property.name} <@p.addLink property editable /> <@p.verboseDisplay property />
<a id="managePubLink" class="manageLinks" href="${urls.base}/managePublications?subjectUri=${subjectUri[1]!}" title="manage publications" <#if verbose>style="padding-top:10px"</#if> >
manage publications
</a>
</h3>
<#elseif property.localName == "hasResearcherRole" && editable >
<h3 id="${property.localName}">${property.name} <@p.addLink property editable /> <@p.verboseDisplay property />
<a id="manageGrantLink" class="manageLinks" href="${urls.base}/manageGrants?subjectUri=${subjectUri[1]!}" title="manage grants & projects" <#if verbose>style="padding-top:10px"</#if> >
manage grants & projects
</a>
</h3>
<#elseif property.localName == "organizationForPosition" && editable >
<h3 id="${property.localName}">${property.name} <@p.addLink property editable /> <@p.verboseDisplay property />
<a id="managePeopleLink" class="manageLinks" href="${urls.base}/managePeople?subjectUri=${subjectUri[1]!}" title="manage people" <#if verbose>style="padding-top:10px"</#if> >
manage affiliated people
</a>
</h3>
<#else>
<h3 id="${property.localName}">${property.name} <@p.addLink property editable /> <@p.verboseDisplay property /> </h3>
</#if>
<#-- List the statements for each property -->
<ul class="property-list" role="list" id="${property.localName}List">
<#-- data property -->
<#if property.type == "data">
<@p.dataPropertyList property editable />
<#-- object property -->
<#else>
<@p.objectProperty property editable />
</#if>
</ul>
</article> <!-- end property -->
</#list>

View file

@ -25,7 +25,11 @@
* setting the display to "full" will render a full-size QR code (<@renderCode display="full" />)
* the size can be set using the width parameter (default is 125px)
-->
<#macro renderCode display="icon" width="125">
<#--
added the imageFile parameter because a different icon is used for the wilma theme (qr_icon.png)
than is used for the 2 column and quick views (qr-code-icon.png).
-->
<#macro renderCode imageFile display="icon" width="125">
<#if hasValidVCard()>
<#local qrData = individual.qrData()>
<#local qrCodeLinkedImage><a title="Export QR codes" href="${qrData.exportQrCodeUrl}" title="QR Code"><@qrCodeVCard qrCodeWidth=width /></a></#local>
@ -34,10 +38,8 @@
<h5 class="qrCode">vCard QR</h5>
${qrCodeLinkedImage}
<#elseif (display == "icon")>
<#-- <li role="listitem"> -->
<a id="qrIcon" title="vCard QR Code" href="${qrData.exportQrCodeUrl}" title="QR Code"><img src="${urls.images}/individual/qr-code-icon.png<#-- qr_icon.png -->" alt="qr icon" /></a>
<a id="qrIcon" title="vCard QR Code" href="${qrData.exportQrCodeUrl}" title="QR Code"><img src="${urls.images}/individual/${imageFile!}" alt="qr icon" /></a>
<span id="qrCodeImage" class="hidden">${qrCodeLinkedImage} <a class="qrCloseLink" href="#" title="QR Code">Close</a></span>
<#-- </li> -->
<#else>
<p class="notice">You have passed an invalid value for the qrCode display parameter.</p>
</#if>

View file

@ -50,7 +50,7 @@
'<script type="text/javascript" src="${urls.base}/js/visualization/sparkline.js"></script>')}
<script type="text/javascript">
var visualizationUrl = '${urls.base}/visualizationAjax?uri=${individual.uri?url}';
var visualizationUrl = '${urls.base}/visualizationAjax?uri=${individual.uri?url}&template=${visRequestingTemplate!}';
var infoIconSrc = '${urls.images}/iconInfo.png';
</script>

View file

@ -0,0 +1,26 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Default VIVO individual profile page template (extends individual.ftl in vitro) -->
<#include "individual-setup.ftl">
<#import "lib-vivo-properties.ftl" as vp>
<#assign individualProductExtension>
<#-- Include for any class specific template additions -->
${classSpecificExtension!}
${departmentalGrantsExtension!}
<!--PREINDIVIDUAL OVERVIEW.FTL-->
<#include "individual-webpage.ftl">
<#include "individual-overview.ftl">
${departmentalResearchAreas!}
</section> <!-- #individual-info -->
</section> <!-- #individual-intro -->
<!--postindiviudal overiew tfl-->
</#assign>
<#include "individual-vitro.ftl">
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />')}
${headScripts.add('<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.truncator.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>')}

View file

@ -1,19 +1,19 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#--
There are two templates for displaying publication information on foaf person pages.
- personPublicationSparklineContent.ftl
- personPublicationCountNoSparkline.ftl
- personPublicationSparklineContent.ftl, which shows the actual sparkline
- personPublicationCountNoSparkline.ftl, which shows on counts and not the sparkline
The first is the template use with the Wilma theme and the individual--foaf-person.ftl
template. The second is used with the individual--foaf-person-2column.ftl template.
Update the include statement below to use the correct "sparkline" template for your
foaf person template.
-->
<#if shouldVIVOrenderVis>
<#include "personPublicationSparklineContent.ftl">
<#-- Added requestingTemplate variable in release 1.6 to support multi-view option -->
<#if requestingTemplate = "foaf-person-wilma" >
<#include "personPublicationSparklineContent.ftl">
<#else>
<#include "personPublicationCountNoSparkline.ftl">
</#if>
</#if>

View file

@ -53,6 +53,7 @@ public class VisualizationFrameworkConstants {
public static final String VIS_MODE_KEY = "vis_mode";
public static final String RENDER_MODE_KEY = "render_mode";
public static final String OUTPUT_FORMAT_KEY = "output";
public static final String REQUESTING_TEMPLATE_KEY = "template"; /* tlw72 - added in 1.6 for multi-view support */
/*
* These values represent possible render modes.

View file

@ -59,6 +59,13 @@ VisualizationRequestHandler {
.getParameter(
VisualizationFrameworkConstants.VIS_CONTAINER_KEY);
/* tlw72 -- Added in 1.6 for multi-view support. There are now two different "sparkline" templates */
/* and the one that gets loaded depends on which foaf person template is being used by the app. The */
/* personPublicationCountDynamicActivator.ftl template needs to know which is the requesting template. */
String requestingTemplate = vitroRequest
.getParameter(
VisualizationFrameworkConstants.REQUESTING_TEMPLATE_KEY);
QueryRunner<Set<Activity>> queryManager = new PersonPublicationCountQueryRunner(
personURI,
dataset,
@ -91,7 +98,7 @@ VisualizationRequestHandler {
SparklineData sparklineData = visualizationCodeGenerator.getValueObjectContainer();
return prepareDynamicResponse(vitroRequest, sparklineData,
shouldVIVOrenderVis);
shouldVIVOrenderVis, requestingTemplate);
}
@ -273,13 +280,14 @@ VisualizationRequestHandler {
* @return
*/
private TemplateResponseValues prepareDynamicResponse(VitroRequest vreq,
SparklineData valueObjectContainer, boolean shouldVIVOrenderVis) {
SparklineData valueObjectContainer, boolean shouldVIVOrenderVis, String requestingTemplate) {
String dynamicTemplate = "personPublicationCountDynamicActivator.ftl";
Map<String, Object> body = new HashMap<String, Object>();
body.put("sparklineVO", valueObjectContainer);
body.put("shouldVIVOrenderVis", shouldVIVOrenderVis);
body.put("requestingTemplate", requestingTemplate); /* tlw72 -- Added in 1.6 for multi-view support.*/
return new TemplateResponseValues(dynamicTemplate, body);

View file

@ -1276,6 +1276,9 @@ ul#individual-tools {
h2#mainImage, #share-contact h2 {
color: #5E6363;
}
h2#webpage {
font-weight: bold;
}
/* INDIVIDUAL INTRO - LEFT SIDE CONTENT ------> */
img.individual-photo {
border: 7px solid #ebebeb;
@ -1284,11 +1287,6 @@ img.individual-photo {
padding-top: .8em;
display: block;
}
div#individual-tools-people {
border-bottom: 1px dotted #A6B1B0; /* #e8ece9; */
color: #b2d15a;
text-align:right;
}
ul#individual-tools-people li a {
color: #b2d15a;
}
@ -1305,7 +1303,7 @@ ul#individual-tools li a {
color: #5f6464;
}
ul.individual-urls {
list-style: url(../../../images/individual/arrow-grey.gif);
list-style: url(../../../images/individual/arrow-green.gif);
}
ul.individual-urls li {
font-size: .875em;
@ -1326,7 +1324,7 @@ ul.individual-urls-people li a {
}
#individual-info h1.fn {
font-size: 1.375em;
color: #2485ae;
color: #595B5B;
line-height: 1.3em;
}
h1.fn .display-title {
@ -1359,17 +1357,17 @@ ul#individual-personInPosition li a {
padding-top: 10px;
width: 100%;
}
ul#individual-hasResearchArea {
padding-bottom: 24px;
}
ul#individual-hasResearchArea li {
border-right: 1px solid #A6B1B0;
}
ul#individual-hasResearchArea li:last-child {
border-right: none;
}
ul#individual-hasResearchArea li a {
color: #2485ae;
ul#individual-facultyMemberships li {
border-right: 1px solid #A6B1B0;
}
ul#individual-facultyMemberships li:last-child {
border-right: none;
}
/* INDIVIDUAL VISUALIZATION ------> */
#right-hand-column h3 {
@ -1488,7 +1486,9 @@ input[type="submit"] {
.edit-individual {
border-left: 1px dotted #B2D15A;
}
div#profileTypeContainer h2:after {
content:"Profile Type";
}
/* -------------------------------------------------> */
/* SITE ADMIN DASHBOARD ----------------------------> */
/* -------------------------------------------------> */

View file

@ -11,6 +11,7 @@
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<#assign visRequestingTemplate = "foaf-person-wilma">
<section id="individual-intro" class="vcard person" role="region">
<section id="share-contact" role="region">
@ -29,6 +30,12 @@
<div id="photo-wrapper">${individualImage}</div>
<!-- Contact Info -->
<div id="individual-tools-people">
<span id="iconControlsLeftSide">
<img id="uriIcon" title="${individual.uri}" src="${urls.images}/individual/uriIcon.gif" alt="uri icon"/>
<@qr.renderCode "qr_icon.png" />
</span>
</div>
<#include "individual-contactInfo.ftl">
<!-- Websites -->
@ -37,10 +44,6 @@
<section id="individual-info" ${infoClass!} role="region">
<section id="right-hand-column" role="region">
<div id="individual-tools-people">
<img id="uriIcon" title="${individual.uri}" src="${urls.images}/individual/share-uri-icon.png" alt="uri icon"/>
<@qr.renderCode />
</div>
<#include "individual-visualizationFoafPerson.ftl">
</section>
<#include "individual-adminPanel.ftl">