Move add_datasets method to tracks module to prevent circular dependency.

This commit is contained in:
Jeremy Goecks
2012-09-27 17:54:35 -04:00
parent ccf109b740
commit 93744207e9
2 changed files with 56 additions and 59 deletions
+55 -6
View File
@@ -6,6 +6,58 @@ define( ["libs/underscore", "viz/visualization", "viz/trackster/util",
var extend = _.extend;
var get_random_color = util.get_random_color;
/**
* Use a popup grid to add more datasets.
*/
var add_datasets = function(dataset_url, add_track_async_url, success_fn) {
$.ajax({
url: dataset_url,
data: { "f-dbkey": view.dbkey },
error: function() { alert( "Grid failed" ); },
success: function(table_html) {
show_modal(
"Select datasets for new tracks",
table_html, {
"Cancel": function() {
hide_modal();
},
"Add": function() {
var requests = [];
$('input[name=id]:checked,input[name=ldda_ids]:checked').each(function() {
var data = {
data_type: 'track_config',
'hda_ldda': 'hda'
},
id = $(this).val();
if ($(this).attr("name") !== "id") {
data.hda_ldda = 'ldda';
}
requests[requests.length] = $.ajax({
url: add_track_async_url + "/" + id,
data: data,
dataType: "json"
});
});
// To preserve order, wait until there are definitions for all tracks and then add
// them sequentially.
$.when.apply($, requests).then(function() {
// jQuery always returns an Array for arguments, so need to look at first element
// to determine whether multiple requests were made and consequently how to
// map arguments to track definitions.
var track_defs = (arguments[0] instanceof Array ?
$.map(arguments, function(arg) { return arg[0]; }) :
[ arguments[0] ]
);
success_fn(track_defs);
});
hide_modal();
}
}
);
}
});
};
/**
* Helper to determine if object is jQuery deferred.
@@ -909,15 +961,11 @@ extend( View.prototype, DrawableCollection.prototype, {
// Introduction div shown when there are no tracks.
this.intro_div = $("<div/>").addClass("intro").appendTo(this.viewport_container).hide();
var add_tracks_button = $("<div/>").text("Add Datasets to Visualization").addClass("action-button").appendTo(this.intro_div).click(function () {
// Does not work because it would create circular dependency b/t trackster_ui and tracks.
/*
var ui = new trackster_ui_mod.TracksterUI();
ui.add_datasets(add_datasets_url, add_track_async_url, function(tracks) {
add_datasets(add_datasets_url, add_track_async_url, function(tracks) {
_.each(tracks, function(track) {
view.add_drawable( object_from_template(track, view, view) );
});
});
*/
});
// Another label track at bottom
this.nav_labeltrack = $("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);
@@ -4200,7 +4248,8 @@ return {
ReadTrack: ReadTrack,
VcfTrack: VcfTrack,
CompositeTrack: CompositeTrack,
object_from_template: object_from_template
object_from_template: object_from_template,
add_datasets: add_datasets
};
// End trackster_module encapsulation
+1 -53
View File
@@ -19,7 +19,7 @@ var TracksterUI = base.Base.extend({
var self = this,
menu = create_icon_buttons_menu([
{ icon_class: 'plus-button', title: 'Add tracks', on_click: function() {
self.add_datasets(add_datasets_url, add_track_async_url, function(tracks) {
tracks.add_datasets(add_datasets_url, add_track_async_url, function(tracks) {
_.each(tracks, function(track) {
view.add_drawable( object_from_template(track, view, view) );
});
@@ -240,58 +240,6 @@ var TracksterUI = base.Base.extend({
return view;
},
/**
* Use a popup grid to add more datasets.
*/
add_datasets: function(dataset_url, add_track_async_url, success_fn) {
$.ajax({
url: dataset_url,
data: { "f-dbkey": view.dbkey },
error: function() { alert( "Grid failed" ); },
success: function(table_html) {
show_modal(
"Select datasets for new tracks",
table_html, {
"Cancel": function() {
hide_modal();
},
"Add": function() {
var requests = [];
$('input[name=id]:checked,input[name=ldda_ids]:checked').each(function() {
var data = {
data_type: 'track_config',
'hda_ldda': 'hda'
},
id = $(this).val();
if ($(this).attr("name") !== "id") {
data.hda_ldda = 'ldda';
}
requests[requests.length] = $.ajax({
url: add_track_async_url + "/" + id,
data: data,
dataType: "json"
});
});
// To preserve order, wait until there are definitions for all tracks and then add
// them sequentially.
$.when.apply($, requests).then(function() {
// jQuery always returns an Array for arguments, so need to look at first element
// to determine whether multiple requests were made and consequently how to
// map arguments to track definitions.
var track_defs = (arguments[0] instanceof Array ?
$.map(arguments, function(arg) { return arg[0]; }) :
[ arguments[0] ]
);
success_fn(track_defs);
});
hide_modal();
}
}
);
}
});
},
/**
* Set up keyboard navigation for a visualization.
*/