define(['jquery', 'underscore', 'backbone', 'models/SolrResult'], function($, _, Backbone, SolrResult, template) { 'use strict'; var DownloadButtonView = Backbone.View.extend({ tagName: "a", className: "btn download", initialize: function(options){ if(!options) var options = {} this.model = options.model || new SolrResult(); }, events: { "click" : "download" }, render: function(){ //Add the href and id attributes this.$el.attr("href", this.model.get("url")) .attr("data-id", this.model.get("id")); //For packages if(this.model.type == "Package"){ this.$el.text("Download All") .addClass("btn-primary"); } //For individual DataONEObjects else{ this.$el.text("Download"); } //Add a download icon this.$el.append( $(document.createElement("i")).addClass("icon icon-cloud-download") ); //If this is a Download All button for a package but it's too large, then disable the button with a message if(this.model.type == "Package" && this.model.getTotalSize() > MetacatUI.appModel.get("maxDownloadSize")){ this.$el.addClass("tooltip-this") .attr("disabled", "disabled") .attr("data-title", "This dataset is too large to download as a package. Please download the files individually or contact us for alternate data access.") .attr("data-placement", "top") .attr("data-trigger", "hover") .attr("data-container", "body"); // Removing the `href` attribute while disabling the download button. this.$el.removeAttr("href"); // Removing pointer as cursor and setting to default this.$el.css("cursor","default"); } }, download: function(e){ e.preventDefault(); // Checking if the Download All button is disabled because the package is too large var isDownloadDisabled = (this.$el.attr("disabled") === "disabled") ? true : false; // Do nothing if the `disabled` attribute is set!. if(isDownloadDisabled) { return; } // Perform the download procedure otherwise if(this.$el.is(".in-progress")) return true; //Show that the download has started this.$el.addClass("in-progress"); var buttonHTML = this.$el.html(); this.$el.html("Downloading... "); //If we found a model, fire the download event this.model.downloadWithCredentials(); this.listenTo(this.model, "downloadComplete", function(){ //Show that the download is complete this.$el.html("Complete ") .addClass("complete") .removeClass("in-progress"); var view = this; //Put the download button back to normal setTimeout(function(){ //After one second, change the background color with an animation view.$el.removeClass("complete") .html(buttonHTML); }, 2000); }); } }); return DownloadButtonView; });