Upload: Cleanup ftp popup

This commit is contained in:
Aysam Guerler
2015-01-23 15:11:24 -05:00
parent 5e8f7db1f8
commit e9692517a4
3 changed files with 103 additions and 159 deletions
+51 -79
View File
@@ -6,7 +6,8 @@ return Backbone.View.extend({
// options
options: {
class_add : 'upload-icon-button fa fa-square-o',
class_remove : 'upload-icon-button fa fa-check-square-o'
class_remove : 'upload-icon-button fa fa-check-square-o',
class_partial : 'upload-icon-button fa fa-minus-square-o'
},
// render
@@ -20,6 +21,9 @@ return Backbone.View.extend({
// set template
this.setElement(this._template());
// list of rows
this.rows = [];
// load extension
Utils.get({
url : galaxy_config.root + 'api/ftp_files',
@@ -35,7 +39,6 @@ return Backbone.View.extend({
// fill table
_fill: function(ftp_files) {
var self = this;
if (ftp_files && ftp_files.length > 0) {
// add table
this.$el.find('#upload-ftp-content').html($(this._templateTable()));
@@ -43,7 +46,7 @@ return Backbone.View.extend({
// add files to table
var size = 0;
for (key in ftp_files) {
this.add(ftp_files[key]);
this.rows.push(this._add(ftp_files[key]));
size += ftp_files[key].size;
}
@@ -51,37 +54,23 @@ return Backbone.View.extend({
this.$el.find('#upload-ftp-number').html(ftp_files.length + ' files');
this.$el.find('#upload-ftp-disk').html(Utils.bytesToString (size, true));
var selectAll = this.$el.find('#selectAll');
// call method to determine and set selectAll status on loading
this._updateSelectAll(selectAll);
// selectAll checkbox has been clicked
selectAll.on('click', function() {
var checkboxes=$(this).parents().find('tr.upload-ftp-row>td>div');
var len = checkboxes.length;
$this = $(this);
var allChecked = !($this.hasClass('fa-check-square-o'));
// change state of the sub-checkboxes
for(i = 0; i < len; i++) {
if(allChecked) {
// all checkboxes should be checked
if(checkboxes.eq(i).hasClass('fa-square-o')) {
// if they are not checked, check them
checkboxes.eq(i).trigger('updateUpBox');
}
} else {
// no checkboxes should be checked
if(checkboxes.eq(i).hasClass('fa-check-square-o')) {
// if they are checked, uncheck them
checkboxes.eq(i).trigger('updateUpBox');
}
// add event handler to select/unselect all
this.$select_all = $('#upload-selectall');
this.$select_all.addClass(this.options.class_add);
var self = this;
this.$select_all.on('click', function() {
var add = self.$select_all.hasClass(self.options.class_add);
for (key in ftp_files) {
var ftp_file = ftp_files[key];
var model_index = self._find(ftp_file);
if(!model_index && add || model_index && !add) {
self.rows[key].trigger('click');
}
}
self._updateSelectAll(selectAll);
});
// refresh
self._refresh();
} else {
// add info
this.$el.find('#upload-ftp-content').html($(this._templateInfo()));
@@ -92,7 +81,7 @@ return Backbone.View.extend({
},
// add
add: function(ftp_file) {
_add: function(ftp_file) {
// link this
var self = this;
@@ -116,8 +105,8 @@ return Backbone.View.extend({
// add icon class
$icon.addClass(icon_class);
// add files to the uploadbox
$it.on('updateUpBox', function() {
// click to add ftp files
$it.on('click', function() {
// find model
var model_index = self._find(ftp_file);
@@ -133,67 +122,51 @@ return Backbone.View.extend({
size : ftp_file.size,
path : ftp_file.path
}]);
// add new icon class
$icon.addClass(self.options.class_remove);
} else {
// remove
self.app.collection.remove(model_index);
// add new icon class
$icon.addClass(self.options.class_add);
}
// update select all checkbox
self._refresh();
});
// click to add ftp files
$it.on('click', function() {
//trigger my new event
$icon.trigger('updateUpBox');
// click to add ftp files
// modify selectAll box based on number of checkboxes checked
var selectBox=$icon.parents().find('#selectAll');
// determine and set state of selectAll after sub-checkbox clicked
self._updateSelectAll(selectBox);
});
// return dom handler
return $it;
},
_updateSelectAll: function(selectBox) {
// array of all checkboxes
var checkboxes=selectBox.parents().find('tr.upload-ftp-row>td>div');
// array of only checked checkboxes
var checkedCheckboxes=selectBox.parents().find('tr.upload-ftp-row>td>div.fa-check-square-o');
var lenAll = checkboxes.length;
var lenChecked = checkedCheckboxes.length;
// determine which state the selectAll checkbox needs to be and setting it
if(lenChecked > 0 && lenChecked !== lenAll) {
// indeterminate state
selectBox.removeClass('fa-square-o fa-check-square-o');
selectBox.addClass('fa-minus-square-o');
} else if(lenChecked === lenAll) {
// checked state
selectBox.removeClass('fa-square-o fa-minus-square-o');
selectBox.addClass('fa-check-square-o');
} else if(lenChecked === 0) {
// unchecked state
selectBox.removeClass('fa-check-square-o fa-minus-square-o');
selectBox.addClass('fa-square-o');
// refresh
_refresh: function() {
var filtered = this.app.collection.where({file_mode : 'ftp'});
this.$select_all.removeClass();
if (filtered.length == 0) {
this.$select_all.addClass(this.options.class_add);
} else {
if (filtered.length == this.rows.length) {
this.$select_all.addClass(this.options.class_remove);
} else {
this.$select_all.addClass(this.options.class_partial);
}
}
},
// get model index
_find: function(ftp_file) {
// check if exists already
var filtered = this.app.collection.where({file_path : ftp_file.path});
var model_index = null;
for (var key in filtered) {
var item = filtered[key];
if (item.get('status') == 'init' && item.get('file_mode') == 'ftp') {
model_index = item.get('id');
}
var item = this.app.collection.findWhere({
file_path : ftp_file.path,
status : 'init',
file_mode : 'ftp'
});
if (item) {
return item.get('id');
}
return model_index;
return null;
},
// template row
@@ -218,7 +191,7 @@ return Backbone.View.extend({
'<table class="grid" style="float: left;">' +
'<thead>' +
'<tr>' +
'<th><div id="selectAll" class="upload-icon-button fa fa-square-o" ></th>' +
'<th><div id="upload-selectall"></th>' +
'<th>Name</th>' +
'<th>Size</th>' +
'<th>Created</th>' +
@@ -243,7 +216,6 @@ return Backbone.View.extend({
'<div id="upload-ftp-content"></div>' +
'<div>';
}
});
});
@@ -1 +1 @@
define(["utils/utils"],function(a){return Backbone.View.extend({options:{class_add:"upload-icon-button fa fa-square-o",class_remove:"upload-icon-button fa fa-check-square-o"},initialize:function(c){this.app=c;var b=this;this.setElement(this._template());a.get({url:galaxy_config.root+"api/ftp_files",success:function(d){b._fill(d)},error:function(){b._fill()}})},events:{mousedown:function(b){b.preventDefault()}},_fill:function(d){var b=this;if(d&&d.length>0){this.$el.find("#upload-ftp-content").html($(this._templateTable()));var c=0;for(key in d){this.add(d[key]);c+=d[key].size}this.$el.find("#upload-ftp-number").html(d.length+" files");this.$el.find("#upload-ftp-disk").html(a.bytesToString(c,true));var e=this.$el.find("#selectAll");this._updateSelectAll(e);e.on("click",function(){var h=$(this).parents().find("tr.upload-ftp-row>td>div");var g=h.length;$this=$(this);var f=!($this.hasClass("fa-check-square-o"));for(i=0;i<g;i++){if(f){if(h.eq(i).hasClass("fa-square-o")){h.eq(i).trigger("updateUpBox")}}else{if(h.eq(i).hasClass("fa-check-square-o")){h.eq(i).trigger("updateUpBox")}}}b._updateSelectAll(e)})}else{this.$el.find("#upload-ftp-content").html($(this._templateInfo()))}this.$el.find("#upload-ftp-wait").hide()},add:function(f){var d=this;var e=$(this._templateRow(f));var b=e.find(".icon");$(this.el).find("tbody").append(e);var c="";if(this._find(f)){c=this.options.class_remove}else{c=this.options.class_add}b.addClass(c);e.on("updateUpBox",function(){var g=d._find(f);b.removeClass();if(!g){d.app.uploadbox.add([{mode:"ftp",name:f.path,size:f.size,path:f.path}]);b.addClass(d.options.class_remove)}else{d.app.collection.remove(g);b.addClass(d.options.class_add)}});e.on("click",function(){b.trigger("updateUpBox");var g=b.parents().find("#selectAll");d._updateSelectAll(g)})},_updateSelectAll:function(e){var d=e.parents().find("tr.upload-ftp-row>td>div");var f=e.parents().find("tr.upload-ftp-row>td>div.fa-check-square-o");var c=d.length;var b=f.length;if(b>0&&b!==c){e.removeClass("fa-square-o fa-check-square-o");e.addClass("fa-minus-square-o")}else{if(b===c){e.removeClass("fa-square-o fa-minus-square-o");e.addClass("fa-check-square-o")}else{if(b===0){e.removeClass("fa-check-square-o fa-minus-square-o");e.addClass("fa-square-o")}}}},_find:function(f){var c=this.app.collection.where({file_path:f.path});var b=null;for(var d in c){var e=c[d];if(e.get("status")=="init"&&e.get("file_mode")=="ftp"){b=e.get("id")}}return b},_templateRow:function(b){return'<tr class="upload-ftp-row" style="cursor: pointer;"><td><div class="icon"/></td><td style="width: 200px"><p style="width: inherit; word-wrap: break-word;">'+b.path+'</p></td><td style="white-space: nowrap;">'+a.bytesToString(b.size)+'</td><td style="white-space: nowrap;">'+b.ctime+"</td></tr>"},_templateTable:function(){return'<span style="whitespace: nowrap; float: left;">Available files: </span><span style="whitespace: nowrap; float: right;"><span class="upload-icon fa fa-file-text-o"/><span id="upload-ftp-number"/>&nbsp;&nbsp;<span class="upload-icon fa fa-hdd-o"/><span id="upload-ftp-disk"/></span><table class="grid" style="float: left;"><thead><tr><th><div id="selectAll" class="upload-icon-button fa fa-square-o" ></th><th>Name</th><th>Size</th><th>Created</th></tr></thead><tbody></tbody></table>'},_templateInfo:function(){return'<div class="upload-ftp-warning warningmessage">Your FTP directory does not contain any files.</div>'},_template:function(){return'<div class="upload-ftp"><div id="upload-ftp-wait" class="upload-ftp-wait fa fa-spinner fa-spin"/><div class="upload-ftp-help">This Galaxy server allows you to upload files via FTP. To upload some files, log in to the FTP server at <strong>'+this.app.options.ftp_upload_site+'</strong> using your Galaxy credentials (email address and password).</div><div id="upload-ftp-content"></div><div>'}})});
define(["utils/utils"],function(a){return Backbone.View.extend({options:{class_add:"upload-icon-button fa fa-square-o",class_remove:"upload-icon-button fa fa-check-square-o",class_partial:"upload-icon-button fa fa-minus-square-o"},initialize:function(c){this.app=c;var b=this;this.setElement(this._template());this.rows=[];a.get({url:galaxy_config.root+"api/ftp_files",success:function(d){b._fill(d)},error:function(){b._fill()}})},events:{mousedown:function(b){b.preventDefault()}},_fill:function(d){if(d&&d.length>0){this.$el.find("#upload-ftp-content").html($(this._templateTable()));var c=0;for(key in d){this.rows.push(this._add(d[key]));c+=d[key].size}this.$el.find("#upload-ftp-number").html(d.length+" files");this.$el.find("#upload-ftp-disk").html(a.bytesToString(c,true));this.$select_all=$("#upload-selectall");this.$select_all.addClass(this.options.class_add);var b=this;this.$select_all.on("click",function(){var g=b.$select_all.hasClass(b.options.class_add);for(key in d){var f=d[key];var e=b._find(f);if(!e&&g||e&&!g){b.rows[key].trigger("click")}}});b._refresh()}else{this.$el.find("#upload-ftp-content").html($(this._templateInfo()))}this.$el.find("#upload-ftp-wait").hide()},_add:function(f){var d=this;var e=$(this._templateRow(f));var b=e.find(".icon");$(this.el).find("tbody").append(e);var c="";if(this._find(f)){c=this.options.class_remove}else{c=this.options.class_add}b.addClass(c);e.on("click",function(){var g=d._find(f);b.removeClass();if(!g){d.app.uploadbox.add([{mode:"ftp",name:f.path,size:f.size,path:f.path}]);b.addClass(d.options.class_remove)}else{d.app.collection.remove(g);b.addClass(d.options.class_add)}d._refresh()});return e},_refresh:function(){var b=this.app.collection.where({file_mode:"ftp"});this.$select_all.removeClass();if(b.length==0){this.$select_all.addClass(this.options.class_add)}else{if(b.length==this.rows.length){this.$select_all.addClass(this.options.class_remove)}else{this.$select_all.addClass(this.options.class_partial)}}},_find:function(c){var b=this.app.collection.findWhere({file_path:c.path,status:"init",file_mode:"ftp"});if(b){return b.get("id")}return null},_templateRow:function(b){return'<tr class="upload-ftp-row" style="cursor: pointer;"><td><div class="icon"/></td><td style="width: 200px"><p style="width: inherit; word-wrap: break-word;">'+b.path+'</p></td><td style="white-space: nowrap;">'+a.bytesToString(b.size)+'</td><td style="white-space: nowrap;">'+b.ctime+"</td></tr>"},_templateTable:function(){return'<span style="whitespace: nowrap; float: left;">Available files: </span><span style="whitespace: nowrap; float: right;"><span class="upload-icon fa fa-file-text-o"/><span id="upload-ftp-number"/>&nbsp;&nbsp;<span class="upload-icon fa fa-hdd-o"/><span id="upload-ftp-disk"/></span><table class="grid" style="float: left;"><thead><tr><th><div id="upload-selectall"></th><th>Name</th><th>Size</th><th>Created</th></tr></thead><tbody></tbody></table>'},_templateInfo:function(){return'<div class="upload-ftp-warning warningmessage">Your FTP directory does not contain any files.</div>'},_template:function(){return'<div class="upload-ftp"><div id="upload-ftp-wait" class="upload-ftp-wait fa fa-spinner fa-spin"/><div class="upload-ftp-help">This Galaxy server allows you to upload files via FTP. To upload some files, log in to the FTP server at <strong>'+this.app.options.ftp_upload_site+'</strong> using your Galaxy credentials (email address and password).</div><div id="upload-ftp-content"></div><div>'}})});