Merge branch 'develop' of https://github.com/vivo-project/VIVO into develop

This commit is contained in:
brianjlowe 2013-10-14 16:35:50 -04:00
commit e572c423de
10 changed files with 343 additions and 493 deletions

View file

@ -185,21 +185,21 @@ issuing SPARQL queries that read data, and its URI for issuing SPARQL UPDATE com
<ul>
<li>
Mac:
<ul>
<li>Chrome 8.0.552.237</li>
<li>FireFox 3.6.13</li>
<li>Opera 10.6.2</li>
<li>Safari 5.0.3</li>
</ul>
</li>
<li>
PC:
<ul>
<li>Chrome 8.0.552.273</li>
<li>FireFox 10.0.2</li>
<li>Internet Explorer 7, 8, 9</li>
<li>Opera 10.6.2</li>
</ul>
<ul>
<li>Chrome 30.0.1599.69 and above</li>
<li>FireFox 3.6.28, 10.0.12, 24</li>
<li>Opera 12.02</li>
<li>Safari 5.0.3</li>
</ul>
</li>
<li>
PC:
<ul>
<li>Chrome 25.1364.2 and above</li>
<li>FireFox 10.0.12, 24</li>
<li>Internet Explorer 8, 9, 10</li>
<li>Opera 12.02</li>
</ul>
</li>
</ul>

View file

@ -439,21 +439,21 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl</pre>
<p>
Mac:
</p>
<ul>
<li>Chrome 8.0.552.237</li>
<li>FireFox 3.6.13</li>
<li>Opera 10.6.2</li>
<li>Safari 5.0.3</li>
</ul>
<p>
PC:
</p>
<ul>
<li>Chrome 8.0.552.273</li>
<li>FireFox 10.0.2</li>
<li>Internet Explorer 7, 8, 9</li>
<li>Opera 10.6.2</li>
</ul>
<ul>
<li>Chrome 30.0.1599.69 and above</li>
<li>FireFox 3.6.28, 10.0.12, 24</li>
<li>Opera 12.02</li>
<li>Safari 5.0.3</li>
</ul>
</li>
<li>
PC:
<ul>
<li>Chrome 25.1364.2 and above</li>
<li>FireFox 10.0.12, 24</li>
<li>Internet Explorer 8, 9, 10</li>
<li>Opera 12.02</li>
</ul>
</li>
</ul>

View file

@ -1,39 +1,39 @@
<#-- $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>
<#assign firstDeptLabel = firstRow["deptLabel"]?upper_case />
<#assign i18TextString = "" />
<#if ( firstDeptLabel?index_of("THE") == 0 ) >
<#assign i18TextString = "${i18n().active_grants_for?replace('the','')}" />
<#else>
<#assign i18TextString = "${i18n().active_grants_for}" />
</#if>
<h2>${i18TextString} ${firstRow["deptLabel"]} ${i18n().department}</h2>
<#break>
</#list>
<table id="pageList" >
<tr>
<th>${i18n().grant_name}</th>
<th>${i18n().close_date}</th>
</tr>
<#list deptGrants as resultRow>
<tr>
<td><a href="${urls.base}/individual${resultRow["activity"]?substring(resultRow["activity"]?last_index_of("/"))}" title="${i18n().activity_name}">${resultRow["activityLabel"]}</a></td>
<td>${dt.formatXsdDateTimeShort(resultRow["dt"], "yearMonthDayPrecision")}</td>
</tr>
</#list>
</table>
<#else>
${i18n().no_active_grants}
</#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>')}
<#-- $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>
<#assign firstDeptLabel = firstRow["deptLabel"]?upper_case />
<#assign i18TextString = "" />
<#if ( firstDeptLabel?index_of("THE") == 0 ) >
<#assign i18TextString = "${i18n().active_grants_for?replace('the','')}" />
<#else>
<#assign i18TextString = "${i18n().active_grants_for}" />
</#if>
<h2>${i18TextString} ${firstRow["deptLabel"]} ${i18n().department}</h2>
<#break>
</#list>
<table id="pageList" >
<tr>
<th>${i18n().grant_name}</th>
<th>${i18n().close_date}</th>
</tr>
<#list deptGrants as resultRow>
<tr>
<td><a href="${urls.base}/individual${resultRow["grant"]?substring(resultRow["grant"]?last_index_of("/"))}" title="${i18n().grant_name}">${resultRow["grantLabel"]}</a></td>
<td>${dt.formatXsdDateTimeShort(resultRow["dt"], "yearMonthDayPrecision")}</td>
</tr>
</#list>
</table>
<#else>
${i18n().no_active_grants}
</#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

@ -1,193 +1,193 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#import "lib-vivo-form.ftl" as lvf>
<#include "addAssociatedConceptVocabSpecificDisplay.ftl" >
<#assign existingConcepts = editConfiguration.pageData.existingConcepts/>
<#assign userDefinedConceptUrl = editConfiguration.pageData.userDefinedConceptUrl/>
<#assign sources = editConfiguration.pageData.searchServices/>
<#assign inversePredicate = editConfiguration.pageData.inversePredicate />
<#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
<#assign submissionErrors = editSubmission.validationErrors/>
</#if>
<h2>${i18n().manage_concepts}</h2>
<#if submissionErrors?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${i18n().error_alert_icon}" />
<p>
<#--below shows examples of both printing out all error messages and checking the error message for a specific field-->
<#list submissionErrors?keys as errorFieldName>
${errorFieldName} : ${submissionErrors[errorFieldName]}
</#list>
</p>
</section>
</#if>
<@lvf.unsupportedBrowser urls.base/>
<div class="noIE67">
<ul id="existingConcepts">
<script type="text/javascript">
var existingConceptsData = [];
</script>
<#if (existingConcepts?size > 0)>
<li class="conceptHeadings conceptsListContainer">
<div class="row">
<div class="column conceptLabelInfo">
<h4>Concept (Type)</h4>
</div>
<div class="column conceptVocabSource">
<h4>Vocabulary Source</h4>
</div>
<div class="column conceptRemoval">&nbsp;
</div>
</div>
</li>
</#if>
<#list existingConcepts as existingConcept>
<li class="existingConcept conceptsListContainer">
<div class="row">
<div class="column conceptLabelInfo"> ${existingConcept.conceptLabel}
<#if existingConcept.conceptSemanticTypeLabel?has_content>
(${existingConcept.conceptSemanticTypeLabel})
</#if>
</div>
<div class="column conceptVocabSource">
<#if existingConcept.vocabURI?has_content && existingConcept.vocabLabel?has_content>
${existingConcept.vocabLabel}
</#if>
</div>
<div class="column conceptRemoval">
<a href="${urls.base}/edit/primitiveRdfEdit" class="remove" title="${i18n().remove_capitalized}">${i18n().remove_capitalized}</a>
</div>
</div>
</li>
<script type="text/javascript">
existingConceptsData.push({
"conceptNodeUri": "${existingConcept.conceptURI}",
"conceptLabel": "${existingConcept.conceptLabel}"
});
</script>
</#list>
</ul>
<#if (existingConcepts?size = 0) >
<p>${i18n().no_concepts_specified}</p>
<#else>
&nbsp;
</#if>
<div id="showAddForm">
<input type="submit" value="${i18n().add_concept}" id="showAddFormButton" name="showAddFormButton"> ${i18n().or}
<a class="cancel" href="${cancelUrl}&url=/individual" title="${i18n().return_to_profile}">${i18n().return_to_profile}</a>
</div>
<form id="addConceptForm" class="customForm" action="${submitUrl}">
<#assign checkedSource = false />
<h4 class="services">${i18n().external_vocabulary_services}</h4>
<#list sources?values?sort_by("label") as thisSource>
<input type="radio" name="source" value="${thisSource.schema}" role="radio" <#if checkedSource = false><#assign checkedSource = true/>checked="checked"</#if>>
<label class="inline" for="${thisSource.label}"> <a href="${thisSource.url}">${thisSource.label}</a> &nbsp;(${thisSource.description})</label>
<br />
</#list>
<p class="inline-search">
<input type="text" id="searchTerm" label="Search" class="acSelector" size="35" />
<input type="button" class="submit concept-search" id="searchButton" name="searchButton" value="${i18n().search_button}"/>&nbsp;
</p><span id="createOwnOne"> ${i18n().or} &nbsp;<a href="${userDefinedConceptUrl}" title="${i18n().create_own_concept}">${i18n().create_own_concept}&nbsp;</a></span>
<input type="hidden" id="conceptNode" name="conceptNode" value=""/> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptLabel" name="conceptLabel" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSource" name="conceptSource" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSemanticTypeURI" name="conceptSemanticTypeURI" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSemanticTypeLabel" name="conceptSemanticTypeLabel" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptBroaderURI" name="conceptBroaderURI" value=""/><!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptNarrowerURI" name="conceptNarrowerURI" value=""/><!-- Field value populated by JavaScript -->
<div id="indicator" class="hidden">
<img id="loadingIndicator" class="indicator" src="${urls.base}/images/indicatorWhite.gif" alt="${i18n().processing_indicator}"/>
</div>
<div id="selectedConcept" name="selectedConcept" class="acSelection">
<p class="inline">
</p>
<!-- Search results populated by JavaScript -->
</div>
<div id="showHideResults" name="showHideResults">
<a class="more-less" href="#show more content" id="showHideLink" title="${i18n().show_more_content}">
&nbsp;</a>
</div>
<div id="errors" name="errors"></div>
<input type="hidden" name="editKey" id="editKey" value="${editKey}"/>
<p class="submit">
<input type="submit" id="submit" name="submit" value="${i18n().add_selected_concept}" />
</p>
<div id="createOwnTwo"><br />
<a href="${userDefinedConceptUrl}" > ${i18n().cannot_find_concept}</a>
</div>
<p>
<span class="or"> ${i18n().or} </span><a class="cancel" href="${cancelUrl}&url=/individual" title="${i18n().return_to_profile}">${i18n().return_to_profile}</a>
</p>
</form>
</div>
<script type="text/javascript">
var customFormData = {
dataServiceUrl: '${urls.base}/conceptSearchService',
subjectUri: '${editConfiguration.subjectUri}',
predicateUri: '${editConfiguration.predicateUri}',
inversePredicateUri: '${inversePredicate}'
};
var vocabSpecificDisplay = {};
<#list vocabSpecificDisplay?keys as vocab>
vocabSpecificDisplay["${vocab}"] = "${vocabSpecificDisplay[vocab]}";
</#list>
var i18nStrings = {
vocServiceUnavailable: '${i18n().vocabulary_service_error}',
noResultsFound: '${i18n().no_serch_results_found}',
defaultLabelTypeString: '${i18n().label_type}',
definitionString: '${i18n().definition_capitalized}',
bestMatchString: '${i18n().best_match}',
selectTermFromResults: '${i18n().select_term_from_results}',
selectVocSource: '${i18n().select_vocabulary_source_to_search}',
confirmTermDelete: '${i18n().confirm_term_deletion}',
errorTernNotRemoved: '${i18n().error_term_not_deleted}',
vocabSpecificLabels: vocabSpecificDisplay,
displayMoreEllipsis: '${i18n().display_more_ellipsis}',
displayLess: '${i18n().display_less}',
showMoreContent: '${i18n().show_more_content}'
};
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customForm.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/addConcept.css" />')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/json2.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/customFormUtils.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/templates/freemarker/edit/forms/js/addConcept.js"></script>')}
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#import "lib-vivo-form.ftl" as lvf>
<#include "addAssociatedConceptVocabSpecificDisplay.ftl" >
<#assign existingConcepts = editConfiguration.pageData.existingConcepts/>
<#assign userDefinedConceptUrl = editConfiguration.pageData.userDefinedConceptUrl/>
<#assign sources = editConfiguration.pageData.searchServices/>
<#assign inversePredicate = editConfiguration.pageData.inversePredicate />
<#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
<#assign submissionErrors = editSubmission.validationErrors/>
</#if>
<h2>${i18n().manage_concepts}</h2>
<#if submissionErrors?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${i18n().error_alert_icon}" />
<p>
<#--below shows examples of both printing out all error messages and checking the error message for a specific field-->
<#list submissionErrors?keys as errorFieldName>
${errorFieldName} : ${submissionErrors[errorFieldName]}
</#list>
</p>
</section>
</#if>
<@lvf.unsupportedBrowser urls.base/>
<div class="noIE67">
<ul id="existingConcepts">
<script type="text/javascript">
var existingConceptsData = [];
</script>
<#if (existingConcepts?size > 0)>
<li class="conceptHeadings conceptsListContainer">
<div class="row">
<div class="column conceptLabelInfo">
<h4>Concept (Type)</h4>
</div>
<div class="column conceptVocabSource">
<h4>Vocabulary Source</h4>
</div>
<div class="column conceptRemoval">&nbsp;
</div>
</div>
</li>
</#if>
<#list existingConcepts as existingConcept>
<li class="existingConcept conceptsListContainer">
<div class="row">
<div class="column conceptLabelInfo"> ${existingConcept.conceptLabel}
<#if existingConcept.conceptSemanticTypeLabel?has_content>
(${existingConcept.conceptSemanticTypeLabel})
</#if>
</div>
<div class="column conceptVocabSource">
<#if existingConcept.vocabURI?has_content && existingConcept.vocabLabel?has_content>
${existingConcept.vocabLabel}
</#if>
</div>
<div class="column conceptRemoval">
<a href="${urls.base}/edit/primitiveRdfEdit" class="remove" title="${i18n().remove_capitalized}">${i18n().remove_capitalized}</a>
</div>
</div>
</li>
<script type="text/javascript">
existingConceptsData.push({
"conceptNodeUri": "${existingConcept.conceptURI}",
"conceptLabel": "${existingConcept.conceptLabel}"
});
</script>
</#list>
</ul>
<#if (existingConcepts?size = 0) >
<p>${i18n().no_concepts_specified}</p>
<#else>
&nbsp;
</#if>
<div id="showAddForm">
<input type="submit" value="${i18n().add_concept}" id="showAddFormButton" name="showAddFormButton"> ${i18n().or}
<a class="cancel" href="${cancelUrl}&url=/individual" title="${i18n().return_to_profile}">${i18n().return_to_profile}</a>
</div>
<form id="addConceptForm" class="customForm" action="${submitUrl}">
<#assign checkedSource = false />
<h4 class="services">${i18n().external_vocabulary_services}</h4>
<#list sources?values?sort_by("label") as thisSource>
<input type="radio" name="source" value="${thisSource.schema}" role="radio" <#if checkedSource = false><#assign checkedSource = true/>checked="checked"</#if>>
<label class="inline" for="${thisSource.label}"> <a href="${thisSource.url}">${thisSource.label}</a> &nbsp;(${thisSource.description})</label>
<br />
</#list>
<p class="inline-search">
<input type="text" id="searchTerm" label="Search" class="acSelector" size="35" />
<input type="button" class="submit concept-search" id="searchButton" name="searchButton" value="${i18n().search_button}"/>&nbsp;
</p><span id="createOwnOne"> ${i18n().or} &nbsp;<a href="${userDefinedConceptUrl}" title="${i18n().create_own_concept}">${i18n().create_own_concept}&nbsp;</a></span>
<input type="hidden" id="conceptNode" name="conceptNode" value=""/> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptLabel" name="conceptLabel" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSource" name="conceptSource" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSemanticTypeURI" name="conceptSemanticTypeURI" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptSemanticTypeLabel" name="conceptSemanticTypeLabel" value="" /> <!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptBroaderURI" name="conceptBroaderURI" value=""/><!-- Field value populated by JavaScript -->
<input type="hidden" id="conceptNarrowerURI" name="conceptNarrowerURI" value=""/><!-- Field value populated by JavaScript -->
<div id="indicator" class="hidden">
<img id="loadingIndicator" class="indicator" src="${urls.base}/images/indicatorWhite.gif" alt="${i18n().processing_indicator}"/>
</div>
<div id="selectedConcept" name="selectedConcept" class="acSelection">
<p class="inline">
</p>
<!-- Search results populated by JavaScript -->
</div>
<div id="showHideResults" name="showHideResults">
<a class="more-less" href="#show more content" id="showHideLink" title="${i18n().show_more_content}">
&nbsp;</a>
</div>
<div id="errors" name="errors"></div>
<input type="hidden" name="editKey" id="editKey" value="${editKey}"/>
<p class="submit">
<input type="submit" id="submit" name="submit" value="${i18n().add_selected_concept}" />
</p>
<div id="createOwnTwo"><br />
<a href="${userDefinedConceptUrl}" > ${i18n().cannot_find_concept}</a>
</div>
<p>
<span class="or"> ${i18n().or} </span><a class="cancel" href="${cancelUrl}&url=/individual" title="${i18n().return_to_profile}">${i18n().return_to_profile}</a>
</p>
</form>
</div>
<script type="text/javascript">
var customFormData = {
dataServiceUrl: '${urls.base}/conceptSearchService',
subjectUri: '${editConfiguration.subjectUri}',
predicateUri: '${editConfiguration.predicateUri}',
inversePredicateUri: '${inversePredicate}'
};
var vocabSpecificDisplay = {};
<#list vocabSpecificDisplay?keys as vocab>
vocabSpecificDisplay["${vocab}"] = "${vocabSpecificDisplay[vocab]}";
</#list>
var i18nStrings = {
vocServiceUnavailable: '${i18n().vocabulary_service_unavailable}',
noResultsFound: '${i18n().no_serch_results_found}',
defaultLabelTypeString: '${i18n().label_type}',
definitionString: '${i18n().definition_capitalized}',
bestMatchString: '${i18n().best_match}',
selectTermFromResults: '${i18n().select_term_from_results}',
selectVocSource: '${i18n().select_vocabulary_source_to_search}',
confirmTermDelete: '${i18n().confirm_term_deletion}',
errorTernNotRemoved: '${i18n().error_term_not_deleted}',
vocabSpecificLabels: vocabSpecificDisplay,
displayMoreEllipsis: '${i18n().display_more_ellipsis}',
displayLess: '${i18n().display_less}',
showMoreContent: '${i18n().show_more_content}'
};
</script>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customForm.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/addConcept.css" />')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/jquery-ui/js/jquery-ui-1.8.9.custom.min.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/json2.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/customFormUtils.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>')}
${scripts.add('<script type="text/javascript" src="${urls.base}/templates/freemarker/edit/forms/js/addConcept.js"></script>')}

View file

@ -1,86 +0,0 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- this is in request.subject.name -->
<#-- leaving this edit/add mode code in for reference in case we decide we need it -->
<#import "lib-vivo-form.ftl" as lvf>
<#--Retrieve certain edit configuration information-->
<#if editConfiguration.objectUri?has_content>
<#assign editMode = "edit">
<#else>
<#assign editMode = "add">
</#if>
<#assign htmlForElements = editConfiguration.pageData.htmlForElements />
<#--Retrieve variables needed-->
<#assign telephoneNumberValue = lvf.getFormFieldValue(editSubmission, editConfiguration, "telephoneNumber") />
<#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
<#assign submissionErrors = editSubmission.validationErrors/>
</#if>
<#if editMode == "edit">
<#assign titleVerb="${i18n().edit_capitalized}">
<#assign submitButtonText="${titleVerb}" + " ${i18n().telephone_number}">
<#assign disabledVal="disabled">
<#else>
<#assign titleVerb="${i18n().create_capitalized}">
<#assign submitButtonText="${titleVerb}" + " ${i18n().telephone_number}">
<#assign disabledVal=""/>
</#if>
<#assign requiredHint = "<span class='requiredHint'> *</span>" />
<h2>${titleVerb}&nbsp;${i18n().telephone_number_for} ${editConfiguration.subjectName}</h2>
<#--Display error messages if any-->
<#if submissionErrors?has_content>
<section id="error-alert" role="alert">
<img src="${urls.images}/iconAlert.png" width="24" height="24" alert="${i18n().error_alert_icon}" />
<p>
<#--Checking if any required fields are empty-->
<#if lvf.submissionErrorExists(editSubmission, "telephoneNumber")>
${i18n().enter_telephone_number}<br />
</#if>
</p>
</section>
</#if>
<@lvf.unsupportedBrowser urls.base />
<section id="personHasTelephoneNumber" role="region">
<form id="personHasTelephoneNumber" class="customForm noIE67" action="${submitUrl}" role="add/edit phone">
<p>
<label for="telephoneNumber">${i18n().telephone_number} ${requiredHint}</label>
<input size="25" type="text" id="telephoneNumber" name="telephoneNumber" value="${telephoneNumberValue}" />
</p>
<input type="hidden" id="editKey" name="editKey" value="${editKey}"/>
<p class="submit">
<input type="submit" id="submit" value="${submitButtonText}"/><span class="or"> ${i18n().or} </span>
<a class="cancel" href="${cancelUrl}" title="${i18n().cancel_title}">${i18n().cancel_link}</a>
</p>
<p id="requiredLegend" class="requiredHint">* ${i18n().required_fields}</p>
</form>
</section>
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/js/jquery-ui/css/smoothness/jquery-ui-1.8.9.custom.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customForm.css" />')}
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/templates/freemarker/edit/forms/css/customFormWithAutocomplete.css" />')}
${scripts.add('<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/extensions/String.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/browserUtils.js"></script>',
'<script type="text/javascript" src="${urls.base}/js/jquery_plugins/jquery.bgiframe.pack.js"></script>')}

View file

@ -476,7 +476,7 @@ local:orgFaxContext a :ConfigContext ;
local:orgFaxConfig a :ObjectPropertyDisplayConfig ;
:listViewConfigFile "listViewConfig-faxNumber.xml"^^xsd:string ;
:displayName "fax" ;
vitro:displayRankAnnot 10;
vitro:displayRankAnnot 20;
vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ;
vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ;
vitro:customEntryFormAnnot "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.SubjectHasPhoneFaxNumberGenerator"^^<http://www.w3.org/2001/XMLSchema#string> ;
@ -688,3 +688,18 @@ local:grantRelatesConfig a :ObjectPropertyDisplayConfig ;
vitro:hiddenFromDisplayBelowRoleLevelAnnot role:public ;
vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:public ;
:propertyGroup <http://vivoweb.org/ontology#vitroPropertyGroupbiography> .
local:testRemovalContext a :ConfigContext ;
:hasConfiguration local:testRemovalConfig ;
:configContextFor <http://purl.obolibrary.org/obo/RO_0000053> ;
:qualifiedByDomain <http://xmlns.com/foaf/0.1/Person> ;
:qualifiedBy <http://purl.obolibrary.org/obo/BFO_0000001> .
local:testRemovalConfig a :ObjectPropertyDisplayConfig ;
:listViewConfigFile "listViewConfig-default.xml"^^xsd:string ;
:displayName "related by" ;
vitro:hiddenFromDisplayBelowRoleLevelAnnot role:root ;
vitro:prohibitedFromUpdateBelowRoleLevelAnnot role:root ;
:propertyGroup <http://vivoweb.org/ontology#vitroPropertyGroupother> .

View file

@ -20,3 +20,6 @@ local:authorInAuthorshipConfig a :ObjectPropertyDisplayConfig ;
local:informationResourceInAuthorshipConfig a :ObjectPropertyDisplayConfig ;
:deleteLinkSuppressed "true"^^xsd:boolean .
local:informationResourceInEditorshipConfig a :ObjectPropertyDisplayConfig ;
:deleteLinkSuppressed "true"^^xsd:boolean .

View file

@ -25,11 +25,14 @@ display:getDepartmentDataGetter
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#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str(?departmentLabel) AS ?deptLabel) ?dept
WHERE {
?individualURI vivo:researchAreaOf ?person .
?person vivo:personInPosition ?posn .
?posn vivo:positionInOrganization ?dept .
?person vivo:relatedBy ?posn .
?posn a vivo:Position .
?posn vivo:relates ?dept .
?dept a foaf:Organization .
?dept rdfs:label ?departmentLabel
OPTIONAL { ?posn vivo:dateTimeInterval ?dti
OPTIONAL { ?dti vivo:end ?end .
@ -44,19 +47,20 @@ display:getDepartmentDataGetter
## detail page for dept research areas ##
<http://vitro.mannlib.cornell.edu/ns/default#n55553333>
<http://vitro.mannlib.cornell.edu/ns/default/page#AffiliatedDepartments>
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#n55552222> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter> <http://vitro.mannlib.cornell.edu/ns/default/datagetter#AffiliatedDepartmentsDG> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#requiresBodyTemplate> "individual-affiliated-dept-details.ftl" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title> "Affiliated Departments" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping> "/affiliatedDepartments" .
<http://vitro.mannlib.cornell.edu/ns/default#n55552222>
<http://vitro.mannlib.cornell.edu/ns/default/datagetter#AffiliatedDepartmentsDG>
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 foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str (?prsnLabel) AS ?personLabel)
?person
(Str(?researchAreaLabel) AS ?raLabel)
@ -64,9 +68,11 @@ display:getDepartmentDataGetter
?raURI
?orgURI
WHERE {
?orgURI vivo:organizationForPosition ?posn .
?orgURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?orgURI rdfs:label ?orgLabel .
?posn vivo:positionForPerson ?person .
?posn vivo:relates ?person .
?person a foaf:Person .
?person rdfs:label ?prsnLabel .
?person vivo:hasResearchArea ?raURI .
?raURI rdfs:label ?researchAreaLabel

View file

@ -32,10 +32,13 @@ display:getResearchAreaDataGetter
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#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str(?researchAreaLabel) AS ?raLabel) ?ra
WHERE {
?individualURI vivo:organizationForPosition ?posn .
?posn vivo:positionForPerson ?person .
?individualURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?posn vivo:relates ?person .
?person a foaf:Person .
?person vivo:hasResearchArea ?ra .
?ra rdfs:label ?researchAreaLabel
OPTIONAL { ?posn vivo:dateTimeInterval ?dti
@ -51,19 +54,20 @@ display:getResearchAreaDataGetter
## detail page for non-academic department research areas ##
<http://vitro.mannlib.cornell.edu/ns/default#n55550000>
<http://vitro.mannlib.cornell.edu/ns/default/page#AffiliatedResearchAreas>
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#n55551111> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter> <http://vitro.mannlib.cornell.edu/ns/default/datagetter#AffiliatedResearchAreasDG> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#requiresBodyTemplate> "individual-affiliated-res-area-details.ftl" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title> "Affiliated Research Areas" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping> "/affiliatedResearchAreas" .
<http://vitro.mannlib.cornell.edu/ns/default#n55551111>
<http://vitro.mannlib.cornell.edu/ns/default/datagetter#AffiliatedResearchAreasDG>
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 foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str (?prsnLabel) AS ?personLabel)
?person
(str(?researchAreaLabel) AS ?raLabel)
@ -71,9 +75,11 @@ display:getResearchAreaDataGetter
?raURI
?orgURI
WHERE {
?orgURI vivo:organizationForPosition ?posn .
?orgURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?orgURI rdfs:label ?organizationLabel .
?posn vivo:positionForPerson ?person .
?posn vivo:relates ?person .
?person a foaf:Person .
?person rdfs:label ?prsnLabel .
?person vivo:hasResearchArea ?raURI .
?raURI rdfs:label ?researchAreaLabel
@ -84,19 +90,20 @@ display:getResearchAreaDataGetter
## detail page for academic department research areas ##
<http://vitro.mannlib.cornell.edu/ns/default#n5100>
<http://vitro.mannlib.cornell.edu/ns/default/page#DepartmentalResearchAreas>
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#hasDataGetter> <http://vitro.mannlib.cornell.edu/ns/default/datagetter#DepartmentalResearchAreasDG> ;
<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>
<http://vitro.mannlib.cornell.edu/ns/default/datagetter#DepartmentalResearchAreasDG>
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 foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str (?prsnLabel) AS ?personLabel)
?person
(Str(?researchAreaLabel) AS ?raLabel)
@ -104,9 +111,11 @@ display:getResearchAreaDataGetter
?raURI
?orgURI
WHERE {
?orgURI vivo:organizationForPosition ?posn .
?orgURI rdfs:label ?orgLabel .
?posn vivo:positionForPerson ?person .
?orgURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?orgURI rdfs:label ?organizationLabel .
?posn vivo:relates ?person .
?person a foaf:Person .
?person rdfs:label ?prsnLabel .
?person vivo:hasResearchArea ?raURI .
?raURI rdfs:label ?researchAreaLabel
@ -134,14 +143,18 @@ display:getGrantsDataGetter
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 ?activity
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?grant
WHERE {
?individualURI vivo:organizationForPosition ?posn .
?posn vivo:positionForPerson ?person .
?person ?roleProperty ?role .
?roleProperty rdfs:subPropertyOf vivo:hasResearcherRole .
?role vivo:roleContributesTo ?activity .
?activity vivo:dateTimeInterval ?dti .
?individualURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?posn vivo:relates ?person .
?person a foaf:Person .
?person <http://purl.obolibrary.org/obo/RO_0000053> ?role .
?role a vivo:ResearcherRole .
?role vivo:relatedBy ?grant .
?grant a vivo:Grant .
?grant vivo:dateTimeInterval ?dti .
?dti vivo:end ?end.
?end vivo:dateTime ?dt
FILTER (?dt > afn:now())
@ -151,35 +164,39 @@ display:getGrantsDataGetter
## data getter for the grants detail page ##
<http://vitro.mannlib.cornell.edu/ns/default#n1697>
<http://vitro.mannlib.cornell.edu/ns/default/page#DepartmentalGrants>
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#hasDataGetter> <http://vitro.mannlib.cornell.edu/ns/default/datagetter#DepartmentalGrantsDG> ;
<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>
<http://vitro.mannlib.cornell.edu/ns/default/datagetter#DepartmentalGrantsDG>
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
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT (str (?gLabel) AS ?grantLabel) ?dt (str(?departmentLabel) AS ?deptLabel) ?grant
WHERE {
?individualURI vivo:organizationForPosition ?posn .
?individualURI vivo:relatedBy ?posn .
?posn a vivo:Position .
?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 .
?posn vivo:relates ?person .
?person a foaf:Person .
?person <http://purl.obolibrary.org/obo/RO_0000053> ?role .
?role a vivo:ResearcherRole .
?role vivo:relatedBy ?grant .
?grant a vivo:Grant .
?grant rdfs:label ?gLabel .
?grant vivo:dateTimeInterval ?dti .
?dti vivo:end ?end.
?end vivo:dateTime ?dt
FILTER (?dt > afn:now())
}
ORDER BY ?activityLabel
ORDER BY ?gLabel
""" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#saveToVar> "deptGrants" .

View file

@ -1,105 +0,0 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
public class PersonHasTelephoneNumberGenerator extends VivoBaseGenerator implements
EditConfigurationGenerator {
private Log log = LogFactory.getLog(PersonHasTelephoneNumberGenerator.class);
@Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq,
HttpSession session) throws Exception {
EditConfigurationVTwo conf = new EditConfigurationVTwo();
initBasics(conf, vreq);
initPropertyParameters(vreq, session, conf);
initObjectPropForm(conf, vreq);
String phoneUri = getPhoneUri(vreq);
conf.setTemplate("personHasTelephoneNumber.ftl");
conf.setVarNameForSubject("person");
conf.setVarNameForPredicate("predicate");
conf.setVarNameForObject("individualVcard");
conf.setN3Required( Arrays.asList( n3ForNewPhone ) );
conf.setN3Optional( Arrays.asList( telephoneNumberAssertion ) );
conf.addNewResource("phone", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("individualVcard", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.setLiteralsOnForm(Arrays.asList("telephoneNumber" ));
conf.addSparqlForExistingLiteral("telephoneNumber", telephoneNumberQuery);
conf.addSparqlForAdditionalUrisInScope("individualVcard", individualVcardQuery);
if ( conf.isUpdate() ) {
HashMap<String, List<String>> urisInScope = new HashMap<String, List<String>>();
urisInScope.put("phone", Arrays.asList(new String[]{phoneUri}));
conf.addUrisInScope(urisInScope);
}
conf.addField( new FieldVTwo().
setName("telephoneNumber")
.setRangeDatatypeUri( XSD.xstring.toString() ).
setValidators( list("nonempty") ));
conf.addValidator(new AntiXssValidation());
prepare(vreq, conf);
return conf;
}
/* N3 assertions */
final static String n3ForNewPhone =
"?person <http://purl.obolibrary.org/obo/ARG_2000028> ?individualVcard . \n" +
"?individualVcard a <http://www.w3.org/2006/vcard/ns#Individual> . \n" +
"?individualVcard <http://purl.obolibrary.org/obo/ARG_2000029> ?person . \n" +
"?individualVcard <http://www.w3.org/2006/vcard/ns#hasTelephone> ?phone . \n" +
"?phone a <http://www.w3.org/2006/vcard/ns#Telephone> . " ;
final static String telephoneNumberAssertion =
"?phone <http://www.w3.org/2006/vcard/ns#telephone> ?telephoneNumber .";
/* Queries for editing an existing entry */
final static String individualVcardQuery =
"SELECT ?existingIndividualVcard WHERE { \n" +
"?person <http://purl.obolibrary.org/obo/ARG_2000028> ?existingIndividualVcard . \n" +
"}";
final static String telephoneNumberQuery =
"SELECT ?existingTelephoneNumber WHERE {\n"+
"?phone <http://www.w3.org/2006/vcard/ns#telephone> ?existingTelephoneNumber . }";
private String getPhoneUri(VitroRequest vreq) {
String phoneUri = vreq.getParameter("phoneUri");
return phoneUri;
}
}