galaxy-commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2014
- 1 participants
- 159 discussions
commit/galaxy-central: dannon: Merged in peterjc/galaxy-central/tool_list_fix (pull request #456)
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/18e8ddfb9c3c/
Changeset: 18e8ddfb9c3c
User: dannon
Date: 2014-08-12 17:25:22
Summary: Merged in peterjc/galaxy-central/tool_list_fix (pull request #456)
tool_list.py should now use tool_conf.xml not tool_conf.xml.sample
Affected #: 1 file
diff -r a94473459ebb4749a375420492d6da9a948ccd3a -r 18e8ddfb9c3c7407daae21b49d64300e4edf7cc4 tool_list.py
--- a/tool_list.py
+++ b/tool_list.py
@@ -3,7 +3,7 @@
#--------read tool_conf.xml.sample to get all the tool xml file names-----------
onoff = 1
tool_list = []
-for line in open("tool_conf.xml.sample", "r"):
+for line in open("tool_conf.xml", "r"):
if line.find("<!--") != -1:
onoff = 0
if line.find("file") != -1 and onoff==1:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/82a9821e0fbb/
Changeset: 82a9821e0fbb
Branch: tool_list_fix
User: peterjc
Date: 2014-08-12 17:13:05
Summary: Created new branch tool_list_fix
Affected #: 0 files
https://bitbucket.org/galaxy/galaxy-central/commits/24d8995c3568/
Changeset: 24d8995c3568
Branch: tool_list_fix
User: peterjc
Date: 2014-08-12 17:15:04
Summary: tool_list.py should now use tool_conf.xml not tool_conf.xml.sample
See a94473459ebb4749a375420492d6da9a948ccd3a where the rest of the run_functional_tests.sh system was updated.
Affected #: 1 file
diff -r 82a9821e0fbb3b4c9387152e48be189cc2829a45 -r 24d8995c35689fc42e96d6f02dc222cbf75531ed tool_list.py
--- a/tool_list.py
+++ b/tool_list.py
@@ -3,7 +3,7 @@
#--------read tool_conf.xml.sample to get all the tool xml file names-----------
onoff = 1
tool_list = []
-for line in open("tool_conf.xml.sample", "r"):
+for line in open("tool_conf.xml", "r"):
if line.find("<!--") != -1:
onoff = 0
if line.find("file") != -1 and onoff==1:
https://bitbucket.org/galaxy/galaxy-central/commits/18e8ddfb9c3c/
Changeset: 18e8ddfb9c3c
User: dannon
Date: 2014-08-12 17:25:22
Summary: Merged in peterjc/galaxy-central/tool_list_fix (pull request #456)
tool_list.py should now use tool_conf.xml not tool_conf.xml.sample
Affected #: 1 file
diff -r a94473459ebb4749a375420492d6da9a948ccd3a -r 18e8ddfb9c3c7407daae21b49d64300e4edf7cc4 tool_list.py
--- a/tool_list.py
+++ b/tool_list.py
@@ -3,7 +3,7 @@
#--------read tool_conf.xml.sample to get all the tool xml file names-----------
onoff = 1
tool_list = []
-for line in open("tool_conf.xml.sample", "r"):
+for line in open("tool_conf.xml", "r"):
if line.find("<!--") != -1:
onoff = 0
if line.find("file") != -1 and onoff==1:
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: carlfeberhard: History panel: clean up and documentation
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/a94473459ebb/
Changeset: a94473459ebb
User: carlfeberhard
Date: 2014-08-12 16:45:26
Summary: History panel: clean up and documentation
Affected #: 19 files
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/collection/collection-li-edit.js
--- a/static/scripts/mvc/collection/collection-li-edit.js
+++ b/static/scripts/mvc/collection/collection-li-edit.js
@@ -13,7 +13,8 @@
var _super = DC_LI.DCListItemView;
/** @class Editing view for DatasetCollectionElement.
*/
-var DCEListItemEdit = _super.extend({
+var DCEListItemEdit = _super.extend(
+/** @lends DCEListItemEdit.prototype */{
/** logger used to record this.log messages, commonly set to console */
//logger : console,
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/collection/collection-li.js
--- a/static/scripts/mvc/collection/collection-li.js
+++ b/static/scripts/mvc/collection/collection-li.js
@@ -8,7 +8,8 @@
var ListItemView = BASE_MVC.ListItemView;
/** @class Read only view for DatasetCollection.
*/
-var DCListItemView = ListItemView.extend({
+var DCListItemView = ListItemView.extend(
+/** @lends DCListItemView.prototype */{
//TODO: may not be needed
/** logger used to record this.log messages, commonly set to console */
@@ -26,7 +27,7 @@
ListItemView.prototype.initialize.call( this, attributes );
},
- /** In this override, don't show`or render any details (no need to do anything here)
+ /** In this override, don't show or render any details (no need to do anything here)
* - currently the parent control will load a panel for this collection over itself
* @fires expanded when a body has been expanded
*/
@@ -87,7 +88,8 @@
//==============================================================================
/** @class Read only view for DatasetCollectionElement.
*/
-var DCEListItemView = ListItemView.extend({
+var DCEListItemView = ListItemView.extend(
+/** @lends DCEListItemView.prototype */{
//TODO: this might be expendable - compacted with HDAListItemView
/** logger used to record this.log messages, commonly set to console */
@@ -99,7 +101,7 @@
/** jq fx speed for this view */
fxSpeed : 'fast',
- /** */
+ /** set up */
initialize : function( attributes ){
if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
this.log( 'DCEListItemView.initialize:', attributes );
@@ -138,14 +140,15 @@
/** @class Read only view for a DatasetCollectionElement that is also an DatasetAssociation
* (a dataset contained in a dataset collection).
*/
-var DatasetDCEListItemView = DATASET_LI.DatasetListItemView.extend({
+var DatasetDCEListItemView = DATASET_LI.DatasetListItemView.extend(
+/** @lends DatasetDCEListItemView.prototype */{
className : DATASET_LI.DatasetListItemView.prototype.className + " dataset-collection-element",
/** logger used to record this.log messages, commonly set to console */
//logger : console,
- /** */
+ /** set up */
initialize : function( attributes ){
if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
this.log( 'DatasetDCEListItemView.initialize:', attributes );
@@ -185,7 +188,8 @@
/** @class Read only view for a DatasetCollectionElement that is also a DatasetCollection
* (a nested DC).
*/
-var NestedDCDCEListItemView = DCListItemView.extend({
+var NestedDCDCEListItemView = DCListItemView.extend(
+/** @lends NestedDCDCEListItemView.prototype */{
className : DCListItemView.prototype.className + " dataset-collection-element",
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/collection/collection-model.js
--- a/static/scripts/mvc/collection/collection-model.js
+++ b/static/scripts/mvc/collection/collection-model.js
@@ -47,7 +47,7 @@
* When collection elements are passed from the API, the underlying element is
* in a sub-object 'object' (IOW, a DCE representing an HDA will have HDA json in element.object).
* This mixin uses the constructor and parse methods to merge that JSON with the DCE attribtues
- * effectively changing a DCE from a container to a subclass.
+ * effectively changing a DCE from a container to a subclass (has a --> is a).
*/
var DatasetCollectionElementMixin = {
@@ -82,7 +82,7 @@
};
//TODO: unused?
-/** Concrete class of Generic DatasetCollectionElement */
+/** @class Concrete class of Generic DatasetCollectionElement */
var DatasetCollectionElement = Backbone.Model
.extend( BASE_MVC.LoggableMixin )
.extend( DatasetCollectionElementMixin );
@@ -94,7 +94,6 @@
/** @lends DCECollection.prototype */{
model: DatasetCollectionElement,
- // comment this out to suppress log output
/** logger used to record this.log messages, commonly set to console */
//logger : console,
@@ -124,7 +123,10 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
- defaults : _.extend( {}, DATASET_MODEL.DatasetAssociation.prototype.defaults, DatasetCollectionElementMixin.defaults ),
+ defaults : _.extend( {},
+ DATASET_MODEL.DatasetAssociation.prototype.defaults,
+ DatasetCollectionElementMixin.defaults
+ ),
// because all objects have constructors (as this hashmap would even if this next line wasn't present)
// the constructor in hcontentMixin won't be attached by BASE_MVC.mixin to this model
@@ -162,7 +164,7 @@
//logger : console,
//TODO: unused?
- /** */
+ /** set up */
initialize : function( attributes, options ){
this.debug( this + '(DatasetDCECollection).initialize:', attributes, options );
DCECollection.prototype.initialize.call( this, attributes, options );
@@ -203,7 +205,7 @@
/** Which class to use for elements */
collectionClass : DCECollection,
- /** */
+ /** set up: create elements instance var and (on changes to elements) update them */
initialize : function( model, options ){
this.debug( this + '(DatasetCollection).initialize:', model, options, this );
//historyContent.HistoryContent.prototype.initialize.call( this, attrs, options );
@@ -269,6 +271,7 @@
},
// ........................................................................ searchable
+ /** searchable attributes for collections */
searchAttributes : [
'name'
],
@@ -291,6 +294,7 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
+ /** override since we know the collection will only contain datasets */
collectionClass : DatasetDCECollection,
//TODO: unused?
@@ -368,10 +372,11 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
+ /** This is a collection of nested collections */
model: NestedDCDCE,
//TODO: unused?
- /** */
+ /** set up */
initialize : function( attrs, options ){
this.debug( this + '(NestedDCDCECollection).initialize:', attrs, options );
DCECollection.prototype.initialize.call( this, attrs, options );
@@ -394,7 +399,10 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
- /** */
+ // because all objects have constructors (as this hashmap would even if this next line wasn't present)
+ // the constructor in hcontentMixin won't be attached by BASE_MVC.mixin to this model
+ // - re-apply manually it now
+ /** This is both a collection and a collection element - call the constructor */
constructor : function( attributes, options ){
this.debug( '\t NestedPairDCDCE.constructor:', attributes, options );
//DatasetCollection.constructor.call( this, attributes, options );
@@ -418,10 +426,11 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
+ /** We know this collection is composed of only nested pair collections */
model: NestedPairDCDCE,
//TODO: unused?
- /** */
+ /** set up */
initialize : function( attrs, options ){
this.debug( this + '(NestedPairDCDCECollection).initialize:', attrs, options );
NestedDCDCECollection.prototype.initialize.call( this, attrs, options );
@@ -443,11 +452,11 @@
/** logger used to record this.log messages, commonly set to console */
//logger : console,
- // list:paired is the only collection that itself contains collections
+ /** list:paired is the only collection that itself contains collections */
collectionClass : NestedPairDCDCECollection,
//TODO: unused?
- /** */
+ /** set up */
initialize : function( attributes, options ){
this.debug( this + '(ListPairedDatasetCollection).initialize:', attributes, options );
DatasetCollection.prototype.initialize.call( this, attributes, options );
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/collection/collection-panel.js
--- a/static/scripts/mvc/collection/collection-panel.js
+++ b/static/scripts/mvc/collection/collection-panel.js
@@ -24,7 +24,9 @@
/** (in ms) that jquery effects will use */
fxSpeed : 'fast',
+ /** sub view class used for datasets */
DatasetDCEViewClass : DC_LI.DatasetDCEListItemView,
+ /** sub view class used for nested collections */
NestedDCDCEViewClass : DC_LI.NestedDCDCEListItemView,
// ......................................................................... SET UP
@@ -229,7 +231,7 @@
}
},
- /** */
+ /** When a sub-collection is clicked, hide the current panel and render the sub-collection in its own panel */
_addCollectionPanel : function( collectionView ){
//TODO: a bit hackish
var currPanel = this,
@@ -333,9 +335,11 @@
// =============================================================================
/** @class non-editable, read-only View/Controller for a dataset collection. */
-var ListCollectionPanel = CollectionPanel.extend({
+var ListCollectionPanel = CollectionPanel.extend(
+/** @lends ListCollectionPanel.prototype */{
//TODO: not strictly needed - due to switch in CollectionPanel._getContentClass
+ /** sub view class used for datasets */
DatasetDCEViewClass : DC_LI.DatasetDCEListItemView,
// ........................................................................ misc
@@ -348,7 +352,8 @@
// =============================================================================
/** @class non-editable, read-only View/Controller for a dataset collection. */
-var PairCollectionPanel = ListCollectionPanel.extend({
+var PairCollectionPanel = ListCollectionPanel.extend(
+/** @lends PairCollectionPanel.prototype */{
// ........................................................................ misc
/** string rep */
@@ -360,9 +365,11 @@
// =============================================================================
/** @class non-editable, read-only View/Controller for a dataset collection. */
-var ListOfPairsCollectionPanel = CollectionPanel.extend({
+var ListOfPairsCollectionPanel = CollectionPanel.extend(
+/** @lends ListOfPairsCollectionPanel.prototype */{
//TODO: not strictly needed - due to switch in CollectionPanel._getContentClass
+ /** sub view class used for nested collections */
NestedDCDCEViewClass : DC_LI.NestedDCDCEListItemView,
// ........................................................................ misc
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/dataset/dataset-model.js
--- a/static/scripts/mvc/dataset/dataset-model.js
+++ b/static/scripts/mvc/dataset/dataset-model.js
@@ -10,7 +10,7 @@
* The DA's are made searchable (by attribute) by mixing in SearchableModelMixin.
*/
var DatasetAssociation = Backbone.Model.extend( BASE_MVC.LoggableMixin ).extend(
- BASE_MVC.mixin( searchableMixin, {
+ BASE_MVC.mixin( searchableMixin, /** @lends DatasetAssociation.prototype */{
/** default attributes for a model */
defaults : {
@@ -43,8 +43,10 @@
//annotation : ''
},
- initialize : function( attrs, options ){
- this.debug( 'Dataset.initialize', attrs, options );
+ /** instance vars and listeners */
+ initialize : function( attributes, options ){
+ this.debug( this + '(Dataset).initialize', attributes, options );
+
//!! this state is not in trans.app.model.Dataset.states - set it here -
if( !this.get( 'accessible' ) ){
this.set( 'state', STATES.NOT_VIEWABLE );
@@ -62,7 +64,6 @@
var id = this.get( 'id' );
if( !id ){ return {}; }
var urls = {
-//TODO: how many of these are still used?
'purge' : 'datasets/' + id + '/purge_async',
'display' : 'datasets/' + id + '/display/?preview=True',
'edit' : 'datasets/' + id + '/edit',
@@ -146,6 +147,7 @@
return this.save( { deleted: false }, options );
},
+ /** remove the file behind this dataset from the filesystem (if permitted) */
purge : function _purge( options ){
//TODO: use, override model.destroy, HDA.delete({ purge: true })
if( this.get( 'purged' ) ){ return jQuery.when(); }
@@ -160,7 +162,7 @@
// }, options ));
//
//xhr.done( function( response ){
- // console.debug( 'response', response );
+ // hda.debug( 'response', response );
// //hda.set({ deleted: true, purged: true });
// hda.set( response );
//});
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/dataset/states.js
--- a/static/scripts/mvc/dataset/states.js
+++ b/static/scripts/mvc/dataset/states.js
@@ -27,8 +27,9 @@
PAUSED : 'paused',
/** metadata discovery/setting failed or errored (but otherwise ok) */
FAILED_METADATA : 'failed_metadata',
+//TODO: not in trans.app.model.Dataset.states - is in database
/** not accessible to the current user (i.e. due to permissions) */
- NOT_VIEWABLE : 'noPermission', // not in trans.app.model.Dataset.states
+ NOT_VIEWABLE : 'noPermission',
/** deleted while uploading */
DISCARDED : 'discarded',
/** the tool producing this dataset failed */
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/hdca-li-edit.js
--- a/static/scripts/mvc/history/hdca-li-edit.js
+++ b/static/scripts/mvc/history/hdca-li-edit.js
@@ -7,7 +7,8 @@
var _super = HDCA_LI.HDCAListItemView;
/** @class Editing view for HistoryDatasetCollectionAssociation.
*/
-var HDCAListItemEdit = _super.extend({
+var HDCAListItemEdit = _super.extend(
+/** @lends HDCAListItemEdit.prototype */{
/** logger used to record this.log messages, commonly set to console */
//logger : console,
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/hdca-li.js
--- a/static/scripts/mvc/history/hdca-li.js
+++ b/static/scripts/mvc/history/hdca-li.js
@@ -9,13 +9,12 @@
var _super = DC_LI.DCListItemView;
/** @class Read only view for HistoryDatasetCollectionAssociation (a dataset collection inside a history).
*/
-var HDCAListItemView = _super.extend({
+var HDCAListItemView = _super.extend(
+/** @lends HDCAListItemView.prototype */{
/** logger used to record this.log messages, commonly set to console */
//logger : console,
-//TODO: not a dataset
- /** */
className : _super.prototype.className + " history-content",
/** In this override, add the state as a class for use with state-based CSS */
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/hdca-model.js
--- a/static/scripts/mvc/history/hdca-model.js
+++ b/static/scripts/mvc/history/hdca-model.js
@@ -19,7 +19,6 @@
//==============================================================================
/** @class Backbone model for List Dataset Collection within a History.
- * @constructs
*/
var HistoryListDatasetCollection = ListDC.extend( hcontentMixin ).extend(
/** @lends HistoryListDatasetCollection.prototype */{
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-content-model.js
--- a/static/scripts/mvc/history/history-content-model.js
+++ b/static/scripts/mvc/history/history-content-model.js
@@ -34,20 +34,24 @@
// Build a new id (type_id) that prefixes the history_content_type so the bbone collection can differentiate
idAttribute : 'type_id',
+ /** override constructor to build type_id and insert into original attributes */
constructor : function( attrs, options ){
attrs.type_id = typeIdStr( attrs.history_content_type, attrs.id );
this.debug( 'HistoryContentMixin.constructor:', attrs.type_id );
Backbone.Model.apply( this, arguments );
},
+ /** object level fn for building the type_id string */
_typeIdStr : function(){
return typeIdStr( this.get( 'history_content_type' ), this.get( 'id' ) );
},
+ /** add listener to re-create type_id when the id changes */
initialize : function( attrs, options ){
this.on( 'change:id', this._createTypeId );
},
+ /** set the type_id in the model attributes */
_createTypeId : function(){
this.set( 'type_id', this._typeIdStr() );
},
@@ -90,12 +94,12 @@
return url;
},
- /** save this HDA as not visible */
+ /** save this content as not visible */
hide : function( options ){
if( !this.get( 'visible' ) ){ return jQuery.when(); }
return this.save( { visible: false }, options );
},
- /** save this HDA as visible */
+ /** save this content as visible */
unhide : function( options ){
if( this.get( 'visible' ) ){ return jQuery.when(); }
return this.save( { visible: true }, options );
@@ -114,6 +118,7 @@
//==============================================================================
+//TODO: needed?
/** @class (Concrete/non-mixin) base model for content items.
*/
var HistoryContent = Backbone.Model.extend( BASE_MVC.LoggableMixin ).extend( HistoryContentMixin );
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-contents.js
--- a/static/scripts/mvc/history/history-contents.js
+++ b/static/scripts/mvc/history/history-contents.js
@@ -26,7 +26,6 @@
/** since history content is a mix, override model fn into a factory, creating based on history_content_type */
model : function( attrs, options ) {
- //console.debug( 'HistoryContents.model:', attrs, options );
//TODO: can we move the type_id stuff here?
//attrs.type_id = typeIdStr( attrs );
@@ -70,24 +69,25 @@
},
// ........................................................................ common queries
- /** Get the ids of every hda in this collection
+ /** Get the ids of every item in this collection
* @returns array of encoded ids
*/
ids : function(){
- return this.map( function( hda ){ return hda.get('id'); });
+//TODO: is this still useful since type_id
+ return this.map( function( item ){ return item.get('id'); });
},
- /** Get hdas that are not ready
- * @returns array of HDAs
+ /** Get contents that are not ready
+ * @returns array of content models
*/
notReady : function(){
- return this.filter( function( hda ){
- return !hda.inReadyState();
+ return this.filter( function( content ){
+ return !content.inReadyState();
});
},
- /** Get the id of every hda in this collection not in a 'ready' state (running).
- * @returns an array of hda ids
+ /** Get the id of every model in this collection not in a 'ready' state (running).
+ * @returns an array of model ids
* @see HistoryDatasetAssociation#inReadyState
*/
running : function(){
@@ -95,24 +95,26 @@
this.each( function( item ){
var isRunning = !item.inReadyState();
if( isRunning ){
+//TODO: is this still correct since type_id
idList.push( item.get( 'id' ) );
}
});
return idList;
},
- /** Get the hda with the given hid
+ /** Get the model with the given hid
* @param {Int} hid the hid to search for
- * @returns {HistoryDatasetAssociation} the hda with the given hid or undefined if not found
+ * @returns {HistoryDatasetAssociation} the model with the given hid or undefined if not found
*/
getByHid : function( hid ){
- return _.first( this.filter( function( hda ){ return hda.get( 'hid' ) === hid; }) );
+ return _.first( this.filter( function( content ){ return content.get( 'hid' ) === hid; }) );
},
- /** Get every 'shown' hda in this collection based on show_deleted/hidden
- * @param {Boolean} show_deleted are we showing deleted hdas?
- * @param {Boolean} show_hidden are we showing hidden hdas?
- * @returns array of hda models
+ //TODO:?? this may belong in the containing view
+ /** Get every 'shown' model in this collection based on show_deleted/hidden
+ * @param {Boolean} show_deleted are we showing deleted content?
+ * @param {Boolean} show_hidden are we showing hidden content?
+ * @returns array of content models
* @see HistoryDatasetAssociation#isVisible
*/
getVisible : function( show_deleted, show_hidden, filters ){
@@ -131,13 +133,13 @@
return filteredHdas;
},
- /** return true if any hdas don't have details */
+ /** return true if any contents don't have details */
haveDetails : function(){
- return this.all( function( hda ){ return hda.hasDetails(); });
+ return this.all( function( content ){ return content.hasDetails(); });
},
// ........................................................................ ajax
- /** fetch detailed model data for all HDAs in this collection */
+ /** fetch detailed model data for all contents in this collection */
fetchAllDetails : function( options ){
options = options || {};
var detailsFlag = { details: 'all' };
@@ -145,8 +147,8 @@
return this.fetch( options );
},
- /** using a queue, perform hdaAjaxFn on each of the hdas in this collection */
- ajaxQueue : function( hdaAjaxFn, options ){
+ /** using a queue, perform ajaxFn on each of the models in this collection */
+ ajaxQueue : function( ajaxFn, options ){
var deferred = jQuery.Deferred(),
startingLength = this.length,
responses = [];
@@ -157,12 +159,12 @@
}
// use reverse order (stylistic choice)
- var ajaxFns = this.chain().reverse().map( function( hda, i ){
+ var ajaxFns = this.chain().reverse().map( function( content, i ){
return function(){
- var xhr = hdaAjaxFn.call( hda, options );
+ var xhr = ajaxFn.call( content, options );
// if successful, notify using the deferred to allow tracking progress
xhr.done( function( response ){
- deferred.notify({ curr: i, total: startingLength, response: response, model: hda });
+ deferred.notify({ curr: i, total: startingLength, response: response, model: content });
});
// (regardless of previous error or success) if not last ajax call, shift and call the next
// if last fn, resolve deferred
@@ -183,17 +185,18 @@
},
// ........................................................................ sorting/filtering
- /** return a new collection of HDAs whose attributes contain the substring matchesWhat */
+ /** return a new collection of contents whose attributes contain the substring matchesWhat */
matches : function( matchesWhat ){
- return this.filter( function( hda ){
- return hda.matches( matchesWhat );
+ return this.filter( function( content ){
+ return content.matches( matchesWhat );
});
},
// ........................................................................ misc
+ /** override to get a correct/smarter merge when incoming data is partial */
set : function( models, options ){
// arrrrrrrrrrrrrrrrrg...
- // override to get a correct/smarter merge when incoming data is partial (e.g. stupid backbone)
+ // (e.g. stupid backbone)
// w/o this partial models from the server will fill in missing data with model defaults
// and overwrite existing data on the client
// see Backbone.Collection.set and _prepareModel
@@ -213,7 +216,7 @@
Backbone.Collection.prototype.set.call( this, models, options );
},
- /** Convert this ad-hoc collection of HDAs to a formal collection tracked
+ /** Convert this ad-hoc collection of hdas to a formal collection tracked
by the server.
**/
promoteToHistoryDatasetCollection : function _promote( history, collection_type, options ){
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-panel-annotated.js
--- a/static/scripts/mvc/history/history-panel-annotated.js
+++ b/static/scripts/mvc/history/history-panel-annotated.js
@@ -23,7 +23,7 @@
* @constructs
*/
var AnnotatedHistoryPanel = _super.extend(
-/** @lends HistoryPanel.prototype */{
+/** @lends AnnotatedHistoryPanel.prototype */{
/** logger used to record this.log messages, commonly set to console */
// comment this out to suppress log output
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-panel-edit-current.js
--- a/static/scripts/mvc/history/history-panel-edit-current.js
+++ b/static/scripts/mvc/history/history-panel-edit-current.js
@@ -7,7 +7,8 @@
// ============================================================================
/** session storage for history panel preferences (and to maintain state)
*/
-var HistoryPanelPrefs = BASE_MVC.SessionStorageModel.extend({
+var HistoryPanelPrefs = BASE_MVC.SessionStorageModel.extend(
+/** @lends HistoryPanelPrefs.prototype */{
defaults : {
/** is the panel currently showing the search/filter controls? */
searching : false,
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-panel-edit.js
--- a/static/scripts/mvc/history/history-panel-edit.js
+++ b/static/scripts/mvc/history/history-panel-edit.js
@@ -333,9 +333,9 @@
// maintain a list of hdas that are selected
hdaView.on( 'selected', function( hdaView, event ){
if( !event ){ return; }
- //console.debug( 'selected', event );
+ //this.debug( 'selected', event );
var selectedIds = [];
- //console.debug( historyView.lastSelectedViewId, historyView.hdaViews[ historyView.lastSelectedViewId ] );
+ //this.debug( historyView.lastSelectedViewId, historyView.hdaViews[ historyView.lastSelectedViewId ] );
// shift will select a range, but not set lastSelectedViewId
if( ( event.shiftKey )
@@ -348,19 +348,19 @@
} else {
var id = hdaView.model.id;
historyView.lastSelectedViewId = id;
- //console.debug( 'lastSelectedViewId:', historyView.lastSelectedViewId );
+ //this.debug( 'lastSelectedViewId:', historyView.lastSelectedViewId );
selectedIds = [ id ];
}
- //console.debug( 'selectedIds:', selectedIds );
+ //this.debug( 'selectedIds:', selectedIds );
historyView.selectedHdaIds = _.union( historyView.selectedHdaIds, selectedIds );
//TODO: might want to use getSelectedHdaViews instead managing these lists with ops
- //console.debug( 'selected', historyView.selectedHdaIds );
+ //this.debug( 'selected', historyView.selectedHdaIds );
});
hdaView.on( 'de-selected', function( hdaView, event ){
- //console.debug( 'de-selected', event );
+ //this.debug( 'de-selected', event );
var id = hdaView.model.id;
historyView.selectedHdaIds = _.without( historyView.selectedHdaIds, id );
- //console.debug( 'de-selected', historyView.selectedHdaIds );
+ //this.debug( 'de-selected', historyView.selectedHdaIds );
});
},
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/mvc/history/history-panel.js
--- a/static/scripts/mvc/history/history-panel.js
+++ b/static/scripts/mvc/history/history-panel.js
@@ -8,7 +8,9 @@
], function( HISTORY_MODEL, HDA_LI, HDCA_LI, USER, BASE_MVC, _l ){
// ============================================================================
/** session storage for individual history preferences */
-var HistoryPrefs = BASE_MVC.SessionStorageModel.extend({
+var HistoryPrefs = BASE_MVC.SessionStorageModel.extend(
+/** @lends HistoryPrefs.prototype */{
+
defaults : {
//TODO:?? expandedHdas to array?
expandedHdas : {},
@@ -85,6 +87,7 @@
/** class to use for constructing the HDA views */
HDAViewClass : HDA_LI.HDAListItemView,
+ /** class to use for constructing the HDCA views */
HDCAViewClass : HDCA_LI.HDCAListItemView,
tagName : 'div',
@@ -753,17 +756,17 @@
this.storage.get( 'show_hidden' ),
this.filters
).each( function( hda ){
- //console.debug( 'checking: ', hda.get( 'name' ) );
+ //panel.debug( 'checking: ', hda.get( 'name' ) );
if( withinSet ){
- //console.debug( '\t\t adding: ', hda.get( 'name' ) );
+ //panel.debug( '\t\t adding: ', hda.get( 'name' ) );
set.push( panel.hdaViews[ hda.id ] );
if( hda === viewA.model || hda === viewB.model ){
- //console.debug( '\t found last: ', hda.get( 'name' ) );
+ //panel.debug( '\t found last: ', hda.get( 'name' ) );
withinSet = false;
}
} else {
if( hda === viewA.model || hda === viewB.model ){
- //console.debug( 'found first: ', hda.get( 'name' ) );
+ //panel.debug( 'found first: ', hda.get( 'name' ) );
withinSet = true;
set.push( panel.hdaViews[ hda.id ] );
}
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/packed/mvc/collection/collection-panel.js
--- a/static/scripts/packed/mvc/collection/collection-panel.js
+++ b/static/scripts/packed/mvc/collection/collection-panel.js
@@ -1,1 +1,1 @@
-define(["mvc/collection/collection-model","mvc/collection/collection-li","mvc/base-mvc","utils/localization"],function(h,f,a,e){var d=Backbone.View.extend(a.LoggableMixin).extend({tagName:"div",className:"dataset-collection-panel",fxSpeed:"fast",DatasetDCEViewClass:f.DatasetDCEListItemView,NestedDCDCEViewClass:f.NestedDCDCEListItemView,initialize:function(i){i=i||{};if(i.logger){this.logger=i.logger}this.log(this+".initialize:",i);this.linkTarget=i.linkTarget||"_blank";this.hasUser=i.hasUser;this.panelStack=[];this.parentName=i.parentName;window.collectionPanel=this},_setUpListeners:function(){this.on("all",function(i){this.log(this+"",arguments)},this);return this},_setUpModelEventHandlers:function(){return this},render:function(k,l){this.log("render:",k,l);k=(k===undefined)?(this.fxSpeed):(k);var i=this,j;if(!this.model){return this}j=this.renderModel();$(i).queue("fx",[function(m){if(k&&i.$el.is(":visible")){i.$el.fadeOut(k,m)}else{m()}},function(m){i.$el.empty();if(j){i.$el.append(j.children())}m()},function(m){if(k&&!i.$el.is(":visible")){i.$el.fadeIn(k,m)}else{m()}},function(m){if(l){l.call(this)}i.trigger("rendered",this);m()}]);return this},renderModel:function(){var k=this.model.get("collection_type")||this.model.object.get("collection_type"),j=_.extend(this.model.toJSON(),{parentName:this.parentName,type:k}),i=$("<div/>").append(this.templates.panel(j));this._setUpBehaviours(i);this.renderContents(i);return i},_setUpBehaviours:function(i){i=i||this.$el;i.find("[title]").tooltip({placement:"bottom"});return this},$container:function(){return(this.findContainerFn)?(this.findContainerFn.call(this)):(this.$el.parent())},$datasetsList:function(i){return(i||this.$el).find(".datasets-list")},renderContents:function(j){j=j||this.$el;this.warn(this+".renderContents:, model:",this.model);var i=this,l={},k=this.model.getVisibleContents();this.$datasetsList(j).empty();if(k&&k.length){k.each(function(n){var o=n.id,m=i._createContentView(n);l[o]=m;i._attachContentView(m.render(),j)})}this.contentViews=l;return this.contentViews},_createContentView:function(k){var j=null,i=this._getContentClass(k);j=new i({model:k,linkTarget:this.linkTarget,hasUser:this.hasUser,logger:this.logger});this._setUpContentListeners(j);return j},_getContentClass:function(i){switch(i.get("element_type")){case"hda":return this.DatasetDCEViewClass;case"dataset_collection":return this.NestedDCDCEViewClass}throw new TypeError("Unknown element type:",i.get("element_type"))},_setUpContentListeners:function(j){var i=this;if(j.model.get("element_type")==="dataset_collection"){j.on("expanded",function(k){i.info("expanded",k);i._addCollectionPanel(k)})}},_addCollectionPanel:function(k){var l=this,i=k.model;var j=new c({model:i,parentName:this.model.get("name"),linkTarget:this.linkTarget});l.panelStack.push(j);l.$(".controls").add(".datasets-list").hide();l.$el.append(j.$el);j.on("close",function(){l.render();k.collapse();l.panelStack.pop()});if(!j.model.hasDetails()){var m=j.model.fetch();m.done(function(){j.render()})}else{j.render()}},_attachContentView:function(k,j){j=j||this.$el;var i=this.$datasetsList(j);i.append(k.$el);return this},events:{"click .navigation .back":"close"},close:function(i){this.$el.remove();this.trigger("close")},toString:function(){return"CollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});d.templates=d.prototype.templates=(function(){var i=_.template(['<div class="controls">','<div class="navigation">','<a class="back" href="javascript:void(0)">','<span class="fa fa-icon fa-angle-left"></span>',e("Back to "),"<%- collection.parentName %>","</a>","</div>",'<div class="title">','<div class="name"><%- collection.name || collection.element_identifier %></div>','<div class="subtitle">','<% if( collection.type === "list" ){ %>',e("a list of datasets"),'<% } else if( collection.type === "paired" ){ %>',e("a pair of datasets"),'<% } else if( collection.type === "list:paired" ){ %>',e("a list of paired datasets"),"<% } %>","</div>","</div>","</div>",'<div class="datasets-list"></div>'].join(""));return{panel:function(j){return i({_l:e,collection:j})}}}());var b=d.extend({DatasetDCEViewClass:f.DatasetDCEListItemView,toString:function(){return"ListCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});var c=b.extend({toString:function(){return"PairCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});var g=d.extend({NestedDCDCEViewClass:f.NestedDCDCEListItemView,toString:function(){return"ListOfPairsCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});return{CollectionPanel:d,ListCollectionPanel:b,PairCollectionPanel:c,ListOfPairsCollectionPanel:g}});
\ No newline at end of file
+define(["mvc/collection/collection-model","mvc/collection/collection-li","mvc/base-mvc","utils/localization"],function(h,f,a,e){var d=Backbone.View.extend(a.LoggableMixin).extend({tagName:"div",className:"dataset-collection-panel",fxSpeed:"fast",DatasetDCEViewClass:f.DatasetDCEListItemView,NestedDCDCEViewClass:f.NestedDCDCEListItemView,initialize:function(i){i=i||{};if(i.logger){this.logger=i.logger}this.log(this+".initialize:",i);this.linkTarget=i.linkTarget||"_blank";this.hasUser=i.hasUser;this.panelStack=[];this.parentName=i.parentName},_setUpListeners:function(){this.on("all",function(i){this.log(this+"",arguments)},this);return this},_setUpModelEventHandlers:function(){return this},render:function(k,l){this.log("render:",k,l);k=(k===undefined)?(this.fxSpeed):(k);var i=this,j;if(!this.model){return this}j=this.renderModel();$(i).queue("fx",[function(m){if(k&&i.$el.is(":visible")){i.$el.fadeOut(k,m)}else{m()}},function(m){i.$el.empty();if(j){i.$el.append(j.children())}m()},function(m){if(k&&!i.$el.is(":visible")){i.$el.fadeIn(k,m)}else{m()}},function(m){if(l){l.call(this)}i.trigger("rendered",this);m()}]);return this},renderModel:function(){var k=this.model.get("collection_type")||this.model.object.get("collection_type"),j=_.extend(this.model.toJSON(),{parentName:this.parentName,type:k}),i=$("<div/>").append(this.templates.panel(j));this._setUpBehaviours(i);this.renderContents(i);return i},_setUpBehaviours:function(i){i=i||this.$el;i.find("[title]").tooltip({placement:"bottom"});return this},$container:function(){return(this.findContainerFn)?(this.findContainerFn.call(this)):(this.$el.parent())},$datasetsList:function(i){return(i||this.$el).find(".datasets-list")},renderContents:function(j){j=j||this.$el;this.warn(this+".renderContents:, model:",this.model);var i=this,l={},k=this.model.getVisibleContents();this.$datasetsList(j).empty();if(k&&k.length){k.each(function(n){var o=n.id,m=i._createContentView(n);l[o]=m;i._attachContentView(m.render(),j)})}this.contentViews=l;return this.contentViews},_createContentView:function(k){var j=null,i=this._getContentClass(k);j=new i({model:k,linkTarget:this.linkTarget,hasUser:this.hasUser,logger:this.logger});this._setUpContentListeners(j);return j},_getContentClass:function(i){switch(i.get("element_type")){case"hda":return this.DatasetDCEViewClass;case"dataset_collection":return this.NestedDCDCEViewClass}throw new TypeError("Unknown element type:",i.get("element_type"))},_setUpContentListeners:function(j){var i=this;if(j.model.get("element_type")==="dataset_collection"){j.on("expanded",function(k){i.info("expanded",k);i._addCollectionPanel(k)})}},_addCollectionPanel:function(k){var l=this,i=k.model;var j=new c({model:i,parentName:this.model.get("name"),linkTarget:this.linkTarget});l.panelStack.push(j);l.$(".controls").add(".datasets-list").hide();l.$el.append(j.$el);j.on("close",function(){l.render();k.collapse();l.panelStack.pop()});if(!j.model.hasDetails()){var m=j.model.fetch();m.done(function(){j.render()})}else{j.render()}},_attachContentView:function(k,j){j=j||this.$el;var i=this.$datasetsList(j);i.append(k.$el);return this},events:{"click .navigation .back":"close"},close:function(i){this.$el.remove();this.trigger("close")},toString:function(){return"CollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});d.templates=d.prototype.templates=(function(){var i=_.template(['<div class="controls">','<div class="navigation">','<a class="back" href="javascript:void(0)">','<span class="fa fa-icon fa-angle-left"></span>',e("Back to "),"<%- collection.parentName %>","</a>","</div>",'<div class="title">','<div class="name"><%- collection.name || collection.element_identifier %></div>','<div class="subtitle">','<% if( collection.type === "list" ){ %>',e("a list of datasets"),'<% } else if( collection.type === "paired" ){ %>',e("a pair of datasets"),'<% } else if( collection.type === "list:paired" ){ %>',e("a list of paired datasets"),"<% } %>","</div>","</div>","</div>",'<div class="datasets-list"></div>'].join(""));return{panel:function(j){return i({_l:e,collection:j})}}}());var b=d.extend({DatasetDCEViewClass:f.DatasetDCEListItemView,toString:function(){return"ListCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});var c=b.extend({toString:function(){return"PairCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});var g=d.extend({NestedDCDCEViewClass:f.NestedDCDCEListItemView,toString:function(){return"ListOfPairsCollectionPanel("+((this.model)?(this.model.get("name")):(""))+")"}});return{CollectionPanel:d,ListCollectionPanel:b,PairCollectionPanel:c,ListOfPairsCollectionPanel:g}});
\ No newline at end of file
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/packed/mvc/dataset/dataset-model.js
--- a/static/scripts/packed/mvc/dataset/dataset-model.js
+++ b/static/scripts/packed/mvc/dataset/dataset-model.js
@@ -1,1 +1,1 @@
-define(["mvc/dataset/states","mvc/base-mvc","utils/localization"],function(a,b,c){var f=b.SearchableModelMixin;var e=Backbone.Model.extend(b.LoggableMixin).extend(b.mixin(f,{defaults:{state:a.NEW,deleted:false,purged:false,name:"(unnamed dataset)",accessible:true,data_type:"",file_ext:"",file_size:0,meta_files:[],misc_blurb:"",misc_info:"",tags:[]},initialize:function(h,g){this.debug("Dataset.initialize",h,g);if(!this.get("accessible")){this.set("state",a.NOT_VIEWABLE)}this.urls=this._generateUrls();this._setUpListeners()},_generateUrls:function(){var i=this.get("id");if(!i){return{}}var h={purge:"datasets/"+i+"/purge_async",display:"datasets/"+i+"/display/?preview=True",edit:"datasets/"+i+"/edit",download:"datasets/"+i+"/display?to_ext="+this.get("file_ext"),report_error:"dataset/errors?id="+i,rerun:"tool_runner/rerun?id="+i,show_params:"datasets/"+i+"/show_params",visualization:"visualization",meta_download:"dataset/get_metadata_file?hda_id="+i+"&metadata_name="};var g=(galaxy_config&&galaxy_config.root)?(galaxy_config.root):("/");_.each(h,function(k,j){h[j]=g+k});this.urls=h;return h},_setUpListeners:function(){this.on("change:state",function(h,g){this.log(this+" has changed state:",h,g);if(this.inReadyState()){this.trigger("state:ready",h,g,this.previous("state"))}});this.on("change:id change:file_ext",function(g){this._generateUrls()})},toJSON:function(){var g=Backbone.Model.prototype.toJSON.call(this);return _.extend(g,{urls:this.urls})},isDeletedOrPurged:function(){return(this.get("deleted")||this.get("purged"))},inReadyState:function(){var g=_.contains(a.READY_STATES,this.get("state"));return(this.isDeletedOrPurged()||g)},hasDetails:function(){return _.has(this.attributes,"genome_build")},hasData:function(){return(this.get("file_size")>0)},"delete":function(g){if(this.get("deleted")){return jQuery.when()}return this.save({deleted:true},g)},undelete:function(g){if(!this.get("deleted")||this.get("purged")){return jQuery.when()}return this.save({deleted:false},g)},purge:function d(g){if(this.get("purged")){return jQuery.when()}g=g||{};g.url=this.urls.purge;var h=this,i=jQuery.ajax(g);i.done(function(l,j,k){h.set({deleted:true,purged:true})});i.fail(function(n,j,m){var k=c("Unable to purge dataset");var l=("Removal of datasets by users is not allowed in this Galaxy instance");if(n.responseJSON&&n.responseJSON.error){k=n.responseJSON.error}else{if(n.responseText.indexOf(l)!==-1){k=l}}n.responseText=k;h.trigger("error",h,n,g,c(k),{error:k})});return i},searchAttributes:["name","file_ext","genome_build","misc_blurb","misc_info","annotation","tags"],searchAliases:{title:"name",format:"file_ext",database:"genome_build",blurb:"misc_blurb",description:"misc_blurb",info:"misc_info",tag:"tags"},toString:function(){var g=this.get("id")||"";if(this.get("name")){g='"'+this.get("name")+'",'+g}return"Dataset("+g+")"}}));return{DatasetAssociation:e}});
\ No newline at end of file
+define(["mvc/dataset/states","mvc/base-mvc","utils/localization"],function(a,b,c){var f=b.SearchableModelMixin;var e=Backbone.Model.extend(b.LoggableMixin).extend(b.mixin(f,{defaults:{state:a.NEW,deleted:false,purged:false,name:"(unnamed dataset)",accessible:true,data_type:"",file_ext:"",file_size:0,meta_files:[],misc_blurb:"",misc_info:"",tags:[]},initialize:function(g,h){this.debug(this+"(Dataset).initialize",g,h);if(!this.get("accessible")){this.set("state",a.NOT_VIEWABLE)}this.urls=this._generateUrls();this._setUpListeners()},_generateUrls:function(){var i=this.get("id");if(!i){return{}}var h={purge:"datasets/"+i+"/purge_async",display:"datasets/"+i+"/display/?preview=True",edit:"datasets/"+i+"/edit",download:"datasets/"+i+"/display?to_ext="+this.get("file_ext"),report_error:"dataset/errors?id="+i,rerun:"tool_runner/rerun?id="+i,show_params:"datasets/"+i+"/show_params",visualization:"visualization",meta_download:"dataset/get_metadata_file?hda_id="+i+"&metadata_name="};var g=(galaxy_config&&galaxy_config.root)?(galaxy_config.root):("/");_.each(h,function(k,j){h[j]=g+k});this.urls=h;return h},_setUpListeners:function(){this.on("change:state",function(h,g){this.log(this+" has changed state:",h,g);if(this.inReadyState()){this.trigger("state:ready",h,g,this.previous("state"))}});this.on("change:id change:file_ext",function(g){this._generateUrls()})},toJSON:function(){var g=Backbone.Model.prototype.toJSON.call(this);return _.extend(g,{urls:this.urls})},isDeletedOrPurged:function(){return(this.get("deleted")||this.get("purged"))},inReadyState:function(){var g=_.contains(a.READY_STATES,this.get("state"));return(this.isDeletedOrPurged()||g)},hasDetails:function(){return _.has(this.attributes,"genome_build")},hasData:function(){return(this.get("file_size")>0)},"delete":function(g){if(this.get("deleted")){return jQuery.when()}return this.save({deleted:true},g)},undelete:function(g){if(!this.get("deleted")||this.get("purged")){return jQuery.when()}return this.save({deleted:false},g)},purge:function d(g){if(this.get("purged")){return jQuery.when()}g=g||{};g.url=this.urls.purge;var h=this,i=jQuery.ajax(g);i.done(function(l,j,k){h.set({deleted:true,purged:true})});i.fail(function(n,j,m){var k=c("Unable to purge dataset");var l=("Removal of datasets by users is not allowed in this Galaxy instance");if(n.responseJSON&&n.responseJSON.error){k=n.responseJSON.error}else{if(n.responseText.indexOf(l)!==-1){k=l}}n.responseText=k;h.trigger("error",h,n,g,c(k),{error:k})});return i},searchAttributes:["name","file_ext","genome_build","misc_blurb","misc_info","annotation","tags"],searchAliases:{title:"name",format:"file_ext",database:"genome_build",blurb:"misc_blurb",description:"misc_blurb",info:"misc_info",tag:"tags"},toString:function(){var g=this.get("id")||"";if(this.get("name")){g='"'+this.get("name")+'",'+g}return"Dataset("+g+")"}}));return{DatasetAssociation:e}});
\ No newline at end of file
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/packed/mvc/history/history-contents.js
--- a/static/scripts/packed/mvc/history/history-contents.js
+++ b/static/scripts/packed/mvc/history/history-contents.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-content-model","mvc/history/hda-model","mvc/history/hdca-model","mvc/base-mvc","utils/localization"],function(g,e,b,a,c){var f=Backbone.Collection.extend(a.LoggableMixin).extend({model:function(i,h){if(i.history_content_type==="dataset"){return new e.HistoryDatasetAssociation(i,h)}else{if(i.history_content_type==="dataset_collection"){switch(i.collection_type){case"list":return new b.HistoryListDatasetCollection(i,h);case"paired":return new b.HistoryPairDatasetCollection(i,h);case"list:paired":return new b.HistoryListPairedDatasetCollection(i,h)}throw new TypeError("Unknown collection_type: "+i.collection_type)}}throw new TypeError("Unknown history_content_type: "+i.history_content_type)},initialize:function(i,h){h=h||{};this.historyId=h.historyId;this.on("all",function(){this.debug(this+".event:",arguments)})},urlRoot:galaxy_config.root+"api/histories",url:function(){return this.urlRoot+"/"+this.historyId+"/contents"},ids:function(){return this.map(function(h){return h.get("id")})},notReady:function(){return this.filter(function(h){return !h.inReadyState()})},running:function(){var h=[];this.each(function(j){var i=!j.inReadyState();if(i){h.push(j.get("id"))}});return h},getByHid:function(h){return _.first(this.filter(function(i){return i.get("hid")===h}))},getVisible:function(h,k,j){j=j||[];this.debug("checking isVisible");var i=new f(this.filter(function(l){return l.isVisible(h,k)}));_.each(j,function(l){if(!_.isFunction(l)){return}i=new f(i.filter(l))});return i},haveDetails:function(){return this.all(function(h){return h.hasDetails()})},fetchAllDetails:function(i){i=i||{};var h={details:"all"};i.data=(i.data)?(_.extend(i.data,h)):(h);return this.fetch(i)},ajaxQueue:function(k,j){var i=jQuery.Deferred(),h=this.length,m=[];if(!h){i.resolve([]);return i}var l=this.chain().reverse().map(function(o,n){return function(){var p=k.call(o,j);p.done(function(q){i.notify({curr:n,total:h,response:q,model:o})});p.always(function(q){m.push(q);if(l.length){l.shift()()}else{i.resolve(m)}})}}).value();l.shift()();return i},matches:function(h){return this.filter(function(i){return i.matches(h)})},set:function(j,h){var i=this;j=_.map(j,function(m){var l=m.attributes||m,n=g.typeIdStr(l.history_content_type,l.id),o=i.get(n);if(!o){return m}var k=o.toJSON();_.extend(k,m);return k});Backbone.Collection.prototype.set.call(this,j,h)},promoteToHistoryDatasetCollection:function d(m,k,i){i=i||{};i.url=this.url();i.type="POST";var o=k;var l=[],h=null;if(k==="list"){this.chain().each(function(r){var p=r.attributes.name;var s=r.get("id");var q=r.attributes.history_content_type;if(q==="dataset"){if(o!=="list"){this.log("Invalid collection type")}l.push({name:p,src:"hda",id:s})}else{if(o==="list"){o="list:"+r.attributes.collection_type}else{if(o!=="list:"+r.attributes.collection_type){this.log("Invalid collection type")}}l.push({name:p,src:"hdca",id:s})}});h="New Dataset List"}else{if(k==="paired"){var j=this.ids();if(j.length!==2){}l.push({name:"forward",src:"hda",id:j[0]});l.push({name:"reverse",src:"hda",id:j[1]});h="New Dataset Pair"}}i.data={type:"dataset_collection",name:h,collection_type:o,element_identifiers:JSON.stringify(l)};var n=jQuery.ajax(i);n.done(function(r,p,q){m.refresh()});n.fail(function(r,p,q){if(r.responseJSON&&r.responseJSON.error){error=r.responseJSON.error}else{error=r.responseJSON}r.responseText=error});return n},print:function(){var h=this;h.each(function(i){h.debug(i);if(i.elements){h.debug("\t elements:",i.elements)}})},toString:function(){return(["HistoryContents(",[this.historyId,this.length].join(),")"].join(""))}});return{HistoryContents:f}});
\ No newline at end of file
+define(["mvc/history/history-content-model","mvc/history/hda-model","mvc/history/hdca-model","mvc/base-mvc","utils/localization"],function(g,e,b,a,c){var f=Backbone.Collection.extend(a.LoggableMixin).extend({model:function(i,h){if(i.history_content_type==="dataset"){return new e.HistoryDatasetAssociation(i,h)}else{if(i.history_content_type==="dataset_collection"){switch(i.collection_type){case"list":return new b.HistoryListDatasetCollection(i,h);case"paired":return new b.HistoryPairDatasetCollection(i,h);case"list:paired":return new b.HistoryListPairedDatasetCollection(i,h)}throw new TypeError("Unknown collection_type: "+i.collection_type)}}throw new TypeError("Unknown history_content_type: "+i.history_content_type)},initialize:function(i,h){h=h||{};this.historyId=h.historyId;this.on("all",function(){this.debug(this+".event:",arguments)})},urlRoot:galaxy_config.root+"api/histories",url:function(){return this.urlRoot+"/"+this.historyId+"/contents"},ids:function(){return this.map(function(h){return h.get("id")})},notReady:function(){return this.filter(function(h){return !h.inReadyState()})},running:function(){var h=[];this.each(function(j){var i=!j.inReadyState();if(i){h.push(j.get("id"))}});return h},getByHid:function(h){return _.first(this.filter(function(i){return i.get("hid")===h}))},getVisible:function(h,k,j){j=j||[];this.debug("checking isVisible");var i=new f(this.filter(function(l){return l.isVisible(h,k)}));_.each(j,function(l){if(!_.isFunction(l)){return}i=new f(i.filter(l))});return i},haveDetails:function(){return this.all(function(h){return h.hasDetails()})},fetchAllDetails:function(i){i=i||{};var h={details:"all"};i.data=(i.data)?(_.extend(i.data,h)):(h);return this.fetch(i)},ajaxQueue:function(m,j){var i=jQuery.Deferred(),h=this.length,l=[];if(!h){i.resolve([]);return i}var k=this.chain().reverse().map(function(o,n){return function(){var p=m.call(o,j);p.done(function(q){i.notify({curr:n,total:h,response:q,model:o})});p.always(function(q){l.push(q);if(k.length){k.shift()()}else{i.resolve(l)}})}}).value();k.shift()();return i},matches:function(h){return this.filter(function(i){return i.matches(h)})},set:function(j,h){var i=this;j=_.map(j,function(m){var l=m.attributes||m,n=g.typeIdStr(l.history_content_type,l.id),o=i.get(n);if(!o){return m}var k=o.toJSON();_.extend(k,m);return k});Backbone.Collection.prototype.set.call(this,j,h)},promoteToHistoryDatasetCollection:function d(m,k,i){i=i||{};i.url=this.url();i.type="POST";var o=k;var l=[],h=null;if(k==="list"){this.chain().each(function(r){var p=r.attributes.name;var s=r.get("id");var q=r.attributes.history_content_type;if(q==="dataset"){if(o!=="list"){this.log("Invalid collection type")}l.push({name:p,src:"hda",id:s})}else{if(o==="list"){o="list:"+r.attributes.collection_type}else{if(o!=="list:"+r.attributes.collection_type){this.log("Invalid collection type")}}l.push({name:p,src:"hdca",id:s})}});h="New Dataset List"}else{if(k==="paired"){var j=this.ids();if(j.length!==2){}l.push({name:"forward",src:"hda",id:j[0]});l.push({name:"reverse",src:"hda",id:j[1]});h="New Dataset Pair"}}i.data={type:"dataset_collection",name:h,collection_type:o,element_identifiers:JSON.stringify(l)};var n=jQuery.ajax(i);n.done(function(r,p,q){m.refresh()});n.fail(function(r,p,q){if(r.responseJSON&&r.responseJSON.error){error=r.responseJSON.error}else{error=r.responseJSON}r.responseText=error});return n},print:function(){var h=this;h.each(function(i){h.debug(i);if(i.elements){h.debug("\t elements:",i.elements)}})},toString:function(){return(["HistoryContents(",[this.historyId,this.length].join(),")"].join(""))}});return{HistoryContents:f}});
\ No newline at end of file
diff -r 588c521575605b698ee15376f3b919f6a2cda20c -r a94473459ebb4749a375420492d6da9a948ccd3a static/scripts/packed/mvc/history/history-panel-annotated.js
--- a/static/scripts/packed/mvc/history/history-panel-annotated.js
+++ b/static/scripts/packed/mvc/history/history-panel-annotated.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-panel","mvc/history/hda-li","utils/localization"],function(e,b,a){var d=e.ReadOnlyHistoryPanel;var c=d.extend({className:"annotated-history-panel",HDAViewClass:b.HDAReadonlyListItemView,renderModel:function(){this.$el.addClass(this.className);var h=d.prototype.renderModel.call(this),f=this.$datasetsList(h),g=$("<table/>").addClass("datasets-list datasets-table");g.append(f.children());f.replaceWith(g);h.find(".history-subtitle").after(this.renderHistoryAnnotation());h.find(".history-search-btn").hide();h.find(".history-controls").after(h.find(".history-search-controls").show());return h},renderHistoryAnnotation:function(){var f=this.model.get("annotation");if(!f){return null}return $(['<div class="history-annotation">',f,"</div>"].join(""))},renderHdas:function(g){g=g||this.$el;var f=d.prototype.renderHdas.call(this,g);this.$datasetsList(g).prepend($("<tr/>").addClass("headers").append([$("<th/>").text(a("Dataset")),$("<th/>").text(a("Annotation"))]));return f},attachContentView:function(i,g){g=g||this.$el;var j=_.find(i.el.classList,function(k){return(/^state\-/).test(k)}),f=i.model.get("annotation")||"",h=$("<tr/>").addClass("dataset-row").append([$("<td/>").addClass("dataset-container").append(i.$el).addClass(j?j.replace("-","-color-"):""),$("<td/>").addClass("additional-info").text(f)]);this.$datasetsList(g).append(h)},events:_.extend(_.clone(d.prototype.events),{"click tr":function(f){$(f.currentTarget).find(".dataset-title-bar").click()},"click .icon-btn":function(f){f.stopPropagation()}}),toString:function(){return"AnnotatedHistoryPanel("+((this.model)?(this.model.get("name")):(""))+")"}});return{AnnotatedHistoryPanel:c}});
\ No newline at end of file
+define(["mvc/history/history-panel","mvc/history/hda-li","utils/localization"],function(e,b,a){var d=e.ReadOnlyHistoryPanel;var c=d.extend({className:"annotated-history-panel",renderModel:function(){this.$el.addClass(this.className);var h=d.prototype.renderModel.call(this),f=this.$datasetsList(h),g=$("<table/>").addClass("datasets-list datasets-table");g.append(f.children());f.replaceWith(g);h.find(".history-subtitle").after(this.renderHistoryAnnotation());h.find(".history-search-btn").hide();h.find(".history-controls").after(h.find(".history-search-controls").show());return h},renderHistoryAnnotation:function(){var f=this.model.get("annotation");if(!f){return null}return $(['<div class="history-annotation">',f,"</div>"].join(""))},renderHdas:function(g){g=g||this.$el;var f=d.prototype.renderHdas.call(this,g);this.$datasetsList(g).prepend($("<tr/>").addClass("headers").append([$("<th/>").text(a("Dataset")),$("<th/>").text(a("Annotation"))]));return f},attachContentView:function(i,g){g=g||this.$el;var j=_.find(i.el.classList,function(k){return(/^state\-/).test(k)}),f=i.model.get("annotation")||"",h=$("<tr/>").addClass("dataset-row").append([$("<td/>").addClass("dataset-container").append(i.$el).addClass(j?j.replace("-","-color-"):""),$("<td/>").addClass("additional-info").text(f)]);this.$datasetsList(g).append(h)},events:_.extend(_.clone(d.prototype.events),{"click tr":function(f){$(f.currentTarget).find(".dataset-title-bar").click()},"click .icon-btn":function(f){f.stopPropagation()}}),toString:function(){return"AnnotatedHistoryPanel("+((this.model)?(this.model.get("name")):(""))+")"}});return{AnnotatedHistoryPanel:c}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: Updated tag latest_2014.08.11 for changeset 7e4d21621ce1
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/7e81cbc2603f/
Changeset: 7e81cbc2603f
Branch: stable
User: natefoo
Date: 2014-08-12 15:58:36
Summary: Updated tag latest_2014.08.11 for changeset 7e4d21621ce1
Affected #: 1 file
diff -r 7e4d21621ce12e13ebbdf9fd3259df58c3ef124c -r 7e81cbc2603f0695802ab49dcd65f6dda7b42322 .hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -18,4 +18,4 @@
81fbe25bd02edcd53065e8e4476dd1dfb5a72cf2 latest_2013.11.04
2a756ca2cb1826db7796018e77d12e2dd7b67603 latest_2014.02.10
ca45b78adb4152fc6e7395514d46eba6b7d0b838 release_2014.08.11
-52b5cc75a1757eddfb94ee373193c9d8fa2ec442 latest_2014.08.11
+7e4d21621ce12e13ebbdf9fd3259df58c3ef124c latest_2014.08.11
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/e30d65cf25e8/
Changeset: e30d65cf25e8
Branch: stable
User: BjoernGruening
Date: 2014-08-12 10:33:27
Summary: install_repository_manager do not need trans.app anymore.
Affected #: 1 file
diff -r b6d2c77d8bce44cdaba188ce949ed69f94be6bc4 -r e30d65cf25e8e28677d971c19faaae0eb390e6af lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
--- a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
+++ b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
@@ -239,8 +239,7 @@
tool_shed_url, name, owner, changeset_revision = self.__parse_repository_from_payload( payload, include_changeset=True )
self.__ensure_can_install_repos( trans )
install_repository_manager = InstallRepositoryManager( trans.app )
- installed_tool_shed_repositories = install_repository_manager.install( trans.app,
- tool_shed_url,
+ installed_tool_shed_repositories = install_repository_manager.install( tool_shed_url,
name,
owner,
changeset_revision,
https://bitbucket.org/galaxy/galaxy-central/commits/fa1a6a494166/
Changeset: fa1a6a494166
Branch: stable
User: BjoernGruening
Date: 2014-08-12 10:38:24
Summary: First argument to __install_repositories is the Tool Shed URL (tool_shed_url)
Affected #: 1 file
diff -r e30d65cf25e8e28677d971c19faaae0eb390e6af -r fa1a6a4941664d9f2cf6dfbb816911778b7c9dcb lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -694,7 +694,8 @@
name,
owner,
changeset_revision )
- installed_tool_shed_repositories = self.__install_repositories( repository_revision_dict,
+ installed_tool_shed_repositories = self.__install_repositories( tool_shed_url,
+ repository_revision_dict,
repo_info_dicts,
install_options )
return installed_tool_shed_repositories
https://bitbucket.org/galaxy/galaxy-central/commits/7e4d21621ce1/
Changeset: 7e4d21621ce1
Branch: stable
User: BjoernGruening
Date: 2014-08-12 10:41:45
Summary: initiate_repository_installation was not updated in the recent code restructuring efforts
Affected #: 1 file
diff -r fa1a6a4941664d9f2cf6dfbb816911778b7c9dcb -r 7e4d21621ce12e13ebbdf9fd3259df58c3ef124c lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -789,7 +789,7 @@
# at this point because repository dependencies may have added additional repositories for installation
# along with the single specified repository.
encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
- initiate_repository_installation( self.app, installation_dict )
+ self.initiate_repository_installation( installation_dict )
# Some repositories may have repository dependencies that are required to be installed before the
# dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in
# the required order.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: carlfeberhard: History & collections: client-side file and class renaming: - li: readonly list item view, - li-edit: editable list item view, - primary identity first (eg. hda-*), - moved hda/hdca into history directory; Fix bug for dataset URLs
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/588c52157560/
Changeset: 588c52157560
User: carlfeberhard
Date: 2014-08-12 15:38:08
Summary: History & collections: client-side file and class renaming: - li: readonly list item view, - li-edit: editable list item view, - primary identity first (eg. hda-*), - moved hda/hdca into history directory; Fix bug for dataset URLs
Affected #: 74 files
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/collection-li-edit.js
--- /dev/null
+++ b/static/scripts/mvc/collection/collection-li-edit.js
@@ -0,0 +1,33 @@
+define([
+ "mvc/collection/collection-li",
+ "utils/localization"
+], function( DC_LI, _l ){
+//==============================================================================
+/*
+
+NOTE: not much going on here. Until we find out what operations a user will need
+ to perform on their own DC's, we'll leave this empty.
+
+*/
+//==============================================================================
+var _super = DC_LI.DCListItemView;
+/** @class Editing view for DatasetCollectionElement.
+ */
+var DCEListItemEdit = _super.extend({
+
+ /** logger used to record this.log messages, commonly set to console */
+ //logger : console,
+
+ // ......................................................................... misc
+ /** string rep */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'DCEListItemEdit(' + modelString + ')';
+ }
+});
+
+//==============================================================================
+ return {
+ DCEListItemEdit : DCEListItemEdit
+ };
+});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/collection-li.js
--- /dev/null
+++ b/static/scripts/mvc/collection/collection-li.js
@@ -0,0 +1,223 @@
+define([
+ "mvc/dataset/dataset-li",
+ "mvc/base-mvc",
+ "utils/localization"
+], function( DATASET_LI, BASE_MVC, _l ){
+/* global Backbone, LoggableMixin */
+//==============================================================================
+var ListItemView = BASE_MVC.ListItemView;
+/** @class Read only view for DatasetCollection.
+ */
+var DCListItemView = ListItemView.extend({
+//TODO: may not be needed
+
+ /** logger used to record this.log messages, commonly set to console */
+ //logger : console,
+
+ className : ListItemView.prototype.className + " dataset-collection",
+ /** */
+ fxSpeed : 'fast',
+
+//TODO: ununsed
+ /** set up */
+ initialize : function( attributes ){
+ if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
+ this.log( this + '(DCListItemView).initialize:', attributes );
+ ListItemView.prototype.initialize.call( this, attributes );
+ },
+
+ /** In this override, don't show`or render any details (no need to do anything here)
+ * - currently the parent control will load a panel for this collection over itself
+ * @fires expanded when a body has been expanded
+ */
+ expand : function(){
+ var view = this;
+ return view._fetchModelDetails()
+ .always(function(){
+ view.trigger( 'expanded', view );
+ });
+ },
+
+ // ......................................................................... rendering
+ //TODO:?? possibly move to listItem
+ /** render a subtitle to show the user what sort of collection this is */
+ _renderSubtitle : function(){
+ var $subtitle = $( '<div class="subtitle"></div>' );
+ //TODO: would be good to get this in the subtitle
+ //var len = this.model.elements.length;
+ switch( this.model.get( 'collection_type' ) ){
+ case 'list':
+ return $subtitle.text( _l( 'a list of datasets' ) );
+ case 'paired':
+ return $subtitle.text( _l( 'a pair of datasets' ) );
+ case 'list:paired':
+ return $subtitle.text( _l( 'a list of paired datasets' ) );
+ }
+ return $subtitle;
+ },
+
+ // ......................................................................... misc
+ /** String representation */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'DCListItemView(' + modelString + ')';
+ }
+});
+
+// ............................................................................ TEMPLATES
+/** underscore templates */
+DCListItemView.prototype.templates = (function(){
+
+ // use element identifier
+ var titleBarTemplate = BASE_MVC.wrapTemplate([
+ '<div class="title-bar clear" tabindex="0">',
+ '<div class="title">',
+ '<span class="name"><%- collection.element_identifier || collection.name %></span>',
+ '</div>',
+ '<div class="subtitle"></div>',
+ '</div>'
+ ], 'collection' );
+
+ return _.extend( {}, ListItemView.prototype.templates, {
+ titleBar : titleBarTemplate
+ });
+}());
+
+
+//==============================================================================
+/** @class Read only view for DatasetCollectionElement.
+ */
+var DCEListItemView = ListItemView.extend({
+//TODO: this might be expendable - compacted with HDAListItemView
+
+ /** logger used to record this.log messages, commonly set to console */
+ // comment this out to suppress log output
+ logger : console,
+
+ /** add the DCE class to the list item */
+ className : ListItemView.prototype.className + " dataset-collection-element",
+ /** jq fx speed for this view */
+ fxSpeed : 'fast',
+
+ /** */
+ initialize : function( attributes ){
+ if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
+ this.log( 'DCEListItemView.initialize:', attributes );
+ ListItemView.prototype.initialize.call( this, attributes );
+ },
+
+ // ......................................................................... misc
+ /** String representation */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'DCEListItemView(' + modelString + ')';
+ }
+});
+
+// ............................................................................ TEMPLATES
+/** underscore templates */
+DCEListItemView.prototype.templates = (function(){
+
+ // use the element identifier here - since that will persist and the user will need it
+ var titleBarTemplate = BASE_MVC.wrapTemplate([
+ '<div class="title-bar clear" tabindex="0">',
+ '<div class="title">',
+ '<span class="name"><%- element.element_identifier %></span>',
+ '</div>',
+ '<div class="subtitle"></div>',
+ '</div>'
+ ], 'element' );
+
+ return _.extend( {}, ListItemView.prototype.templates, {
+ titleBar : titleBarTemplate
+ });
+}());
+
+
+//==============================================================================
+/** @class Read only view for a DatasetCollectionElement that is also an DatasetAssociation
+ * (a dataset contained in a dataset collection).
+ */
+var DatasetDCEListItemView = DATASET_LI.DatasetListItemView.extend({
+
+ className : DATASET_LI.DatasetListItemView.prototype.className + " dataset-collection-element",
+
+ /** logger used to record this.log messages, commonly set to console */
+ //logger : console,
+
+ /** */
+ initialize : function( attributes ){
+ if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
+ this.log( 'DatasetDCEListItemView.initialize:', attributes );
+ DATASET_LI.DatasetListItemView.prototype.initialize.call( this, attributes );
+ },
+
+ // ......................................................................... misc
+ /** String representation */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'DatasetDCEListItemView(' + modelString + ')';
+ }
+});
+
+// ............................................................................ TEMPLATES
+/** underscore templates */
+DatasetDCEListItemView.prototype.templates = (function(){
+
+ // use the element identifier here and not the dataset name
+ //TODO:?? can we steal the DCE titlebar?
+ var titleBarTemplate = BASE_MVC.wrapTemplate([
+ '<div class="title-bar clear" tabindex="0">',
+ '<span class="state-icon"></span>',
+ '<div class="title">',
+ '<span class="name"><%- element.element_identifier %></span>',
+ '</div>',
+ '</div>'
+ ], 'element' );
+
+ return _.extend( {}, DATASET_LI.DatasetListItemView.prototype.templates, {
+ titleBar : titleBarTemplate
+ });
+}());
+
+
+//==============================================================================
+/** @class Read only view for a DatasetCollectionElement that is also a DatasetCollection
+ * (a nested DC).
+ */
+var NestedDCDCEListItemView = DCListItemView.extend({
+
+ className : DCListItemView.prototype.className + " dataset-collection-element",
+
+ /** logger used to record this.log messages, commonly set to console */
+ // comment this out to suppress log output
+ //logger : console,
+
+ /** In this override, add the state as a class for use with state-based CSS */
+ _swapNewRender : function( $newRender ){
+ DCListItemView.prototype._swapNewRender.call( this, $newRender );
+//TODO: model currently has no state
+ var state = this.model.get( 'state' ) || 'ok';
+ //if( this.model.has( 'state' ) ){
+ this.$el.addClass( 'state-' + state );
+ //}
+ return this.$el;
+ },
+
+ // ......................................................................... misc
+ /** String representation */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'NestedDCDCEListItemView(' + modelString + ')';
+ }
+});
+
+
+//==============================================================================
+ return {
+ DCListItemView : DCListItemView,
+ DCEListItemView : DCEListItemView,
+ DatasetDCEListItemView : DatasetDCEListItemView,
+ NestedDCDCEListItemView : NestedDCDCEListItemView
+ };
+});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/collection-model.js
--- a/static/scripts/mvc/collection/collection-model.js
+++ b/static/scripts/mvc/collection/collection-model.js
@@ -2,7 +2,7 @@
"mvc/dataset/dataset-model",
"mvc/base-mvc",
"utils/localization"
-], function( DATASET, BASE_MVC, _l ){
+], function( DATASET_MODEL, BASE_MVC, _l ){
//==============================================================================
/*
Notes:
@@ -118,13 +118,13 @@
//==============================================================================
/** @class Backbone model for a dataset collection element that is a dataset (HDA).
*/
-var DatasetDCE = DATASET.DatasetAssociation.extend( BASE_MVC.mixin( DatasetCollectionElementMixin,
+var DatasetDCE = DATASET_MODEL.DatasetAssociation.extend( BASE_MVC.mixin( DatasetCollectionElementMixin,
/** @lends DatasetDCE.prototype */{
/** logger used to record this.log messages, commonly set to console */
//logger : console,
- defaults : _.extend( {}, DATASET.DatasetAssociation.prototype.defaults, DatasetCollectionElementMixin.defaults ),
+ defaults : _.extend( {}, DATASET_MODEL.DatasetAssociation.prototype.defaults, DatasetCollectionElementMixin.defaults ),
// because all objects have constructors (as this hashmap would even if this next line wasn't present)
// the constructor in hcontentMixin won't be attached by BASE_MVC.mixin to this model
@@ -132,7 +132,7 @@
/** call the mixin constructor */
constructor : function( attributes, options ){
this.debug( '\t DatasetDCE.constructor:', attributes, options );
- //DATASET.DatasetAssociation.prototype.constructor.call( this, attributes, options );
+ //DATASET_MODEL.DatasetAssociation.prototype.constructor.call( this, attributes, options );
DatasetCollectionElementMixin.constructor.call( this, attributes, options );
},
@@ -140,7 +140,7 @@
/** set up */
initialize : function( attributes, options ){
this.debug( this + '(DatasetDCE).initialize:', attributes, options );
- DATASET.DatasetAssociation.prototype.initialize.call( this, attributes, options );
+ DATASET_MODEL.DatasetAssociation.prototype.initialize.call( this, attributes, options );
},
/** String representation. */
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/collection-panel.js
--- a/static/scripts/mvc/collection/collection-panel.js
+++ b/static/scripts/mvc/collection/collection-panel.js
@@ -1,20 +1,15 @@
define([
- "mvc/collection/dataset-collection-base",
+ "mvc/collection/collection-model",
+ "mvc/collection/collection-li",
"mvc/base-mvc",
"utils/localization"
-], function( DC_BASE, BASE_MVC, _l ){
+], function( DC_MODEL, DC_LI, BASE_MVC, _l ){
/* =============================================================================
TODO:
============================================================================= */
// =============================================================================
/** @class non-editable, read-only View/Controller for a dataset collection.
- * @name CollectionPanel
- *
- * @augments Backbone.View
- * @borrows LoggableMixin#logger as #logger
- * @borrows LoggableMixin#log as #log
- * @constructs
*/
var CollectionPanel = Backbone.View.extend( BASE_MVC.LoggableMixin ).extend(
/** @lends CollectionPanel.prototype */{
@@ -29,8 +24,8 @@
/** (in ms) that jquery effects will use */
fxSpeed : 'fast',
- DatasetDCEViewClass : DC_BASE.DatasetDCEBaseView,
- NestedDCEViewClass : DC_BASE.NestedDCEBaseView,
+ DatasetDCEViewClass : DC_LI.DatasetDCEListItemView,
+ NestedDCDCEViewClass : DC_LI.NestedDCDCEListItemView,
// ......................................................................... SET UP
/** Set up the view, set up storage, bind listeners to HistoryContents events
@@ -44,9 +39,13 @@
}
this.log( this + '.initialize:', attributes );
+ this.linkTarget = attributes.linkTarget || '_blank';
+
this.hasUser = attributes.hasUser;
this.panelStack = [];
this.parentName = attributes.parentName;
+
+ //window.collectionPanel = this;
},
/** create any event listeners for the panel
@@ -70,7 +69,7 @@
},
// ------------------------------------------------------------------------ panel rendering
- /** Render urls, historyPanel body, and hdas (if any are shown)
+ /** Render panel
* @fires: rendered when the panel is attached and fully visible
* @see Backbone.View#render
*/
@@ -122,7 +121,7 @@
return this;
},
- /** render with history data
+ /** render with collection data
* @returns {jQuery} dom fragment as temporary container to be swapped out later
*/
renderModel : function( ){
@@ -139,7 +138,7 @@
return $newRender;
},
- /** Set up HistoryPanel js/widget behaviours */
+ /** Set up js/widget behaviours */
_setUpBehaviours : function( $where ){
//TODO: these should be either sub-MVs, or handled by events
$where = $where || this.$el;
@@ -152,16 +151,16 @@
$container : function(){
return ( this.findContainerFn )?( this.findContainerFn.call( this ) ):( this.$el.parent() );
},
- /** where hdaViews are attached */
+ /** where list content views are attached */
$datasetsList : function( $where ){
return ( $where || this.$el ).find( '.datasets-list' );
},
// ------------------------------------------------------------------------ sub-views
- /** Set up/render a view for each HDA to be shown, init with model and listeners.
- * HDA views are cached to the map this.hdaViews (using the model.id as key).
- * @param {jQuery} $whereTo what dom element to prepend the HDA views to
- * @returns the number of visible hda views
+ /** Set up/render a view for each DCE to be shown, init with model and listeners.
+ * DCE views are cached to the map this.contentViews (using the model.id as key).
+ * @param {jQuery} $whereTo what dom element to prepend the DCE views to
+ * @returns the number of visible DCE views
*/
renderContents : function( $whereTo ){
//this.debug( 'renderContents, elements:', this.model.elements );
@@ -172,7 +171,7 @@
contentViews = {},
//NOTE: no filtering here
visibleContents = this.model.getVisibleContents();
- this.log( 'renderContents, visibleContents:', visibleContents, $whereTo );
+ //this.debug( 'renderContents, visibleContents:', visibleContents, $whereTo );
this.$datasetsList( $whereTo ).empty();
if( visibleContents && visibleContents.length ){
@@ -192,8 +191,8 @@
//this.debug( 'content json:', JSON.stringify( content, null, ' ' ) );
var contentView = null,
ContentClass = this._getContentClass( content );
- this.debug( 'ContentClass:', ContentClass );
- this.debug( 'content:', content );
+ //this.debug( 'content:', content );
+ //this.debug( 'ContentClass:', ContentClass );
contentView = new ContentClass({
model : content,
linkTarget : this.linkTarget,
@@ -201,20 +200,20 @@
hasUser : this.hasUser,
logger : this.logger
});
- this.debug( 'contentView:', contentView );
+ //this.debug( 'contentView:', contentView );
this._setUpContentListeners( contentView );
return contentView;
},
/** */
_getContentClass : function( content ){
- this.debug( this + '._getContentClass:', content );
- this.debug( 'DCEViewClass:', this.DCEViewClass );
+ //this.debug( this + '._getContentClass:', content );
+//TODO: subclasses use DCEViewClass - but are currently unused - decide
switch( content.get( 'element_type' ) ){
case 'hda':
- return this.DCEViewClass;
+ return this.DatasetDCEViewClass;
case 'dataset_collection':
- return this.DCEViewClass;
+ return this.NestedDCDCEViewClass;
}
throw new TypeError( 'Unknown element type:', content.get( 'element_type' ) );
},
@@ -232,14 +231,16 @@
/** */
_addCollectionPanel : function( collectionView ){
+//TODO: a bit hackish
var currPanel = this,
collectionModel = collectionView.model;
- this.debug( 'collection panel (stack), collectionView:', collectionView );
- this.debug( 'collection panel (stack), collectionModel:', collectionModel );
+ //this.debug( 'collection panel (stack), collectionView:', collectionView );
+ //this.debug( 'collection panel (stack), collectionModel:', collectionModel );
var panel = new PairCollectionPanel({
model : collectionModel,
- parentName : this.model.get( 'name' )
+ parentName : this.model.get( 'name' ),
+ linkTarget : this.linkTarget
});
currPanel.panelStack.push( panel );
@@ -277,7 +278,7 @@
'click .navigation .back' : 'close'
},
- /** */
+ /** close/remove this collection panel */
close : function( event ){
this.$el.remove();
this.trigger( 'close' );
@@ -334,7 +335,8 @@
/** @class non-editable, read-only View/Controller for a dataset collection. */
var ListCollectionPanel = CollectionPanel.extend({
- DCEViewClass : DC_BASE.DatasetDCEBaseView,
+ //TODO: not strictly needed - due to switch in CollectionPanel._getContentClass
+ DatasetDCEViewClass : DC_LI.DatasetDCEListItemView,
// ........................................................................ misc
/** string rep */
@@ -360,7 +362,8 @@
/** @class non-editable, read-only View/Controller for a dataset collection. */
var ListOfPairsCollectionPanel = CollectionPanel.extend({
- DCEViewClass : DC_BASE.NestedDCDCEBaseView,
+ //TODO: not strictly needed - due to switch in CollectionPanel._getContentClass
+ NestedDCDCEViewClass : DC_LI.NestedDCDCEListItemView,
// ........................................................................ misc
/** string rep */
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/dataset-collection-base.js
--- a/static/scripts/mvc/collection/dataset-collection-base.js
+++ /dev/null
@@ -1,222 +0,0 @@
-define([
- "mvc/dataset/dataset-list-element",
- "mvc/base-mvc",
- "utils/localization"
-], function( DATASET_LI, BASE_MVC, _l ){
-/* global Backbone, LoggableMixin */
-//==============================================================================
-var ListItemView = BASE_MVC.ListItemView;
-/** @class Read only view for DatasetCollection.
- */
-var DCBaseView = ListItemView.extend({
-//TODO: may not be needed
-
- /** logger used to record this.log messages, commonly set to console */
- //logger : console,
-
- className : ListItemView.prototype.className + " dataset-collection",
- /** */
- fxSpeed : 'fast',
-
-//TODO: ununsed
- /** set up */
- initialize : function( attributes ){
- if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
- this.log( 'DCBaseView.initialize:', attributes );
- ListItemView.prototype.initialize.call( this, attributes );
- },
-
- /** In this override, don't show`or render any details (no need to do anything here)
- * - currently the parent control will load a panel for this collection over itself
- * @fires expanded when a body has been expanded
- */
- expand : function(){
- var view = this;
- return view._fetchModelDetails()
- .always(function(){
- view.trigger( 'expanded', view );
- });
- },
-
- // ......................................................................... rendering
- //TODO:?? possibly move to listItem
- /** render a subtitle to show the user what sort of collection this is */
- _renderSubtitle : function(){
- var $subtitle = $( '<div class="subtitle"></div>' );
- //TODO: would be good to get this in the subtitle
- //var len = this.model.elements.length;
- switch( this.model.get( 'collection_type' ) ){
- case 'list':
- return $subtitle.text( _l( 'a list of datasets' ) );
- case 'paired':
- return $subtitle.text( _l( 'a pair of datasets' ) );
- case 'list:paired':
- return $subtitle.text( _l( 'a list of paired datasets' ) );
- }
- return $subtitle;
- },
-
- // ......................................................................... misc
- /** String representation */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'DCBaseView(' + modelString + ')';
- }
-});
-
-// ............................................................................ TEMPLATES
-/** underscore templates */
-DCBaseView.prototype.templates = (function(){
-
- // use element identifier
- var titleBarTemplate = BASE_MVC.wrapTemplate([
- '<div class="title-bar clear" tabindex="0">',
- '<div class="title">',
- '<span class="name"><%- collection.element_identifier || collection.name %></span>',
- '</div>',
- '<div class="subtitle"></div>',
- '</div>'
- ], 'collection' );
-
- return _.extend( {}, ListItemView.prototype.templates, {
- titleBar : titleBarTemplate
- });
-}());
-
-
-//==============================================================================
-/** @class Read only view for DatasetCollectionElement.
- */
-var DCEBaseView = ListItemView.extend({
-//TODO: this might be expendable - compacted with HDADCEBaseView
-
- /** logger used to record this.log messages, commonly set to console */
- // comment this out to suppress log output
- logger : console,
-
- /** add the DCE class to the list item */
- className : ListItemView.prototype.className + " dataset-collection-element",
- /** jq fx speed for this view */
- fxSpeed : 'fast',
-
- /** */
- initialize : function( attributes ){
- if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
- this.log( 'DCEBaseView.initialize:', attributes );
- ListItemView.prototype.initialize.call( this, attributes );
- },
-
- // ......................................................................... misc
- /** String representation */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'DCEBaseView(' + modelString + ')';
- }
-});
-
-// ............................................................................ TEMPLATES
-/** underscore templates */
-DCEBaseView.prototype.templates = (function(){
-
- // use the element identifier here - since that will persist and the user will need it
- var titleBarTemplate = BASE_MVC.wrapTemplate([
- '<div class="title-bar clear" tabindex="0">',
- '<div class="title">',
- '<span class="name"><%- element.element_identifier %></span>',
- '</div>',
- '<div class="subtitle"></div>',
- '</div>'
- ], 'element' );
-
- return _.extend( {}, ListItemView.prototype.templates, {
- titleBar : titleBarTemplate
- });
-}());
-
-
-//==============================================================================
-/** @class Read only view for a DatasetCollectionElement that is also an HDA.
- */
-var DatasetDCEBaseView = DATASET_LI.DatasetListItemView.extend({
-
- className : DATASET_LI.DatasetListItemView.prototype.className + " dataset-collection-element",
-
- /** logger used to record this.log messages, commonly set to console */
- // comment this out to suppress log output
- //logger : console,
-
- /** */
- initialize : function( attributes ){
- if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
- this.log( 'DatasetDCEBaseView.initialize:', attributes );
- DATASET_LI.DatasetListItemView.prototype.initialize.call( this, attributes );
- },
-
- // ......................................................................... misc
- /** String representation */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'DatasetDCEBaseView(' + modelString + ')';
- }
-});
-
-// ............................................................................ TEMPLATES
-/** underscore templates */
-DatasetDCEBaseView.prototype.templates = (function(){
-
- // use the element identifier here and not the dataset name
- //TODO:?? can we steal the DCE titlebar?
- var titleBarTemplate = BASE_MVC.wrapTemplate([
- '<div class="title-bar clear" tabindex="0">',
- '<span class="state-icon"></span>',
- '<div class="title">',
- '<span class="name"><%- element.element_identifier %></span>',
- '</div>',
- '</div>'
- ], 'element' );
-
- return _.extend( {}, DATASET_LI.DatasetListItemView.prototype.templates, {
- titleBar : titleBarTemplate
- });
-}());
-
-//==============================================================================
-/** @class Read only view for a DatasetCollectionElement that is also a DatasetCollection
- * (a nested DC).
- */
-var NestedDCDCEBaseView = DCBaseView.extend({
-
- className : DCBaseView.prototype.className + " dataset-collection-element",
-
- /** logger used to record this.log messages, commonly set to console */
- // comment this out to suppress log output
- //logger : console,
-
- /** In this override, add the state as a class for use with state-based CSS */
- _swapNewRender : function( $newRender ){
- DATASET_LI.DatasetListItemView.prototype._swapNewRender.call( this, $newRender );
-//TODO: model currently has no state
- var state = this.model.get( 'state' ) || 'ok';
- //if( this.model.has( 'state' ) ){
- this.$el.addClass( 'state-' + state );
- //}
- return this.$el;
- },
-
- // ......................................................................... misc
- /** String representation */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'NestedDCDCEBaseView(' + modelString + ')';
- }
-});
-
-
-//==============================================================================
- return {
- DCBaseView : DCBaseView,
- DCEBaseView : DCEBaseView,
- DatasetDCEBaseView : DatasetDCEBaseView,
- NestedDCDCEBaseView : NestedDCDCEBaseView
- };
-});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/dataset-collection-edit.js
--- a/static/scripts/mvc/collection/dataset-collection-edit.js
+++ /dev/null
@@ -1,39 +0,0 @@
-define([
- "mvc/dataset/states",
- "mvc/collection/dataset-collection-base",
- "utils/localization"
-], function( STATES, DC_BASE_VIEW, _l ){
-//==============================================================================
-/*
-
-NOTE: not much going on here. Until we find out what operations a user will need
- to perform on their own DC's, we'll leave this empty.
-
-*/
-//==============================================================================
-var _super = DC_BASE_VIEW.DCBaseView;
-/** @class Editing view for DatasetCollection.
- * @name DatasetCollectionEditView
- *
- * @augments DCBaseView
- * @constructs
- */
-var DCEditView = _super.extend({
-
- /** logger used to record this.log messages, commonly set to console */
- // comment this out to suppress log output
- //logger : console,
-
- // ......................................................................... misc
- /** string rep */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'DCEditView(' + modelString + ')';
- }
-});
-
-//==============================================================================
- return {
- DCEditView : DCEditView
- };
-});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/hdca-base.js
--- a/static/scripts/mvc/collection/hdca-base.js
+++ /dev/null
@@ -1,67 +0,0 @@
-define([
- "mvc/dataset/states",
- "mvc/collection/dataset-collection-base",
- "mvc/base-mvc",
- "utils/localization"
-], function( STATES, DC_BASE, BASE_MVC, _l ){
-/* global Backbone */
-//==============================================================================
-var _super = DC_BASE.DCBaseView;
-/** @class Read only view for HistoryDatasetCollectionAssociation (a dataset collection inside a history).
- */
-var HDCABaseView = _super.extend({
-
- /** logger used to record this.log messages, commonly set to console */
- //logger : console,
-
-//TODO: not a dataset
- /** */
- className : _super.prototype.className + " history-content",
-
- /** In this override, add the state as a class for use with state-based CSS */
- _swapNewRender : function( $newRender ){
- _super.prototype._swapNewRender.call( this, $newRender );
-//TODO: model currently has no state
- var state = this.model.get( 'state' ) || STATES.OK;
- //if( this.model.has( 'state' ) ){
- this.$el.addClass( 'state-' + state );
- //}
- return this.$el;
- },
-
- // ......................................................................... misc
- /** String representation */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'HDCABaseView(' + modelString + ')';
- }
-});
-
-/** underscore templates */
-HDCABaseView.prototype.templates = (function(){
-
-// could steal this from hda-base (or use mixed content)
- var titleBarTemplate = BASE_MVC.wrapTemplate([
- // adding the hid display to the title
- '<div class="title-bar clear" tabindex="0">',
- '<span class="state-icon"></span>',
- '<div class="title">',
- //TODO: remove whitespace and use margin-right
- '<span class="hid"><%- collection.hid %></span> ',
- '<span class="name"><%- collection.name %></span>',
- '</div>',
- '<div class="subtitle"></div>',
- '</div>'
- ], 'collection' );
-
- return _.extend( {}, _super.prototype.templates, {
- titleBar : titleBarTemplate
- });
-}());
-
-
-//==============================================================================
- return {
- HDCABaseView : HDCABaseView
- };
-});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/hdca-edit.js
--- a/static/scripts/mvc/collection/hdca-edit.js
+++ /dev/null
@@ -1,55 +0,0 @@
-define([
- "mvc/dataset/states",
- "mvc/collection/hdca-base",
- "utils/localization"
-], function( STATES, HDCA_BASE, _l ){
-//==============================================================================
-var _super = HDCA_BASE.HDCABaseView;
-/** @class Editing view for HistoryDatasetCollectionAssociation.
- */
-var HDCAEditView = _super.extend({
-
- /** logger used to record this.log messages, commonly set to console */
- //logger : console,
-
- // ......................................................................... delete
- /** In this override, add the delete button. */
- _renderPrimaryActions : function(){
- this.log( this + '._renderPrimaryActions' );
- // render the display, edit attr and delete icon-buttons
- return _super.prototype._renderPrimaryActions.call( this )
- .concat([
- this._renderDeleteButton()
- ]);
- },
-
- /** Render icon-button to delete this collection. */
- _renderDeleteButton : function(){
- var self = this,
- deleted = this.model.get( 'deleted' );
- return faIconButton({
- title : deleted? _l( 'Dataset collection is already deleted' ): _l( 'Delete' ),
- classes : 'delete-btn',
- faIcon : 'fa-times',
- disabled : deleted,
- onclick : function() {
- // ...bler... tooltips being left behind in DOM (hover out never called on deletion)
- self.$el.find( '.icon-btn.delete-btn' ).trigger( 'mouseout' );
- self.model[ 'delete' ]();
- }
- });
- },
-
- // ......................................................................... misc
- /** string rep */
- toString : function(){
- var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
- return 'HDCAEditView(' + modelString + ')';
- }
-});
-
-//==============================================================================
- return {
- HDCAEditView : HDCAEditView
- };
-});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/collection/hdca-model.js
--- a/static/scripts/mvc/collection/hdca-model.js
+++ /dev/null
@@ -1,83 +0,0 @@
-define([
- "mvc/history/history-content-base",
- "mvc/collection/collection-model",
- "utils/localization"
-], function( HISTORY_CONTENT, DC_MODEL, _l ){
-/*==============================================================================
-
-Models for DatasetCollections contained within a history.
-
-TODO:
- these might be compactable to one class if some duplication with
- collection-model is used.
-
-==============================================================================*/
-var hcontentMixin = HISTORY_CONTENT.HistoryContentMixin,
- ListDC = DC_MODEL.ListDatasetCollection,
- PairDC = DC_MODEL.PairDatasetCollection,
- ListPairedDC = DC_MODEL.ListPairedDatasetCollection;
-
-//==============================================================================
-/** @class Backbone model for List Dataset Collection within a History.
- * @constructs
- */
-var HistoryListDatasetCollection = ListDC.extend( hcontentMixin ).extend(
-/** @lends HistoryListDatasetCollection.prototype */{
-
- initialize : function( model, options ){
- ListDC.prototype.initialize.call( this, model, options );
- hcontentMixin.initialize.call( this, model, options );
- },
-
- /** String representation. */
- toString : function(){
- return ([ 'HistoryListDatasetCollection(', this.get( 'name' ), ')' ].join( '' ));
- }
-});
-
-
-//==============================================================================
-/** @class Backbone model for Pair Dataset Collection within a History.
- * @constructs
- */
-var HistoryPairDatasetCollection = PairDC.extend( hcontentMixin ).extend(
-/** @lends HistoryPairDatasetCollection.prototype */{
-
- initialize : function( model, options ){
- PairDC.prototype.initialize.call( this, model, options );
- hcontentMixin.initialize.call( this, model, options );
- },
-
- /** String representation. */
- toString : function(){
- return ([ 'HistoryPairDatasetCollection(', this.get( 'name' ), ')' ].join( '' ));
- }
-});
-
-
-//==============================================================================
-/** @class Backbone model for List of Pairs Dataset Collection within a History.
- * @constructs
- */
-var HistoryListPairedDatasetCollection = ListPairedDC.extend( hcontentMixin ).extend(
-/** @lends HistoryListPairedDatasetCollection.prototype */{
-
- initialize : function( model, options ){
- ListPairedDC.prototype.initialize.call( this, model, options );
- hcontentMixin.initialize.call( this, model, options );
- },
-
- /** String representation. */
- toString : function(){
- return ([ 'HistoryListPairedDatasetCollection(', this.get( 'name' ), ')' ].join( '' ));
- }
-});
-
-
-//==============================================================================
- return {
- HistoryListDatasetCollection : HistoryListDatasetCollection,
- HistoryPairDatasetCollection : HistoryPairDatasetCollection,
- HistoryListPairedDatasetCollection : HistoryListPairedDatasetCollection
- };
-});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/dataset/dataset-li-edit.js
--- /dev/null
+++ b/static/scripts/mvc/dataset/dataset-li-edit.js
@@ -0,0 +1,351 @@
+define([
+ "mvc/dataset/states",
+ "mvc/dataset/dataset-li",
+ "mvc/tags",
+ "mvc/annotations",
+ "mvc/base-mvc",
+ "utils/localization"
+], function( STATES, DATASET_LI, TAGS, ANNOTATIONS, BASE_MVC, _l ){
+//==============================================================================
+var _super = DATASET_LI.DatasetListItemView;
+/** @class Editing view for DatasetAssociation.
+ */
+var DatasetListItemEdit = _super.extend(
+/** @lends DatasetListItemEdit.prototype */{
+
+ /** logger used to record this.log messages, commonly set to console */
+ //logger : console,
+
+ /** set up: options */
+ initialize : function( attributes ){
+ _super.prototype.initialize.call( this, attributes );
+//TODO: shouldn't this err if false?
+ this.hasUser = attributes.hasUser;
+
+ /** allow user purge of dataset files? */
+ this.purgeAllowed = attributes.purgeAllowed || false;
+
+ //TODO: move to HiddenUntilActivatedViewMixin
+ /** should the tags editor be shown or hidden initially? */
+ this.tagsEditorShown = attributes.tagsEditorShown || false;
+ /** should the tags editor be shown or hidden initially? */
+ this.annotationEditorShown = attributes.annotationEditorShown || false;
+ },
+
+ // ......................................................................... titlebar actions
+ /** In this override, add the other two primary actions: edit and delete */
+ _renderPrimaryActions : function(){
+ var actions = _super.prototype._renderPrimaryActions.call( this );
+ if( this.model.get( 'state' ) === STATES.NOT_VIEWABLE ){
+ return actions;
+ }
+ // render the display, edit attr and delete icon-buttons
+ return _super.prototype._renderPrimaryActions.call( this ).concat([
+ this._renderEditButton(),
+ this._renderDeleteButton()
+ ]);
+ },
+
+//TODO: move titleButtons into state renderers, remove state checks in the buttons
+
+ /** Render icon-button to edit the attributes (format, permissions, etc.) this dataset. */
+ _renderEditButton : function(){
+ // don't show edit while uploading, in-accessible
+ // DO show if in error (ala previous history panel)
+ if( ( this.model.get( 'state' ) === STATES.DISCARDED )
+ || ( !this.model.get( 'accessible' ) ) ){
+ return null;
+ }
+
+ var purged = this.model.get( 'purged' ),
+ deleted = this.model.get( 'deleted' ),
+ editBtnData = {
+ title : _l( 'Edit attributes' ),
+ href : this.model.urls.edit,
+ target : this.linkTarget,
+ faIcon : 'fa-pencil',
+ classes : 'edit-btn'
+ };
+
+ // disable if purged or deleted and explain why in the tooltip
+ if( deleted || purged ){
+ editBtnData.disabled = true;
+ if( purged ){
+ editBtnData.title = _l( 'Cannot edit attributes of datasets removed from disk' );
+ } else if( deleted ){
+ editBtnData.title = _l( 'Undelete dataset to edit attributes' );
+ }
+
+ // disable if still uploading or new
+ } else if( _.contains( [ STATES.UPLOAD, STATES.NEW ], this.model.get( 'state' ) ) ){
+ editBtnData.disabled = true;
+ editBtnData.title = _l( 'This dataset is not yet editable' );
+ }
+ return faIconButton( editBtnData );
+ },
+
+ /** Render icon-button to delete this hda. */
+ _renderDeleteButton : function(){
+ // don't show delete if...
+ if( ( !this.model.get( 'accessible' ) ) ){
+ return null;
+ }
+
+ var self = this,
+ deletedAlready = this.model.isDeletedOrPurged();
+ return faIconButton({
+ title : !deletedAlready? _l( 'Delete' ) : _l( 'Dataset is already deleted' ),
+ disabled : deletedAlready,
+ faIcon : 'fa-times',
+ classes : 'delete-btn',
+ onclick : function() {
+ // ...bler... tooltips being left behind in DOM (hover out never called on deletion)
+ self.$el.find( '.icon-btn.delete-btn' ).trigger( 'mouseout' );
+ self.model[ 'delete' ]();
+ }
+ });
+ },
+
+ // ......................................................................... details
+ /** In this override, add tags and annotations controls, make the ? dbkey a link to editing page */
+ _renderDetails : function(){
+ //TODO: generalize to be allow different details for each state
+ var $details = _super.prototype._renderDetails.call( this ),
+ state = this.model.get( 'state' );
+
+ if( !this.model.isDeletedOrPurged() && _.contains([ STATES.OK, STATES.FAILED_METADATA ], state ) ){
+ this._renderTags( $details );
+ this._renderAnnotation( $details );
+ this._makeDbkeyEditLink( $details );
+ }
+
+//TODO: TRIPLE tap, ugh.
+ this._setUpBehaviors( $details );
+ return $details;
+ },
+
+ /** Add less commonly used actions in the details section based on state */
+ _renderSecondaryActions : function(){
+ var actions = _super.prototype._renderSecondaryActions.call( this );
+ switch( this.model.get( 'state' ) ){
+ case STATES.UPLOAD:
+ case STATES.NEW:
+ case STATES.NOT_VIEWABLE:
+ return actions;
+ case STATES.ERROR:
+ // error button comes first
+ actions.unshift( this._renderErrButton() );
+ return actions.concat([ this._renderRerunButton() ]);
+ case STATES.OK:
+ case STATES.FAILED_METADATA:
+ return actions.concat([ this._renderRerunButton(), this._renderVisualizationsButton() ]);
+ }
+ return actions.concat([ this._renderRerunButton() ]);
+ },
+
+ /** Render icon-button to report an error on this dataset to the galaxy admin. */
+ _renderErrButton : function(){
+ return faIconButton({
+ title : _l( 'View or report this error' ),
+ href : this.model.urls.report_error,
+ classes : 'report-error-btn',
+ target : this.linkTarget,
+ faIcon : 'fa-bug'
+ });
+ },
+
+ /** Render icon-button to re-run the job that created this dataset. */
+ _renderRerunButton : function(){
+ return faIconButton({
+ title : _l( 'Run this job again' ),
+ href : this.model.urls.rerun,
+ classes : 'rerun-btn',
+ target : this.linkTarget,
+ faIcon : 'fa-refresh'
+ });
+ },
+
+ /** Render an icon-button or popupmenu of links based on the applicable visualizations */
+ _renderVisualizationsButton : function(){
+ //TODO: someday - lazyload visualizations
+ var visualizations = this.model.get( 'visualizations' );
+ if( ( this.model.isDeletedOrPurged() )
+ || ( !this.hasUser )
+ || ( !this.model.hasData() )
+ || ( _.isEmpty( visualizations ) ) ){
+ return null;
+ }
+ if( !_.isObject( visualizations[0] ) ){
+ this.warn( 'Visualizations have been switched off' );
+ return null;
+ }
+
+ var $visualizations = $( this.templates.visualizations( visualizations, this ) );
+ // use addBack here to include the root $visualizations elem (for the case of 1 visualization)
+ this._addScratchBookFn( $visualizations.find( '.visualization-link' ).addBack( '.visualization-link' ) );
+ return $visualizations;
+ },
+
+ /** add scratchbook functionality to visualization links */
+ _addScratchBookFn : function( $links ){
+ $links.click( function( ev ){
+ if( Galaxy.frame && Galaxy.frame.active ){
+ Galaxy.frame.add({
+ title : "Visualization",
+ type : "url",
+ content : $( this ).attr( 'href' )
+ });
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+ });
+ },
+
+//TODO: if possible move these to readonly view - but display the owner's tags/annotation (no edit)
+ /** Render the tags list/control */
+ _renderTags : function( $where ){
+ if( !this.hasUser ){ return; }
+ var view = this;
+ this.tagsEditor = new TAGS.TagsEditor({
+ model : this.model,
+ el : $where.find( '.tags-display' ),
+ onshowFirstTime : function(){ this.render(); },
+ // persist state on the hda view (and not the editor) since these are currently re-created each time
+ onshow : function(){ view.tagsEditorShown = true; },
+ onhide : function(){ view.tagsEditorShown = false; },
+ $activator : faIconButton({
+ title : _l( 'Edit dataset tags' ),
+ classes : 'tag-btn',
+ faIcon : 'fa-tags'
+ }).appendTo( $where.find( '.actions .right' ) )
+ });
+ if( this.tagsEditorShown ){ this.tagsEditor.toggle( true ); }
+ },
+
+ /** Render the annotation display/control */
+ _renderAnnotation : function( $where ){
+ if( !this.hasUser ){ return; }
+ var view = this;
+ this.annotationEditor = new ANNOTATIONS.AnnotationEditor({
+ model : this.model,
+ el : $where.find( '.annotation-display' ),
+ onshowFirstTime : function(){ this.render(); },
+ // persist state on the hda view (and not the editor) since these are currently re-created each time
+ onshow : function(){ view.annotationEditorShown = true; },
+ onhide : function(){ view.annotationEditorShown = false; },
+ $activator : faIconButton({
+ title : _l( 'Edit dataset annotation' ),
+ classes : 'annotate-btn',
+ faIcon : 'fa-comment'
+ }).appendTo( $where.find( '.actions .right' ) )
+ });
+ if( this.annotationEditorShown ){ this.annotationEditor.toggle( true ); }
+ },
+
+ /** If the format/dbkey/genome_build isn't set, make the display a link to the edit page */
+ _makeDbkeyEditLink : function( $details ){
+ // make the dbkey a link to editing
+ if( this.model.get( 'metadata_dbkey' ) === '?'
+ && !this.model.isDeletedOrPurged() ){
+ var editableDbkey = $( '<a class="value">?</a>' )
+ .attr( 'href', this.model.urls.edit )
+ .attr( 'target', this.linkTarget );
+ $details.find( '.dbkey .value' ).replaceWith( editableDbkey );
+ }
+ },
+
+ // ......................................................................... events
+ /** event map */
+ events : _.extend( _.clone( _super.prototype.events ), {
+ 'click .undelete-link' : function( ev ){ this.model.undelete(); return false; },
+ 'click .purge-link' : '_confirmPurge'
+ }),
+
+ /** listener for item purge */
+ _confirmPurge : function _confirmPurge( ev ){
+//TODO: confirm dialog
+ this.model.purge();
+ return false;
+ },
+
+ // ......................................................................... misc
+ /** string rep */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'HDAEditView(' + modelString + ')';
+ }
+});
+
+
+// ............................................................................ TEMPLATES
+/** underscore templates */
+DatasetListItemEdit.prototype.templates = (function(){
+//TODO: move to require text! plugin
+
+ var warnings = _.extend( {}, _super.prototype.templates.warnings, {
+ failed_metadata : BASE_MVC.wrapTemplate([
+ // in this override, provide a link to the edit page
+ '<% if( dataset.state === "failed_metadata" ){ %>',
+ '<div class="failed_metadata-warning warningmessagesmall">',
+ _l( 'An error occurred setting the metadata for this dataset' ),
+ '<br /><a href="<%= dataset.urls.edit %>" target="<%= view.linkTarget %>">',
+ _l( 'Set it manually or retry auto-detection' ),
+ '</a>',
+ '</div>',
+ '<% } %>'
+ ], 'dataset' ),
+
+ deleted : BASE_MVC.wrapTemplate([
+ // in this override, provide links to undelete or purge the dataset
+ '<% if( dataset.deleted && !dataset.purged ){ %>',
+ // deleted not purged
+ '<div class="deleted-msg warningmessagesmall">',
+ _l( 'This dataset has been deleted' ),
+ '<br /><a class="undelete-link" href="javascript:void(0);">', _l( 'Undelete it' ), '</a>',
+ '<% if( view.purgeAllowed ){ %>',
+ '<br /><a class="purge-link" href="javascript:void(0);">',
+ _l( 'Permanently remove it from disk' ),
+ '</a>',
+ '<% } %>',
+ '</div>',
+ '<% } %>'
+ ], 'dataset' )
+ });
+
+ var visualizationsTemplate = BASE_MVC.wrapTemplate([
+ '<% if( visualizations.length === 1 ){ %>',
+ '<a class="visualization-btn visualization-link icon-btn" href="<%= visualizations[0].href %>"',
+ ' target="<%= visualizations[0].target %>" title="', _l( 'Visualize in' ),
+ ' <%= visualizations[0].html %>">',
+ '<span class="fa fa-bar-chart-o"></span>',
+ '</a>',
+
+ '<% } else { %>',
+ '<div class="visualizations-dropdown dropdown">',
+ '<a class="visualization-btn icon-btn" data-toggle="dropdown" title="', _l( 'Visualize' ), '">',
+ '<span class="fa fa-bar-chart-o"></span>',
+ '</a>',
+ '<ul class="dropdown-menu" role="menu">',
+ '<% _.each( visualizations, function( visualization ){ %>',
+ '<li><a class="visualization-link" href="<%= visualization.href %>"',
+ ' target="<%= visualization.target %>">',
+ '<%= visualization.html %>',
+ '</a></li>',
+ '<% }); %>',
+ '</ul>',
+ '</div>',
+ '<% } %>'
+ ], 'visualizations' );
+
+ return _.extend( {}, _super.prototype.templates, {
+ warnings : warnings,
+ visualizations : visualizationsTemplate
+ });
+}());
+
+
+//==============================================================================
+ return {
+ DatasetListItemEdit : DatasetListItemEdit
+ };
+});
diff -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 -r 588c521575605b698ee15376f3b919f6a2cda20c static/scripts/mvc/dataset/dataset-li.js
--- /dev/null
+++ b/static/scripts/mvc/dataset/dataset-li.js
@@ -0,0 +1,464 @@
+define([
+ "mvc/dataset/states",
+ "mvc/base-mvc",
+ "utils/localization"
+], function( STATES, BASE_MVC, _l ){
+/* global Backbone */
+//==============================================================================
+var _super = BASE_MVC.ListItemView;
+/** @class Read only list view for either LDDAs, HDAs, or HDADCEs.
+ * Roughly, any DatasetInstance (and not a raw Dataset).
+ */
+var DatasetListItemView = _super.extend(
+/** @lends DatasetListItemView.prototype */{
+
+ /** logger used to record this.log messages, commonly set to console */
+ //logger : console,
+
+ className : _super.prototype.className + " dataset",
+
+ /** Set up: instance vars, options, and event handlers */
+ initialize : function( attributes ){
+ if( attributes.logger ){ this.logger = this.model.logger = attributes.logger; }
+ this.log( this + '.initialize:', attributes );
+ _super.prototype.initialize.call( this, attributes );
+
+ /** where should pages from links be displayed? (default to new tab/window) */
+ this.linkTarget = attributes.linkTarget || '_blank';
+
+ this._setUpListeners();
+ },
+
+ /** event listeners */
+ _setUpListeners : function(){
+ // hide the primary actions in the title bar when selectable
+ this.on( 'selectable', function( isSelectable ){
+ if( isSelectable ){
+ this.$( '.primary-actions' ).hide();
+ } else {
+ this.$( '.primary-actions' ).show();
+ }
+ });
+
+ // re-rendering on any model changes
+ this.model.on( 'change', function( model, options ){
+ // if the model moved into the ready state and is expanded without details, fetch those details now
+ if( this.model.changedAttributes().state && this.model.inReadyState()
+ && this.expanded && !this.model.hasDetails() ){
+ // will render automatically (due to fetch -> change)
+ this.model.fetch();
+
+ } else {
+ this.render();
+ }
+ }, this );
+
+ this.on( 'all', function( event ){
+ this.log( event );
+ }, this );
+ },
+
+ // ......................................................................... expandable
+ /** In this override, only get details if in the ready state.
+ * Note: fetch with no 'change' event triggering to prevent automatic rendering.
+ */
+ _fetchModelDetails : function(){
+ var view = this;
+ if( view.model.inReadyState() && !view.model.hasDetails() ){
+ return view.model.fetch({ silent: true });
+ }
+ return jQuery.when();
+ },
+
+ // ......................................................................... removal
+ /** Remove this view's html from the DOM and remove all event listeners.
+ * @param {Number or String} speed jq effect speed
+ * @param {Function} callback an optional function called when removal is done (scoped to this view)
+ */
+ remove : function( speed, callback ){
+ var view = this;
+ speed = speed || this.fxSpeed;
+ this.$el.fadeOut( speed, function(){
+ Backbone.View.prototype.remove.call( view );
+ if( callback ){ callback.call( view ); }
+ });
+ },
+
+ // ......................................................................... rendering
+ /* TODO:
+ dataset states are the issue primarily making dataset rendering complex
+ each state should have it's own way of displaying/set of details
+ often with different actions that can be applied
+ throw in deleted/purged/visible and things get complicated easily
+ I've considered (a couple of times) - creating a view for each state
+ - but recreating the view during an update...seems wrong
+ */
+ /** Render this HDA, set up ui.
+ * @param {Number or String} speed jq fx speed
+ * @returns {Object} this
+ */
+ render : function( speed ){
+ //HACK: hover exit doesn't seem to be called on prev. tooltips when RE-rendering - so: no tooltip hide
+ // handle that here by removing previous view's tooltips
+ //this.$el.find("[title]").tooltip( "destroy" );
+ return _super.prototype.render.call( this, speed );
+ },
+
+ /** In this override, add the dataset state as a class for use with state-based CSS */
+ _swapNewRender : function( $newRender ){
+ _super.prototype._swapNewRender.call( this, $newRender );
+ if( this.model.has( 'state' ) ){
+ this.$el.addClass( 'state-' + this.model.get( 'state' ) );
+ }
+ return this.$el;
+ },
+
+ // ................................................................................ titlebar
+ /** In this override, add the dataset display button. */
+ _renderPrimaryActions : function(){
+ // render just the display for read-only
+ return [ this._renderDisplayButton() ];
+ },
+
+ /** Render icon-button to display dataset data */
+ _renderDisplayButton : function(){
+//TODO:?? too complex - possibly move into template
+ // don't show display if not viewable or not accessible
+ var state = this.model.get( 'state' );
+ if( ( state === STATES.NOT_VIEWABLE )
+ || ( state === STATES.DISCARDED )
+ || ( !this.model.get( 'accessible' ) ) ){
+ return null;
+ }
+
+ var displayBtnData = {
+ target : this.linkTarget,
+ classes : 'display-btn'
+ };
+
+ // show a disabled display if the data's been purged
+ if( this.model.get( 'purged' ) ){
+ displayBtnData.disabled = true;
+ displayBtnData.title = _l( 'Cannot display datasets removed from disk' );
+
+ // disable if still uploading
+ } else if( state === STATES.UPLOAD ){
+ displayBtnData.disabled = true;
+ displayBtnData.title = _l( 'This dataset must finish uploading before it can be viewed' );
+
+ // disable if still new
+ } else if( state === STATES.NEW ){
+ displayBtnData.disabled = true;
+ displayBtnData.title = _l( 'This dataset is not yet viewable' );
+
+ } else {
+ displayBtnData.title = _l( 'View data' );
+
+ // default link for dataset
+ displayBtnData.href = this.model.urls.display;
+
+ // add frame manager option onclick event
+ var self = this;
+ displayBtnData.onclick = function( ev ){
+ if( Galaxy.frame && Galaxy.frame.active ){
+ // Create frame with TabularChunkedView.
+ Galaxy.frame.add({
+ title : "Data Viewer: " + self.model.get( 'name' ),
+ type : "other",
+ content : function( parent_elt ){
+ var new_dataset = new DATA.TabularDataset({ id: self.model.get( 'id' ) });
+ $.when( new_dataset.fetch() ).then( function(){
+ DATA.createTabularDatasetChunkedView({
+ model: new_dataset,
+ parent_elt: parent_elt,
+ embedded: true,
+ height: '100%'
+ });
+ });
+ }
+ });
+ ev.preventDefault();
+ }
+ };
+ }
+ displayBtnData.faIcon = 'fa-eye';
+ return faIconButton( displayBtnData );
+ },
+
+ // ......................................................................... rendering details
+ /** Render the enclosing div of the hda body and, if expanded, the html in the body
+ * @returns {jQuery} rendered DOM
+ */
+ _renderDetails : function(){
+ //TODO: generalize to be allow different details for each state
+ var $details = _super.prototype._renderDetails.call( this );
+ $details.find( '.actions .left' ).empty().append( this._renderSecondaryActions() );
+ $details.find( '.summary' ).html( this._renderSummary() );
+ $details.find( '.display-applications' ).html( this._renderDisplayApplications() );
+
+//TODO: double tap
+ this._setUpBehaviors( $details );
+ return $details;
+ },
+
+ /** Defer to the appropo summary rendering fn based on state */
+ _renderSummary : function(){
+ var summaryRenderFn = this.templates.summaries[ this.model.get( 'state' ) ];
+ summaryRenderFn = summaryRenderFn || this.templates.summaries.unknown;
+ return summaryRenderFn( this.model.toJSON(), this );
+ },
+
+ /** Render the external display application links */
+ _renderDisplayApplications : function(){
+ if( this.model.isDeletedOrPurged() ){ return ''; }
+ // render both old and new display apps using the same template
+ return [
+ this.templates.displayApplications( this.model.get( 'display_apps' ), this ),
+ this.templates.displayApplications( this.model.get( 'display_types' ), this )
+ ].join( '' );
+ },
+
+ // ......................................................................... secondary/details actions
+ /** A series of links/buttons for less commonly used actions: re-run, info, etc. */
+ _renderSecondaryActions : function(){
+ this.debug( '_renderSecondaryActions' );
+ switch( this.model.get( 'state' ) ){
+ case STATES.NOT_VIEWABLE:
+ return [];
+ case STATES.OK:
+ case STATES.FAILED_METADATA:
+ case STATES.ERROR:
+ return [ this._renderDownloadButton(), this._renderShowParamsButton() ];
+ }
+ return [ this._renderShowParamsButton() ];
+ },
+
+ /** Render icon-button to show the input and output (stdout/err) for the job that created this.
+ * @returns {jQuery} rendered DOM
+ */
+ _renderShowParamsButton : function(){
+ // gen. safe to show in all cases
+ return faIconButton({
+ title : _l( 'View details' ),
+ classes : 'dataset-params-btn',
+ href : this.model.urls.show_params,
+ target : this.linkTarget,
+ faIcon : 'fa-info-circle'
+ });
+ },
+
+ /** Render icon-button/popupmenu to download the data (and/or the associated meta files (bai, etc.)) for this.
+ * @returns {jQuery} rendered DOM
+ */
+ _renderDownloadButton : function(){
+//TODO: to (its own) template fn
+ // don't show anything if the data's been purged
+ if( this.model.get( 'purged' ) || !this.model.hasData() ){ return null; }
+
+ // return either: a popupmenu with links to download assoc. meta files (if there are meta files)
+ // or a single download icon-button (if there are no meta files)
+ if( !_.isEmpty( this.model.get( 'meta_files' ) ) ){
+ return this._renderMetaFileDownloadButton();
+ }
+
+ return $([
+ '<a class="download-btn icon-btn" href="', this.model.urls.download, '" title="' + _l( 'Download' ) + '">',
+ '<span class="fa fa-floppy-o"></span>',
+ '</a>'
+ ].join( '' ));
+ },
+
+ /** Render the download button which opens a dropdown with links to download assoc. meta files (indeces, etc.) */
+ _renderMetaFileDownloadButton : function(){
+ var urls = this.model.urls;
+ return $([
+ '<div class="metafile-dropdown dropdown">',
+ '<a class="download-btn icon-btn" href="javascript:void(0)" data-toggle="dropdown"',
+ ' title="' + _l( 'Download' ) + '">',
+ '<span class="fa fa-floppy-o"></span>',
+ '</a>',
+ '<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">',
+ '<li><a href="' + urls.download + '">', _l( 'Download dataset' ), '</a></li>',
+ _.map( this.model.get( 'meta_files' ), function( meta_file ){
+ return [
+ '<li><a href="', urls.meta_download + meta_file.file_type, '">',
+ _l( 'Download' ), ' ', meta_file.file_type,
+ '</a></li>'
+ ].join( '' );
+ }).join( '\n' ),
+ '</ul>',
+ '</div>'
+ ].join( '\n' ));
+ },
+
+ // ......................................................................... misc
+ /** String representation */
+ toString : function(){
+ var modelString = ( this.model )?( this.model + '' ):( '(no model)' );
+ return 'DatasetListItemView(' + modelString + ')';
+ }
+});
+
+// ............................................................................ TEMPLATES
+/** underscore templates */
+DatasetListItemView.prototype.templates = (function(){
+//TODO: move to require text! plugin
+
+ var warnings = _.extend( {}, _super.prototype.templates.warnings, {
+ failed_metadata : BASE_MVC.wrapTemplate([
+ // failed metadata is rendered as a warning on an otherwise ok dataset view
+ '<% if( model.state === "failed_metadata" ){ %>',
+ '<div class="warningmessagesmall">',
+ _l( 'An error occurred setting the metadata for this dataset' ),
+ '</div>',
+ '<% } %>'
+ ]),
+ error : BASE_MVC.wrapTemplate([
+ // error during index fetch - show error on dataset
+ '<% if( model.error ){ %>',
+ '<div class="errormessagesmall">',
+ _l( 'There was an error getting the data for this dataset' ), ': <%- model.error %>',
+ '</div>',
+ '<% } %>'
+ ]),
+ purged : BASE_MVC.wrapTemplate([
+ '<% if( model.purged ){ %>',
+ '<div class="purged-msg warningmessagesmall">',
+ _l( 'This dataset has been deleted and removed from disk' ),
+ '</div>',
+ '<% } %>'
+ ]),
+ deleted : BASE_MVC.wrapTemplate([
+ // deleted not purged
+ '<% if( model.deleted && !model.purged ){ %>',
+ '<div class="deleted-msg warningmessagesmall">',
+ _l( 'This dataset has been deleted' ),
+ '</div>',
+ '<% } %>'
+ ])
+
+ //NOTE: hidden warning is only needed for HDAs
+ });
+
+ var detailsTemplate = BASE_MVC.wrapTemplate([
+ '<div class="details">',
+ '<div class="summary"></div>',
+
+ '<div class="actions clear">',
+ '<div class="left"></div>',
+ '<div class="right"></div>',
+ '</div>',
+
+ // do not display tags, annotation, display apps, or peek when deleted
+ '<% if( !dataset.deleted && !dataset.purged ){ %>',
+ '<div class="tags-display"></div>',
+ '<div class="annotation-display"></div>',
+
+ '<div class="display-applications"></div>',
+
+ '<% if( dataset.peek ){ %>',
+ '<pre class="dataset-peek"><%= dataset.peek %></pre>',
+ '<% } %>',
+ '<% } %>',
+ '</div>'
+ ], 'dataset' );
+
+//TODO: still toooooooooooooo complex - rework
+ var summaryTemplates = {};
+ summaryTemplates[ STATES.OK ] = summaryTemplates[ STATES.FAILED_METADATA ] = BASE_MVC.wrapTemplate([
+ '<% if( dataset.misc_blurb ){ %>',
+ '<div class="blurb">',
+ '<span class="value"><%- dataset.misc_blurb %></span>',
+ '</div>',
+ '<% } %>',
+
+ '<% if( dataset.data_type ){ %>',
+ '<div class="datatype">',
+ '<label class="prompt">', _l( 'format' ), '</label>',
+ '<span class="value"><%- dataset.data_type %></span>',
+ '</div>',
+ '<% } %>',
+
+ '<% if( dataset.metadata_dbkey ){ %>',
+ '<div class="dbkey">',
+ '<label class="prompt">', _l( 'database' ), '</label>',
+ '<span class="value">',
+ '<%- dataset.metadata_dbkey %>',
+ '</span>',
+ '</div>',
+ '<% } %>',
+
+ '<% if( dataset.misc_info ){ %>',
+ '<div class="info">',
+ '<span class="value"><%- dataset.misc_info %></span>',
+ '</div>',
+ '<% } %>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.NEW ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'This is a new dataset and not all of its data are available yet' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.NOT_VIEWABLE ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'You do not have permission to view this dataset' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.DISCARDED ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'The job creating this dataset was cancelled before completion' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.QUEUED ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'This job is waiting to run' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.UPLOAD ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'This dataset is currently uploading' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.SETTING_METADATA ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'Metadata is being auto-detected' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.RUNNING ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'This job is currently running' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.PAUSED ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'This job is paused. Use the "Resume Paused Jobs" in the history menu to resume' ), '</div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.ERROR ] = BASE_MVC.wrapTemplate([
+ '<% if( !dataset.purged ){ %>',
+ '<div><%- dataset.misc_blurb %></div>',
+ '<% } %>',
+ '<span class="help-text">', _l( 'An error occurred with this dataset' ), ':</span>',
+ '<div class="job-error-text"><%- dataset.misc_info %></div>'
+ ], 'dataset' );
+ summaryTemplates[ STATES.EMPTY ] = BASE_MVC.wrapTemplate([
+ '<div>', _l( 'No data' ), ': <i><%- dataset.misc_blurb %></i></div>'
+ ], 'dataset' );
+ summaryTemplates.unknown = BASE_MVC.wrapTemplate([
+ '<div>Error: unknown dataset state: "<%- dataset.state %>"</div>'
+ ], 'dataset' );
+
+ // this is applied to both old and new style display apps
+ var displayApplicationsTemplate = BASE_MVC.wrapTemplate([
+ '<% _.each( apps, function( app ){ %>',
+ '<div class="display-application">',
+ '<span class="display-application-location"><%- app.label %></span> ',
+ '<span class="display-application-links">',
+ '<% _.each( app.links, function( link ){ %>',
+ '<a target="<%= link.target %>" href="<%= link.href %>">',
+ '<% print( _l( link.text ) ); %>',
+ '</a> ',
+ '<% }); %>',
+ '</span>',
+ '</div>',
+ '<% }); %>'
+ ], 'apps' );
+
+ return _.extend( {}, _super.prototype.templates, {
+ warnings : warnings,
+ details : detailsTemplate,
+ summaries : summaryTemplates,
+ displayApplications : displayApplicationsTemplate
+ });
+}());
+
+
+// ============================================================================
+ return {
+ DatasetListItemView : DatasetListItemView
+ };
+});
This diff is so big that we needed to truncate the remainder.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: jmchilton: Merged in BjoernGruening/galaxy-central-4 (pull request #454)
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/2f300953ad98/
Changeset: 2f300953ad98
User: jmchilton
Date: 2014-08-12 15:04:01
Summary: Merged in BjoernGruening/galaxy-central-4 (pull request #454)
Fixes for recent Tool Shed code cleanups
Affected #: 2 files
diff -r 19309418c86450b7f39691460eb430e100883cb4 -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
--- a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
+++ b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
@@ -239,8 +239,7 @@
tool_shed_url, name, owner, changeset_revision = self.__parse_repository_from_payload( payload, include_changeset=True )
self.__ensure_can_install_repos( trans )
install_repository_manager = InstallRepositoryManager( trans.app )
- installed_tool_shed_repositories = install_repository_manager.install( trans.app,
- tool_shed_url,
+ installed_tool_shed_repositories = install_repository_manager.install( tool_shed_url,
name,
owner,
changeset_revision,
diff -r 19309418c86450b7f39691460eb430e100883cb4 -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -694,7 +694,8 @@
name,
owner,
changeset_revision )
- installed_tool_shed_repositories = self.__install_repositories( repository_revision_dict,
+ installed_tool_shed_repositories = self.__install_repositories( tool_shed_url,
+ repository_revision_dict,
repo_info_dicts,
install_options )
return installed_tool_shed_repositories
@@ -788,7 +789,7 @@
# at this point because repository dependencies may have added additional repositories for installation
# along with the single specified repository.
encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
- initiate_repository_installation( self.app, installation_dict )
+ self.initiate_repository_installation( installation_dict )
# Some repositories may have repository dependencies that are required to be installed before the
# dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in
# the required order.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
4 new commits in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/382b019fcdc1/
Changeset: 382b019fcdc1
User: BjoernGruening
Date: 2014-08-12 10:33:27
Summary: install_repository_manager do not need trans.app anymore.
Affected #: 1 file
diff -r 700560884da71e8bd3bdad6ddbe4edfde9566f7f -r 382b019fcdc10b72fc77a9284d7adcfeb3170cd8 lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
--- a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
+++ b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
@@ -239,8 +239,7 @@
tool_shed_url, name, owner, changeset_revision = self.__parse_repository_from_payload( payload, include_changeset=True )
self.__ensure_can_install_repos( trans )
install_repository_manager = InstallRepositoryManager( trans.app )
- installed_tool_shed_repositories = install_repository_manager.install( trans.app,
- tool_shed_url,
+ installed_tool_shed_repositories = install_repository_manager.install( tool_shed_url,
name,
owner,
changeset_revision,
https://bitbucket.org/galaxy/galaxy-central/commits/0df3fe8e9945/
Changeset: 0df3fe8e9945
User: BjoernGruening
Date: 2014-08-12 10:38:24
Summary: First argument to __install_repositories is the Tool Shed URL (tool_shed_url)
Affected #: 1 file
diff -r 382b019fcdc10b72fc77a9284d7adcfeb3170cd8 -r 0df3fe8e99457c75cefeab162dac3e90f948d764 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -694,7 +694,8 @@
name,
owner,
changeset_revision )
- installed_tool_shed_repositories = self.__install_repositories( repository_revision_dict,
+ installed_tool_shed_repositories = self.__install_repositories( tool_shed_url,
+ repository_revision_dict,
repo_info_dicts,
install_options )
return installed_tool_shed_repositories
https://bitbucket.org/galaxy/galaxy-central/commits/f3c84cf5296f/
Changeset: f3c84cf5296f
User: BjoernGruening
Date: 2014-08-12 10:41:45
Summary: initiate_repository_installation was not updated in the recent code restructuring efforts
Affected #: 1 file
diff -r 0df3fe8e99457c75cefeab162dac3e90f948d764 -r f3c84cf5296f6b9bed917f71693ff32dd92188f4 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -789,7 +789,7 @@
# at this point because repository dependencies may have added additional repositories for installation
# along with the single specified repository.
encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
- initiate_repository_installation( self.app, installation_dict )
+ self.initiate_repository_installation( installation_dict )
# Some repositories may have repository dependencies that are required to be installed before the
# dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in
# the required order.
https://bitbucket.org/galaxy/galaxy-central/commits/2f300953ad98/
Changeset: 2f300953ad98
User: jmchilton
Date: 2014-08-12 15:04:01
Summary: Merged in BjoernGruening/galaxy-central-4 (pull request #454)
Fixes for recent Tool Shed code cleanups
Affected #: 2 files
diff -r 19309418c86450b7f39691460eb430e100883cb4 -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
--- a/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
+++ b/lib/galaxy/webapps/galaxy/api/tool_shed_repositories.py
@@ -239,8 +239,7 @@
tool_shed_url, name, owner, changeset_revision = self.__parse_repository_from_payload( payload, include_changeset=True )
self.__ensure_can_install_repos( trans )
install_repository_manager = InstallRepositoryManager( trans.app )
- installed_tool_shed_repositories = install_repository_manager.install( trans.app,
- tool_shed_url,
+ installed_tool_shed_repositories = install_repository_manager.install( tool_shed_url,
name,
owner,
changeset_revision,
diff -r 19309418c86450b7f39691460eb430e100883cb4 -r 2f300953ad98992a620b1f0678eb72505f8cdfc2 lib/tool_shed/galaxy_install/install_manager.py
--- a/lib/tool_shed/galaxy_install/install_manager.py
+++ b/lib/tool_shed/galaxy_install/install_manager.py
@@ -694,7 +694,8 @@
name,
owner,
changeset_revision )
- installed_tool_shed_repositories = self.__install_repositories( repository_revision_dict,
+ installed_tool_shed_repositories = self.__install_repositories( tool_shed_url,
+ repository_revision_dict,
repo_info_dicts,
install_options )
return installed_tool_shed_repositories
@@ -788,7 +789,7 @@
# at this point because repository dependencies may have added additional repositories for installation
# along with the single specified repository.
encoded_kwd, query, tool_shed_repositories, encoded_repository_ids = \
- initiate_repository_installation( self.app, installation_dict )
+ self.initiate_repository_installation( installation_dict )
# Some repositories may have repository dependencies that are required to be installed before the
# dependent repository, so we'll order the list of tsr_ids to ensure all repositories install in
# the required order.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: jmchilton: Fix multi-page tool help parsing.
by commits-noreply@bitbucket.org 12 Aug '14
by commits-noreply@bitbucket.org 12 Aug '14
12 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/19309418c864/
Changeset: 19309418c864
User: jmchilton
Date: 2014-08-12 14:19:04
Summary: Fix multi-page tool help parsing.
Patch thanks to Hans-Philipp Brachvogel.
Affected #: 2 files
diff -r 700560884da71e8bd3bdad6ddbe4edfde9566f7f -r 19309418c86450b7f39691460eb430e100883cb4 lib/galaxy/tools/__init__.py
--- a/lib/galaxy/tools/__init__.py
+++ b/lib/galaxy/tools/__init__.py
@@ -1482,10 +1482,10 @@
help_footer = help_footer + help_page.tail
# Each page has to rendered all-together because of backreferences allowed by rst
try:
- self.help_by_page = [ Template( rst_to_html( help_header + x + help_footer,
+ self.help_by_page = [ Template( rst_to_html( help_header + x + help_footer ),
input_encoding='utf-8', output_encoding='utf-8',
default_filters=[ 'decode.utf8' ],
- encoding_errors='replace' ) )
+ encoding_errors='replace' )
for x in self.help_by_page ]
except:
log.exception( "error in multi-page help for tool %s" % self.name )
diff -r 700560884da71e8bd3bdad6ddbe4edfde9566f7f -r 19309418c86450b7f39691460eb430e100883cb4 test/functional/tools/multi_page.xml
--- a/test/functional/tools/multi_page.xml
+++ b/test/functional/tools/multi_page.xml
@@ -14,6 +14,10 @@
<outputs><data format="txt" name="output" /></outputs>
+ <help>
+ <page>Page 1 Help.</page>
+ <page>Page 2 Help.</page>
+ </help><tests><test><param name="p1" value="3" />
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: natefoo: Added tag latest_2014.08.11 for changeset 52b5cc75a175
by commits-noreply@bitbucket.org 11 Aug '14
by commits-noreply@bitbucket.org 11 Aug '14
11 Aug '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/b6d2c77d8bce/
Changeset: b6d2c77d8bce
Branch: stable
User: natefoo
Date: 2014-08-11 23:22:49
Summary: Added tag latest_2014.08.11 for changeset 52b5cc75a175
Affected #: 1 file
diff -r 52b5cc75a1757eddfb94ee373193c9d8fa2ec442 -r b6d2c77d8bce44cdaba188ce949ed69f94be6bc4 .hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -18,3 +18,4 @@
81fbe25bd02edcd53065e8e4476dd1dfb5a72cf2 latest_2013.11.04
2a756ca2cb1826db7796018e77d12e2dd7b67603 latest_2014.02.10
ca45b78adb4152fc6e7395514d46eba6b7d0b838 release_2014.08.11
+52b5cc75a1757eddfb94ee373193c9d8fa2ec442 latest_2014.08.11
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0