define(["jquery",
"underscore",
"backbone",
"text!templates/portals/portalVisualizations.html",
"views/portals/PortalSectionView"],
function($, _, Backbone, PortalVisualizationsTemplate, PortalSectionView){
/**
* @class PortalVisualizationsView
* @classdesc The PortalVisualizationsView is a view to render the
* portal visualizations tab (within PortalSectionView)
* @classcategory Views/Portals
*/
var PortalVisualizationsView = PortalSectionView.extend(
/** @lends PortalVisualizationsView.prototype */{
/* The class names to add to this view */
className: "portal-viz-section-view tab-pane portal-section-view",
/* TODO: Decide if we need this */
type: "PortalVisualizations",
/**
* The PortalVizSectionModel
* @type {PortalVizSectionModel}
*/
model: null,
/* The list of subview instances contained in this view*/
subviews: [], // Could be a literal object {}
/* Renders the compiled template into HTML */
template: _.template(PortalVisualizationsTemplate),
/* The events that this view listens to*/
events: {
},
/* Construct a new instance of PortalVisualizationsView */
initialize: function(options) {
// Get all the options and apply them to this view
if( typeof options == "object" ) {
var optionKeys = Object.keys(options);
_.each(optionKeys, function(key, i) {
this[key] = options[key];
}, this);
}
},
/* Render the view */
render: function() {
//Attach this view to the DOM element
this.$el.data("view", this);
if( this.model.get("visualizationType") == "fever" && MetacatUI.appModel.get("enableFeverVisualizations") ){
this.renderFEVer();
}
},
renderFEVer: function(){
//Insert the FEVer visualization into the page
var iframe = $(document.createElement("iframe"))
.attr("src", MetacatUI.appModel.get("feverUrl"))
.css("width", "100%");
this.$el.html(iframe);
},
postRender: function(){
if( this.model.get("visualizationType") == "fever" ){
$(window).resize(this.adjustVizHeight);
$(".auto-height-member").resize(this.adjustVizHeight);
//Get the height of the visible part of the page for the iframe
this.adjustVizHeight();
}
},
adjustVizHeight: function(){
// Get the heights of the header, navbar, and footer
var otherHeight = 0;
$(".auto-height-member").each(function(i, el) {
if ($(el).css("display") != "none" && !$(el).is("#Footer") ) {
otherHeight += $(el).outerHeight(true);
}
});
// Get the remaining height left based on the window size
var remainingHeight = $(window).outerHeight(true) - otherHeight;
if (remainingHeight < 0){
remainingHeight = $(window).outerHeight(true) || 600;
}
else if (remainingHeight <= 120){
remainingHeight = ($(window).outerHeight(true) - remainingHeight) || 600;
}
this.$("iframe").css("height", remainingHeight + "px");
},
onClose: function() {
$(window).removeListener("resize", this.adjustVizHeight);
}
});
return PortalVisualizationsView;
});