define(["jquery",
"underscore",
"backbone",
"text!templates/metadata/EMLPartyDisplay.html",
"views/portals/PortalSectionView",
"views/portals/PortalLogosView",
"text!templates/portals/portalAcknowledgements.html",
"text!templates/portals/portalAwards.html"],
function($, _, Backbone, EMLPartyDisplayTemplate, PortalSectionView,
PortalLogosView, AcknowledgementsTemplate, AwardsTemplate){
/**
* @class PortalMembersView
* @classdesc The PortalMembersView is a view to render the
* portal members tab (within PortalSectionView)
* @classcategory Views/Portals
* @extends PortalSectionView
* @constructor
*/
var PortalMembersView = PortalSectionView.extend(
/** @lends PortalMembersView.prototype */{
type: "PortalMembers",
/**
* The display name for this Section
* @type {string}
*/
uniqueSectionLabel: "Members",
// /* The list of subview instances contained in this view*/
// subviews: [], // Could be a literal object {}
// /* Renders the compiled template into HTML */
partyTemplate: _.template(EMLPartyDisplayTemplate),
acknowledgementsTemplate: _.template(AcknowledgementsTemplate),
awardsTemplate: _.template(AwardsTemplate),
// /* The events that this view listens to*/
// events: {
// },
// /* Construct a new instance of PortalMembersView */
// initialize: function() {
// },
// /* Render the view */
render: function() {
if( this.id ){
this.$el.attr("id", this.id);
}
var parties = this.model.get("associatedParties");
var thisview = this;
// Group parties into sets of 2 to do 2 per row
var row_groups = _.groupBy(parties, function(parties, index) {
return Math.floor(index / 2);
});
_.each(row_groups, function(row_group){
// Create a new bootstrap row for each set of 2 parties
var newdiv = $('<div class="row-fluid"></div>');
// Put the empty row into the portal members container
thisview.$el.append(newdiv);
// iterate for the 2 parties in this row
_.each(row_group, function(party) {
//Get the party info in JSON form
var partyInfo = party.toJSON();
// Create html links from the urls
var regex = /(.+)/gi;
var urlLink = [];
_.each(party.get("onlineUrl"), function(url){
urlLink.push(url.replace(regex, '<a href="$&">$&</a>'));
});
partyInfo.urlLink = urlLink;
//Set the ORCIDs as a blank string
partyInfo.orcids = "";
//Get the UserIds so we can display ORCIDs
if( Array.isArray(partyInfo.userId) && partyInfo.userId.length ){
//FInd the user ids that are ORCIDs
_.each( partyInfo.userId, function(userId){
//If this user id is an ORCID,
if( party.isOrcid(userId) ){
//Display it with the icon and as a link
partyInfo.orcids += "<img src=\"" + MetacatUI.root + "/img/orcid_64x64.png\" " +
"class=\"icon orcid-logo icon-on-left\" />" +
"<a href=\"" + userId + "\" target=\"_blank\">" + userId + "</a>";
}
});
}
// render party into its row
newdiv.append(thisview.partyTemplate(partyInfo));
});
});
var acknowledgements = this.model.get("acknowledgments") || "";
var awards = this.model.get("awards") || "";
//Add a container element
if(acknowledgements || awards.length){
var ack_div = $('<div class="well awards-info"></div>');
this.$el.append(ack_div);
//Add the awards
if( awards.length ) {
ack_div.append(this.awardsTemplate({awards: awards}));
}
//Add the acknowledgments
if( acknowledgements ) {
ack_div.append(this.acknowledgementsTemplate(acknowledgements.toJSON()));
}
}
this.$el.data("view", this);
},
// onClose: function() {
// }
});
return PortalMembersView;
});