Updates for menu management and IndividualsForClasses (i.e. internal filters plus custom selection of classes for page) as well as use of data getters predicate in menu model instead of type of Page to get data getter for page.

This commit is contained in:
hjkhjk54 2011-06-24 17:05:34 +00:00
parent 85bf772de6
commit 843e09a451
24 changed files with 1553 additions and 342 deletions

View file

@ -0,0 +1,117 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
// This file extends and proxies the default behavior defined in vitro/webapp/web/js/menupage/browseByVClass.js
// Saving the original getIndividuals function from browseByVClass
var getPersonIndividuals = browseByVClass.getIndividuals;
browseByVClass.getIndividuals = function(vclassUri, alpha, page, scroll) {
url = encodeURIComponent(vclassUri);
var restrictClasses = $('#restrictClasses').val();
if(restrictClasses.length > 0) {
if(restrictClasses.indexOf(",") != -1) {
var restrictClassesArray = restrictClasses.split(",");
var restrictUris = restrictClassesArray.join("&vclassId=");
url += "&vclassId=" + restrictUris;
}
else {
//does this need to be uri encoded? - assuming already url encoded
url += "&vclassId=" + restrictClasses;
}
}
url = this.dataServiceUrl + url;
//Get restriction classes from url
if ( alpha && alpha != "all") {
url = url + '&alpha=' + alpha;
}
if ( page ) {
url += '&page=' + page;
} else {
page = 1;
}
if ( typeof scroll === "undefined" ) {
scroll = true;
}
// Scroll to #menupage-intro page unless told otherwise
if ( scroll != false ) {
// only scroll back up if we're past the top of the #browse-by section
scrollPosition = browseByVClass.getPageScroll();
browseByOffset = $('#browse-by').offset();
if ( scrollPosition[1] > browseByOffset.top) {
$.scrollTo('#menupage-intro', 500);
}
}
$.getJSON(url, function(results) {
individualList = "";
// Catch exceptions when empty individuals result set is returned
// This is very likely to happen now since we don't have individual counts for each letter and always allow the result set to be filtered by any letter
if ( results.individuals.length == 0 ) {
browseByVClass.emptyResultSet(results.vclass, alpha)
} else {
$.each(results.individuals, function(i, item) {
label = results.individuals[i].label;
firstName = results.individuals[i].firstName;
lastName = results.individuals[i].lastName;
if ( firstName && lastName ) {
fullName = firstName + ' ' + lastName;
} else {
fullName = label;
}
moniker = results.individuals[i].moniker;
vclassName = results.individuals[i].vclassName;
if ( results.individuals[i].preferredTitle == "") {
// Use the moniker only if it's not empty and not equal to the VClass name
if ( moniker != vclassName && moniker != "" ) {
preferredTitle = moniker;
} else {
preferredTitle = "";
}
} else {
preferredTitle = results.individuals[i].preferredTitle;
}
uri = results.individuals[i].URI;
profileUrl = results.individuals[i].profileUrl;
if ( !results.individuals[i].thumbUrl ) {
image = browseByVClass.baseUrl + '/images/placeholders/person.thumbnail.jpg';
} else {
image = browseByVClass.baseUrl + results.individuals[i].thumbUrl;
}
// Build the content of each list item, piecing together each component
listItem = '<li class="vcard individual foaf-person" role="listitem" role="navigation">';
listItem += '<img src="'+ image +'" width="90" alt="'+ fullName +'" />';
listItem += '<h1 class="fn thumb"><a href="'+ profileUrl +'" title="View the profile page for '+ fullName +'">'+ fullName +'</a></h1>';
// Include the calculated preferred title (see above) only if it's not empty
if ( preferredTitle != "" ) {
listItem += '<span class="title">'+ preferredTitle +'</span>';
}
listItem += '</li>';
// browseByVClass.individualsInVClass.append(listItem);
individualList += listItem;
})
// Remove existing content
browseByVClass.wipeSlate();
// And then add the new content
browseByVClass.individualsInVClass.append(individualList);
// Check to see if we're dealing with pagination
if ( results.pages.length ) {
pages = results.pages;
browseByVClass.pagination(pages, page);
}
//Check if single vclass sent back, otherwise check for vclasses
if(results.vclass) {
selectedClassHeading = '<h3 class="selected-class">'+ results.vclass.name +'</h3>';
browseByVClass.individualsContainer.prepend(selectedClassHeading);
}
// set selected class, alpha and page
browseByVClass.selectedVClass(results.vclass.URI);
browseByVClass.selectedAlpha(alpha);
}
});
};