multiple updates and new files to support multiple foaf person profile pages

This commit is contained in:
tworrall 2013-01-31 11:15:48 -05:00
parent 3b051ecffd
commit 9cde935cc7
50 changed files with 2005 additions and 249 deletions

View file

@ -237,3 +237,9 @@ RDFService.languageFilter = true
# Only set sandbox to True for dev/test environments. Comment out or set to False in production # Only set sandbox to True for dev/test environments. Comment out or set to False in production
# #
#OpenSocial.sandbox = True #OpenSocial.sandbox = True
# MultiViews
# VIVO supports the simultaneous use of a full foaf:Person profile page view and a "quick" page view that emphasizes
# the individual's webpage presence. The following flag should be uncommented when implementing the multiple
# views.
#MultiViews.profilePageTypes=enabled

View file

@ -0,0 +1,32 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/* Fix for quickview admin panel */
#admin {
font-size:0.75em;
padding:0 0 0 0;
margin:0 0 0 0;
width:54%;
}
#admin h3 {
color:#fff;
font-size:12px;
padding:2px 2px 2px 2px;
margin:0 0 0 0;
float:left;
}
a.edit-individual {
margin-left:5px;
padding-bottom:5px;
float:left;
}
#verbose-mode {
padding-left:0px;
float:right;
}
#admin .uri-link {
padding-left:8px;
}
#verbose-mode .small {
padding:3px 3px 3px 3px;
}

View file

@ -0,0 +1,36 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/* Fix for quickview admin panel */
#admin {
font-size:0.75em;
padding:0 0 0 0;
margin:0 0 8px 0;
width:100%;
height:75px;
}
#admin h3 {
color:#fff;
font-size:12px;
padding:2px 2px 2px 2px;
margin:0 0 0 0;
float:left;
}
a.edit-individual {
margin-left:5px;
padding-bottom:5px;
float:left;
}
#verbose-mode {
padding-left:0px;
float:right;
}
#admin .uri-link {
padding-left:8px;
}
#verbose-mode .small {
padding:3px 3px 3px 3px;
}
.iconControlsEditable {
top:140px;
}

View file

@ -0,0 +1,297 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/* <------ INDIVIDUAL INTRO */
#individual-intro {
margin-top: 15px;
margin-bottom: 0px; /* margin-bottom: 20px; out for redesign*/
position: relative;
overflow: hidden;
}
/* <------ INDIVIDUAL INTRO - LEFT SIDE CONTENT */
#share-contact {
position: relative;
width: 166px;
float: left;
padding-right: 1.5em;
margin-right: 12px; /* added for redesign */
margin-bottom: 20px;
}
img.individual-photo {
width: 160px;
margin-left: 0;
float: left;
margin-right: 20px;
margin-bottom: 10px; /* changed for redesign, was 20px */
}
ul#phone-list {
font-size:0.9em;
}
#primary-email {
margin-top: 0;
}
#primary-email li:last-child, /* added for redesign */
#additional-emails li:last-child {
margin-bottom: 0; /* changed for redesign, was 18px */
}
/* <------ INDIVIDUAL INTRO - RIGHT SIDE CONTENT */
.display-title-not-editable {
float-left;
font-size:1.15em;
/* padding-right:5em; */
}
.display-title-editable {
padding-left:0 !important;
margin-left:0 !important;
font-size:1em !important;
border:none !important;
display:inline-block;
}
div#titleContainer {
display:inline-block;
}
#individual-info {
margin-top:6px;
}
#individual-info h2 {
padding: 25px 0 10px 0; /* changed for redesign, was padding-bottom: 10px */
clear:both; /* added for redesign */
}
#individual-info h2#contactHeading {
margin-bottom: 8px;
}
#individual-info h3#contact {
padding: 7px 0 5px 0;
margin:0 0 0 0 ;
}
h3.primary-email {
margin-top: -8px !important;
}
#individual-intro.person {
margin-bottom: 0; /* changed for redesign, was 30px */
position: relative;
width: 100%;
}
#individual-info h1.foaf-person {
float:left;
padding-right:8px;
height:20px;
margin:-3px 8px 5px 0;
}
div#profileTypeContainer {
position:absolute;
right:0;
top:135px;
}
div#profileTypeContainer select {
float:none;
display:inline-block;
padding: .5em;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #E0DFDF;
border-radius: 5px 5px 5px 5px;
font-size: 14px;
margin-bottom: 0.8em;
}
div#profileTypeContainer h2 {
float:none;
display:inline-block;
margin: 0 0 0 0;
font-weight:bold;
font-size:1em;
color:#5e6363;
padding:0 0 0 0;
}
span.iconControlsEditable {
position:absolute;
right:0;
top:82px;
}
span.iconControlsNotEditable {
position:absolute;
right:0;
top:3px;
}
#overview {
clear: both; /* changed for redesign, was left */
}
/* <------ 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 */
}
#visualization h3 {
padding-top: 10px;
margin-bottom: 0; /* changed for redesign, was 10px */
}
p#networks {
margin-bottom:10px;
}
.collaboratorship-link-separator { /* added for redesign */
margin-top: 10px;
border-top: 1px solid #DDE4E3;
padding-top: 10px;
}
.sparkline_text {
font-size: .9em; /* changed for redesign, was .8em */
text-align: left;
line-height: 1.5em;
width: 180px;
}
span.collaboratorship-link a img{
vertical-align:middle;
}
td#totalPubs { /* added for redesign */
font-size: 1.35em;
background: url(../../images/individual/pub-total-bkgrnd.png) top left no-repeat;
text-align:center;
vertical-align:middle;
width:48px;
height:48px;
}
td#tenYearCount { /* added for redesign */
font-size: .85em;
padding-left:10px;
vertical-align:middle;
}
.infoIcon {
padding-right: 0;
}
div#pub_count_short_sparkline_vis {
margin-top: 4px;
height: 48px;
margin-bottom: 20px;
}
/* <------ INDIVIDUAL TEMPORAL GRAPH */
#temporal-graph {
padding: 0 3px 8px 0; /* changed for redesign, was 0 3px 20px 0 */
background-color: #fff;
margin-top: -4px; /* added for redesign */
}
#temporal-graph h3 img {
padding-right: 10px;
vertical-align: middle; /* changed for redesign, was text-top */
}
/* <------ INDIVIDUAL MAP O' SCIENCE */
#map-of-science {
padding: 0 3px 24px 0; /* changed for redesign, was 0 3px 20x 0 */
background-color: #fff;
}
#map-of-science h3 img {
padding-right: 10px;
vertical-align: middle; /* changed for redesign, was text-top */
}
/* <------ POSITIONS */
ul#individual-personInPosition {
list-style-type: circle;
padding-left: 10px; /* changed for redesign, was 20px */
margin: 10px 0 0 0; /* added for redesign */
}
ul#individual-personInPosition li {
line-height: 1em;
padding-bottom:10px; /* changed for redesign, was 15px */
}
ul#individual-personInPosition li:last-child {
padding-bottom: 3px; /* changed for redesign, was 15px */
}
/* <------ CONTACTS AND WEBPAGES */
div#contactsWebpages {
width:100%;
display:inline;
clear:both
}
div#contactContainer {
width:50%;
float:left;
clear:both;
padding:0 21px 0 0;
}
div#webpagesContainer {
width:47%;
float:left;
clear:right;
padding:0 0 0 0;
}
div#contactOuterDiv {
width:100%;
display:inline;
}
div#contactEmailDiv {
width:68%;
float:left;
overflow:hidden;
}
div#contactPhoneDiv {
width:32%;
float:right;
text-align:right;
}
/* <------ RESEARCH AREA */
ul#individual-hasResearchArea li {
float: left;
padding-right: 10px;
margin-right: 10px; /* added for redesign */
padding-left: 0; /* padding-left: 10px; out for redesign */
border-right: 1px solid #5e6363;
}
h2#researchAreas {
vertical-align:bottom;
}
/* <------ QR Code */
span#qrCodeImage {
position: absolute;
top: 30px; /* changed for redesign, was -9em */
left: -120px !important; /* added for redesign */
width:180px; /* added for redesign */
border: solid 2px #ccc;
background: #fff; /* changed for redesign, was #fff */
text-align:middle; /* added for redesign */
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 */
}
a.qrCloseLink {
float: right;
padding-right: 1em; /* added for redesign */
margin-right: 0; /* margin-right: .5em out for redesign */
font-size: .8em;
}
/* MISCELLANEOUS------> */
span#quickViewLink {
clear:both;
padding-left:47%;
}
span#quickViewLink img {
margin-top:35px;
}
a#manageLabels { /* added for redesign but will work with existing templates */
margin-left:20px;
font-size:0.7em;
}
/****** FROM WILMA.CSS ******/
#individual-info h2.mainPropGroup {
border-bottom: 1px solid #DDE4E3;
padding-bottom:1px;
margin-bottom:8px;
}
#individual-info div#contactContainer h3{
color:#8aa149;
}
ul#individual-personInPosition li {
padding-bottom:12px;
margin-left:10px;
line-height: 1.25em !important;
}
ul#individual-personInPosition li:last-child {
padding-bottom: 0;
}
td#totalPubs {
color: #2485AE;
}

View file

@ -0,0 +1,257 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
/* ADMIN PANEL------> */
#admin {
font-size: .8em;
padding: 0 0 0 0 ;
margin: -15px 0 4px 0;
float:left;
width:55%;
height:70px;
}
#admin h3 {
display: inline-block;
padding: 3px 4px 3px 4px !important;
margin-bottom: 5px;
font-size: 14px;
float: left;
}
#admin .uri-link {
padding:0 0 0 11px;
clear: left;
}
/* <------ HEADER CONTENT ---------> */
img.individual-photo {
width: 56px;
margin: -15px 10px 4px 0;
float: left;
border-width:2px !important;
}
h2#mainImage {
margin-top:36px;
margin-left:-10px;
float:left;
font-weight:bold;
width:80px !important;
}
section#label-title {
float:left;
width:88%;
}
.display-title-not-editable {
float-left;
font-size:1.15em;
}
.display-title-editable {
padding-left:0 !important;
margin-left:0 !important;
font-size:1em !important;
border:none !important;
display:inline-block;
}
div#titleContainer {
display:inline-block;
}
section#qv-share-contact {
width:49.1%;
float:left;
padding:0 .8em 0 0;
margin-left:-2em;
overflow:visible;
clear:left;
}
h2#preferredTitle {
color: #5E6363;
font-size: 1em;
font-weight: bold;
padding:6px 0 0 0;
margin-top:48px;
}
/* <------ QR Code */
span#qrCodeImage {
position: absolute;
top: 30px; /* changed for redesign, was -9em */
left: 76% !important; /* added for redesign */
width:180px; /* added for redesign */
border: solid 2px #ccc;
background: #fff; /* changed for redesign, was #fff */
text-align:middle; /* added for redesign */
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 */
}
/* <----- WEBPAGE CONTENT LEFT SIDE -----> */
.edit-mainImage {
position: absolute;
/* background: rgba(255, 255, 255, 0.6); */
padding: 0 0 0 0;
top: 44px;
left: 0;
}
.delete-mainImage {
position: absolute;
top: 44px;
left: 26px;
/* background: rgba(255, 255, 255, 0.6); */
padding: 0 0 0 8px;
}
div#webpage-wrapper {
background-color: #e4e8e7;
margin:-7px 0 -16px 0;
padding-bottom:9px;
padding-top:3px;
display:inline-block;
width: 456px;
}
h2.websites {
margin-left:15px;
padding:4px 0 0 0;
border-bottom: 1px solid #a1d2e2;
padding-bottom:3px;
width:418px;
color: #5E6363;
font-size: 1em;
font-weight: bold;
}
ul.individual-webpage {
padding:18px 0 0 25px ;
}
ul.individual-webpage li:first-child {
padding: 0 0 0 0;
}
ul.individual-webpage li {
padding: 5px 5px 0 0;
float:left;
}
li.weblinkLarge {
margin-left:-14.5em;
margin-top:7em
}
li.weblinkSmall {
margin-left:-7.475em;
margin-top:3.425em
}
span.webpage-indicator-qv {
float:left;
font-size:0.825em;
}
/* <------ INDIVIDUAL INTRO - RIGHT SIDE CONTENT */
section#individual-intro {
overflow:visible ;
}
#individual-intro h1.fn {
padding-right:8px;
height:20px;
margin:-1px 8px 5px 0;
}
section.qv-individual-info {
float:left !important;
margin-right:-20px;
margin-left:7px;
}
#individual-info h2#personInPosition {
padding: 25px 0 2px 0;
}
span.iconControlsEditable {
float:right;
margin-top:1.2em
}
span.iconControlsNotEditable {
float:right;
}
div#profileTypeContainer {
float:right;
margin-right:92px;
margin-top:12px;
}
div#profileTypeContainer select {
float:none;
display:inline-block;
padding: .5em;
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #E0DFDF;
border-radius: 5px 5px 5px 5px;
font-size: 14px;
margin-bottom: 0.8em;
}
div#profileTypeContainer h2 {
margin-right:8px;
font-weight:bold;
font-size:1em;
color:#5e6363;
padding:0 0 0 0;
float:none;
display:inline-block;
}
/* <------ INDIVIDUAL VISUALIZATION */
#visualization {
width:100%;
clear:both;
padding-top:0 !important;
background:red !important;
}
ul#individual-visualization li {
float: left;
padding-right: 10px;
margin-right: 10px;
border-right: 1px solid #5e6363;
}
ul#individual-visualization li:last-child {
border: none;
}
/* <------ POSITIONS ------> */
ul#individual-personInPosition {
list-style-type: circle;
padding-left: 10px; /* changed for redesign, was 20px */
margin: 10px 0 0 0; /* added for redesign */
}
ul#individual-hasResearchArea li {
float: left;
padding-right: 10px;
margin-right: 10px; /* added for redesign */
padding-left: 0; /* padding-left: 10px; out for redesign */
border-right: 1px solid #5e6363 ;
white-space:nowrap !important;
}
ul#individual-hasResearchArea li:last-child {
white-space:nowrap !important;
}
ul#individual-personInPosition li {
margin-left: 8px !important;
}
/* <------ GEOGRAPHIC FOCUS */
ul#individual-geographicFocus li {
float: left;
padding-right: 10px;
margin-right: 10px;
border-right: 1px solid #5e6363;
}
ul#individual-geographicFocus li:last-child {
border: none;
}
/* <------ MISC. ------> */
span#fullViewLink {
position:relative;
padding-left:47%;
}
/****** FROM WILMA.CSS ******/
#individual-info h2.mainPropGroup {
border-bottom: 1px solid #DDE4E3;
padding-bottom:1px;
margin-bottom:8px;
}
ul#individual-personInPosition li {
padding-bottom:12px;
margin-left:10px;
line-height: 1.25em !important;
}
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 */
}

View file

@ -14,9 +14,11 @@ ul#individual-tools li {
ul#individual-phone { ul#individual-phone {
clear: both; clear: both;
list-style-type: circle; list-style-type: circle;
margin-left: 15px;
} }
ul#individual-phone li { ul#individual-phone li {
font-size: .875em; font-size: .875em;
line-height: 1.5em;
} }
ul#individual-phone li:last-child { ul#individual-phone li:last-child {
margin-bottom: 10px; margin-bottom: 10px;
@ -25,26 +27,35 @@ ul#individual-phone li:first-child {
margin-top: 10px; margin-top: 10px;
} }
.icon-phone, .icon-email { .icon-phone, .icon-email {
padding-right: 5px; padding-right: 2px;
} }
#individual-intro ul.individual-urls { #individual-intro ul.individual-urls {
list-style-type: circle; list-style-type: circle;
margin-left: 20px; margin-left: 15px;
} }
#individual-intro ul.individual-urls li { #individual-intro ul.individual-urls li {
font-size: .875em; font-size: .875em;
line-height: 1.7em; line-height: 1.5em;
padding-bottom:5px;
} }
ul.individual-emails { ul.individual-emails {
clear: both; clear: both;
padding-left: 0; padding-left: 0;
list-style-type: circle;
margin-left: 20px;
} }
#additional-emails li:last-child { #additional-emails li:last-child {
margin-bottom: 18px; margin-bottom: 18px;
} }
ul.individual-emails li { ul.individual-emails li {
font-size: .875em; font-size: .875em;
line-height: 1.3em; line-height: 1.5em;
}
ul#individual-phone {
list-style: url(../../images/phoneIconSmall.gif);
}
ul.individual-emails {
list-style: url(../../images/emailIconSmall.gif);
} }
ul#webpages{ ul#webpages{
margin-bottom: 5px; margin-bottom: 5px;
@ -83,11 +94,9 @@ ul#additional-emails li {
width: 100%; width: 100%;
float: none; float: none;
} }
ul#individual-tools-people { div#individual-tools-people {
margin-top: 5px;
height: 20px; height: 20px;
padding-bottom: 20px; padding-bottom: 24px;
list-style-type: none;
clear: both; clear: both;
margin-bottom: 15px; margin-bottom: 15px;
} }
@ -126,12 +135,12 @@ div.overview-value :last-child {
width: 100%; width: 100%;
} }
/* <------ INDIVIDUAL VISUALIZATION */ /* <------ INDIVIDUAL VISUALIZATION */
#visualization { #right-hand-column {
padding: 0 0 0 20px; padding: 0 0 0 20px;
float: right; float: right;
background-color: #fff; background-color: #fff;
} }
#visualization h3 { #right-hand-column h3 {
padding-top: 10px; padding-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -231,7 +240,7 @@ a.qrCloseLink {
} }
/* MISCELLANEOUS------> */ /* MISCELLANEOUS------> */
.listDateTime { .listDateTime {
padding: 0.2em 0.4em; padding: 0 0.4em;
font-size: 0.8em; font-size: 0.8em;
background: #f4f4f4; background: #f4f4f4;
} }

View file

@ -18,7 +18,7 @@ span.incomplete-data-holder,
} }
.collaboratorship-icon { .collaboratorship-icon {
float: left; float: left;
padding-right: 5px; padding-right: 8px;
} }
.collaboratorship-link a { .collaboratorship-link a {
font-size: 0.9em; font-size: 0.9em;
@ -48,12 +48,12 @@ span.incomplete-data-holder,
border-top: 1px dotted #A6B1B0; border-top: 1px dotted #A6B1B0;
padding-top: 20px; padding-top: 20px;
} }
.sparkline_text { .sparkline_text, .grey-text {
font-size: .8em; font-size: .9em;
font-weight: bold;
text-align: left; text-align: left;
line-height: 1.5em; line-height: 1.5em;
width: 180px; width: 180px;
color: #5e6363;
} }
.google-visualization-sparkline-default { .google-visualization-sparkline-default {
margin-bottom: 5px; margin-bottom: 5px;
@ -80,6 +80,7 @@ span.incomplete-data-holder,
.infoIcon { .infoIcon {
padding-right:30px; padding-right:30px;
} }
/* ---------------------------*/ /* ---------------------------*/
/* Visualization Tools -------*/ /* Visualization Tools -------*/
/* ---------------------------*/ /* ---------------------------*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -0,0 +1,78 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
var profilePageType = {
/* *** Initial page setup *** */
onLoad: function() {
this.mixIn();
// in the event that the individual does not have a profile type set,
// the controller returns "none" and the select is set to "standard".
// we need to distinguish these when it comes time to do a retraction or
// not. So "default" = the type defined by the triple; "selected" =
// the selected option.
var selectedProfileType = "";
this.initPage();
},
mixIn: function() {
// Get the custom form data from the page
$.extend(this, profileTypeData);
},
// Initial page setup. Called only at page load.
initPage: function() {
profilePageType.selectedProfileType = $('select#profilePageType').val();
this.bindEventListeners();
},
bindEventListeners: function() {
$('select#profilePageType').change( function() {
profilePageType.processSelection($('select#profilePageType').val())
});
},
processSelection: function(newType) {
// if no profile page type is defined for this individual, don't do a retraction but pass an empty string to the controller
var retract = "";
var add = "<" + profilePageType.individualUri + "> <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDefaultProfilePageType> "
+ "<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#" + newType + "> .";
if ( profilePageType.defaultProfileType != "none" ) {
retract = "<" + profilePageType.individualUri + "> <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDefaultProfilePageType> "
+ "<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#" + profilePageType.selectedProfileType + "> .";
}
$.ajax({
url: profilePageType.processingUrl,
type: 'POST',
data: {
additions: add,
retractions: retract
},
dataType: 'json',
context: newType, // context for callback
complete: function(request, status) {
if (status == 'success') {
location.reload(true);
}
else {
alert('Error processing request: the unchecked labels could not be deleted.');
$('select#profilePageType').val(profilePageType.selectedProfileType);
}
}
});
}
};
$(document).ready(function() {
profilePageType.onLoad();
});

View file

@ -0,0 +1,119 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
$(document).ready(function(){
// This function creates and styles the "qTip" tooltip that displays the bubble text when the user hovers
// over the research area "group" icon.
$('#researchAreaIcon').each(function()
{
$(this).qtip(
{
content: {
prerender: true,
text: '&nbsp;'
},
position: {
corner: {
target: 'topleft',
tooltip: 'bottomcenter'
},
adjust: {
x:22,
y:30
}
},
show: {
when: {
event: 'mouseenter'
}
},
hide: {
fixed: false,
when: {
event: 'mouseleave'
}
},
style: {
padding: '0em',
height: 56,
width: 180,
border: 'none',
background:'url(' + imagesPath + '/individual/researchAreaBubble.png) no-repeat'
}
});
});
$('#fullViewIcon').each(function()
{
$(this).qtip(
{
content: {
text: '&nbsp;'
},
position: {
corner: {
target: 'topleft',
tooltip: 'bottomcenter'
},
adjust: {
x:27,
y:30
}
},
show: {
when: {
event: 'mouseenter'
}
},
hide: {
fixed: false,
when: {
event: 'mouseleave'
}
},
style: {
padding: '0em',
height: 56,
width: 140,
border: 'none',
background: 'url(' + imagesPath + '/individual/quickViewBubble.png) no-repeat'
}
});
});
$('#quickViewIcon').each(function()
{
$(this).qtip(
{
content: {
text: '&nbsp;'
},
position: {
corner: {
target: 'topleft',
tooltip: 'bottomcenter'
},
adjust: {
x:28,
y:30
}
},
show: {
when: {event: 'mouseenter'}
},
hide: {
fixed: false,
when: {
event: 'mouseleave'
}
},
style: {
padding: '0em',
height: 56,
width: 144,
border: 'none',
background: 'url(' + imagesPath + '/individual/fullViewBubble.png) no-repeat'
}
});
});
});

View file

@ -131,8 +131,10 @@ $(document).ready(function(){
} }
// if there are webpages but no contacts (email/phone), extend // if there are webpages but no contacts (email/phone), extend
// the webpage border the full width. Used with "standard" profile view. // the webpage border the full width. Used with "2 column" profile view.
if ( $('h2#contactHeading').length < 1 ) { if ( $('h2#contactHeading').length < 1 ) {
if ( $('div#webpagesContainer').length ) {
$('div#webpagesContainer').css('width', '100%').css('clear','both'); $('div#webpagesContainer').css('width', '100%').css('clear','both');
} }
}
}); });

View file

@ -5,7 +5,7 @@
<#-- Do not show the link for temporal visualization unless it's enabled --> <#-- Do not show the link for temporal visualization unless it's enabled -->
<#if temporalVisualizationEnabled> <#if temporalVisualizationEnabled>
<#assign classSpecificExtension> <#assign classSpecificExtension>
<section id="visualization" role="region"> <section id="right-hand-column" role="region">
<#include "individual-visualizationTemporalGraph.ftl"> <#include "individual-visualizationTemporalGraph.ftl">
<#include "individual-visualizationMapOfScience.ftl"> <#include "individual-visualizationMapOfScience.ftl">
</section> <!-- #visualization --> </section> <!-- #visualization -->

View file

@ -0,0 +1,174 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Individual profile page template for foaf:Person individuals -->
<!--[if IE 7]>
<link rel="stylesheet" href="${urls.base}/css/individual/ie7-standard-view.css" />
<![endif]-->
<#-- <#include "individual-setup.ftl"> -->
<#import "individual-qrCodeGenerator.ftl" as qr>
<#import "lib-vivo-properties.ftl" as vp>
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<section id="individual-intro" class="vcard person" role="region">
<section id="share-contact" role="region">
<#-- Image -->
<#assign individualImage>
<@p.image individual=individual
propertyGroups=propertyGroups
namespaces=namespaces
editable=editable
showPlaceholder="always" />
</#assign>
<#if ( individualImage?contains('<img class="individual-photo"') )>
<#assign infoClass = 'class="withThumb"'/>
</#if>
<div id="photo-wrapper" >${individualImage}</div>
<#include "individual-visualizationFoafPerson.ftl">
</section> <!-- end share-contact -->
<section id="individual-info" ${infoClass!} role="region">
<#include "individual-adminPanel.ftl">
<header>
<#if relatedSubject??>
<h2>${relatedSubject.relatingPredicateDomainPublic} for ${relatedSubject.name}</h2>
<p><a href="${relatedSubject.url}" title="return to">&larr; return to ${relatedSubject.name}</a></p>
<#else>
<h1 class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>>
<#-- Label -->
<@p.label individual editable labelCount/>
</h1>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("${core}preferredTitle")!>
<#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel title editable />
<#list title.statements as statement>
<#if !editable >
<div id="titleContainer"><span class="display-title-not-editable">${statement.value}</span></div>
<#else>
<span class="display-title-editable">${statement.value}</span>
<@p.editingLinks "${title.name}" statement editable />
</#if>
</#list>
</#if>
<#-- If preferredTitle is unpopulated, display mostSpecificTypes -->
<#if ! (title.statements)?has_content>
<@p.mostSpecificTypesPerson individual editable/>
</#if>
</#if>
<span class="<#if editable>iconControlsEditable<#else>iconControlsNotEditable</#if>">
<#include "individual-iconControls.ftl">
</span>
<#if editable && profilePageTypesEnabled >
<div id="profileTypeContainer">
<h2>Profile type</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>
</select>
</div>
</#if>
</header>
<!-- Positions -->
<#include "individual-positions.ftl">
<!-- Overview -->
<#if !editable>
<p></p>
</#if>
<#include "individual-overview.ftl">
<!-- Research Areas -->
<#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">
</div> <!-- contactContainer -->
<div id="webpagesContainer">
<#assign webpage = propertyGroups.pullProperty("${core}webpage")!>
<#if webpage?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<h2 id="webpage" class="mainPropGroup">Websites <@p.addLink webpage editable ""/></h2>
<@p.verboseDisplay webpage />
<#assign localName = webpage.localName>
<ul id="individual-${localName}" role="list">
<@p.objectProperty webpage editable />
</ul>
</#if>
</div> <!-- webpagesContainer -->
</div> <!-- contactsWebpages -->
<#include "individual-openSocial.ftl">
</section> <!-- end individual-info -->
</section> <!-- end individual-intro -->
<#assign nameForOtherGroup = "other"> <#-- individual-properties.ftl -->
<#-- Ontology properties -->
<#if !editable>
<#-- We don't want to see the first name and last name unless we might edit them. -->
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!>
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!>
</#if>
<#include "individual-property-group-tabs.ftl">
<#if targetedView?has_content || user.loggedIn >
<span id="quickViewLink" >
<a href="${urls.base}/display/${individual.localName}?destination=quickView" >
<img id="quickViewIcon" src="${urls.images}/individual/quickViewIcon.png" alt="full view icon"/>
</a>
</span>
</#if>
<#if !editable>
<script>
var title = $('div#titleContainer').width();
var name = $('h1.vcard').width();
var total = parseInt(title,10) + parseInt(name,10);
if ( name < 280 && total > 600 ) {
var diff = total - 600;
$('div#titleContainer').width(title - diff);
}
else if ( name > 279 && name + title > 600 ) {
$('div#titleContainer').width('620');
}
</script>
</#if>
<script>
var individualLocalName = "${individual.localName}";
var imagesPath = '${urls.images}';
</script>
<#assign rdfUrl = individual.rdfUrl>
<#if rdfUrl??>
<script>
var individualRdfUrl = '${rdfUrl}';
</script>
</#if>
<script type="text/javascript">
var profileTypeData = {
processingUrl: '${urls.base}/edit/primitiveRdfEdit',
individualUri: '${individual.uri!}',
defaultProfileType: '${profileType!}'
};
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-2column-view.css" />',
'<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${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>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUriRdf.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualQtipBubble.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js?vers=1.5.1"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualProfilePageType.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/imageUpload/imageUploadUtils.js"></script>')}

View file

@ -0,0 +1,232 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- The "quick view" individual profile page template for foaf:Person individuals -->
<!--[if IE 7]>
<link rel="stylesheet" href="${urls.base}/css/individual/ie7-quick-view.css" />
<![endif]-->
<#-- <#include "individual-setup.ftl"> -->
<#import "individual-qrCodeGenerator.ftl" as qr>
<#import "lib-vivo-properties.ftl" as vp>
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<#assign individualImage>
<@p.image individual=individual
propertyGroups=propertyGroups
namespaces=namespaces
editable=editable
showPlaceholder="always"/>
</#assign>
<#--
the display in this template is driven by whether the individual has a web page,
so set this variable now
-->
<#assign hasWebpage = false>
<#assign web = individual.propertyList.getProperty("${core}webpage")!>
<#if editable >
<#if web.first()?? >
<#assign hasWebpage = true>
<#else>
<#assign hasWebpage = false>
</#if>
<#else>
<#if (web?size > 0) >
<#assign hasWebpage = true>
<#else>
<#assign hasWebpage = false>
</#if>
</#if>
<section id="individual-intro" class="vcard person" role="region">
<section id="label-title" <#if editable>style="width:45%"</#if> >
<header>
<#if relatedSubject??>
<h2>${relatedSubject.relatingPredicateDomainPublic} for ${relatedSubject.name}</h2>
<p><a href="${relatedSubject.url}" title="return to">&larr; return to ${relatedSubject.name}</a></p>
<#else>
<#-- Image -->
<div id="photo-wrapper">${individualImage}</div>
<h1 class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>>
<#-- Label -->
<@p.label individual editable labelCount/>
</h1>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("${core}preferredTitle")!>
<#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel title editable />
<#list title.statements as statement>
<#if !editable >
<div id="titleContainer"><span class="display-title-not-editable">${statement.value}</span></div>
<#else>
<span class="display-title-editable">${statement.value}</span>
<@p.editingLinks "${title.name}" statement editable />
</#if>
</#list>
</#if>
<#-- If preferredTitle is unpopulated, display mostSpecificTypes -->
<#if ! (title.statements)?has_content>
<@p.mostSpecificTypesPerson individual editable />
</#if>
</#if>
</header>
</section> <!-- end label-title -->
<#include "individual-adminPanel.ftl">
<span 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>
<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>
</select>
</div>
</#if>
<#--
If this individual has a web page or pages, then we highlight them on the left-hand side
of the profile page against a shaded background. If not, all the right-hand content shifts
left and displays across the full width of the page.
-->
<#if hasWebpage >
<section id="qv-share-contact" class="share-contact" role="region" <#if !editable>style="padding-top:12px"</#if>>
<img id="webpage-popout-top" src="${urls.images}/individual/webpage-popout-top.png" alt="background top"/>
<div id="webpage-wrapper" >
<#assign webpage = propertyGroups.pullProperty("${core}webpage")!>
<#if webpage?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#if editable>
<h2 class="websites" >Websites <@p.addLink webpage editable ""/></h2>
</#if>
<@p.verboseDisplay webpage />
<#assign localName = webpage.localName>
<ul id="individual-${localName}" class="individual-webpage" role="list">
<@p.objectProperty webpage editable "propStatement-webpage-quickview.ftl"/>
</ul>
</#if>
</div>
<img id="webpage-popout-bottom" src="${urls.images}/individual/webpage-popout-bottom.png" alt="background top" <#if editable>style="margin-top:16px"</#if>/>
</section> <!-- end share-contact -->
</#if>
<section id="individual-info" class="qv-individual-info" role="region" style=" <#if !editable>padding-top:12px;</#if><#if hasWebpage>width:53%<#else>width:100%;clear:left</#if>;">
<!-- Positions -->
<#include "individual-positions.ftl">
<!-- Research Areas -->
<#include "individual-researchAreas.ftl">
<!-- Geographic Focus -->
<#assign geographicFocus = propertyGroups.pullProperty("${core}geographicFocus")!>
<#if geographicFocus?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<h2 id="geoFocus" class="mainPropGroup">Geographic Focus <@p.addLink geographicFocus editable ""/></h2>
<@p.verboseDisplay geographicFocus />
<#assign localName = geographicFocus.localName>
<#if geographicFocus.subclasses?has_content >
<#assign subclasses = geographicFocus.subclasses>
<#list subclasses as subclass>
<#assign subclassName = subclass.name!>
<ul id="individual-${localName}" role="list">
<@p.objectPropertyList geographicFocus editable subclass.statements geographicFocus.template/>
</ul>
</#list>
<#else>
<ul id="individual-${localName}" role="list">
<@p.objectProperty geographicFocus editable />
</ul>
</#if>
</#if>
<#-- If the individual does not have webpages and we're in edit mode, provide the opportunity to add webpages -->
<#if editable && !hasWebpage >
<!-- Webpages -->
<#assign webpage = propertyGroups.pullProperty("${core}webpage")!>
<#if webpage?has_content>
<h2 id="webpage" class="mainPropGroup">Websites <@p.addLink webpage editable ""/></h2>
<@p.verboseDisplay webpage />
<#assign localName = webpage.localName>
<ul id="individual-${localName}" role="list">
<@p.objectProperty webpage editable />
</ul>
</#if>
</#if>
<#include "individual-visualizationQuickView.ftl">
<#include "individual-openSocial.ftl">
</section> <!-- end individual-info -->
</section> <!-- end end individual-intro -->
<!-- we need these 3 lines of html to provide proper spacing and alignment -->
<p style="clear:both">
<br />
</p>
<span id="fullViewLink">
<a href="${urls.base}/display/${individual.localName}?destination=standardView" >
<img id="fullViewIcon" src="${urls.images}/individual/fullViewIcon.png" alt="full view icon"/>
</a>
</span>
<#if !editable>
<script type="text/javascript">
var title = $('div#titleContainer').width();
var name = $('h1.vcard').width();
var total = parseInt(title,10) + parseInt(name,10);
if ( name < 400 && total > 730 ) {
var diff = total - 730;
$('div#titleContainer').width(title - diff);
}
else if ( name > 399 && name + title > 730 ) {
$('div#titleContainer').width('720');
}
</script>
</#if>
<script>
var individualLocalName = "${individual.localName}";
var imagesPath = '${urls.images}';
</script>
<#assign rdfUrl = individual.rdfUrl>
<#if rdfUrl??>
<script>
var individualRdfUrl = '${rdfUrl}';
</script>
</#if>
<script type="text/javascript">
var profileTypeData = {
processingUrl: '${urls.base}/edit/primitiveRdfEdit',
individualUri: '${individual.uri!}',
defaultProfileType: '${profileType!}'
};
</script>
<#if editable>
<script>
// until the web service is implemented, the bottom portion of the web page "insert"
// will not align correctly. This fixes that issue.
$('ul#individual-webpage li').children('a').each( function() {
if ( $(this).attr('title') == "link text" ) {
$('img#webpage-popout-bottom').css("margin-top","8px");
return false;
}
});
</script>
</#if>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-quick-view.css" />',
'<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${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>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUriRdf.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualQtipBubble.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualProfilePageType.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/imageUpload/imageUploadUtils.js"></script>')}

View file

@ -1,152 +1,48 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> <#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Individual profile page template for foaf:Person individuals --> <#--
<#include "individual-setup.ftl">
<#import "individual-qrCodeGenerator.ftl" as qr>
<#import "lib-vivo-properties.ftl" as vp>
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<section id="individual-intro" class="vcard person" role="region">
<section id="share-contact" role="region"> This version of individual--foaf-person.ftl is a "router" template. The original VIVO
<#-- Image --> version of this template now resides in the /themes/wilma/templates directory.
<#assign individualImage>
<@p.image individual=individual
propertyGroups=propertyGroups
namespaces=namespaces
editable=editable
showPlaceholder="always" />
</#assign>
<#if ( individualImage?contains('<img class="individual-photo"') )> This version of the template is used when the profile page types feature is enabled.
<#assign infoClass = 'class="withThumb"'/> This template serves to "rout" the user to the correct template based (1) the
</#if> profile page type of the foaf person being displayed or (2) the targeted view that
the user wants to see. For example, when a user is routed to a quick view template,
the user has the option of displaying the full view. If the user chooses that option,
the targetedView variable gets set.
<div id="photo-wrapper">${individualImage}</div> This template could also be used to load just the "individual--foaf-person-2column.ftl"
without enabling profile page types.
<nav role="navigation">
<ul id ="individual-tools-people" role="list">
<li role="listitem"><img id="uriIcon" title="${individual.uri}" class="middle" src="${urls.images}/individual/uriIcon.gif" alt="uri icon"/></li>
<@qr.renderCode />
</ul>
</nav>
<#include "individual-contactInfo.ftl">
<#-- Links -->
<@vp.webpages propertyGroups editable "individual-urls-people" />
</section>
<section id="individual-info" ${infoClass!} role="region">
<#include "individual-visualizationFoafPerson.ftl">
<#include "individual-adminPanel.ftl">
<header>
<#if relatedSubject??>
<h2>${relatedSubject.relatingPredicateDomainPublic} for ${relatedSubject.name}</h2>
<p><a href="${relatedSubject.url}" title="return to">&larr; return to ${relatedSubject.name}</a></p>
<#else>
<h1 class="vcard foaf-person">
<#-- Label -->
<span class="fn"><@p.label individual editable labelCount/></span>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("${core}preferredTitle")!>
<#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel title editable />
<#list title.statements as statement>
<span class="display-title">${statement.value}</span>
<@p.editingLinks "${title.name}" statement editable />
</#list>
</#if>
<#-- If preferredTitle is unpopulated, display mostSpecificTypes -->
<#if ! (title.statements)?has_content>
<@p.mostSpecificTypes individual />
</#if>
</h1>
</#if>
<#-- Positions -->
<#assign positions = propertyGroups.pullProperty("${core}personInPosition")!>
<#if positions?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.objectPropertyListing positions editable />
</#if>
</header>
<#-- Overview -->
<#include "individual-overview.ftl">
<#-- Research Areas -->
<#assign researchAreas = propertyGroups.pullProperty("${core}hasResearchArea")!>
<#if researchAreas?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.objectPropertyListing researchAreas editable />
</#if>
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<div id="openSocial">
<h2>OpenSocial</h2>
<#-- It would likely make sense to remove the #if logic as it is safe and -->
<#-- arguably better to just have both divs in all conditions -->
<#if editable>
<div id="gadgets-edit" class="gadgets-gadget-parent"></div>
<#else>
<div id="gadgets-view" class="gadgets-gadget-parent" ></div>
</#if>
</div>
</#if>
</#if>
</section>
</section>
<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl -->
<#-- Property group menu -->
<#-- With release 1.6 the property group is no longer used. The include statement
remains in the event a particular VIVO site still wants to use it with the new
collapsible groups.
<#include "individual-propertyGroupMenu.ftl">
--> -->
<#-- Ontology properties -->
<#if !editable> <#include "individual-setup.ftl">
<#-- We don't want to see the first name and last name unless we might edit them. -->
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!> <#--
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!> First, check to see if profile page types are enabled. If not, get the 2 column template:
"individual--foaf-person-2column.ftl".
NOTE: the assumption here is that if this template is being loaded, rather than the
individual--foaf-person.ftl template that resides in the theme directory, than the site
administrator wants to use 2 column template by itself or with the quick view template.
-->
<#assign selectedTemplate = "individual--foaf-person-2column.ftl" >
<#if profilePageTypesEnabled >
<#assign profilePageType = profileType >
<#-- targetedView takes precedence over the profilePageType. -->
<#if targetedView?has_content>
<#if targetedView != "standardView">
<#assign selectedTemplate = "individual--foaf-person-quickview.ftl" >
</#if> </#if>
<#elseif profilePageType == "quickView" >
<#include "individual-properties.ftl"> <#assign selectedTemplate = "individual--foaf-person-quickview.ftl" >
<#assign rdfUrl = individual.rdfUrl>
<#if rdfUrl??>
<script>
var individualRdfUrl = '${rdfUrl}';
</script>
</#if> </#if>
<script> </#if>
var individualLocalName = "${individual.localName}"; <#include selectedTemplate >
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-property-groups.css" />',
'<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${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/jquery_plugins/jquery.truncator.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/propertyGroupControls.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualUriRdf.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/imageUpload/imageUploadUtils.js"></script>')}

View file

@ -8,8 +8,8 @@
<#assign individualProductExtension> <#assign individualProductExtension>
<#-- Include for any class specific template additions --> <#-- Include for any class specific template additions -->
${classSpecificExtension!} ${classSpecificExtension!}
<@vp.webpages propertyGroups editable />
<!--PREINDIVIDUAL OVERVIEW.FTL--> <!--PREINDIVIDUAL OVERVIEW.FTL-->
<#include "individual-webpage.ftl">
<#include "individual-overview.ftl"> <#include "individual-overview.ftl">
</section> <!-- #individual-info --> </section> <!-- #individual-info -->
</section> <!-- #individual-intro --> </section> <!-- #individual-intro -->
@ -18,9 +18,7 @@
<#include "individual-vitro.ftl"> <#include "individual-vitro.ftl">
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />', ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />')}
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-property-groups.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>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>', ${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>')}
'<script type="text/javascript" src="${urls.base}/js/individual/propertyGroupControls.js"></script>')}

View file

@ -0,0 +1,23 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for admin panel on individual profile page -->
<#import "lib-form.ftl" as form>
<#if individual.showAdminPanel>
<section id="admin">
<h3 id="adminPanel">Admin Panel</h3><a class="edit-individual" href="${individual.controlPanelUrl()}" title="edit this individual">Edit this individual</a>
<section id = "verbose-mode">
<#if verbosePropertySwitch?has_content>
<#assign anchorId = "verbosePropertySwitch">
<#assign currentValue = verbosePropertySwitch.currentValue?string("on", "off")>
<#assign newValue = verbosePropertySwitch.currentValue?string("off", "on")>
<span>Verbose property display is <b>${currentValue}</b> | </span>
<a id="${anchorId}" class="verbose-toggle small" href="${verbosePropertySwitch.url}#${anchorId}" title="verbose control">Turn ${newValue}</a>
</#if>
</section>
<p class="uri-link">Resource URI: <a href="${individual.uri}" target="_blank" title="resource uri">${individual.uri}</a></p>
</section>
</#if>

View file

@ -0,0 +1,75 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Contact info on individual profile page -->
<#assign phone = propertyGroups.pullProperty("${core}phoneNumber")!>
<#assign pEmail = propertyGroups.pullProperty("${core}primaryEmail")!>
<#assign email = propertyGroups.pullProperty("${core}email")!>
<#if editable || ( phone?has_content || pEmail?has_content || email?has_content ) >
<h2 id="contactHeading" class="mainPropGroup">Contact</h2>
</#if>
<#-- the layout is different in edit mode -->
<#if !editable>
<div id="contactOuterDiv">
<div id="contactEmailDiv">
</#if>
<#-- Primary Email -->
<@emailLinks "${core}primaryEmail" pEmail />
<#-- Additional Emails -->
<@emailLinks "${core}email" email />
<#if !editable>
</div> <!-- contactEmailDiv -->
<div id="contactPhoneDiv">
</#if>
<#-- Phone -->
<@phoneLinks phone />
<#if !editable>
</div> <!-- contactPhoneDiv -->
</div> <!-- contactOuterDiv -->
</#if>
<#macro phoneLinks phone>
<#if phone?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#if editable>
<h3 id="contact">phone<@p.addLink phone editable /> </h3>
<@p.verboseDisplay phone />
</#if>
<#if phone.statements?has_content> <#-- if there are any statements -->
<ul id="phone-list" role="list">
<#list phone.statements as statement>
<li role="listitem" <#if editable>style="padding-left:10px;"</#if>>
${statement.value}
<@p.editingLinks "${phone.localName}" statement editable />
</li>
</#list>
</ul>
</#if>
</#if>
</#macro>
<#macro emailLinks property email>
<#if property == "${core}primaryEmail">
<#local listId = "primary-email">
<#local label = "primary email">
<#else>
<#local listId = "additional-emails">
<#local label = "additional emails">
</#if>
<#if email?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#if editable>
<h3 id="contact" class="${listId}">${label}<@p.addLink email editable label/></h3>
<@p.verboseDisplay email />
</#if>
<#if email.statements?has_content> <#-- if there are any statements -->
<ul id="${listId}" role="list">
<#list email.statements as statement>
<li role="listitem" <#if editable>style="padding-left:10px;"</#if>>
<a class="email" href="mailto:${statement.value}" title="email">${statement.value}</a>
<@p.editingLinks "${email.localName}" statement editable />
</li>
</#list>
</ul>
</#if>
</#if>
</#macro>

View file

@ -2,21 +2,29 @@
<#-- Contact info on individual profile page --> <#-- Contact info on individual profile page -->
<#assign phone = propertyGroups.pullProperty("${core}phoneNumber")!>
<#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>
<#-- Primary Email --> <#-- Primary Email -->
<@emailLinks "${core}primaryEmail" /> <@emailLinks "${core}primaryEmail" primaryEmail />
<#-- Additional Emails --> <#-- Additional Emails -->
<@emailLinks "${core}email" /> <@emailLinks "${core}email" addlEmail />
<#-- Phone --> <#-- Phone -->
<#assign phone = propertyGroups.pullProperty("${core}phoneNumber")!>
<#if phone?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> <#if phone?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel phone editable /> <@p.addLinkWithLabel phone editable />
<#if phone.statements?has_content> <#-- if there are any statements --> <#if phone.statements?has_content> <#-- if there are any statements -->
<ul id="individual-phone" role="list"> <ul id="individual-phone" role="list">
<#list phone.statements as statement> <#list phone.statements as statement>
<li role="listitem"> <li role="listitem">
<img class ="icon-phone middle" src="${urls.images}/individual/phoneIcon.gif" alt="phone icon" />${statement.value} <#-- <img class ="icon-phone middle" src="${urls.images}/individual/phoneIcon.gif" alt="phone icon"/> -->${statement.value}
<@p.editingLinks "${phone.localName}" statement editable /> <@p.editingLinks "${phone.localName}" statement editable />
</li> </li>
</#list> </#list>
@ -24,8 +32,7 @@
</#if> </#if>
</#if> </#if>
<#macro emailLinks property> <#macro emailLinks property email>
<#assign email = propertyGroups.pullProperty(property)!>
<#if property == "${core}primaryEmail"> <#if property == "${core}primaryEmail">
<#local listId = "primary-email"> <#local listId = "primary-email">
<#local label = "Primary Email"> <#local label = "Primary Email">
@ -39,7 +46,7 @@
<ul id="${listId}" class="individual-emails" role="list"> <ul id="${listId}" class="individual-emails" role="list">
<#list email.statements as statement> <#list email.statements as statement>
<li role="listitem"> <li role="listitem">
<img class ="icon-email middle" src="${urls.images}/individual/emailIcon.gif" alt="email icon" /> <#-- <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> <a class="email" href="mailto:${statement.value}" title="email">${statement.value}</a>
<@p.editingLinks "${email.localName}" statement editable /> <@p.editingLinks "${email.localName}" statement editable />
</li> </li>

View file

@ -0,0 +1,21 @@
<#-- $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 />
<#--
Some contact information is displayed on the profile page by default; e.g., phone numbes and email addresses. If an institution
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.
<#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" />
</a>
</#if>
-->

View file

@ -0,0 +1,11 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- List of positions for the individual -->
<#assign positions = propertyGroups.pullProperty("${core}personInPosition")!>
<#if positions?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#assign localName = positions.localName>
<h2 id="${localName}" class="mainPropGroup">${positions.name?capitalize} <@p.addLink positions editable /> <@p.verboseDisplay positions /></h2>
<ul id="individual-${localName}" role="list">
<@p.objectProperty positions editable />
</ul>
</#if>

View file

@ -0,0 +1,40 @@
<#-- $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

@ -34,10 +34,10 @@
<h5 class="qrCode">vCard QR</h5> <h5 class="qrCode">vCard QR</h5>
${qrCodeLinkedImage} ${qrCodeLinkedImage}
<#elseif (display == "icon")> <#elseif (display == "icon")>
<li role="listitem"> <#-- <li role="listitem"> -->
<a id="qrIcon" title="vCard QR Code" href="${qrData.exportQrCodeUrl}" title="QR Code"><img class="middle" src="${urls.images}/individual/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/qr-code-icon.png<#-- qr_icon.png -->" alt="qr icon" /></a>
<span id="qrCodeImage" class="hidden">${qrCodeLinkedImage} <a class="qrCloseLink" href="#" title="QR Code">Close</a></span> <span id="qrCodeImage" class="hidden">${qrCodeLinkedImage} <a class="qrCloseLink" href="#" title="QR Code">Close</a></span>
</li> <#-- </li> -->
<#else> <#else>
<p class="notice">You have passed an invalid value for the qrCode display parameter.</p> <p class="notice">You have passed an invalid value for the qrCode display parameter.</p>
</#if> </#if>

View file

@ -0,0 +1,15 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- List of research areas for the individual -->
<#assign researchAreas = propertyGroups.pullProperty("${core}hasResearchArea")!>
<#if researchAreas?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#assign localName = researchAreas.localName>
<h2 id="${localName}" class="mainPropGroup">
${researchAreas.name?capitalize}
<img id="researchAreaIcon" src="${urls.images}/individual/research-group-icon.png" alt="research areas" />
<@p.addLink researchAreas editable /> <@p.verboseDisplay researchAreas />
</h2>
<ul id="individual-${localName}" role="list" >
<@p.objectProperty researchAreas editable />
</ul>
</#if>

View file

@ -15,7 +15,6 @@
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/visualization/visualization.css" />')} ${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/visualization/visualization.css" />')}
<#assign standardVisualizationURLRoot ="/visualization"> <#assign standardVisualizationURLRoot ="/visualization">
<section id="visualization" role="region">
<#if isAuthor> <#if isAuthor>
<#assign coAuthorIcon = "${urls.images}/visualization/coauthorship/co_author_icon.png"> <#assign coAuthorIcon = "${urls.images}/visualization/coauthorship/co_author_icon.png">
<#assign mapOfScienceIcon = "${urls.images}/visualization/mapofscience/scimap_icon.png"> <#assign mapOfScienceIcon = "${urls.images}/visualization/mapofscience/scimap_icon.png">
@ -32,7 +31,7 @@
<div id="coauthorship_link_container" class="collaboratorship-link-container"> <div id="coauthorship_link_container" class="collaboratorship-link-container">
<div class="collaboratorship-icon"> <div class="collaboratorship-icon">
<a href="${coAuthorVisUrl}" title="co-author"><img src="${coAuthorIcon}" alt="Co-author network icon" width="30px" height="30px" /></a> <a href="${coAuthorVisUrl}" title="co-author"><img src="${coAuthorIcon}" alt="Co-author network icon" width="25px" height="25px" /></a>
</div> </div>
<div class="collaboratorship-link"><a href="${coAuthorVisUrl}" title="co-author network">Co-Author Network</a></div> <div class="collaboratorship-link"><a href="${coAuthorVisUrl}" title="co-author network">Co-Author Network</a></div>
</div> </div>
@ -41,7 +40,7 @@
<div id="mapofscience_link_container" class="collaboratorship-link-container"> <div id="mapofscience_link_container" class="collaboratorship-link-container">
<div class="collaboratorship-icon"> <div class="collaboratorship-icon">
<a href="${mapOfScienceVisUrl}" title="map of science"><img src="${mapOfScienceIcon}" alt="Map Of Science icon" width="30px" height="30px" /></a> <a href="${mapOfScienceVisUrl}" title="map of science"><img src="${mapOfScienceIcon}" alt="Map Of Science icon" width="25px" height="25px" /></a>
</div> </div>
<div class="collaboratorship-link"><a href="${mapOfScienceVisUrl}" title="map of science">Map Of Science</a></div> <div class="collaboratorship-link"><a href="${mapOfScienceVisUrl}" title="map of science">Map Of Science</a></div>
</div> </div>
@ -66,10 +65,9 @@
<div id="coinvestigator_link_container" class="collaboratorship-link-container"> <div id="coinvestigator_link_container" class="collaboratorship-link-container">
<div class="collaboratorship-icon"> <div class="collaboratorship-icon">
<a href="${coInvestigatorVisUrl}" title="co-investigator network"><img src="${coInvestigatorIcon}" alt="Co-investigator network icon" width="30px" height="30px" /></a> <a href="${coInvestigatorVisUrl}" title="co-investigator network"><img src="${coInvestigatorIcon}" alt="Co-investigator network icon" width="25px" height="25px" /></a>
</div> </div>
<div class="collaboratorship-link"><a href="${coInvestigatorVisUrl}" title="co-investigator network">Co-Investigator Network</a></div> <div class="collaboratorship-link"><a href="${coInvestigatorVisUrl}" title="co-investigator network">Co-Investigator Network</a></div>
</div> </div>
</#if> </#if>
</section>
</#if> </#if>

View file

@ -3,5 +3,5 @@
<#-- Map Of Science visualization --> <#-- Map Of Science visualization -->
<div id="map-of-science"> <div id="map-of-science">
<h3><img src="${urls.images}/visualization/mapofscience/scimap_icon.png" width="25px" height="25px" /><a href="${individual.mapOfScienceUrl()}" title="map of science">Map of Science</a></h3> <h3><img src="${urls.images}/visualization/mapofscience/scimap_icon.png" width="25" height="25"/><a href="${individual.mapOfScienceUrl()}" title="map of science">Map of Science</a></h3>
</div> </div>

View file

@ -0,0 +1,46 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Template for sparkline visualization on individual profile page -->
<#-- Determine whether this person is an author -->
<#assign isAuthor = p.hasStatements(propertyGroups, "${core}authorInAuthorship") />
<#-- Determine whether this person is involved in any grants -->
<#assign isInvestigator = ( p.hasStatements(propertyGroups, "${core}hasInvestigatorRole") ||
p.hasStatements(propertyGroups, "${core}hasPrincipalInvestigatorRole") ||
p.hasStatements(propertyGroups, "${core}hasCo-PrincipalInvestigatorRole") ) >
<#if (isAuthor || isInvestigator)>
<#assign standardVisualizationURLRoot ="/visualization">
<#assign coauthor = "">
<#assign coinvestigator = "">
<#assign mapofscience = "">
<h2 class="mainPropGroup">Networks</h2>
<#if isAuthor>
<#assign coAuthorIcon = "${urls.images}/visualization/coauthorship/co_author_icon.png">
<#assign mapOfScienceIcon = "${urls.images}/visualization/mapofscience/scimap_icon.png">
<#assign coAuthorVisUrl = individual.coAuthorVisUrl()>
<#assign mapOfScienceVisUrl = individual.mapOfScienceUrl()>
<#assign coauthor = "<li><a href='${coAuthorVisUrl}' title='co-author' style='vertical-align:top;'><img src='${coAuthorIcon}' alt='Co-author network icon' width='20px' height='20px' style='padding-right:8px'/></a><a href='${coAuthorVisUrl}' title='co-author network'>Co-Authors</a></li>" >
<#assign mapofscience = "<li><a href='${mapOfScienceVisUrl}' title='map of science' style='vertical-align:top;'><img src='${mapOfScienceIcon} ' alt='Map Of Science icon' width='20px' height='20px' style='padding-right:8px'/></a><a href='${mapOfScienceVisUrl}' title='map of science'>Map Of Science</a></li>" >
</#if>
<#if isInvestigator>
<#assign coInvestigatorVisUrl = individual.coInvestigatorVisUrl()>
<#assign coInvestigatorIcon = "${urls.images}/visualization/coauthorship/co_investigator_icon.png">
<#assign coinvestigator = "<li><a href='${coInvestigatorVisUrl}' title='co-investigator network' style='vertical-align:top;'><img src='${coInvestigatorIcon}' alt='Co-investigator network icon' width='20px' height='20px' style='padding-right:8px'/></a><a href='${coInvestigatorVisUrl}' title='co-investigator network'>Co-Investigators</a></li>">
</#if>
<ul id="individual-visualization">
${coauthor}
${coinvestigator}
${mapofscience}
</ul>
<script type="text/javascript">
var visualizationUrl = '${urls.base}/visualizationAjax?uri=${individual.uri?url}';
var infoIconSrc = '${urls.images}/iconInfo.png';
</script>
</#if>

View file

@ -0,0 +1,22 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- This snippet will be included in lib-vivo-properties.ftl, so users will be able to have a
different view when extending wilma theme
<#assign webpage = propertyGroups.pullProperty("${core}webpage")!>
<@p.objectPropertyListing webpage editable />
-->
<#assign webpage = propertyGroups.pullProperty("${core}webpage")!>
<#if webpage?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<#if !editable && individual.person() >
<ul style="font-size:0.9em;padding-bottom:4px"><li><strong>Websites</strong></li></ul>
</#if>
<@p.addLinkWithLabel webpage editable "Websites"/>
<#assign localName = webpage.localName>
<ul id="individual-${localName}" class="individual-urls" role="list" <#if individual.organization() && !editable>style="font-size:1.15em"</#if>>
<@p.objectProperty webpage editable />
</ul>
</#if>

View file

@ -0,0 +1,80 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- "Quick view" template for core:webpage
This template must be self-contained and not rely on other variables set for the individual page, because it
is also used to generate the property statement during a deletion.
-->
<#-- *** Use of the quick view template requires that a web service provide snap shots of the web sites that ***
*** are defined on a foaf:Person individual's profile page. The web service can be one that you develop ***
*** or implement, or it can be a paid service. The service is called in the src attribute of the image ***
*** element that contains the web page snap shot, as shown below in the template. Note that this code is ***
*** currently commented out and a placeholder is displayed instead. ***
-->
<#assign count = property.statements?size!>
<#assign identifier>
<#if statement.url?has_content>
${statement.url?replace(":","")?replace("/","")?replace(".","-")?replace("&amp;","")?replace("%","")?replace("?","")?replace("=","")}<#t>
<#else>
"noUrl"<#t>
</#if>
</#assign>
<@showWebpage statement count identifier/>
<#macro showWebpage statement count identifier>
<#local linkText>
<#if statement.anchor?has_content>${statement.anchor}<#t>
<#elseif statement.url?has_content>${statement.url}<#t>
</#if>
</#local>
<#local imgSize = "&thumbnail=true" >
<#if (statement.rank?? && statement.rank == "1") || ( count == 1 ) >
<#local imgSize = "" >
</#if>
<#if statement.url?has_content>
<#-- This section commented out until the web service for the web page snapshot is implemented.
The assumption is made that the service will require the url of the web page and possibly
an image size as well.
<span id="span-${identifier}" class="webpage-indicator-qv">Loading website image. . .&nbsp;&nbsp;&nbsp;<img src="${urls.images}/indicatorWhite.gif"></span>
<a title="Click to view the ${linkText} web page" href="${statement.url}">
<img id="img-${identifier}" class="org-webThumbnail" src="http://your.web.service/getsTheImage?url=${statement.url}${imgSize}" alt="screenshot of webpage ${statement.url}" style="display:none"/>
</a>
<#if imgSize == "" >
</li>
<li class="weblinkLarge">
<a title="Click to view the ${linkText} web page" href="${statement.url}">
<img id="icon-${identifier}" src="${urls.images}/individual/weblinkIconLarge.png" alt="click webpage icon" style="display:none"/>
</a>
<#else>
</li>
<li class="weblinkSmall">
<a title="Click to view the ${linkText} web page" href="${statement.url}">
<img id="icon-${identifier}" src="${urls.images}/individual/weblinkIconSmall.png" alt="click webpage icon" style="display:none"/>
</a>
</#if>
-->
<#-- Here is the placeholder link -->
<a href="${statement.url}" title="link text">${linkText}</a><script>$("a[title='link text']").parent('li').css("float","none");</script>
<#else>
<a href="${profileUrl(statement.uri("link"))}" title="link name">${statement.linkName}</a> (no url provided for link)
</#if>
</#macro>
<script>
$('img#img-${identifier}').load(function(){
$('span#span-${identifier}').hide();
$('img#img-${identifier}').fadeIn();
$('img#icon-${identifier}').fadeIn();
});
</script>

View file

@ -25,10 +25,10 @@
<#if webpage?has_content> <#-- true when the property is in the list, even if not populated (when editing) --> <#if webpage?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<nav role="navigation"> <nav role="navigation">
<#local label = "Web Pages"> <#local label = "Websites">
<@p.addLinkWithLabel webpage editable label /> <@p.addLinkWithLabel webpage editable label />
<#if webpage.statements?has_content> <#-- if there are any statements --> <#if webpage.statements?has_content> <#-- if there are any statements -->
<#include "lib-vivo-property-webpage.ftl"> <#include "individual-webpage.ftl" >
</#if> </#if>
</nav> </nav>
</#if> </#if>

View file

@ -1,9 +0,0 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- This snippet will be included in lib-vivo-properties.ftl, so users will be able to have a
different view when extending wilma theme
-->
<ul class="${linkListClass}" id="webpages" role="list">
<@p.objectPropertyList webpage editable />
</ul>

View file

@ -1,5 +1,19 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> <#-- $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
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> <#if shouldVIVOrenderVis>
<#include "personPublicationSparklineContent.ftl"> <#include "personPublicationCountNoSparkline.ftl">
</#if> </#if>

View file

@ -0,0 +1,121 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#assign visContainerID = '${sparklineVO.visContainerDivID}'>
<#if sparklineVO.shortVisMode>
<#assign sparklineContainerID = 'pub_count_short_sparkline_vis'>
<#else>
<#assign sparklineContainerID = 'pub_count_full_sparkline_vis'>
</#if>
<#-- This is used to prevent collision between sparkline & visualization conatiner div ids. -->
<#if visContainerID?upper_case == sparklineContainerID?upper_case>
<#assign sparklineContainerID = visContainerID + "_spark">
</#if>
<div class="staticPageBackground">
<div id="${visContainerID}">
<script type="text/javascript">
function drawPubCountVisualization() {
var unknownYearPublicationCounts = ${sparklineVO.unknownYearPublications};
var onlyUnknownYearPublications = false;
var data = new google.visualization.DataTable();
data.addColumn('string', 'Year');
data.addColumn('number', 'Publications');
data.addRows(${sparklineVO.yearToEntityCountDataTable?size});
var knownYearPublicationCounts = 0;
<#list sparklineVO.yearToEntityCountDataTable as yearToPublicationCountDataElement>
data.setValue(${yearToPublicationCountDataElement.yearToEntityCounter}, 0, '${yearToPublicationCountDataElement.year}');
data.setValue(${yearToPublicationCountDataElement.yearToEntityCounter}, 1, ${yearToPublicationCountDataElement.currentEntitiesCount});
knownYearPublicationCounts += ${yearToPublicationCountDataElement.currentEntitiesCount};
</#list>
<#-- Create a view of the data containing only the column pertaining to publication count. -->
var sparklineDataView = new google.visualization.DataView(data);
sparklineDataView.setColumns([1]);
/*
This means that all the publications have unknown years & we do not need to display
the sparkline.
*/
if (unknownYearPublicationCounts > 0 && knownYearPublicationCounts < 1) {
onlyUnknownYearPublications = true;
}
var unknownYearPublicationCounts = ${sparklineVO.unknownYearPublications};
var totalPublicationCount = knownYearPublicationCounts + unknownYearPublicationCounts;
var shortSparkRows = sparklineDataView.getViewRows();
var renderedShortSparks = 0;
$.each(shortSparkRows, function(index, value) {
renderedShortSparks += data.getValue(value, 1);
});
var tenYearCount = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedShortSparks;
var td1Text = totalPublicationCount;
var td2Text = "";
var infoImgText = "<img class='infoIcon' src='" + infoIconSrc + "' height='14px' width='14px' alt='information icon' title='These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.' />";
if ( !onlyUnknownYearPublications ) {
if ( td1Text == tenYearCount ) {
td2Text += "in the last 10 full years " ;
}
else {
td2Text += "<strong>" + tenYearCount + "</strong> in the last 10 full years " ;
}
if ( tenYearCount < 100 ) {
td2Text += infoImgText;
}
}
else {
td2Text += "total <img class='infoIcon' src='" + infoIconSrc + "' height='14px' width='14px' alt='information icon' title='These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.' />";
}
$('#${sparklineContainerID} td#totalPubs').html(td1Text);
$('#${sparklineContainerID} td#tenYearCount').html(td2Text);
if ( td1Text > 99 && td1Text < 1000 ) {
$('#${sparklineContainerID} td#totalPubs').attr('style','font-size:1.25em');
}
else if ( td1Text > 999 ) {
$('#${sparklineContainerID} td#totalPubs').attr('style','font-size:1.1em');
}
}
$(document).ready(function() {
var sparklineImgTD;
if ($('#${sparklineContainerID}').length === 0) {
$('<div/>', {
'id': '${sparklineContainerID}',
}).prependTo('#${visContainerID}');
$('#${sparklineContainerID}').css('margin-top','4px').css('height','48px');
var table = $('<table>');
var row = $('<tr>');
var totalPubs = $('<td>');
totalPubs.attr('id', 'totalPubs');
totalPubs.attr('id', 'totalPubs');
var tenYearCount = $('<td>');
tenYearCount.attr('id', 'tenYearCount');
row.append(totalPubs);
row.append(tenYearCount);
table.append(row);
table.prependTo('#${sparklineContainerID}');
}
drawPubCountVisualization();
});
</script>
</div> <!-- Sparkline Viz -->
</div>

View file

@ -144,18 +144,27 @@
which would not be mentioned in the other case because the renderedShortSparks only hold counts which would not be mentioned in the other case because the renderedShortSparks only hold counts
of publications which have any date associated with it. of publications which have any date associated with it.
*/ */
var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedShortSparks; var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedShortSparks;
var sparksText = "";
if ( !onlyUnknownYearPublications ) {
$('#${sparklineContainerID} td.sparkline_number').text(totalPubs + " in the last 10 full").css("font-weight", "bold").css("font-size",".85em").attr("class", "grey"); $('#${sparklineContainerID} td.sparkline_number').text(totalPubs + " in the last 10 full").attr("class", "grey-text");
var sparksText = "years"; sparksText += "years";
if (totalPubs !== totalPublicationCount) { if (totalPubs !== totalPublicationCount) {
sparksText += ' (' + totalPublicationCount + ' total)' ; sparksText += ' (' + totalPublicationCount + ' total)' ;
} }
sparksText += "&nbsp;<img class='infoIcon' src='" + infoIconSrc + "' height='16px' width='16px' alt='information icon' title='These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.' />" ; sparksText += "&nbsp;<img class='infoIcon' src='" + infoIconSrc + "' height='16px' width='16px' alt='information icon' title='These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.' />" ;
}
else {
var totalPubs = onlyUnknownYearPublications ? unknownYearPublicationCounts : renderedSparks;
$('#${sparklineContainerID} td.sparkline_number').html(totalPubs + " total <img class='infoIcon' src='" + infoIconSrc + "' height='16px' width='16px' alt='information icon' title='These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.' />").attr("class", "grey-text");
}
<#else> <#else>
/* /*
@ -177,7 +186,7 @@
var pubDisplay = "publications"; var pubDisplay = "publications";
} }
$('#${sparklineContainerID} td.sparkline_number').text(totalPubs).css("font-weight", "bold").attr("class", "grey").append("<span style='color: #2485AE;'> "+ pubDisplay +"<br/></span>"); $('#${sparklineContainerID} td.sparkline_number').text(totalPubs).attr("class", "grey-text").append("<span style='color: #2485AE;'> "+ pubDisplay +"<br/></span>");
var sparksText = ' from <span class="sparkline_range">${sparklineVO.earliestYearConsidered?c}' var sparksText = ' from <span class="sparkline_range">${sparklineVO.earliestYearConsidered?c}'
+ ' to ${sparklineVO.latestRenderedPublicationYear?c}</span>'; + ' to ${sparklineVO.latestRenderedPublicationYear?c}</span>';
@ -190,11 +199,11 @@
sparksText += ' <br /><a href="${sparklineVO.downloadDataLink}" title="csv file">(.CSV File)</a> '; sparksText += ' <br /><a href="${sparklineVO.downloadDataLink}" title="csv file">(.CSV File)</a> ';
} }
</#if> </#if>
if (!onlyUnknownYearPublications) {
$('#${sparklineContainerID} td.sparkline_text').html(sparksText); $('#${sparklineContainerID} td.sparkline_text').html(sparksText);
}
} }

View file

@ -1284,9 +1284,10 @@ img.individual-photo {
padding-top: .8em; padding-top: .8em;
display: block; display: block;
} }
ul#individual-tools-people { div#individual-tools-people {
border-bottom: 1px solid #e8ece9; border-bottom: 1px dotted #A6B1B0; /* #e8ece9; */
color: #b2d15a; color: #b2d15a;
text-align:right;
} }
ul#individual-tools-people li a { ul#individual-tools-people li a {
color: #b2d15a; color: #b2d15a;
@ -1306,14 +1307,6 @@ ul#individual-tools li a {
ul.individual-urls { ul.individual-urls {
list-style: url(../../../images/individual/arrow-grey.gif); list-style: url(../../../images/individual/arrow-grey.gif);
} }
ul#individual-phone {
list-style-type: none;
}
ul#individual-phone li {
line-height: 1.6em;
}
ul.individual-urls li { ul.individual-urls li {
font-size: .875em; font-size: .875em;
line-height: 1.6em; line-height: 1.6em;
@ -1379,7 +1372,7 @@ ul#individual-hasResearchArea li a {
color: #2485ae; color: #2485ae;
} }
/* INDIVIDUAL VISUALIZATION ------> */ /* INDIVIDUAL VISUALIZATION ------> */
#visualization h3 { #right-hand-column h3 {
font-size: 1.25em; font-size: 1.25em;
color: #2485ae; color: #2485ae;
} }
@ -1395,12 +1388,14 @@ a.all-vivo-publications {
color: #2485AE; color: #2485AE;
font-size: .8em !important; font-size: .8em !important;
text-decoration: underline; text-decoration: underline;
vertical-align:text-top;
} }
/* <------ MAP O' SCIENCE */ /* <------ MAP O' SCIENCE */
#map-of-science h3 a { #map-of-science h3 a {
color: #2485AE; color: #2485AE;
font-size: .8em !important; font-size: .8em !important;
text-decoration: underline; text-decoration: underline;
vertical-align:text-top;
} }
/* COAUTHORS ------> */ /* COAUTHORS ------> */
img.co-author { img.co-author {

View file

@ -0,0 +1,133 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#--
Individual profile page template for foaf:Person individuals. This is the default template for foaf persons
in the Wilma theme and should reside in the themes/wilma/templates directory.
-->
<#include "individual-setup.ftl">
<#import "individual-qrCodeGenerator.ftl" as qr>
<#import "lib-vivo-properties.ftl" as vp>
<#if !labelCount??>
<#assign labelCount = 0 >
</#if>
<section id="individual-intro" class="vcard person" role="region">
<section id="share-contact" role="region">
<!-- Image -->
<#assign individualImage>
<@p.image individual=individual
propertyGroups=propertyGroups
namespaces=namespaces
editable=editable
showPlaceholder="always" />
</#assign>
<#if ( individualImage?contains('<img class="individual-photo"') )>
<#assign infoClass = 'class="withThumb"'/>
</#if>
<div id="photo-wrapper">${individualImage}</div>
<!-- Contact Info -->
<#include "individual-contactInfo.ftl">
<!-- Websites -->
<#include "individual-webpage.ftl">
</section>
<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">
<header>
<#if relatedSubject??>
<h2>${relatedSubject.relatingPredicateDomainPublic} for ${relatedSubject.name}</h2>
<p><a href="${relatedSubject.url}" title="return to">&larr; return to ${relatedSubject.name}</a></p>
<#else>
<h1 class="vcard foaf-person">
<#-- Label -->
<span class="fn"><@p.label individual editable labelCount/></span>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("${core}preferredTitle")!>
<#if title?has_content> <#-- true when the property is in the list, even if not populated (when editing) -->
<@p.addLinkWithLabel title editable />
<#list title.statements as statement>
<span class="display-title">${statement.value}</span>
<@p.editingLinks "${title.name}" statement editable />
</#list>
</#if>
<#-- If preferredTitle is unpopulated, display mostSpecificTypes -->
<#if ! (title.statements)?has_content>
<@p.mostSpecificTypes individual />
</#if>
</h1>
</#if>
<!-- Positions -->
<#include "individual-positions.ftl">
</header>
<!-- Overview -->
<#include "individual-overview.ftl">
<!-- Research Areas -->
<#include "individual-researchAreas.ftl">
<#include "individual-openSocial.ftl">
</section>
</section>
<#assign nameForOtherGroup = "other"> <#-- used by both individual-propertyGroupMenu.ftl and individual-properties.ftl -->
<#-- Ontology properties -->
<#if !editable>
<#-- We don't want to see the first name and last name unless we might edit them. -->
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/firstName")!>
<#assign skipThis = propertyGroups.pullProperty("http://xmlns.com/foaf/0.1/lastName")!>
</#if>
<!-- Property group menu or tabs -->
<#--
With release 1.6 there are now two types of property group displays: the original property group
menu and the horizontal tab display, which is the default. If you prefer to use the property
group menu, simply substitute the include statement below with the one that appears after this
comment section.
<#include "individual-property-group-menus.ftl">
-->
<#include "individual-property-group-tabs.ftl">
<#assign rdfUrl = individual.rdfUrl>
<#if rdfUrl??>
<script>
var individualRdfUrl = '${rdfUrl}';
</script>
</#if>
<script>
var individualLocalName = "${individual.localName}";
var imagesPath = '${urls.images}';
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/individual/individual.css" />',
'<link rel="stylesheet" href="${urls.base}/css/individual/individual-vivo.css" />',
'<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${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/jquery_plugins/jquery.truncator.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/individual/individualUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualQtipBubble.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/individual/individualUriRdf.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/imageUpload/imageUploadUtils.js"></script>')}

View file

@ -0,0 +1,18 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Open Social Gadgets -->
<#-- VIVO OpenSocial Extension by UCSF -->
<#if openSocial??>
<#if openSocial.visible>
<div id="openSocial">
<h2>OpenSocial</h2>
<#-- It would likely make sense to remove the #if logic as it is safe and -->
<#-- arguably better to just have both divs in all conditions -->
<#if editable>
<div id="gadgets-edit" class="gadgets-gadget-parent"></div>
<#else>
<div id="gadgets-view" class="gadgets-gadget-parent" ></div>
</#if>
</div>
</#if>
</#if>