diff --git a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml index e7c6f492..f20d7076 100644 --- a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml +++ b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml @@ -23,15 +23,15 @@ class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.persongrantcount.PersonGrantCountRequestHandler" /> + class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.personlevel.PersonLevelRequestHandler" /> + class="edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coprincipalinvestigator.CoPIGrantCountRequestHandler" /> - diff --git a/productMods/js/visualization/personlevel/person_level-fm.js b/productMods/js/visualization/personlevel/person_level-fm.js new file mode 100644 index 00000000..dd20ca36 --- /dev/null +++ b/productMods/js/visualization/personlevel/person_level-fm.js @@ -0,0 +1,475 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +function getWellFormedURLs(given_uri, type) { + + if (!given_uri || given_uri == "") { + return; + } + + // general best practice is to put javascript code inside document.ready + // but in this case when i do that the function does not get called + // properly. + // so removing it for now. + + // $(document).ready(function() { + + var finalURL; + + if (type == "coauthorship") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PERSON_LEVEL_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + + } else if (type == "copi") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "COPI_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + + }else if (type == "profile") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PROFILE_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + } else if (type == "image") { + + finalURL = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "IMAGE_URL", uri: given_uri}), + dataType: "text", + async: false, + success:function(data){ + } + }).responseText; + + return finalURL; + + } else if (type == "profile_info") { + + var profileInfoJSON = $.ajax({ + url: contextPath + "/visualizationAjax", + data: ({vis: "utilities", vis_mode: "PROFILE_INFO", uri: given_uri}), + dataType: "json", + async: false, + success:function(data){ + } + }).responseText; + + return profileInfoJSON; + + } + + // }); +} + +$.fn.image = function(src, successFunc, failureFunc){ + return this.each(function(){ + var profileImage = new Image(); + profileImage.onerror = failureFunc; + profileImage.onload = successFunc; + profileImage.src = src; + + return profileImage; + }); +}; + +function setProfileImage(imageContainerID, mainImageURL) { + + if (imageContainerID == "") { + return; + } + + if (!mainImageURL || mainImageURL == "") { + $("#" + imageContainerID).empty(); + return; + } + + var rawPath = getWellFormedURLs(mainImageURL, "image"); + + var imageLink = contextPath + rawPath; + + var imageContainer = $("#" + imageContainerID); + imageContainer.image(imageLink, + function(){ + imageContainer.empty().append(this); + }, + function(){ + // For performing any action on failure to + // find the image. + imageContainer.empty(); + } + ); + +} + +function setProfileMoniker(monikerContainerID, moniker, doEllipsis) { + + if (monikerContainerID == "") { + return; + } + + if (!moniker) { + $("#" + monikerContainerID).empty(); + return; + } + + var finalDisplayMoniker; + + if (moniker.length > 30 && doEllipsis) { + + finalDisplayMoniker = moniker.substr(0,30) + "..."; + + } else { + + finalDisplayMoniker = moniker; + + } + + $("#" + monikerContainerID).empty().text(finalDisplayMoniker); + $("#" + monikerContainerID).attr('title', moniker); + +} + +function setProfileName(nameContainerID, name, doNameEllipsis) { + + if (nameContainerID == "") { + return; + } + + if (!name) { + $("#" + nameContainerID).empty(); + return; + } + + var finalDisplayName; + + if (name.length > 30 && doNameEllipsis) { + + finalDisplayName = name.substr(0,30) + "..."; + + } else { + + finalDisplayName = name; + + } + + $("#" + nameContainerID).empty().text(finalDisplayName); + $("#" + nameContainerID).attr('title', name); + +} + +function processProfileInformation(nameContainerID, + monikerContainerID, + imageContainerID, + profileInfoJSON, + doMonikerEllipsis, + doNameEllipsis) { + + var name, mainImageURL, moniker; + + if (jQuery.isEmptyObject(profileInfoJSON)) { + return; + } + + $.each(profileInfoJSON, function(key, set){ + + if (key.search(/mainImage/i) > -1) { + + mainImageURL = set[0]; + + } else if (key.search(/moniker/i) > -1) { + + moniker = set[0]; + + } else if (key.search(/label/i) > -1) { + + name = set[0]; + + } + + }); + + setProfileName(nameContainerID, name, doNameEllipsis); + setProfileMoniker(monikerContainerID, moniker, doMonikerEllipsis); + setProfileImage(imageContainerID, mainImageURL); + +} + +function visLoaded(nodes){ + + var jsonedNodes = jQuery.parseJSON(nodes); + var tableID = ""; + var tableContainer = ""; + + /*if (visMode == "coauthorship") {*/ + tableID = "coauthorships_table"; + tableContainer = "coauth_table_container"; + /*} else { + tableID = "copis_table"; + tableContainer = "copi_table_container"; + }*/ + + $(document).ready(function() { + createTable("coauthorships_table" , "coauth_table_container" , jsonedNodes.slice(1)); + }); + +} + +function createTable(tableID, tableContainer, tableData) { + + var number_of_works = ""; + var tableCaption = ""; + var tableColumnTitle1 = ""; + var tableColumnTitle2 = ""; + + /*if (visMode == "coauthorship") {*/ + tableCaption = "Co-authors "; + tableColumnTitle1 = "Author"; + tableColumnTitle2 = "Publications with
"; + /*} else { + tableCaption = "Co-pis "; + tableColumnTitle1 = "Principal Investigator"; + tableColumnTitle2 = "Grants with
"; + }*/ + + var table = $(''); + table.attr('id', tableID); + + table.append($(''); + + var row = $(''); + + var authorTH = $(''); + + row.append($('
').html(tableCaption + "(.CSV File)")); + + var header = $('
'); + authorTH.html(tableColumnTitle1); + row.append(authorTH); + + row.append($('').html(tableColumnTitle2 + "" + $('#ego_label').text())); + + header.append(row); + + table.append(header); + + $.each(tableData, function(i, item){ + + /*if (visMode == "coauthorship") {*/ + number_of_works = item.number_of_authored_works; + /*} else { + number_of_works = item.number_of_investigated_grants; + }*/ + var row = $('
').html(item.label)); + row.append($('').html(number_of_works)); + + table.append(row); + + }); + + table.prependTo('#' + tableContainer); + $('#' + tableContainer + " #loadingData").remove(); +} + +//renderStatsOnNodeClicked, CoRelations, noOfCoRelations +//function nodeClickedJS(json){ +function renderStatsOnNodeClicked(json){ + + //console.log(json); + var obj = jQuery.parseJSON(json); + + var works = ""; + var persons = ""; + var relation = ""; + var earliest_work = ""; + var latest_work = ""; + var number_of_works = ""; + + /*if (visMode == "coauthorship") {*/ + works = "Publication(s)"; + persons = "Co-author(s)"; + relation = "coauthorship" + earliest_work = obj.earliest_publication; + latest_work = obj.latest_publication; + number_of_works = obj.number_of_authored_works; + /*} else { + works = "Grant(s)"; + persons = "Co-PI(s)"; + relation = "copi"; + earliest_work = obj.earliest_grant; + latest_work = obj.latest_grant; + number_of_works = obj.number_of_investigated_grants; + }*/ + + + + + $("#dataPanel").attr("style","visibility:visible"); + $("#works").empty().append(number_of_works); + + /* + * Here obj.url points to the uri of that individual + */ + if(obj.url){ + + if (obj.url == egoURI) { + + $("#authorName").addClass('author_name').removeClass('neutral_author_name'); + $('#num_works > .author_stats_text').text(works); + $('#num_authors > .author_stats_text').text(persons); + + } else { + + $("#authorName").addClass('neutral_author_name').removeClass('author_name'); + $('#num_works > .author_stats_text').text('Joint ' + works); + $('#num_authors > .author_stats_text').text('Joint ' + persons); + + } + + $("#profileUrl").attr("href", getWellFormedURLs(obj.url, "profile")); + $("#coAuthorshipVisUrl").attr("href", getWellFormedURLs(obj.url, relation)); + processProfileInformation("authorName", + "profileMoniker", + "profileImage", + jQuery.parseJSON(getWellFormedURLs(obj.url, "profile_info")), + true, + true); + + + + } else{ + $("#profileUrl").attr("href","#"); + $("#coAuthorshipVisUrl").attr("href","#"); + } + + $("#coAuthors").empty().append(obj.noOfCorelations); + + $("#firstPublication").empty().append(earliest_work); + (earliest_work)?$("#fPub").attr("style","visibility:visible"):$("#fPub").attr("style","visibility:hidden"); + $("#lastPublication").empty().append(latest_work); + (latest_work)?$("#lPub").attr("style","visibility:visible"):$("#lPub").attr("style","visibility:hidden"); + + // obj.url:the url parameter for node + +} + +/* + * Inside both of these functions, '&' are replaced with '%26' because we are externally + * passing two parameters to the flash code using flashvars (see renderCoAuthorshipVisualization()) + * and they are delimited using '&' too. + */ + +function getEncodedCoAuthorURL(){ + + var queryString = "uri="+ egoURI + "&vis=coauthorship"; +// console.log('domainParam is '+ domainParam); +// console.log('CoAuthorURL is ' + domainParam + '?' + queryString.replace(/&/g, '%26')); + return domainParam + '?' + queryString.replace(/&/g, '%26'); +} + +function getEncodedCoPIURL(){ + + var queryString = "uri="+ egoURI+ "&vis=coprincipalinvestigator"; +// console.log('CoPIURL is ' + domainParam + '?' + queryString.replace(/&/g, '%26') ); + return domainParam + '?' + queryString.replace(/&/g, '%26'); +} + +function renderCoAuthorshipVisualization() { + + var visualization = ""; + var encodedURL = ""; + + /*if(visMode == "coauthorship"){*/ + visualization = "CoAuthor"; + encodedURL = getEncodedCoAuthorURL(); + /*} else { + visualization = "CoPI"; + encodedURL = getEncodedCoPIURL(); + }*/ + +// console.log('visualization is ' + visualization + ' and encodedURL is '+ encodedURL); + // Version check for the Flash Player that has the ability to start Player + // Product Install (6.0r65) + var hasProductInstall = DetectFlashVer(6, 0, 65); + + // Version check based upon the values defined in globals + var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision); + + if ( hasProductInstall && !hasRequestedVersion ) { + // DO NOT MODIFY THE FOLLOWING FOUR LINES + // Location visited after installation is complete if installation is + // required + var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn"; + var MMredirectURL = window.location; + document.title = document.title.slice(0, 47) + " - Flash Player Installation"; + var MMdoctitle = document.title; + + AC_FL_RunContent( + "src", "playerProductInstall", + "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"", + "width", "800", + "height", "840", + "align", "middle", + "id", "EgoCentric", + "quality", "high", + "bgcolor", "#ffffff", + "name", "EgoCentric", + "allowScriptAccess","sameDomain", + "type", "application/x-shockwave-flash", + "pluginspage", "http://www.adobe.com/go/getflashplayer" + ); + } else if (hasRequestedVersion) { + // if we've detected an acceptable version + // embed the Flash Content SWF when all tests are passed + //coAuthorUrl=/vivo1/visualization?vis=coauthorship%26render_mode=data%26uri=http%3A%2F%2Fvivo.iu.edu%2Findividual%2FBrnerKaty&labelField=label&coPIUrl=/vivo1/visualization?vis=coprincipalinvestigator%26render_mode=data%26uri=http%3A%2F%2Fvivo.iu.edu%2Findividual%2FBrnerKaty&labelField=label + AC_FL_RunContent( + "src", swfLink, +// "flashVars", 'coAuthorUrl='+ encodeURL(egoCoAuthorshipDataFeederURL) + '&coPIUrl=' + encodeURL(egoCoPIDataFeederURL) , +// "flashVars", 'coAuthorUrl='+ getEncodedCoAuthorURL() + '&coPIUrl=' + getEncodedCoPIURL() , +// "flashVars", 'graphmlUrl=' + getEncodedCoAuthorURL() + '&labelField=label&visType=CoAuthor', + "flashVars", 'graphmlUrl=' + encodedURL + '&labelField=label&visType='+visualization, + "width", "600", + "height", "850", + "align", "top", + "id", "EgoCentric", + "quality", "high", + "bgcolor", "#ffffff", + "name", "EgoCentric", + "allowScriptAccess","sameDomain", + "type", "application/x-shockwave-flash", + "pluginspage", "http://www.adobe.com/go/getflashplayer" + ); + } else { // flash is too old or we can't detect the plugin + var alternateContent = '

' + + 'This content requires the Adobe Flash Player. ' + + 'Get Flash

'; + document.write(alternateContent); // insert non-flash content + + } + +} \ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl new file mode 100644 index 00000000..a1b2b227 --- /dev/null +++ b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl @@ -0,0 +1,203 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#assign standardVisualizationURLRoot ="/visualizationfm"> +<#assign ajaxVisualizationURLRoot ="/visualizationAjax"> +<#assign dataVisualizationURLRoot ="/visualizationData"> + +<#assign egoURI ="${egoURIParam?url}"> +<#assign egoCoAuthorshipDataFeederURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthor_network_stream&labelField=label'> + +<#assign coprincipalinvestigatorURL = '${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${egoURI}&visMode=copi'> + +<#assign egoCoAuthorsListDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthors'> +<#assign egoCoAuthorshipNetworkDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&visMode=coauthor_network_download'> + +<#assign swfLink = '${urls.images}/visualization/coauthorship/EgoCentric.swf'> +<#assign adobeFlashDetector = '${urls.base}/js/visualization/coauthorship/AC_OETags.js'> +<#assign googleVisualizationAPI = 'http://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221%22%2C%22packages%22%3A%5B%22areachart%22%2C%22imagesparkline%22%5D%7D%5D%7D'> +<#assign coAuthorPersonLevelJavaScript = '${urls.base}/js/visualization/personlevel/person_level-fm.js'> + + + + + + + + + + +<#assign coAuthorStyle = "${urls.base}/css/visualization/personlevel/coauthor_style.css" /> +<#assign pageStyle = "${urls.base}/css/visualization/personlevel/page.css" /> +<#assign vizStyle = "${urls.base}/css/visualization/visualization.css" /> + + + + + +<#assign loadingImageLink = "${urls.images}/visualization/ajax-loader.gif"> + +<#assign egoVivoProfileURL = "/individual?uri=${egoURI}" /> + + + + + +
+
+ + <#-- Label --> +

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

Co-Investigator Network

+ View + 4 +
+ +
+ + <#if (numOfAuthors > 0) > + +

Co-Author Network

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

Profile

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

Tables

+ +
+

+ TABLE +

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

+
+ + + +
+ +
+ + + +
diff --git a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl new file mode 100644 index 00000000..841b7965 --- /dev/null +++ b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl @@ -0,0 +1 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> \ No newline at end of file diff --git a/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl b/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl index 46e8da66..eddb9995 100644 --- a/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl +++ b/productMods/templates/freemarker/visualization/publication/personPublicationSparklineContent.ftl @@ -41,8 +41,6 @@ column: 0, minValue: '${sparklineVO.earliestRenderedPublicationYear?c}', maxValue: '${sparklineVO.latestRenderedPublicationYear?c}' - /*minValue: '2001', - maxValue: '2011'*/ }])); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java index 4cc9fe77..d6f38b21 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipVisCodeGenerator.java @@ -514,6 +514,14 @@ public class CoAuthorshipVisCodeGenerator { sparklineData.setTable(tableCode); + + Map yearToUniqueCoauthorsCount = new HashMap(); + for (Map.Entry> currentYear : yearToUniqueCoauthors.entrySet()) { + yearToUniqueCoauthorsCount.put(currentYear.getKey(), currentYear.getValue().size()); + } + + sparklineData.setYearToActivityCount(yearToUniqueCoauthorsCount); + return divContextCode.toString(); } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java index 5a610548..de99d6e9 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java @@ -78,9 +78,6 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler { String egoURI = vitroRequest.getParameter( VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY); - String renderMode = vitroRequest.getParameter( - VisualizationFrameworkConstants.RENDER_MODE_KEY); - String visMode = vitroRequest.getParameter( VisualizationFrameworkConstants.VIS_MODE_KEY); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java index d5a3467f..5f0843de 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java @@ -172,20 +172,6 @@ public class UtilitiesRequestHandler implements VisualizationRequestHandler { } return finalThumbNailLocation; } - /* - - private TemplateResponseValues prepareUtilitiesResponse(String preparedContent, VitroRequest vreq) { - -// response.setContentType("text/plain"); - - String utilitiesTemplate = "/visualization/utilities.ftl"; - - Map body = new HashMap(); - body.put("utilityResopnse", preparedContent); - - return new TemplateResponseValues(utilitiesTemplate, body); - - }*/ @Override public Map generateDataVisualization(