mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'dev' into azure-blob-objectstore
This commit is contained in:
@@ -125,6 +125,8 @@ DCListItemView.prototype.templates = (function(){
|
||||
_l( 'a pair of datasets' ),
|
||||
'<% } else if( collection.collection_type === "list:paired" ){ %>',
|
||||
_l( 'a list of <%- countText %>dataset pairs' ),
|
||||
'<% } else if( collection.collection_type === "list:list" ){ %>',
|
||||
_l( 'a list of <%- countText %>dataset lists' ),
|
||||
'<% } %>',
|
||||
'</div>'
|
||||
], 'collection' );
|
||||
|
||||
@@ -504,10 +504,58 @@ var ListPairedDatasetCollection = DatasetCollection.extend(
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @class Backbone model for a list dataset collection within a list:list dataset collection. */
|
||||
var NestedListDCDCE = ListDatasetCollection.extend( BASE_MVC.mixin( DatasetCollectionElementMixin,
|
||||
/** @lends NestedListDCDCE.prototype */{
|
||||
|
||||
/** This is both a collection and a collection element - call the constructor */
|
||||
constructor : function( attributes, options ){
|
||||
this.debug( '\t NestedListDCDCE.constructor:', attributes, options );
|
||||
DatasetCollectionElementMixin.constructor.call( this, attributes, options );
|
||||
},
|
||||
|
||||
/** String representation. */
|
||||
toString : function(){
|
||||
var objStr = ( this.object )?( '' + this.object ):( this.get( 'element_identifier' ) );
|
||||
return ([ 'NestedListDCDCE(', objStr, ')' ].join( '' ));
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @class Backbone collection containing list dataset collections. */
|
||||
var NestedListDCDCECollection = NestedDCDCECollection.extend({
|
||||
|
||||
/** We know this collection is composed of only nested pair collections */
|
||||
model: NestedListDCDCE,
|
||||
|
||||
/** String representation. */
|
||||
toString : function(){
|
||||
return ([ 'NestedListDCDCECollection(', this.length, ')' ].join( '' ));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @class Backbone Model for a DatasetCollection (list) that contains other lists. */
|
||||
var ListOfListsDatasetCollection = DatasetCollection.extend({
|
||||
|
||||
/** list:paired is the only collection that itself contains collections */
|
||||
collectionClass : NestedListDCDCECollection,
|
||||
|
||||
/** String representation. */
|
||||
toString : function(){
|
||||
return ([ 'ListOfListsDatasetCollection(', this.get( 'name' ), ')' ].join( '' ));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
return {
|
||||
ListDatasetCollection : ListDatasetCollection,
|
||||
PairDatasetCollection : PairDatasetCollection,
|
||||
ListPairedDatasetCollection : ListPairedDatasetCollection
|
||||
ListDatasetCollection : ListDatasetCollection,
|
||||
PairDatasetCollection : PairDatasetCollection,
|
||||
ListPairedDatasetCollection : ListPairedDatasetCollection,
|
||||
ListOfListsDatasetCollection: ListOfListsDatasetCollection
|
||||
};
|
||||
});
|
||||
|
||||
@@ -128,7 +128,7 @@ var NestedPairCollectionViewEdit = PairCollectionViewEdit.extend(
|
||||
|
||||
|
||||
// =============================================================================
|
||||
/** @class non-editable, read-only View/Controller for a dataset collection. */
|
||||
/** @class editable, View/Controller for a list of pairs dataset collection. */
|
||||
var ListOfPairsCollectionViewEdit = CollectionViewEdit.extend(
|
||||
/** @lends ListOfPairsCollectionView.prototype */{
|
||||
|
||||
@@ -146,11 +146,31 @@ var ListOfPairsCollectionViewEdit = CollectionViewEdit.extend(
|
||||
});
|
||||
|
||||
|
||||
// =============================================================================
|
||||
/** @class View/Controller for a list of lists dataset collection. */
|
||||
var ListOfListsCollectionViewEdit = CollectionViewEdit.extend(
|
||||
/** @lends ListOfListsCollectionView.prototype */{
|
||||
|
||||
//TODO: not strictly needed - due to switch in CollectionView._getContentClass
|
||||
/** sub view class used for nested collections */
|
||||
NestedDCDCEViewClass : DC_EDIT.NestedDCDCEListItemEdit.extend({
|
||||
foldoutPanelClass : NestedPairCollectionViewEdit
|
||||
}),
|
||||
|
||||
// ........................................................................ misc
|
||||
/** string rep */
|
||||
toString : function(){
|
||||
return 'ListOfListsCollectionViewEdit(' + (( this.model )?( this.model.get( 'name' )):( '' )) + ')';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
return {
|
||||
CollectionViewEdit : CollectionViewEdit,
|
||||
ListCollectionViewEdit : ListCollectionViewEdit,
|
||||
PairCollectionViewEdit : PairCollectionViewEdit,
|
||||
ListOfPairsCollectionViewEdit : ListOfPairsCollectionViewEdit
|
||||
ListOfPairsCollectionViewEdit : ListOfPairsCollectionViewEdit,
|
||||
ListOfListsCollectionViewEdit : ListOfListsCollectionViewEdit
|
||||
};
|
||||
});
|
||||
|
||||
@@ -153,6 +153,8 @@ CollectionView.prototype.templates = (function(){
|
||||
_l( 'a pair of datasets' ),
|
||||
'<% } else if( collection.collection_type === "list:paired" ){ %>',
|
||||
_l( 'a list of paired datasets' ),
|
||||
'<% } else if( collection.collection_type === "list:list" ){ %>',
|
||||
_l( 'a list of dataset lists' ),
|
||||
'<% } %>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
@@ -215,11 +217,28 @@ var ListOfPairsCollectionView = CollectionView.extend(
|
||||
});
|
||||
|
||||
|
||||
// =============================================================================
|
||||
/** @class non-editable, read-only View/Controller for a list of lists dataset collection. */
|
||||
var ListOfListsCollectionView = CollectionView.extend({
|
||||
|
||||
/** sub view class used for nested collections */
|
||||
NestedDCDCEViewClass : DC_LI.NestedDCDCEListItemView.extend({
|
||||
foldoutPanelClass : PairCollectionView
|
||||
}),
|
||||
|
||||
/** string rep */
|
||||
toString : function(){
|
||||
return 'ListOfListsCollectionView(' + (( this.model )?( this.model.get( 'name' )):( '' )) + ')';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
return {
|
||||
CollectionView : CollectionView,
|
||||
ListCollectionView : ListCollectionView,
|
||||
PairCollectionView : PairCollectionView,
|
||||
ListOfPairsCollectionView : ListOfPairsCollectionView
|
||||
ListOfPairsCollectionView : ListOfPairsCollectionView,
|
||||
ListOfListsCollectionView : ListOfListsCollectionView
|
||||
};
|
||||
});
|
||||
|
||||
@@ -64,7 +64,7 @@ var TabularDataset = Dataset.extend({
|
||||
defaults: _.extend({}, Dataset.prototype.defaults, {
|
||||
chunk_url: null,
|
||||
first_data_chunk: null,
|
||||
chunk_index: -1,
|
||||
offset: 0,
|
||||
at_eof: false
|
||||
}),
|
||||
|
||||
@@ -72,7 +72,9 @@ var TabularDataset = Dataset.extend({
|
||||
Dataset.prototype.initialize.call(this);
|
||||
|
||||
// If first data chunk is available, next chunk is 1.
|
||||
this.attributes.chunk_index = (this.attributes.first_data_chunk ? 1 : 0);
|
||||
if (this.attributes.first_data_chunk){
|
||||
this.attributes.offset = this.attributes.first_data_chunk.offset;
|
||||
}
|
||||
this.attributes.chunk_url = Galaxy.root + 'dataset/display?dataset_id=' + this.id;
|
||||
this.attributes.url_viz = Galaxy.root + 'visualization';
|
||||
},
|
||||
@@ -90,12 +92,13 @@ var TabularDataset = Dataset.extend({
|
||||
var self = this,
|
||||
next_chunk = $.Deferred();
|
||||
$.getJSON(this.attributes.chunk_url, {
|
||||
chunk: self.attributes.chunk_index++
|
||||
offset: self.attributes.offset
|
||||
}).success(function(chunk) {
|
||||
var rval;
|
||||
if (chunk.ck_data !== '') {
|
||||
// Found chunk.
|
||||
rval = chunk;
|
||||
self.attributes.offset = chunk.offset;
|
||||
}
|
||||
else {
|
||||
// At EOF.
|
||||
|
||||
@@ -26,6 +26,8 @@ var HDCAListItemEdit = _super.extend(
|
||||
return DC_VIEW_EDIT.PairCollectionViewEdit;
|
||||
case 'list:paired':
|
||||
return DC_VIEW_EDIT.ListOfPairsCollectionViewEdit;
|
||||
case 'list:list':
|
||||
return DC_VIEW_EDIT.ListOfListsCollectionViewEdit;
|
||||
}
|
||||
throw new TypeError( 'Uknown collection_type: ' + this.model.get( 'collection_type' ) );
|
||||
},
|
||||
|
||||
@@ -38,6 +38,8 @@ var HDCAListItemView = _super.extend(
|
||||
return DC_VIEW.PairCollectionView;
|
||||
case 'list:paired':
|
||||
return DC_VIEW.ListOfPairsCollectionView;
|
||||
case 'list:list':
|
||||
return DC_VIEW.ListOfListsCollectionView;
|
||||
}
|
||||
throw new TypeError( 'Uknown collection_type: ' + this.model.get( 'collection_type' ) );
|
||||
},
|
||||
|
||||
@@ -18,7 +18,8 @@ TODO:
|
||||
var hcontentMixin = HISTORY_CONTENT.HistoryContentMixin,
|
||||
ListDC = DC_MODEL.ListDatasetCollection,
|
||||
PairDC = DC_MODEL.PairDatasetCollection,
|
||||
ListPairedDC = DC_MODEL.ListPairedDatasetCollection;
|
||||
ListPairedDC = DC_MODEL.ListPairedDatasetCollection,
|
||||
ListOfListsDC = DC_MODEL.ListOfListsDatasetCollection;
|
||||
|
||||
//==============================================================================
|
||||
/** Override to post to contents route w/o id. */
|
||||
@@ -91,11 +92,8 @@ var HistoryPairDatasetCollection = PairDC.extend( hcontentMixin ).extend(
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @class Backbone model for List of Pairs Dataset Collection within a History.
|
||||
* @constructs
|
||||
*/
|
||||
var HistoryListPairedDatasetCollection = ListPairedDC.extend( hcontentMixin ).extend(
|
||||
/** @lends HistoryListPairedDatasetCollection.prototype */{
|
||||
/** @class Backbone model for List of Pairs Dataset Collection within a History. */
|
||||
var HistoryListPairedDatasetCollection = ListPairedDC.extend( hcontentMixin ).extend({
|
||||
|
||||
defaults : _.extend( _.clone( ListPairedDC.prototype.defaults ), {
|
||||
history_content_type: 'dataset_collection',
|
||||
@@ -118,10 +116,36 @@ var HistoryListPairedDatasetCollection = ListPairedDC.extend( hcontentMixin ).ex
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
/** @class Backbone model for List of Lists Dataset Collection within a History. */
|
||||
var HistoryListOfListsDatasetCollection = ListOfListsDC.extend( hcontentMixin ).extend({
|
||||
|
||||
defaults : _.extend( _.clone( ListOfListsDC.prototype.defaults ), {
|
||||
history_content_type: 'dataset_collection',
|
||||
collection_type : 'list:list',
|
||||
model_class : 'HistoryDatasetCollectionAssociation'
|
||||
}),
|
||||
|
||||
initialize : function( model, options ){
|
||||
ListOfListsDC.prototype.initialize.call( this, model, options );
|
||||
hcontentMixin.initialize.call( this, model, options );
|
||||
},
|
||||
|
||||
/** Override to post to contents route w/o id. */
|
||||
save : buildHDCASave( ListOfListsDC.prototype.save ),
|
||||
|
||||
/** String representation. */
|
||||
toString : function(){
|
||||
return ([ 'HistoryListOfListsDatasetCollection(', this.get( 'name' ), ')' ].join( '' ));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//==============================================================================
|
||||
return {
|
||||
HistoryListDatasetCollection : HistoryListDatasetCollection,
|
||||
HistoryPairDatasetCollection : HistoryPairDatasetCollection,
|
||||
HistoryListPairedDatasetCollection : HistoryListPairedDatasetCollection
|
||||
HistoryListPairedDatasetCollection : HistoryListPairedDatasetCollection,
|
||||
HistoryListOfListsDatasetCollection : HistoryListOfListsDatasetCollection
|
||||
};
|
||||
});
|
||||
|
||||
@@ -44,12 +44,16 @@ var HistoryContents = Backbone.Collection
|
||||
return new HDCA_MODEL.HistoryPairDatasetCollection( attrs, options );
|
||||
case 'list:paired':
|
||||
return new HDCA_MODEL.HistoryListPairedDatasetCollection( attrs, options );
|
||||
case 'list:list':
|
||||
return new HDCA_MODEL.HistoryListOfListsDatasetCollection( attrs, options );
|
||||
}
|
||||
// This is a hack inside a hack:
|
||||
// Raise a plain object with validationError to fake a model.validationError
|
||||
// (since we don't have a model to use validate with)
|
||||
// (the outer hack being the mixed content/model function in this collection)
|
||||
return { validationError : 'Unknown collection_type: ' + attrs.history_content_type };
|
||||
var msg = 'Unknown collection_type: ' + attrs.collection_type;
|
||||
console.warn( msg, attrs );
|
||||
return { validationError : msg };
|
||||
}
|
||||
return { validationError : 'Unknown history_content_type: ' + attrs.history_content_type };
|
||||
},
|
||||
@@ -281,10 +285,14 @@ var HistoryContents = Backbone.Collection
|
||||
type = ( contentType === 'hdca'? 'dataset_collection' : 'dataset' );
|
||||
}
|
||||
var collection = this,
|
||||
xhr = jQuery.post( this.url(), {
|
||||
content : id,
|
||||
source : contentType,
|
||||
type : type
|
||||
xhr = jQuery.ajax( this.url(), {
|
||||
method: 'POST',
|
||||
contentType: 'application/json',
|
||||
data: JSON.stringify({
|
||||
content : id,
|
||||
source : contentType,
|
||||
type : type
|
||||
})
|
||||
})
|
||||
.done( function( response ){
|
||||
collection.add([ response ]);
|
||||
|
||||
@@ -4,7 +4,17 @@
|
||||
<data_sources>
|
||||
<data_source>
|
||||
<model_class>HistoryDatasetAssociation</model_class>
|
||||
<test type="isinstance" test_attr="datatype" result_type="datatype">data.Text</test>
|
||||
<test test_attr="ext" result_type="datatype">json</test>
|
||||
<to_param param_attr="id">dataset_id</to_param>
|
||||
</data_source>
|
||||
<data_source>
|
||||
<model_class>HistoryDatasetAssociation</model_class>
|
||||
<test test_attr="ext" result_type="datatype">txt</test>
|
||||
<to_param param_attr="id">dataset_id</to_param>
|
||||
</data_source>
|
||||
<data_source>
|
||||
<model_class>HistoryDatasetAssociation</model_class>
|
||||
<test type="has_dataprovider" test_attr="datatype">node-edge</test>
|
||||
<to_param param_attr="id">dataset_id</to_param>
|
||||
</data_source>
|
||||
</data_sources>
|
||||
|
||||
@@ -1,38 +1,49 @@
|
||||
var showNodeLabel;
|
||||
var showEdgeLabel;
|
||||
var showOut;
|
||||
var showIn;
|
||||
var demoNodes = [];
|
||||
var demoEdges = [];
|
||||
var shape;
|
||||
var allcy;
|
||||
var cy;
|
||||
var showNodeLabel;
|
||||
var showEdgeLabel;
|
||||
var showOut;
|
||||
var showIn;
|
||||
var demoNodes = [];
|
||||
var demoEdges = [];
|
||||
var shape;
|
||||
var allcy;
|
||||
var cy;
|
||||
// The key to hold down when brush/box selecting: 16 === shift
|
||||
var BRUSH_KEY = 16;
|
||||
|
||||
$(function() {
|
||||
// remove horizontal scrollbar
|
||||
$("body").css("overflow-x", "hidden");
|
||||
|
||||
|
||||
$(function() { // on dom ready
|
||||
|
||||
|
||||
$("body").css("overflow-x", "hidden"); //// remove horizontal scrollbar
|
||||
|
||||
|
||||
}); // END on dom ready
|
||||
// set up a key that, when held down, allows box selection and turns panning off
|
||||
$( document )
|
||||
.on( 'keydown', function( ev ){
|
||||
if( cy && ev.keyCode === BRUSH_KEY ){
|
||||
cy.panningEnabled( false );
|
||||
cy.boxSelectionEnabled( true );
|
||||
}
|
||||
})
|
||||
.on( 'keyup', function( ev ){
|
||||
if( cy && ev.keyCode === BRUSH_KEY ){
|
||||
cy.panningEnabled( true );
|
||||
cy.boxSelectionEnabled( false );
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// shape of the graph
|
||||
$("select option:selected").each(function() {
|
||||
shape = $(this).val();
|
||||
$("select option:selected").each(function() {
|
||||
shape = $(this).val();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
///////// create graph
|
||||
function createGraph(data) {
|
||||
///////// create graph
|
||||
function createGraph(data) {
|
||||
window.graphData = data;
|
||||
|
||||
allcy = cytoscape({
|
||||
headless: true,
|
||||
});
|
||||
|
||||
cy = cytoscape({
|
||||
|
||||
container: document.getElementById('cy'),
|
||||
|
||||
layout: {
|
||||
@@ -45,121 +56,131 @@
|
||||
motionBlur: true,
|
||||
textureOnViewport: true,
|
||||
|
||||
// initially have click and drag pan the viewport
|
||||
panningEnabled: true,
|
||||
boxSelectionEnabled: false,
|
||||
|
||||
ready: function() {
|
||||
|
||||
window.cy = this;
|
||||
cy.nodes().on("click", function(e) {
|
||||
|
||||
showNodeInfo(e.cyTarget);
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
style: cytoscape.stylesheet()
|
||||
.selector('node')
|
||||
.css({
|
||||
'content': showNodeLabel,
|
||||
'text-valign': 'center',
|
||||
'background-color': '#888888',
|
||||
'opacity': 0.8
|
||||
'content': showNodeLabel,
|
||||
'text-valign': 'center',
|
||||
'background-color': '#888888',
|
||||
'opacity': 0.8
|
||||
})
|
||||
|
||||
})
|
||||
.selector('edge')
|
||||
.css({
|
||||
'curve-style': 'unbundled-bezier',
|
||||
'target-arrow-shape': 'triangle',
|
||||
'width': 4,
|
||||
'line-color': '#ddd',
|
||||
'target-arrow-color': '#ddd',
|
||||
'content': showEdgeLabel
|
||||
'curve-style': 'unbundled-bezier',
|
||||
'target-arrow-shape': 'triangle',
|
||||
'width': 2,
|
||||
'line-color': '#ddd',
|
||||
'target-arrow-color': '#ddd',
|
||||
'content': showEdgeLabel
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
.selector(':selected')
|
||||
.css({
|
||||
'background-color': '#FE2E64',
|
||||
'line-color': '#FE2E64',
|
||||
'target-arrow-color': '#FE2E64',
|
||||
'source-arrow-color': '#FE2E64',
|
||||
'opacity': 1
|
||||
})
|
||||
.selector('core')
|
||||
.css({
|
||||
'outside-texture-bg-color': 'white'
|
||||
'background-color': '#FE2E64',
|
||||
'line-color': '#FE2E64',
|
||||
'target-arrow-color': '#FE2E64',
|
||||
'source-arrow-color': '#FE2E64',
|
||||
'opacity': 1
|
||||
})
|
||||
|
||||
})
|
||||
.selector('core')
|
||||
.css({
|
||||
'outside-texture-bg-color': 'white'
|
||||
})
|
||||
});
|
||||
window.cy = cy;
|
||||
allcy.load(data);
|
||||
|
||||
// if graph contains more than 50 nodes load only root nodes
|
||||
if (allcy.nodes().length > 50 && allcy.nodes().roots().length != 0 ) {
|
||||
|
||||
var toAdd = allcy.nodes().roots().closedNeighborhood();
|
||||
allcy.nodes().roots().addClass("roots");
|
||||
|
||||
showNodesToExpand(toAdd);
|
||||
cy.add(toAdd);
|
||||
cy.load(cy.elements('*').jsons());
|
||||
// if graph contains more than 50 nodes load only root nodes
|
||||
if (allcy.nodes().length > 50 && allcy.nodes().roots().length !== 0 ) {
|
||||
var toAdd = allcy.nodes().roots().closedNeighborhood();
|
||||
allcy.nodes().roots().addClass("roots");
|
||||
|
||||
showNodesToExpand(toAdd);
|
||||
cy.add(toAdd);
|
||||
cy.load(cy.elements('*').jsons());
|
||||
|
||||
cy.style()
|
||||
.selector('.toBeExpaned')
|
||||
.css({
|
||||
'width': 50,
|
||||
'height': 50
|
||||
})
|
||||
.update();
|
||||
|
||||
'width': 50,
|
||||
'height': 50
|
||||
})
|
||||
.update();
|
||||
|
||||
} else {
|
||||
|
||||
cy.add(data);
|
||||
cy.load(cy.elements('*').jsons());
|
||||
cy.add(data);
|
||||
cy.load(cy.elements('*').jsons());
|
||||
}
|
||||
cy.boxSelectionEnabled(true);
|
||||
|
||||
|
||||
checkBoxes();
|
||||
|
||||
|
||||
} // END create graph
|
||||
} // END create graph
|
||||
|
||||
|
||||
//// parse function for matrix data
|
||||
function parseAndCreate(demoNodes, demoEdges) {
|
||||
var data = {
|
||||
nodes: demoNodes,
|
||||
edges: demoEdges
|
||||
};
|
||||
createGraph(data);
|
||||
}
|
||||
//// parse function for matrix data
|
||||
function parseTextMatrix(data) {
|
||||
var nodes = [],
|
||||
edges = [];
|
||||
|
||||
data.split( '\n' ).forEach( function( line ){
|
||||
var columns = line.split( /,?\s+/ ),
|
||||
sourceId = columns[0]; // split by comma or space
|
||||
|
||||
///// parsing function for json: for link/egde and "" issues
|
||||
function parseJson(dataToParse) {
|
||||
nodes.push({
|
||||
data: { id: sourceId }
|
||||
});
|
||||
|
||||
if (dataToParse.links == null) {
|
||||
for( var i = 1; i < columns.length; i++ ){
|
||||
edges.push({
|
||||
data: {
|
||||
source : sourceId,
|
||||
target : columns[i]
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var links = dataToParse.edges;
|
||||
} else {
|
||||
var links = dataToParse.links;
|
||||
dataToParse.edges = links;
|
||||
createGraph({
|
||||
nodes: nodes,
|
||||
edges: edges
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
///// parsing function for json: for link/egde and "" issues
|
||||
function parseJson( data ) {
|
||||
|
||||
var nodes = dataToParse.nodes;
|
||||
|
||||
for (var i = 0; i < nodes.length; i++) {
|
||||
|
||||
dataToParse.nodes[i].data = nodes[i];
|
||||
dataToParse.nodes[i].data.id = '"' + nodes[i].id + '"';
|
||||
}
|
||||
|
||||
|
||||
for (var i = 0; i < links.length; i++) {
|
||||
|
||||
dataToParse.edges[i].data = links[i];
|
||||
dataToParse.edges[i].data.source = '"' + links[i].source + '"';
|
||||
dataToParse.edges[i].data.target = '"' + links[i].target + '"';
|
||||
}
|
||||
|
||||
createGraph(dataToParse);
|
||||
}
|
||||
if( data.hasOwnProperty( 'links' ) ){
|
||||
data.edges = data.links;
|
||||
delete data.links;
|
||||
}
|
||||
data.nodes = data.nodes.map( function _processNode( node ){
|
||||
return {
|
||||
data : $.extend( {}, node.data, {
|
||||
id : node.id + ''
|
||||
})
|
||||
};
|
||||
});
|
||||
data.edges = data.edges.map( function _processEdge( edge ){
|
||||
return {
|
||||
data : $.extend( {}, edge.data, {
|
||||
id : edge.id || undefined,
|
||||
source : data.nodes[ edge.source ].data.id,
|
||||
target : data.nodes[ edge.target ].data.id
|
||||
})
|
||||
};
|
||||
});
|
||||
createGraph( data );
|
||||
}
|
||||
@@ -34,7 +34,7 @@ $(function() { // on dom ready
|
||||
});
|
||||
|
||||
|
||||
//////// change the shape of the graph
|
||||
//////// change the shape of the graph
|
||||
$('#selectShape').change(function() {
|
||||
|
||||
$("select option:selected").each(function() {
|
||||
@@ -54,11 +54,11 @@ $(function() { // on dom ready
|
||||
if ($('#showOutNode').is(":checked")) {
|
||||
showOut = true;
|
||||
cy.nodes().on("tapend", highlightOut);
|
||||
|
||||
|
||||
} else {
|
||||
showOut = false;
|
||||
cy.nodes().off("tapend", highlightOut);
|
||||
|
||||
|
||||
resetHighlightOut(showIn, showOut);
|
||||
}
|
||||
});
|
||||
@@ -71,13 +71,13 @@ $(function() { // on dom ready
|
||||
if ($('#showInNode').is(":checked")) {
|
||||
showIn = true;
|
||||
cy.nodes().on("tapend", highlightIn);
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
showIn = false;
|
||||
cy.nodes().off("tapend", highlightIn);
|
||||
resetHighlightIn(showIn, showOut);
|
||||
|
||||
|
||||
cy.nodes().removeClass('connectedNodeIn');
|
||||
}
|
||||
|
||||
@@ -101,12 +101,12 @@ $(function() { // on dom ready
|
||||
|
||||
});
|
||||
|
||||
//// disable/unable buttons
|
||||
//// disable/unable buttons
|
||||
$(document).on('click', function() {
|
||||
|
||||
var selectedNode = cy.nodes(':selected');
|
||||
|
||||
if (selectedNode.outgoers().length == 0) {
|
||||
if (selectedNode.outgoers().length === 0) {
|
||||
|
||||
$('.btn.colNode').prop('disabled', true);
|
||||
|
||||
@@ -149,7 +149,7 @@ $(function() { // on dom ready
|
||||
|
||||
var selectedNode = cy.nodes(':selected');
|
||||
|
||||
if (e.which == 101 && selectedNode.size() != 0) { // 101 for 'e' = expand
|
||||
if (e.which === 101 && selectedNode.size() !== 0) { // 101 for 'e' = expand
|
||||
|
||||
if (selectedNode.hasClass('toBeExpaned')) {
|
||||
|
||||
@@ -162,20 +162,20 @@ $(function() { // on dom ready
|
||||
|
||||
|
||||
}
|
||||
if (e.which == 99 && selectedNode.size() != 0 && !selectedNode.hasClass('superNode') && selectedNode.outgoers().length != 0) { // 99 for 'c' = collapse
|
||||
if (e.which === 99 && selectedNode.size() !== 0 && !selectedNode.hasClass('superNode') && selectedNode.outgoers().length !== 0) { // 99 for 'c' = collapse
|
||||
|
||||
colNode();
|
||||
|
||||
}
|
||||
|
||||
if (e.which == 100 && selectedNode.size() != 0) { // 100 for 'd' = delete
|
||||
if (e.which === 100 && selectedNode.size() !== 0) { // 100 for 'd' = delete
|
||||
deleteSelectedNodes();
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
/////////////// tool Panel movement
|
||||
/////////////// tool Panel movement
|
||||
|
||||
$(document).on('click', '.slider-arrow.show', function() {
|
||||
$(".slider-arrow, .panel").animate({
|
||||
@@ -234,13 +234,9 @@ $(function() { // on dom ready
|
||||
// document.getElementById('cy').style.width="100%";
|
||||
cy.resize();
|
||||
});
|
||||
}); // on dom ready END
|
||||
|
||||
|
||||
|
||||
|
||||
}) // on dom ready END
|
||||
|
||||
///////// finding outgoing Nodes
|
||||
///////// finding outgoing Nodes
|
||||
function highlightOut() {
|
||||
|
||||
var selectedNode = this;
|
||||
@@ -259,7 +255,7 @@ function highlightOut() {
|
||||
})
|
||||
.update();
|
||||
} else {
|
||||
|
||||
|
||||
cy.nodes().not(this).removeClass('connectedNodeOut');
|
||||
cy.nodes().not(this).removeClass('selectedNodeOut');
|
||||
cy.edges().not(this).removeClass('connectedNodeOut');
|
||||
@@ -290,7 +286,7 @@ function highlightOut() {
|
||||
}
|
||||
}
|
||||
|
||||
/////// reset highlighting of outgoing nodes
|
||||
/////// reset highlighting of outgoing nodes
|
||||
function resetHighlightOut(showIn, showOut) {
|
||||
|
||||
cy.style()
|
||||
@@ -370,7 +366,7 @@ function highlightIn() {
|
||||
}
|
||||
|
||||
|
||||
/////// reset highlighting of incoming nodes
|
||||
/////// reset highlighting of incoming nodes
|
||||
function resetHighlightIn(showIn, showOut) {
|
||||
|
||||
cy.style()
|
||||
@@ -401,7 +397,7 @@ function resetHighlightIn(showIn, showOut) {
|
||||
}
|
||||
|
||||
|
||||
////// export PNG
|
||||
////// export PNG
|
||||
function exportFunction() {
|
||||
|
||||
var pngPic = cy.png();
|
||||
@@ -418,7 +414,6 @@ function downloadURI(uri, fname) {
|
||||
link.click();
|
||||
// Cleanup the DOM
|
||||
document.body.removeChild(link);
|
||||
delete link;
|
||||
}
|
||||
|
||||
///// restore Graph structure
|
||||
@@ -449,7 +444,6 @@ function showNodeInfo(node) {
|
||||
var j = 0;
|
||||
|
||||
for (var key in nodeContent) {
|
||||
|
||||
if (key == 'group' || key == 'data') {
|
||||
continue;
|
||||
}
|
||||
@@ -458,10 +452,8 @@ function showNodeInfo(node) {
|
||||
i++;
|
||||
values[j] = nodeContent[key];
|
||||
j++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
var childNodes = node.outgoers().nodes();
|
||||
var childNum = childNodes.length;
|
||||
|
||||
@@ -472,16 +464,15 @@ function showNodeInfo(node) {
|
||||
var table = createTable(fieldName, values, degree, parentNum, childNum);
|
||||
|
||||
$('#nodeInfoDiv').html("<p><strong>Node Description </p>" + table);
|
||||
for (var i = 0; i < fieldName.length; i++) {
|
||||
|
||||
if (isValidUrl(values[i])) {
|
||||
for (var strIndex = 0; strIndex < fieldName.length; strIndex++) {
|
||||
|
||||
if (isValidUrl(values[strIndex])) {
|
||||
var e = document.createElement("div");
|
||||
e.id = "linkDiv";
|
||||
$('#nodeInfoDiv').append(e);
|
||||
|
||||
|
||||
var url = values[i];
|
||||
|
||||
document.getElementById("linkDiv").innerHTML += "<br>" + fieldName[i] + "<br>";
|
||||
$('<iframe id="iframeId" width = "240"/>').appendTo(document.getElementById("linkDiv")).prop('src', url);
|
||||
|
||||
@@ -490,40 +481,27 @@ function showNodeInfo(node) {
|
||||
}
|
||||
}
|
||||
|
||||
function isValidUrl(str) {
|
||||
var pattern = new RegExp(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/); // fragment locater
|
||||
if (!pattern.test(str)) {
|
||||
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function createTable(fieldName, values, degree, parentNum, childNum) {
|
||||
|
||||
var table = "<table class='CSSTableGenerator'>";
|
||||
|
||||
for (var i = 0; i < fieldName.length; i++) {
|
||||
|
||||
|
||||
if (isValidUrl(values[i])) {
|
||||
i++;
|
||||
}
|
||||
|
||||
table += "<tr>" + "<td>" + fieldName[i] + "</td>" + "<td>" + values[i] + "</td>" + "</tr>";
|
||||
|
||||
}
|
||||
table += "<tr>" + "<td>" + "degree" + "</td>" + "<td>" + degree + "</td>" + "</tr>";
|
||||
table += "<tr>" + "<td>" + "number of child nodes" + "</td>" + "<td>" + childNum + "</td>" + "</tr>";
|
||||
table += "<tr>" + "<td>" + "number of parent nodes" + "</td>" + "<td>" + parentNum + "</td>" + "</tr>";
|
||||
|
||||
|
||||
table += "</table>";
|
||||
return table;
|
||||
|
||||
}
|
||||
|
||||
function isValidUrl(str) {
|
||||
var pattern = new RegExp(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/); // fragment locater
|
||||
return pattern.test(str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////// delete selected nodes
|
||||
|
||||
@@ -539,7 +517,7 @@ function deleteSelectedNodes() {
|
||||
cy.remove(edgesToRemove);
|
||||
|
||||
}
|
||||
/////// restore Deleted Nodes
|
||||
/////// restore Deleted Nodes
|
||||
function restoreDeletedNodes() {
|
||||
nodesToRemove.restore();
|
||||
edgesToRemove.restore();
|
||||
@@ -550,7 +528,7 @@ function expandNodes(selectedNode) {
|
||||
|
||||
cy.nodes().unbind("tapend");
|
||||
var selectedNodeId = selectedNode.id();
|
||||
selectedNodeId = selectedNodeId.replace(/[^0-9\.]+/g, ""); // removing ""
|
||||
selectedNodeId = selectedNodeId.replace(/[^0-9\.]+/g, ""); // removing ""
|
||||
|
||||
var eles = allcy.nodes();
|
||||
|
||||
@@ -559,7 +537,7 @@ function expandNodes(selectedNode) {
|
||||
showNodesToExpand(nodesToAdd);
|
||||
cy.add(eles[selectedNodeId].outgoers());
|
||||
|
||||
selectedNode.removeClass('toBeExpaned');
|
||||
selectedNode.removeClass('toBeExpaned');
|
||||
|
||||
$("select option:selected").each(function() {
|
||||
shape = $(this).val();
|
||||
@@ -583,7 +561,7 @@ function showNodesToExpand(toAdd) {
|
||||
|
||||
if (ele.outdegree() > 0 && !ele.hasClass('roots')) {
|
||||
ele.addClass('toBeExpaned');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
@@ -604,7 +582,7 @@ function checkBoxes() {
|
||||
resetHighlightIn(showIn, showOut);
|
||||
cy.nodes().removeClass('connectedNodeIn');
|
||||
}
|
||||
|
||||
|
||||
if ($('#showOutNode').is(":checked")) {
|
||||
showOut = true;
|
||||
cy.nodes().on("tapend", highlightOut);
|
||||
|
||||
@@ -6,12 +6,14 @@
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
|
||||
|
||||
<title>${hda.name} | ${visualization_name}</title>
|
||||
<%
|
||||
root = h.url_for( '/' )
|
||||
%>
|
||||
<script type="text/javascript" src="/static/scripts/libs/jquery/jquery.js"></script>
|
||||
<%
|
||||
root = h.url_for( '/' )
|
||||
%>
|
||||
|
||||
<script type="text/javascript" src="/static/scripts/libs/jquery/jquery.js"></script>
|
||||
|
||||
${h.stylesheet_link( root + 'plugins/visualizations/graphviz/static/css/style.css' )}
|
||||
|
||||
|
||||
${h.javascript_link( root + 'plugins/visualizations/graphviz/static/js/jquery.qtip.js' )}
|
||||
${h.javascript_link( root + 'plugins/visualizations/graphviz/static/js/cytoscape.min.js' )}
|
||||
${h.javascript_link( root + 'plugins/visualizations/graphviz/static/js/collapse.js' )}
|
||||
@@ -25,63 +27,62 @@
|
||||
${h.javascript_link( root + 'plugins/visualizations/graphviz/static/js/wz_tooltip.js' )}
|
||||
|
||||
<script>
|
||||
function parseNodeEdge( data ){
|
||||
data = data.data[0];
|
||||
parseJson( data );
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
var hdaId = '${trans.security.encode_id( hda.id )}',
|
||||
hdaExt = '${hda.ext}',
|
||||
dataUrl = "${h.url_for( controller='/datasets', action='index')}/" + hdaId + "/display?to_ext=" + hdaExt;
|
||||
|
||||
// var reader = new FileReader();
|
||||
|
||||
$.ajax({
|
||||
'async': true,
|
||||
'global': false,
|
||||
'url': dataUrl,
|
||||
'dataType': "json",
|
||||
'success': function(data) {
|
||||
parseJson(data);
|
||||
// createGraph(data);
|
||||
},
|
||||
'error': function(data) {
|
||||
|
||||
jQuery.get(dataUrl, function(data) {
|
||||
|
||||
var lines = data.split('\n');
|
||||
var chars;
|
||||
for (var line = 0; line < lines.length; line++) {
|
||||
chars = lines[line].split(/,?\s+/); // split by comma or space
|
||||
var hdaName = '${ hda.name | h }',
|
||||
hdaId = '${trans.security.encode_id( hda.id )}',
|
||||
hdaExt = '${hda.ext}',
|
||||
rawUrl = '${h.url_for( controller="/datasets", action="index" )}',
|
||||
apiUrl = '${h.url_for( "/" ) + "api/datasets"}',
|
||||
dataUrl;
|
||||
|
||||
demoNodes.push({
|
||||
data: {
|
||||
id: chars[0],
|
||||
label: chars[0]
|
||||
}
|
||||
});
|
||||
function errorHandler( xhr, status, message ){
|
||||
console.error(x, s, m);
|
||||
alert("error loading data:\n" + m);
|
||||
}
|
||||
|
||||
for (var i = 1; i < chars.length; i++) {
|
||||
demoEdges.push({
|
||||
data: {
|
||||
source: chars[0],
|
||||
target: chars[i],
|
||||
id: chars[0] + chars[i],
|
||||
switch( hdaExt ){
|
||||
case 'txt':
|
||||
dataUrl = rawUrl + '/' + hdaId + '/display?to_ext=txt';
|
||||
$.ajax(dataUrl, {
|
||||
dataType : 'text',
|
||||
success : parseTextMatrix,
|
||||
error : errorHandler
|
||||
});
|
||||
break;
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
parseAndCreate(demoNodes, demoEdges);
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
case 'json':
|
||||
dataUrl = rawUrl + '/' + hdaId + '/display?to_ext=json';
|
||||
$.ajax(dataUrl, {
|
||||
dataType : 'json',
|
||||
success : parseJson,
|
||||
error : errorHandler
|
||||
});
|
||||
break;
|
||||
|
||||
} );
|
||||
default:
|
||||
dataUrl = apiUrl + '/' + hdaId;
|
||||
$.ajax(dataUrl, {
|
||||
dataType : 'json',
|
||||
success : parseNodeEdge,
|
||||
error : errorHandler,
|
||||
data : {
|
||||
data_type : 'raw_data',
|
||||
provider : 'node-edge'
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
<div id="cy"></div>
|
||||
|
||||
<!-- left control panel for rendering controls, hiding nodes, etc. - initially hidden -->
|
||||
<div class="panel">
|
||||
<br>
|
||||
<div id="mainselection">
|
||||
@@ -139,12 +140,10 @@
|
||||
<br>
|
||||
<br>
|
||||
|
||||
|
||||
<input type="button" class="btn delNode" name="deleteNodes" id="deleteNodes" value="Delete Selected Nodes " onclick="deleteSelectedNodes()" disabled="disabled">
|
||||
<br>
|
||||
<br>
|
||||
|
||||
|
||||
<input type="button" class="btn" name="restoreNodes" id="restoreNodes" value="Restore Deleted Nodes" onclick="restoreDeletedNodes()">
|
||||
<br>
|
||||
<br>
|
||||
@@ -158,13 +157,16 @@
|
||||
<br>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<!-- button to show above panel -->
|
||||
<a href="javascript:void(0);" class="slider-arrow show">»</a>
|
||||
<div id="nodeInfoDiv" class="nodePanel">
|
||||
|
||||
<!-- right control panel for displaying node data - initially hidden -->
|
||||
<div id="nodeInfoDiv" class="nodePanel">
|
||||
<p> <strong>Node Description </strong></p>
|
||||
<br><br>
|
||||
<p> Please select a node </p>
|
||||
</div>
|
||||
<!-- button to show above panel -->
|
||||
<a href="javascript:void(0);" class="slider-arrow-forNode show">«</a>
|
||||
</body>
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ class Binary( data.Data ):
|
||||
"""Returns the mime type of the datatype"""
|
||||
return 'application/octet-stream'
|
||||
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, size=None, offset=None, **kwd):
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, **kwd):
|
||||
trans.response.set_content_type(dataset.get_mime())
|
||||
trans.log_event( "Display dataset id: %s" % str( dataset.id ) )
|
||||
trans.response.headers['Content-Length'] = int( os.stat( dataset.file_name ).st_size )
|
||||
|
||||
@@ -312,7 +312,7 @@ class Data( object ):
|
||||
trans.response.headers["Content-Disposition"] = 'attachment; filename="Galaxy%s-[%s].%s"' % (dataset.hid, fname, to_ext)
|
||||
return open( dataset.file_name )
|
||||
|
||||
def display_data(self, trans, data, preview=False, filename=None, to_ext=None, size=None, offset=None, **kwd):
|
||||
def display_data(self, trans, data, preview=False, filename=None, to_ext=None, **kwd):
|
||||
""" Old display method, for transition - though still used by API and
|
||||
test framework. Datatypes should be very careful if overridding this
|
||||
method and this interface between datatypes and Galaxy will likely
|
||||
|
||||
@@ -393,7 +393,7 @@ class OBFS(Binary):
|
||||
return "OpenBabel Fastsearch Index"
|
||||
|
||||
def display_data(self, trans, data, preview=False, filename=None,
|
||||
to_ext=None, size=None, offset=None, **kwd):
|
||||
to_ext=None, **kwd):
|
||||
"""Apparently an old display method, but still gets called.
|
||||
|
||||
This allows us to format the data shown in the central pane via the "eye" icon.
|
||||
|
||||
@@ -58,31 +58,23 @@ class TabularData( data.Text ):
|
||||
except:
|
||||
return False
|
||||
|
||||
def get_chunk(self, trans, dataset, chunk):
|
||||
ck_index = int(chunk)
|
||||
f = open(dataset.file_name)
|
||||
initial_offset = (ck_index * trans.app.config.display_chunk_size)
|
||||
f.seek(initial_offset)
|
||||
# If we aren't at the start of the file, seek to next newline. Do this better eventually.
|
||||
if f.tell() != 0:
|
||||
cursor = f.read(1)
|
||||
while cursor and cursor != '\n':
|
||||
def get_chunk(self, trans, dataset, offset=0, ck_size=None):
|
||||
with open(dataset.file_name) as f:
|
||||
f.seek(offset)
|
||||
ck_data = f.read(ck_size or trans.app.config.display_chunk_size)
|
||||
if ck_data and ck_data[-1] != '\n':
|
||||
cursor = f.read(1)
|
||||
read_start_offset = f.tell()
|
||||
prechunk_skip = read_start_offset - initial_offset
|
||||
# We subtract the prechunk skip out of the primary chunk read to avoid
|
||||
# shifting the chunk tail onto a line it shouldn't have.
|
||||
ck_data = f.read(trans.app.config.display_chunk_size - prechunk_skip)
|
||||
cursor = f.read(1)
|
||||
while cursor and ck_data[-1] != '\n':
|
||||
ck_data += cursor
|
||||
cursor = f.read(1)
|
||||
return dumps( { 'ck_data': util.unicodify( ck_data ), 'ck_index': ck_index + 1 } )
|
||||
while cursor and cursor != '\n':
|
||||
ck_data += cursor
|
||||
cursor = f.read(1)
|
||||
last_read = f.tell()
|
||||
return dumps( { 'ck_data': util.unicodify( ck_data ),
|
||||
'offset': last_read } )
|
||||
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, offset=None, ck_size=None, **kwd):
|
||||
preview = util.string_as_bool( preview )
|
||||
if chunk:
|
||||
return self.get_chunk(trans, dataset, chunk)
|
||||
if offset is not None:
|
||||
return self.get_chunk(trans, dataset, offset, ck_size)
|
||||
elif to_ext or not preview:
|
||||
to_ext = to_ext or dataset.extension
|
||||
return self._serve_raw(trans, dataset, to_ext)
|
||||
|
||||
@@ -127,19 +127,17 @@ class Ipynb( Json ):
|
||||
except:
|
||||
return False
|
||||
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
|
||||
def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, **kwd):
|
||||
config = trans.app.config
|
||||
trust = getattr( config, 'trust_ipython_notebook_conversion', False )
|
||||
if trust:
|
||||
return self._display_data_trusted(trans, dataset, preview=preview, filename=filename, to_ext=to_ext, chunk=chunk, **kwd)
|
||||
return self._display_data_trusted(trans, dataset, preview=preview, filename=filename, to_ext=to_ext, **kwd)
|
||||
else:
|
||||
return super(Ipynb, self).display_data( trans, dataset, preview=preview, filename=filename, to_ext=to_ext, chunk=chunk, **kwd )
|
||||
return super(Ipynb, self).display_data( trans, dataset, preview=preview, filename=filename, to_ext=to_ext, **kwd )
|
||||
|
||||
def _display_data_trusted(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
|
||||
def _display_data_trusted(self, trans, dataset, preview=False, filename=None, to_ext=None, **kwd):
|
||||
preview = string_as_bool( preview )
|
||||
if chunk:
|
||||
return self.get_chunk(trans, dataset, chunk)
|
||||
elif to_ext or not preview:
|
||||
if to_ext or not preview:
|
||||
return self._serve_raw(trans, dataset, to_ext)
|
||||
else:
|
||||
ofile_handle = tempfile.NamedTemporaryFile(delete=False)
|
||||
@@ -426,7 +424,7 @@ class SnpEffDb( Text ):
|
||||
# search data_dir/genome_version for files
|
||||
regulation_pattern = 'regulation_(.+).bin'
|
||||
# annotation files that are included in snpEff by a flag
|
||||
annotations_dict = {'nextProt.bin' : '-nextprot', 'motif.bin': '-motif'}
|
||||
annotations_dict = {'nextProt.bin': '-nextprot', 'motif.bin': '-motif'}
|
||||
regulations = []
|
||||
annotations = []
|
||||
genome_version = None
|
||||
|
||||
@@ -75,7 +75,7 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
job_destination = job_wrapper.job_destination
|
||||
|
||||
# Construction of the Kubernetes Job object follows: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||
k8s_job_name = self.__produce_unique_k8s_job_name(job_wrapper)
|
||||
k8s_job_name = self.__produce_unique_k8s_job_name(job_wrapper.get_id_tag())
|
||||
k8s_job_obj = {
|
||||
"apiVersion": "extensions/v1beta1",
|
||||
"kind": "Job",
|
||||
@@ -91,7 +91,14 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
"spec": self.__get_k8s_job_spec(job_wrapper)
|
||||
}
|
||||
|
||||
# Checks if job exists
|
||||
job = Job(self._pykube_api, k8s_job_obj)
|
||||
if job.exists():
|
||||
job.delete()
|
||||
# Creates the Kubernetes Job
|
||||
# TODO if a job with that ID exists, what should we do?
|
||||
# TODO do we trust that this is the same job and use that?
|
||||
# TODO or create a new job as we cannot make sure
|
||||
Job(self._pykube_api, k8s_job_obj).create()
|
||||
|
||||
# define job attributes in the AsyncronousJobState for follow-up
|
||||
@@ -103,9 +110,9 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
external_runjob_script = None
|
||||
return external_runjob_script
|
||||
|
||||
def __produce_unique_k8s_job_name(self, job_wrapper):
|
||||
def __produce_unique_k8s_job_name(self, galaxy_internal_job_id):
|
||||
# wrapper.get_id_tag() instead of job_id for compatibility with TaskWrappers.
|
||||
return "galaxy-" + job_wrapper.get_id_tag()
|
||||
return "galaxy-" + galaxy_internal_job_id
|
||||
|
||||
def __get_k8s_job_spec(self, job_wrapper):
|
||||
"""Creates the k8s Job spec. For a Job spec, the only requirement is to have a .spec.template."""
|
||||
@@ -118,7 +125,7 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
(see pod selector) and an appropriate restart policy."""
|
||||
k8s_spec_template = {
|
||||
"metadata": {
|
||||
"labels": {"app": self.__produce_unique_k8s_job_name(job_wrapper)}
|
||||
"labels": {"app": self.__produce_unique_k8s_job_name(job_wrapper.get_id_tag())}
|
||||
},
|
||||
"spec": {
|
||||
"volumes": self.__get_k8s_mountable_volumes(job_wrapper),
|
||||
@@ -159,6 +166,7 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
# to assemble the command.
|
||||
# TODO possibly shell needs to be set by job_wrapper
|
||||
"command": ["/bin/bash", "-c", job_wrapper.runner_command_line],
|
||||
"workingDir": job_wrapper.working_directory,
|
||||
"volumeMounts": [{
|
||||
"mountPath": self.runner_params['k8s_persistent_volume_claim_mount_path'],
|
||||
"name": self._galaxy_vol_name
|
||||
@@ -204,9 +212,17 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
jobs = Job.objects(self._pykube_api).filter(selector="app=" + job_state.job_id)
|
||||
if len(jobs.response['items']) == 1:
|
||||
job = Job(self._pykube_api, jobs.response['items'][0])
|
||||
job_destination = job_state.job_wrapper.job_destination
|
||||
succeeded = 0
|
||||
active = 0
|
||||
failed = 0
|
||||
|
||||
max_pod_retrials = 1
|
||||
if 'k8s_pod_retrials' in self.runner_params:
|
||||
max_pod_retrials = int(self.runner_params['k8s_pod_retrials'])
|
||||
if 'max_pod_retrials' in job_destination.params:
|
||||
max_pod_retrials = int(job_destination.params['max_pod_retrials'])
|
||||
|
||||
if 'succeeded' in job.obj['status']:
|
||||
succeeded = job.obj['status']['succeeded']
|
||||
if 'active' in job.obj['status']:
|
||||
@@ -223,16 +239,16 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
job_state.running = False
|
||||
self.mark_as_finished(job_state)
|
||||
return None
|
||||
|
||||
elif active > 0 or succeeded + active + failed == 0:
|
||||
elif active > 0 and failed <= max_pod_retrials:
|
||||
job_state.running = True
|
||||
return job_state
|
||||
elif failed > job_state.job_destination.params['max_pod_retrials']:
|
||||
elif failed > max_pod_retrials:
|
||||
self.__produce_log_file(job_state)
|
||||
error_file = open(job_state.error_file, 'w')
|
||||
error_file.write("Exceeded max number of Kubernetes pod retrials allowed for job\n")
|
||||
error_file.close()
|
||||
job_state.running = False
|
||||
job_state.fail_message = "More pods failed than allowed. See stdout for pods details."
|
||||
self.mark_as_failed(job_state)
|
||||
job.scale(replicas=0)
|
||||
return None
|
||||
@@ -260,14 +276,46 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
self.mark_as_failed(job_state)
|
||||
return job_state
|
||||
|
||||
def fail_job(self, job_state):
|
||||
"""
|
||||
Kubernetes runner overrides fail_job (called by mark_as_failed) to rescue the pod's log files which are left as
|
||||
stdout (pods logs are the natural stdout and stderr of the running processes inside the pods) and are
|
||||
deleted in the parent implementation as part of the failing the job process.
|
||||
|
||||
:param job_state:
|
||||
:return:
|
||||
"""
|
||||
|
||||
# First we rescue the pods logs
|
||||
with open(job_state.output_file, 'r') as outfile:
|
||||
stdout_content = outfile.read()
|
||||
|
||||
if getattr(job_state, 'stop_job', True):
|
||||
self.stop_job(self.sa_session.query(self.app.model.Job).get(job_state.job_wrapper.job_id))
|
||||
self._handle_runner_state('failure', job_state)
|
||||
# Not convinced this is the best way to indicate this state, but
|
||||
# something necessary
|
||||
if not job_state.runner_state_handled:
|
||||
job_state.job_wrapper.fail(
|
||||
message=getattr(job_state, 'fail_message', 'Job failed'),
|
||||
stdout=stdout_content, stderr='See stdout for pod\'s stderr.'
|
||||
)
|
||||
if job_state.job_wrapper.cleanup_job == "always":
|
||||
job_state.cleanup()
|
||||
|
||||
def __produce_log_file(self, job_state):
|
||||
pod_r = Pod.objects(self._pykube_api).filter(selector="app=" + job_state.job_id)
|
||||
logs = ""
|
||||
for pod_obj in pod_r.response['items']:
|
||||
pod = Pod(self._pykube_api, pod_obj)
|
||||
logs += "\n\n==== Pod " + pod.name + " log start ====\n\n"
|
||||
logs += pod.logs(timestamps=True)
|
||||
logs += "\n\n==== Pod " + pod.name + " log end ===="
|
||||
try:
|
||||
pod = Pod(self._pykube_api, pod_obj)
|
||||
logs += "\n\n==== Pod " + pod.name + " log start ====\n\n"
|
||||
logs += pod.logs(timestamps=True)
|
||||
logs += "\n\n==== Pod " + pod.name + " log end ===="
|
||||
except Exception as detail:
|
||||
log.info("Could not write pod\'s " + pod_obj['metadata']['name'] +
|
||||
" log file due to HTTPError " + str(detail))
|
||||
|
||||
logs_file_path = job_state.output_file
|
||||
logs_file = open(logs_file_path, mode="w")
|
||||
if isinstance(logs, text_type):
|
||||
@@ -279,8 +327,9 @@ class KubernetesJobRunner(AsynchronousJobRunner):
|
||||
def stop_job(self, job):
|
||||
"""Attempts to delete a dispatched job to the k8s cluster"""
|
||||
try:
|
||||
jobs = Job.objects(self._pykube_api).filter(selector="app=" + job.job_runner_external_id)
|
||||
if jobs.response['items'].len() >= 0:
|
||||
jobs = Job.objects(self._pykube_api).filter(selector="app=" +
|
||||
self.__produce_unique_k8s_job_name(job.get_id_tag()))
|
||||
if len(jobs.response['items']) >= 0:
|
||||
job_to_delete = Job(self._pykube_api, jobs.response['items'][0])
|
||||
job_to_delete.scale(replicas=0)
|
||||
# TODO assert whether job parallelism == 0
|
||||
|
||||
@@ -736,7 +736,7 @@ class ModelDeserializer( HasAModelManager ):
|
||||
"""
|
||||
# TODO:?? a larger question is: which should be first? Deserialize then validate - or - validate then deserialize?
|
||||
|
||||
def __init__( self, app, **kwargs ):
|
||||
def __init__( self, app, validator=None, **kwargs ):
|
||||
"""
|
||||
Set up deserializers and validator.
|
||||
"""
|
||||
@@ -747,7 +747,7 @@ class ModelDeserializer( HasAModelManager ):
|
||||
self.deserializable_keyset = set([])
|
||||
self.add_deserializers()
|
||||
# a sub object that can validate incoming values
|
||||
self.validate = ModelValidator( self.app )
|
||||
self.validate = validator or ModelValidator( self.app )
|
||||
|
||||
def add_deserializers( self ):
|
||||
"""
|
||||
|
||||
@@ -11,6 +11,7 @@ from galaxy import util
|
||||
from galaxy.managers import base
|
||||
from galaxy.managers import deletable
|
||||
from galaxy.managers import api_keys
|
||||
from galaxy.security import validate_user_input
|
||||
|
||||
import logging
|
||||
log = logging.getLogger( __name__ )
|
||||
@@ -26,7 +27,6 @@ class UserManager( base.ModelManager, deletable.PurgableManagerMixin ):
|
||||
# TODO: incorp BaseAPIController.validate_in_users_and_groups
|
||||
# TODO: incorp CreatesUsersMixin
|
||||
# TODO: incorp CreatesApiKeysMixin
|
||||
# TODO: incorporate security/validate_user_input.py
|
||||
# TODO: incorporate UsesFormDefinitionsMixin?
|
||||
|
||||
def create( self, webapp_name=None, **kwargs ):
|
||||
@@ -288,6 +288,28 @@ class UserSerializer( base.ModelSerializer, deletable.PurgableSerializerMixin ):
|
||||
})
|
||||
|
||||
|
||||
class UserDeserializer( base.ModelDeserializer ):
|
||||
"""
|
||||
Service object for validating and deserializing dictionaries that
|
||||
update/alter users.
|
||||
"""
|
||||
model_manager_class = UserManager
|
||||
|
||||
def add_deserializers( self ):
|
||||
super( UserDeserializer, self ).add_deserializers()
|
||||
self.deserializers.update({
|
||||
'username' : self.deserialize_username,
|
||||
})
|
||||
|
||||
def deserialize_username( self, item, key, username, trans=None, **context ):
|
||||
# TODO: validate_user_input requires trans and should(?) raise exceptions
|
||||
# move validation to UserValidator and use self.app, exceptions instead
|
||||
validation_error = validate_user_input.validate_publicname( trans, username, user=item )
|
||||
if validation_error:
|
||||
raise base.ModelDeserializingError( validation_error )
|
||||
return self.default_deserializer( item, key, username, trans=trans, **context )
|
||||
|
||||
|
||||
class CurrentUserSerializer( UserSerializer ):
|
||||
model_manager_class = UserManager
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ log = logging.getLogger( __name__ )
|
||||
|
||||
VALID_PUBLICNAME_RE = re.compile( "^[a-z0-9\-]+$" )
|
||||
VALID_PUBLICNAME_SUB = re.compile( "[^a-z0-9\-]" )
|
||||
PUBLICNAME_MIN_LEN = 3
|
||||
PUBLICNAME_MAX_LEN = 255
|
||||
|
||||
# Basic regular expression to check email validity.
|
||||
VALID_EMAIL_RE = re.compile( "[^@]+@[^@]+\.[^@]+" )
|
||||
FILL_CHAR = '-'
|
||||
@@ -41,16 +44,10 @@ def validate_publicname( trans, publicname, user=None ):
|
||||
# letters, numbers, and the '-' character.
|
||||
if user and user.username == publicname:
|
||||
return ''
|
||||
if trans.webapp.name == 'tool_shed':
|
||||
if len( publicname ) < 3:
|
||||
return "Public name must be at least 3 characters in length"
|
||||
else:
|
||||
# DCT - TODO - Simplify logic if 3 chars is okay for publicname for
|
||||
# galaxy as well as toolshed
|
||||
if len( publicname ) < 3:
|
||||
return "Public name must be at least 3 characters in length"
|
||||
if len( publicname ) > 255:
|
||||
return "Public name cannot be more than 255 characters in length"
|
||||
if len( publicname ) < PUBLICNAME_MIN_LEN:
|
||||
return "Public name must be at least %d characters in length" % ( PUBLICNAME_MIN_LEN )
|
||||
if len( publicname ) > PUBLICNAME_MAX_LEN:
|
||||
return "Public name cannot be more than %d characters in length" % ( PUBLICNAME_MAX_LEN )
|
||||
if not( VALID_PUBLICNAME_RE.match( publicname ) ):
|
||||
return "Public name must contain only lower-case letters, numbers and '-'"
|
||||
if trans.sa_session.query( trans.app.model.User ).filter_by( username=publicname ).first():
|
||||
|
||||
@@ -891,25 +891,33 @@ def unicodify(value, encoding=DEFAULT_ENCODING, error='replace', default=None):
|
||||
return value
|
||||
|
||||
|
||||
def smart_str(s, encoding='utf-8', strings_only=False, errors='strict'):
|
||||
def smart_str(s, encoding=DEFAULT_ENCODING, strings_only=False, errors='strict'):
|
||||
"""
|
||||
Returns a bytestring version of 's', encoded as specified in 'encoding'.
|
||||
|
||||
If strings_only is True, don't convert (some) non-string-like objects.
|
||||
|
||||
Adapted from an older, simpler version of django.utils.encoding.smart_str.
|
||||
|
||||
>>> assert smart_str(None) == b'None'
|
||||
>>> assert smart_str(None, strings_only=True) is None
|
||||
>>> assert smart_str(3) == b'3'
|
||||
>>> assert smart_str(3, strings_only=True) == 3
|
||||
>>> assert smart_str(b'a bytes string') == b'a bytes string'
|
||||
>>> assert smart_str(u'a simple unicode string') == b'a simple unicode string'
|
||||
>>> assert smart_str(u'à strange ünicode ڃtring') == b'\xc3\xa0 strange \xc3\xbcnicode \xda\x83tring'
|
||||
>>> assert smart_str(b'\xc3\xa0n \xc3\xabncoded utf-8 string', encoding='latin-1') == b'\xe0n \xebncoded utf-8 string'
|
||||
"""
|
||||
if strings_only and isinstance(s, (type(None), int)):
|
||||
return s
|
||||
if not isinstance(s, string_types):
|
||||
try:
|
||||
return str(s)
|
||||
except UnicodeEncodeError:
|
||||
return text_type(s).encode(encoding, errors)
|
||||
elif isinstance(s, text_type):
|
||||
if not isinstance(s, string_types) and not isinstance(s, binary_type):
|
||||
# In Python 2, s is not an instance of basestring
|
||||
# In Python 3, s is not an instance of bytes or str
|
||||
s = str(s)
|
||||
if not isinstance(s, binary_type):
|
||||
return s.encode(encoding, errors)
|
||||
elif s and encoding != 'utf-8':
|
||||
return s.decode('utf-8', errors).encode(encoding, errors)
|
||||
elif s and encoding != DEFAULT_ENCODING:
|
||||
return s.decode(DEFAULT_ENCODING, errors).encode(encoding, errors)
|
||||
else:
|
||||
return s
|
||||
|
||||
@@ -1404,6 +1412,32 @@ def parse_int(value, min_val=None, max_val=None, default=None, allow_none=False)
|
||||
raise
|
||||
|
||||
|
||||
def parse_non_hex_float( s ):
|
||||
"""
|
||||
Parse string `s` into a float but throw a `ValueError` if the string is in
|
||||
the otherwise acceptable format `\d+e\d+` (e.g. 40000000000000e5.)
|
||||
|
||||
This can be passed into `json.loads` to prevent a hex string in the above
|
||||
format from being incorrectly parsed as a float in scientific notation.
|
||||
|
||||
>>> parse_non_hex_float( '123.4' )
|
||||
123.4
|
||||
>>> parse_non_hex_float( '2.45e+3' )
|
||||
2450.0
|
||||
>>> parse_non_hex_float( '2.45e-3' )
|
||||
0.00245
|
||||
>>> parse_non_hex_float( '40000000000000e5' )
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: could not convert string to float: 40000000000000e5
|
||||
"""
|
||||
f = float( s )
|
||||
# successfully parsed as float if here - check for format in original string
|
||||
if 'e' in s and not ( '+' in s or '-' in s ):
|
||||
raise ValueError( 'could not convert string to float: ' + s )
|
||||
return f
|
||||
|
||||
|
||||
def build_url( base_url, port=80, scheme='http', pathspec=None, params=None, doseq=False ):
|
||||
if params is None:
|
||||
params = dict()
|
||||
|
||||
@@ -148,9 +148,10 @@ def expose_api( func, to_json=True, user_required=True ):
|
||||
return expose( _save_orig_fn( decorator, func ) )
|
||||
|
||||
|
||||
def __extract_payload_from_request(trans, func, kwargs):
|
||||
content_type = trans.request.headers['content-type']
|
||||
if content_type.startswith('application/x-www-form-urlencoded') or content_type.startswith('multipart/form-data'):
|
||||
def __extract_payload_from_request( trans, func, kwargs ):
|
||||
|
||||
content_type = trans.request.headers[ 'content-type' ]
|
||||
if content_type.startswith( 'application/x-www-form-urlencoded' ) or content_type.startswith( 'multipart/form-data' ):
|
||||
# If the content type is a standard type such as multipart/form-data, the wsgi framework parses the request body
|
||||
# and loads all field values into kwargs. However, kwargs also contains formal method parameters etc. which
|
||||
# are not a part of the request body. This is a problem because it's not possible to differentiate between values
|
||||
@@ -158,13 +159,16 @@ def __extract_payload_from_request(trans, func, kwargs):
|
||||
# in the payload. Therefore, the decorated method's formal arguments are discovered through reflection and removed from
|
||||
# the payload dictionary. This helps to prevent duplicate argument conflicts in downstream methods.
|
||||
payload = kwargs.copy()
|
||||
named_args, _, _, _ = inspect.getargspec(func)
|
||||
named_args, _, _, _ = inspect.getargspec( func )
|
||||
for arg in named_args:
|
||||
payload.pop(arg, None)
|
||||
payload.pop( arg, None )
|
||||
for k, v in payload.iteritems():
|
||||
if isinstance(v, string_types):
|
||||
if isinstance( v, string_types ):
|
||||
try:
|
||||
payload[k] = loads(v)
|
||||
# note: parse_non_hex_float only needed here for single string values where something like
|
||||
# 40000000000000e5 will be parsed as a scientific notation float. This is as opposed to hex strings
|
||||
# in larger JSON structures where quoting prevents this (further below)
|
||||
payload[ k ] = loads( v, parse_float=util.parse_non_hex_float )
|
||||
except:
|
||||
# may not actually be json, just continue
|
||||
pass
|
||||
|
||||
@@ -278,7 +278,7 @@ class DatasetsController( BaseAPIController, UsesVisualizationMixin ):
|
||||
|
||||
@web.expose_api_raw_anonymous
|
||||
def display( self, trans, history_content_id, history_id,
|
||||
preview=False, filename=None, to_ext=None, chunk=None, raw=False, **kwd ):
|
||||
preview=False, filename=None, to_ext=None, raw=False, **kwd ):
|
||||
"""
|
||||
GET /api/histories/{encoded_history_id}/contents/{encoded_content_id}/display
|
||||
Displays history content (dataset).
|
||||
@@ -297,7 +297,8 @@ class DatasetsController( BaseAPIController, UsesVisualizationMixin ):
|
||||
if raw:
|
||||
if filename and filename != 'index':
|
||||
file_path = trans.app.object_store.get_filename( hda.dataset,
|
||||
extra_dir=( 'dataset_%s_files' % hda.dataset.id ), alt_name=filename)
|
||||
extra_dir=( 'dataset_%s_files' % hda.dataset.id ),
|
||||
alt_name=filename)
|
||||
else:
|
||||
file_path = hda.file_name
|
||||
rval = open( file_path )
|
||||
@@ -306,7 +307,7 @@ class DatasetsController( BaseAPIController, UsesVisualizationMixin ):
|
||||
display_kwd = kwd.copy()
|
||||
if 'key' in display_kwd:
|
||||
del display_kwd["key"]
|
||||
rval = hda.datatype.display_data( trans, hda, preview, filename, to_ext, chunk, **display_kwd )
|
||||
rval = hda.datatype.display_data( trans, hda, preview, filename, to_ext, **display_kwd )
|
||||
|
||||
except Exception as exception:
|
||||
log.error( "Error getting display data for dataset (%s) from history (%s): %s",
|
||||
|
||||
@@ -27,6 +27,7 @@ class UserAPIController( BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cr
|
||||
super(UserAPIController, self).__init__(app)
|
||||
self.user_manager = users.UserManager(app)
|
||||
self.user_serializer = users.UserSerializer( app )
|
||||
self.user_deserializer = users.UserDeserializer( app )
|
||||
|
||||
@expose_api
|
||||
def index( self, trans, deleted='False', f_email=None, f_name=None, f_any=None, **kwd ):
|
||||
@@ -175,8 +176,32 @@ class UserAPIController( BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cr
|
||||
return key
|
||||
|
||||
@expose_api
|
||||
def update( self, trans, **kwd ):
|
||||
raise exceptions.NotImplemented()
|
||||
def update( self, trans, id, payload, **kwd ):
|
||||
"""
|
||||
update( self, trans, id, payload, **kwd )
|
||||
* PUT /api/users/{id}
|
||||
updates the values for the item with the given ``id``
|
||||
|
||||
:type id: str
|
||||
:param id: the encoded id of the item to update
|
||||
:type payload: dict
|
||||
:param payload: a dictionary of new attribute values
|
||||
|
||||
:rtype: dict
|
||||
:returns: an error object if an error occurred or a dictionary containing
|
||||
the serialized item after any changes
|
||||
"""
|
||||
current_user = trans.user
|
||||
user_to_update = self.user_manager.by_id( self.decode_id( id ) )
|
||||
|
||||
# only allow updating other users if they're admin
|
||||
editing_someone_else = current_user != user_to_update
|
||||
is_admin = trans.api_inherit_admin or self.user_manager.is_admin( current_user )
|
||||
if editing_someone_else and not is_admin:
|
||||
raise exceptions.InsufficientPermissionsException( 'you are not allowed to update that user', id=id )
|
||||
|
||||
self.user_deserializer.deserialize( user_to_update, payload, user=current_user, trans=trans )
|
||||
return self.user_serializer.serialize_to_view( user_to_update, view='detailed' )
|
||||
|
||||
@expose_api
|
||||
@web.require_admin
|
||||
|
||||
@@ -232,11 +232,17 @@ class DatasetInterface( BaseUIController, UsesAnnotations, UsesItemRatings, Uses
|
||||
return trans.app.object_store.file_ready(data.dataset)
|
||||
|
||||
@web.expose
|
||||
def display(self, trans, dataset_id=None, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
|
||||
def display(self, trans, dataset_id=None, preview=False, filename=None, to_ext=None, offset=None, ck_size=None, **kwd):
|
||||
data = self._check_dataset(trans, dataset_id)
|
||||
if not isinstance( data, trans.app.model.DatasetInstance ):
|
||||
return data
|
||||
return data.datatype.display_data(trans, data, preview, filename, to_ext, chunk, **kwd)
|
||||
# Ensure offset is an integer before passing through to datatypes.
|
||||
if offset:
|
||||
offset = int(offset)
|
||||
# Ensure ck_size is an integer before passing through to datatypes.
|
||||
if ck_size:
|
||||
ck_size = int(ck_size)
|
||||
return data.datatype.display_data(trans, data, preview, filename, to_ext, offset=offset, ck_size=ck_size, **kwd)
|
||||
|
||||
@web.expose
|
||||
def edit(self, trans, dataset_id=None, filename=None, hid=None, **kwd):
|
||||
|
||||
@@ -128,9 +128,9 @@ class TagsController ( BaseUIController, UsesTagsMixin ):
|
||||
# Create and return autocomplete data.
|
||||
ac_data = "#Header|Your Tags\n"
|
||||
for row in result_set:
|
||||
tag = self.get_tag_handler( trans ).get_tag_by_id( trans, row[0] )
|
||||
tag = self.get_tag_handler( trans ).get_tag_by_id( row[0] )
|
||||
# Exclude tags that are already applied to the item.
|
||||
if ( item is not None ) and ( self.get_tag_handler( trans ).item_has_tag( trans, trans.user, item, tag ) ):
|
||||
if ( item is not None ) and ( self.get_tag_handler( trans ).item_has_tag( trans.user, item, tag ) ):
|
||||
continue
|
||||
# Add tag to autocomplete data. Use the most frequent name that user
|
||||
# has employed for the tag.
|
||||
@@ -146,7 +146,7 @@ class TagsController ( BaseUIController, UsesTagsMixin ):
|
||||
tag_name_and_value = q.split( ":" )
|
||||
tag_name = tag_name_and_value[0]
|
||||
tag_value = tag_name_and_value[1]
|
||||
tag = self.get_tag_handler( trans ).get_tag_by_name( trans, tag_name )
|
||||
tag = self.get_tag_handler( trans ).get_tag_by_name( tag_name )
|
||||
# Don't autocomplete if tag doesn't exist.
|
||||
if tag is None:
|
||||
return ""
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"collection-li.js","sources":["../../../src/mvc/collection/collection-li.js"],"names":["define","LIST_ITEM","DATASET_LI","BASE_MVC","_l","FoldoutListItemView","ListItemView","DCListItemView","extend","className","prototype","id","this","model","get","join","initialize","attributes","linkTarget","hasUser","call","_setUpListeners","listenTo","_","has","changed","render","$","replaceWith","_renderSubtitle","templates","subtitle","toJSON","_getFoldoutPanelOptions","options","$selector","toString","modelString","warnings","error","wrapTemplate","purged","deleted","titleBarTemplate","subtitleTemplate","titleBar","DCEListItemView","logger","log","DatasetDCEListItemView","DatasetListItemView","_fetchModelDetails","view","inReadyState","hasDetails","fetch","silent","jQuery","when","NestedDCDCEListItemView","_swapNewRender","$newRender","state","$el","addClass"],"mappings":"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"}
|
||||
{"version":3,"file":"collection-li.js","sources":["../../../src/mvc/collection/collection-li.js"],"names":["define","LIST_ITEM","DATASET_LI","BASE_MVC","_l","FoldoutListItemView","ListItemView","DCListItemView","extend","className","prototype","id","this","model","get","join","initialize","attributes","linkTarget","hasUser","call","_setUpListeners","listenTo","_","has","changed","render","$","replaceWith","_renderSubtitle","templates","subtitle","toJSON","_getFoldoutPanelOptions","options","$selector","toString","modelString","warnings","error","wrapTemplate","purged","deleted","titleBarTemplate","subtitleTemplate","titleBar","DCEListItemView","logger","log","DatasetDCEListItemView","DatasetListItemView","_fetchModelDetails","view","inReadyState","hasDetails","fetch","silent","jQuery","when","NestedDCDCEListItemView","_swapNewRender","$newRender","state","$el","addClass"],"mappings":"AAAAA,QACI,qBACA,yBACA,eACA,sBACD,SAAUC,EAAWC,EAAYC,EAAUC,GAE9C,YAEA,IAAIC,GAAsBJ,EAAUI,oBAChCC,EAAeL,EAAUK,aAGzBC,EAAiBF,EAAoBG,QAOrCC,UAAcJ,EAAoBK,UAAUD,UAAY,sBACxDE,GAAc,WACV,OAAS,qBAAsBC,KAAKC,MAAMC,IAAK,OAASC,KAAM,MAIlEC,WAAa,SAAUC,GACnBL,KAAKM,WAAaD,EAAWC,YAAc,SAC3CN,KAAKO,QAAUF,EAAWE,QAC1Bd,EAAoBK,UAAUM,WAAWI,KAAMR,KAAMK,IAIzDI,gBAAkB,WACdhB,EAAoBK,UAAUW,gBAAgBD,KAAMR,MACpDA,KAAKU,SAAUV,KAAKC,MAAO,SAAU,SAAUA,GAEvCU,EAAEC,IAAKX,EAAMY,QAAS,WACtBb,KAAKc,SAIEH,EAAEC,IAAKX,EAAMY,QAAS,kBAC7Bb,KAAKe,EAAG,0BAA2BC,YAAahB,KAAKiB,sBAOjEA,gBAAkB,WACd,MAAOF,GAAGf,KAAKkB,UAAUC,SAAUnB,KAAKC,MAAMmB,SAAUpB,QAK5DqB,wBAA0B,WACtB,GAAIC,GAAU7B,EAAoBK,UAAUuB,wBAAwBb,KAAMR,KAC1E,OAAOW,GAAEf,OAAQ0B,GACbhB,WAAcN,KAAKM,WACnBC,QAAcP,KAAKO,WAK3BgB,UAAY,WACR,MAAOvB,MAAKe,EAAG,gBAKnBS,SAAW,WACP,GAAIC,GAAgBzB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,kBAAoBwB,EAAc,MAMjD9B,GAAeG,UAAUoB,UAAa,WAElC,GAAIQ,GAAWf,EAAEf,UAAYH,EAAoBK,UAAUoB,UAAUQ,UACjEC,MAAQpC,EAASqC,cAEb,2BACI,kCACIpC,EAAI,2DAA6D,uBACrE,SACJ,YAEJqC,OAAStC,EAASqC,cACd,4BACI,+CACIpC,EAAI,0DACR,SACJ,YAEJsC,QAAUvC,EAASqC,cAEf,8CACI,gDACIpC,EAAI,oCACR,SACJ,cAKJuC,EAAmBxC,EAASqC,cAC5B,6CACI,sBACI,oFACJ,SACA,+BACJ,UACD,cAGCI,EAAmBzC,EAASqC,cAC5B,yBACI,2FACA,4DACIpC,EAAI,sCACR,8DACIA,EAAI,sBACR,mEACIA,EAAI,2CACR,iEACIA,EAAI,2CACR,UACJ,UACD,aAEH,OAAOmB,GAAEf,UAAYH,EAAoBK,UAAUoB,WAC/CQ,SAAcA,EACdO,SAAcF,EACdZ,SAAca,MAQtB,IAAIE,GAAkBxC,EAAaE,QAQ/BC,UAAcH,EAAaI,UAAUD,UAAY,8BAGjDO,WAAc,SAAUC,GAChBA,EAAW8B,SAAUnC,KAAKmC,OAASnC,KAAKC,MAAMkC,OAAS9B,EAAW8B,QACtEnC,KAAKoC,IAAK,8BAA+B/B,GACzCX,EAAaI,UAAUM,WAAWI,KAAMR,KAAMK,IAKlDmB,SAAW,WACP,GAAIC,GAAgBzB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,mBAAqBwB,EAAc,MAMlDS,GAAgBpC,UAAUoB,UAAa,WAGnC,GAAIa,GAAmBxC,EAASqC,cAC5B,6CACI,sBACI,8DACJ,SACA,+BACJ,UACD,UAEH,OAAOjB,GAAEf,UAAYF,EAAaI,UAAUoB,WACxCe,SAAWF,MASnB,IAAIM,GAAyB/C,EAAWgD,oBAAoB1C,QAGxDC,UAAcP,EAAWgD,oBAAoBxC,UAAUD,UAAY,8BAMnEO,WAAc,SAAUC,GAChBA,EAAW8B,SAAUnC,KAAKmC,OAASnC,KAAKC,MAAMkC,OAAS9B,EAAW8B,QACtEnC,KAAKoC,IAAK,qCAAsC/B,GAChDf,EAAWgD,oBAAoBxC,UAAUM,WAAWI,KAAMR,KAAMK,IAMpEkC,mBAAqB,WACjB,GAAIC,GAAOxC,IACX,OAAIwC,GAAKvC,MAAMwC,iBAAmBD,EAAKvC,MAAMyC,aAClCF,EAAKvC,MAAM0C,OAAQC,QAAQ,IAE/BC,OAAOC,QAKlBtB,SAAW,WACP,GAAIC,GAAgBzB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,0BAA4BwB,EAAc,MAMzDY,GAAuBvC,UAAUoB,UAAa,WAI1C,GAAIa,GAAmBxC,EAASqC,cAC5B,6CACI,mCACA,sBACI,8DACJ,SACJ,UACD,UAEH,OAAOjB,GAAEf,UAAYN,EAAWgD,oBAAoBxC,UAAUoB,WAC1De,SAAWF,MASnB,IAAIgB,GAA0BpD,EAAeC,QAGzCC,UAAcF,EAAeG,UAAUD,UAAY,8BAOnDmD,eAAiB,SAAUC,GACvBtD,EAAeG,UAAUkD,eAAexC,KAAMR,KAAMiD,EAEpD,IAAIC,GAAQlD,KAAKC,MAAMC,IAAK,UAAa,IAIzC,OAFAF,MAAKmD,IAAIC,SAAU,SAAWF,GAEvBlD,KAAKmD,KAKhB3B,SAAW,WACP,GAAIC,GAAgBzB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,2BAA6BwB,EAAc,MAMtD,QACI9B,eAA0BA,EAC1BuC,gBAA0BA,EAC1BG,uBAA0BA,EAC1BU,wBAA0BA"}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"collection-view-edit.js","sources":["../../../src/mvc/collection/collection-view-edit.js"],"names":["define","DC_VIEW","DC_MODEL","DC_EDIT","BASE_MVC","_l","_super","CollectionView","CollectionViewEdit","extend","DatasetDCEViewClass","DatasetDCEListItemEdit","NestedDCDCEViewClass","NestedDCDCEListItemEdit","initialize","attributes","prototype","call","this","_setUpBehaviors","$where","$el","model","Galaxy","user","isAnonymous","panel","nameSelector","find","attr","tooltip","placement","make_text_editable","on_finish","newName","previousName","get","text","save","name","fail","previous","toString","ListCollectionViewEdit","PairCollectionViewEdit","NestedPairCollectionViewEdit","ListOfPairsCollectionViewEdit","foldoutPanelClass"],"mappings":"AAAAA,QACI,iCACA,kCACA,oCACA,eACA,qBACA,oBACD,SAAUC,EAASC,EAAUC,EAASC,EAAUC,GAEnD,YAOA,IAAIC,GAASL,EAAQM,eACjBC,EAAqBF,EAAOG,QAQ5BC,oBAAsBP,EAAQQ,uBAE9BC,qBAAsBT,EAAQU,wBAM9BC,WAAa,SAAUC,GACnBT,EAAOU,UAAUF,WAAWG,KAAMC,KAAMH,IAK5CI,gBAAkB,SAAUC,GAGxB,GAFAA,EAASA,GAAUF,KAAKG,IACxBf,EAAOU,UAAUG,gBAAgBF,KAAMC,KAAME,GACxCF,KAAKI,OAGLC,OAAOC,OAAQD,OAAOC,KAAKC,cAAhC,CAKA,GAAIC,GAAQR,KACRS,EAAe,mBACnBP,GAAOQ,KAAMD,GACRE,KAAM,QAASxB,EAAI,+BACnByB,SAAUC,UAAW,WACrBC,oBACGC,UAAW,SAAUC,GACjB,GAAIC,GAAeT,EAAMJ,MAAMc,IAAK,OAChCF,IAAWA,IAAYC,GACvBT,EAAML,IAAIO,KAAMD,GAAeU,KAAMH,GACrCR,EAAMJ,MAAMgB,MAAOC,KAAML,IACpBM,KAAM,WACHd,EAAML,IAAIO,KAAMD,GAAeU,KAAMX,EAAMJ,MAAMmB,SAAU,YAGnEf,EAAML,IAAIO,KAAMD,GAAeU,KAAMF,QAQzDO,SAAc,WACV,MAAO,uBAA2BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAOzFO,EAAyBnC,EAAmBC,QAK5CC,oBAAsBP,EAAQQ,uBAI9B+B,SAAc,WACV,MAAO,2BAA+BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAO7FQ,EAAyBD,EAAuBlC,QAKhDiC,SAAc,WACV,MAAO,2BAA+BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAS7FS,EAA+BD,EAAuBnC,QAItDU,gBAAkB,SAAUC,GACxBd,EAAOU,UAAUG,gBAAgBF,KAAMC,KAAME,IAKjDsB,SAAc,WACV,MAAO,iCAAqCxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAOnGU,EAAgCtC,EAAmBC,QAKnDG,qBAAuBT,EAAQU,wBAAwBJ,QACnDsC,kBAAoBF,IAKxBH,SAAc,WACV,MAAO,kCAAsCxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,MAMpG,QACI5B,mBAAkCA,EAClCmC,uBAAkCA,EAClCC,uBAAkCA,EAClCE,8BAAkCA"}
|
||||
{"version":3,"file":"collection-view-edit.js","sources":["../../../src/mvc/collection/collection-view-edit.js"],"names":["define","DC_VIEW","DC_MODEL","DC_EDIT","BASE_MVC","_l","_super","CollectionView","CollectionViewEdit","extend","DatasetDCEViewClass","DatasetDCEListItemEdit","NestedDCDCEViewClass","NestedDCDCEListItemEdit","initialize","attributes","prototype","call","this","_setUpBehaviors","$where","$el","model","Galaxy","user","isAnonymous","panel","nameSelector","find","attr","tooltip","placement","make_text_editable","on_finish","newName","previousName","get","text","save","name","fail","previous","toString","ListCollectionViewEdit","PairCollectionViewEdit","NestedPairCollectionViewEdit","ListOfPairsCollectionViewEdit","foldoutPanelClass","ListOfListsCollectionViewEdit"],"mappings":"AAAAA,QACI,iCACA,kCACA,oCACA,eACA,qBACA,oBACD,SAAUC,EAASC,EAAUC,EAASC,EAAUC,GAEnD,YAOA,IAAIC,GAASL,EAAQM,eACjBC,EAAqBF,EAAOG,QAQ5BC,oBAAsBP,EAAQQ,uBAE9BC,qBAAsBT,EAAQU,wBAM9BC,WAAa,SAAUC,GACnBT,EAAOU,UAAUF,WAAWG,KAAMC,KAAMH,IAK5CI,gBAAkB,SAAUC,GAGxB,GAFAA,EAASA,GAAUF,KAAKG,IACxBf,EAAOU,UAAUG,gBAAgBF,KAAMC,KAAME,GACxCF,KAAKI,OAGLC,OAAOC,OAAQD,OAAOC,KAAKC,cAAhC,CAKA,GAAIC,GAAQR,KACRS,EAAe,mBACnBP,GAAOQ,KAAMD,GACRE,KAAM,QAASxB,EAAI,+BACnByB,SAAUC,UAAW,WACrBC,oBACGC,UAAW,SAAUC,GACjB,GAAIC,GAAeT,EAAMJ,MAAMc,IAAK,OAChCF,IAAWA,IAAYC,GACvBT,EAAML,IAAIO,KAAMD,GAAeU,KAAMH,GACrCR,EAAMJ,MAAMgB,MAAOC,KAAML,IACpBM,KAAM,WACHd,EAAML,IAAIO,KAAMD,GAAeU,KAAMX,EAAMJ,MAAMmB,SAAU,YAGnEf,EAAML,IAAIO,KAAMD,GAAeU,KAAMF,QAQzDO,SAAc,WACV,MAAO,uBAA2BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAOzFO,EAAyBnC,EAAmBC,QAK5CC,oBAAsBP,EAAQQ,uBAI9B+B,SAAc,WACV,MAAO,2BAA+BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAO7FQ,EAAyBD,EAAuBlC,QAKhDiC,SAAc,WACV,MAAO,2BAA+BxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAS7FS,EAA+BD,EAAuBnC,QAItDU,gBAAkB,SAAUC,GACxBd,EAAOU,UAAUG,gBAAgBF,KAAMC,KAAME,IAKjDsB,SAAc,WACV,MAAO,iCAAqCxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAOnGU,EAAgCtC,EAAmBC,QAKnDG,qBAAuBT,EAAQU,wBAAwBJ,QACnDsC,kBAAoBF,IAKxBH,SAAc,WACV,MAAO,kCAAsCxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,OAOpGY,EAAgCxC,EAAmBC,QAKnDG,qBAAuBT,EAAQU,wBAAwBJ,QACnDsC,kBAAoBF,IAKxBH,SAAc,WACV,MAAO,kCAAsCxB,KAAW,MAAIA,KAAKI,MAAMc,IAAK,QAAU,IAAU,MAMpG,QACI5B,mBAAkCA,EAClCmC,uBAAkCA,EAClCC,uBAAkCA,EAClCE,8BAAkCA,EAClCE,8BAAkCA"}
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"collection-view.js","sources":["../../../src/mvc/collection/collection-view.js"],"names":["define","LIST_VIEW","DC_MODEL","DC_LI","BASE_MVC","_l","logNamespace","_super","ModelListPanel","CollectionView","extend","_logNamespace","className","prototype","DatasetDCEViewClass","DatasetDCEListItemView","NestedDCDCEViewClass","NestedDCDCEListItemView","modelCollectionKey","initialize","attributes","call","this","linkTarget","hasUser","panelStack","parentName","foldoutStyle","_filterCollection","model","getVisibleContents","_getItemViewClass","get","TypeError","_getItemViewOptions","options","_","_setUpItemViewListeners","view","panel","listenTo","expanded:drilldown","v","drilldown","_expandDrilldownPanel","collapsed:drilldown","_collapseDrilldownPanel","push","$","add","$list","hide","$el","append","render","pop","events","click .navigation .back","close","remove","trigger","toString","templates","controlsTemplate","wrapTemplate","clone","controls","ListCollectionView","PairCollectionView","ListOfPairsCollectionView","foldoutPanelClass"],"mappings":"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"}
|
||||
{"version":3,"file":"collection-view.js","sources":["../../../src/mvc/collection/collection-view.js"],"names":["define","LIST_VIEW","DC_MODEL","DC_LI","BASE_MVC","_l","logNamespace","_super","ModelListPanel","CollectionView","extend","_logNamespace","className","prototype","DatasetDCEViewClass","DatasetDCEListItemView","NestedDCDCEViewClass","NestedDCDCEListItemView","modelCollectionKey","initialize","attributes","call","this","linkTarget","hasUser","panelStack","parentName","foldoutStyle","_filterCollection","model","getVisibleContents","_getItemViewClass","get","TypeError","_getItemViewOptions","options","_","_setUpItemViewListeners","view","panel","listenTo","expanded:drilldown","v","drilldown","_expandDrilldownPanel","collapsed:drilldown","_collapseDrilldownPanel","push","$","add","$list","hide","$el","append","render","pop","events","click .navigation .back","close","remove","trigger","toString","templates","controlsTemplate","wrapTemplate","clone","controls","ListCollectionView","PairCollectionView","ListOfPairsCollectionView","foldoutPanelClass","ListOfListsCollectionView"],"mappings":"AAAAA,QACI,qBACA,kCACA,+BACA,eACA,sBACD,SAAUC,EAAWC,EAAUC,EAAOC,EAAUC,GAEnD,YAEA,IAAIC,GAAe,cAOfC,EAASN,EAAUO,eACnBC,EAAiBF,EAAOG,QAGxBC,cAAgBL,EAEhBM,UAAsBL,EAAOM,UAAUD,UAAY,4BAGnDE,oBAAsBX,EAAMY,uBAE5BC,qBAAsBb,EAAMc,wBAE5BC,mBAAsB,WAMtBC,WAAa,SAAUC,GACnBb,EAAOM,UAAUM,WAAWE,KAAMC,KAAMF,GACxCE,KAAKC,WAAaH,EAAWG,YAAc,SAE3CD,KAAKE,QAAUJ,EAAWI,QAE1BF,KAAKG,cAELH,KAAKI,WAAaN,EAAWM,WAE7BJ,KAAKK,aAAeP,EAAWO,cAAgB,WAKnDC,kBAAoB,WAEhB,MAAON,MAAKO,MAAMC,sBAItBC,kBAAoB,SAAUF,GAG1B,OAAQA,EAAMG,IAAK,iBACf,IAAK,MACD,MAAOV,MAAKR,mBAChB,KAAK,qBACD,MAAOQ,MAAKN,qBAEpB,KAAM,IAAIiB,WAAW,wBAAyBJ,EAAMG,IAAK,kBAI7DE,oBAAsB,SAAUL,GAC5B,GAAIM,GAAU5B,EAAOM,UAAUqB,oBAAoBb,KAAMC,KAAMO,EAC/D,OAAOO,GAAE1B,OAAQyB,GACbZ,WAAkBD,KAAKC,WACvBC,QAAkBF,KAAKE,QAEvBG,aAAkBL,KAAKK,gBAM/BU,wBAA0B,SAAUC,GAChC,GAAIC,GAAQjB,IAYZ,OAXAf,GAAOM,UAAUwB,wBAAwBhB,KAAMkB,EAAOD,GAGtDC,EAAMC,SAAUF,GACZG,qBAAsB,SAAUC,EAAGC,GAC/BrB,KAAKsB,sBAAuBD,IAEhCE,sBAAuB,SAAUH,EAAGC,GAChCrB,KAAKwB,wBAAyBH,MAG/BrB,MAIXsB,sBAAwB,SAAUD,GAC9BrB,KAAKG,WAAWsB,KAAMJ,GAEtBrB,KAAK0B,EAAG,eAAgBC,IAAK3B,KAAK4B,SAAUC,OAC5CR,EAAUjB,WAAaJ,KAAKO,MAAMG,IAAK,QACvCV,KAAK8B,IAAIC,OAAQV,EAAUW,SAASF,MAIxCN,wBAA0B,WACtBxB,KAAKG,WAAW8B,MAChBjC,KAAKgC,UAKTE,QACIC,0BAAkC,SAItCC,MAAQ,WACJpC,KAAK8B,IAAIO,SACTrC,KAAKsC,QAAS,UAKlBC,SAAc,WACV,MAAO,mBAAuBvC,KAAW,MAAIA,KAAKO,MAAMG,IAAK,QAAU,IAAU,MAMzFvB,GAAeI,UAAUiD,UAAa,WAElC,GAAIC,GAAmB3D,EAAS4D,cAC5B,yBACI,2BACI,6CACI,iDACA3D,EAAI,YAAc,yBACtB,OACJ,SAEA,sBACI,kFACA,yBAEI,qDACIA,EAAI,sBACR,8DACIA,EAAI,sBACR,mEACIA,EAAI,6BACR,iEACIA,EAAI,2BACR,UACJ,SACJ,SACJ,UACD,aAEH,OAAO+B,GAAE1B,OAAQ0B,EAAE6B,MAAO1D,EAAOM,UAAUiD,YACvCI,SAAWH,MAQnB,IAAII,GAAqB1D,EAAeC,QAKpCI,oBAAsBX,EAAMY,uBAI5B8C,SAAc,WACV,MAAO,uBAA2BvC,KAAW,MAAIA,KAAKO,MAAMG,IAAK,QAAU,IAAU,OAOzFoC,EAAqBD,EAAmBzD,QAKxCmD,SAAc,WACV,MAAO,uBAA2BvC,KAAW,MAAIA,KAAKO,MAAMG,IAAK,QAAU,IAAU,OAOzFqC,EAA4B5D,EAAeC,QAK3CM,qBAAuBb,EAAMc,wBAAwBP,QACjD4D,kBAAoBF,IAKxBP,SAAc,WACV,MAAO,8BAAkCvC,KAAW,MAAIA,KAAKO,MAAMG,IAAK,QAAU,IAAU,OAOhGuC,EAA4B9D,EAAeC,QAG3CM,qBAAuBb,EAAMc,wBAAwBP,QACjD4D,kBAAoBF,IAIxBP,SAAc,WACV,MAAO,8BAAkCvC,KAAW,MAAIA,KAAKO,MAAMG,IAAK,QAAU,IAAU,MAMhG,QACIvB,eAA8BA,EAC9B0D,mBAA8BA,EAC9BC,mBAA8BA,EAC9BC,0BAA8BA,EAC9BE,0BAA8BA"}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"version":3,"file":"hdca-li-edit.js","sources":["../../../src/mvc/history/hdca-li-edit.js"],"names":["define","HDCA_LI","DC_VIEW_EDIT","faIconButton","_l","_super","HDCAListItemView","HDCAListItemEdit","extend","_getFoldoutPanelClass","this","model","get","ListCollectionViewEdit","PairCollectionViewEdit","ListOfPairsCollectionViewEdit","TypeError","_renderPrimaryActions","log","prototype","call","concat","_renderDeleteButton","self","deleted","title","classes","faIcon","disabled","onclick","$el","find","trigger","toString","modelString"],"mappings":"AAAAA,QACI,sBACA,sCACA,oBACA,sBACD,SAAUC,EAASC,EAAcC,EAAcC,GAElD,YAGA,IAAIC,GAASJ,EAAQK,iBAGjBC,EAAmBF,EAAOG,QAO1BC,sBAAwB,WACpB,OAAQC,KAAKC,MAAMC,IAAK,oBACpB,IAAK,OACD,MAAOV,GAAaW,sBACxB,KAAK,SACD,MAAOX,GAAaY,sBACxB,KAAK,cACD,MAAOZ,GAAaa,8BAE5B,KAAM,IAAIC,WAAW,2BAA6BN,KAAKC,MAAMC,IAAK,qBAKtEK,sBAAwB,WAGpB,MAFAP,MAAKQ,IAAKR,KAAO,0BAEVL,EAAOc,UAAUF,sBAAsBG,KAAMV,MAC/CW,QACGX,KAAKY,yBAKjBA,oBAAsB,WAClB,GAAIC,GAAOb,KACPc,EAAUd,KAAKC,MAAMC,IAAK,UAC9B,OAAOT,IACHsB,MAAuBrB,EAAToB,EAAa,wCAA+C,UAC1EE,QAAc,aACdC,OAAc,WACdC,SAAcJ,EACdK,QAAc,WAEVN,EAAKO,IAAIC,KAAM,wBAAyBC,QAAS,YACjDT,EAAKZ,MAAgB,aAOjCsB,SAAW,WACP,GAAIC,GAAgBxB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,oBAAsBuB,EAAc,MAK/C,QACI3B,iBAAmBA"}
|
||||
{"version":3,"file":"hdca-li-edit.js","sources":["../../../src/mvc/history/hdca-li-edit.js"],"names":["define","HDCA_LI","DC_VIEW_EDIT","faIconButton","_l","_super","HDCAListItemView","HDCAListItemEdit","extend","_getFoldoutPanelClass","this","model","get","ListCollectionViewEdit","PairCollectionViewEdit","ListOfPairsCollectionViewEdit","ListOfListsCollectionViewEdit","TypeError","_renderPrimaryActions","log","prototype","call","concat","_renderDeleteButton","self","deleted","title","classes","faIcon","disabled","onclick","$el","find","trigger","toString","modelString"],"mappings":"AAAAA,QACI,sBACA,sCACA,oBACA,sBACD,SAAUC,EAASC,EAAcC,EAAcC,GAElD,YAGA,IAAIC,GAASJ,EAAQK,iBAGjBC,EAAmBF,EAAOG,QAO1BC,sBAAwB,WACpB,OAAQC,KAAKC,MAAMC,IAAK,oBACpB,IAAK,OACD,MAAOV,GAAaW,sBACxB,KAAK,SACD,MAAOX,GAAaY,sBACxB,KAAK,cACD,MAAOZ,GAAaa,6BACxB,KAAK,YACD,MAAOb,GAAac,8BAE5B,KAAM,IAAIC,WAAW,2BAA6BP,KAAKC,MAAMC,IAAK,qBAKtEM,sBAAwB,WAGpB,MAFAR,MAAKS,IAAKT,KAAO,0BAEVL,EAAOe,UAAUF,sBAAsBG,KAAMX,MAC/CY,QACGZ,KAAKa,yBAKjBA,oBAAsB,WAClB,GAAIC,GAAOd,KACPe,EAAUf,KAAKC,MAAMC,IAAK,UAC9B,OAAOT,IACHuB,MAAuBtB,EAATqB,EAAa,wCAA+C,UAC1EE,QAAc,aACdC,OAAc,WACdC,SAAcJ,EACdK,QAAc,WAEVN,EAAKO,IAAIC,KAAM,wBAAyBC,QAAS,YACjDT,EAAKb,MAAgB,aAOjCuB,SAAW,WACP,GAAIC,GAAgBzB,KAAW,MAAIA,KAAKC,MAAQ,GAAK,YACrD,OAAO,oBAAsBwB,EAAc,MAK/C,QACI5B,iBAAmBA"}
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"hdca-li.js","sources":["../../../src/mvc/history/hdca-li.js"],"names":["define","STATES","DC_LI","DC_VIEW","BASE_MVC","_l","_super","DCListItemView","HDCAListItemView","extend","className","prototype","_setUpListeners","call","this","listenTo","model","change:populated change:visible","render","_getFoldoutPanelClass","get","ListCollectionView","PairCollectionView","ListOfPairsCollectionView","TypeError","_swapNewRender","$newRender","state","OK","RUNNING","$el","addClass","toString","modelString","templates","warnings","_","hidden","wrapTemplate","titleBarTemplate","titleBar"],"mappings":"AAAAA,QACI,qBACA,+BACA,iCACA,eACA,sBACD,SAAUC,EAAQC,EAAOC,EAASC,EAAUC,GAE/C,YAGA,IAAIC,GAASJ,EAAMK,eAGfC,EAAmBF,EAAOG,QAM1BC,UAAcJ,EAAOK,UAAUD,UAAY,mBAG3CE,gBAAkB,WACdN,EAAOK,UAAUC,gBAAgBC,KAAMC,MAEvCA,KAAKC,SAAUD,KAAKE,OAChBC,kCAAoC,WAA4BH,KAAKI,aAK7EC,sBAAwB,WACpB,OAAQL,KAAKE,MAAMI,IAAK,oBACpB,IAAK,OACD,MAAOjB,GAAQkB,kBACnB,KAAK,SACD,MAAOlB,GAAQmB,kBACnB,KAAK,cACD,MAAOnB,GAAQoB,0BAEvB,KAAM,IAAIC,WAAW,2BAA6BV,KAAKE,MAAMI,IAAK,qBAItEK,eAAiB,SAAUC,GACvBpB,EAAOK,UAAUc,eAAeZ,KAAMC,KAAMY,EAE5C,IAAIC,GAASb,KAAKE,MAAMI,IAAK,aAAiCnB,EAAO2B,GAAxB3B,EAAO4B,OAIpD,OAFAf,MAAKgB,IAAIC,SAAU,SAAWJ,GAEvBb,KAAKgB,KAKhBE,SAAW,WACP,GAAIC,GAAgBnB,KAAW,MAAIA,KAAKE,MAAQ,GAAK,YACrD,OAAO,oBAAsBiB,EAAc,MAwC/C,OAnCJzB,GAAiBG,UAAUuB,UAAa,WAEpC,GAAIC,GAAWC,EAAE3B,UAAYH,EAAOK,UAAUuB,UAAUC,UACpDE,OAASjC,EAASkC,cAEd,mCACI,+CACIjC,EAAI,mCACR,SACJ,WACD,gBAIHkC,EAAmBnC,EAASkC,cAE5B,6CACI,mCACA,sBAEI,kDACA,mDACJ,SACA,+BACJ,UACD,aAEH,OAAOF,GAAE3B,UAAYH,EAAOK,UAAUuB,WAClCC,SAAWA,EACXK,SAAWD,QAOX/B,iBAAmBA"}
|
||||
{"version":3,"file":"hdca-li.js","sources":["../../../src/mvc/history/hdca-li.js"],"names":["define","STATES","DC_LI","DC_VIEW","BASE_MVC","_l","_super","DCListItemView","HDCAListItemView","extend","className","prototype","_setUpListeners","call","this","listenTo","model","change:populated change:visible","render","_getFoldoutPanelClass","get","ListCollectionView","PairCollectionView","ListOfPairsCollectionView","ListOfListsCollectionView","TypeError","_swapNewRender","$newRender","state","OK","RUNNING","$el","addClass","toString","modelString","templates","warnings","_","hidden","wrapTemplate","titleBarTemplate","titleBar"],"mappings":"AAAAA,QACI,qBACA,+BACA,iCACA,eACA,sBACD,SAAUC,EAAQC,EAAOC,EAASC,EAAUC,GAE/C,YAGA,IAAIC,GAASJ,EAAMK,eAGfC,EAAmBF,EAAOG,QAM1BC,UAAcJ,EAAOK,UAAUD,UAAY,mBAG3CE,gBAAkB,WACdN,EAAOK,UAAUC,gBAAgBC,KAAMC,MAEvCA,KAAKC,SAAUD,KAAKE,OAChBC,kCAAoC,WAA4BH,KAAKI,aAK7EC,sBAAwB,WACpB,OAAQL,KAAKE,MAAMI,IAAK,oBACpB,IAAK,OACD,MAAOjB,GAAQkB,kBACnB,KAAK,SACD,MAAOlB,GAAQmB,kBACnB,KAAK,cACD,MAAOnB,GAAQoB,yBACnB,KAAK,YACD,MAAOpB,GAAQqB,0BAEvB,KAAM,IAAIC,WAAW,2BAA6BX,KAAKE,MAAMI,IAAK,qBAItEM,eAAiB,SAAUC,GACvBrB,EAAOK,UAAUe,eAAeb,KAAMC,KAAMa,EAE5C,IAAIC,GAASd,KAAKE,MAAMI,IAAK,aAAiCnB,EAAO4B,GAAxB5B,EAAO6B,OAIpD,OAFAhB,MAAKiB,IAAIC,SAAU,SAAWJ,GAEvBd,KAAKiB,KAKhBE,SAAW,WACP,GAAIC,GAAgBpB,KAAW,MAAIA,KAAKE,MAAQ,GAAK,YACrD,OAAO,oBAAsBkB,EAAc,MAwC/C,OAnCJ1B,GAAiBG,UAAUwB,UAAa,WAEpC,GAAIC,GAAWC,EAAE5B,UAAYH,EAAOK,UAAUwB,UAAUC,UACpDE,OAASlC,EAASmC,cAEd,mCACI,+CACIlC,EAAI,mCACR,SACJ,WACD,gBAIHmC,EAAmBpC,EAASmC,cAE5B,6CACI,mCACA,sBAEI,kDACA,mDACJ,SACA,+BACJ,UACD,aAEH,OAAOF,GAAE5B,UAAYH,EAAOK,UAAUwB,WAClCC,SAAWA,EACXK,SAAWD,QAOXhC,iBAAmBA"}
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"hdca-model.js","sources":["../../../src/mvc/history/hdca-model.js"],"names":["define","DC_MODEL","HISTORY_CONTENT","buildHDCASave","_super","attributes","options","this","isNew","url","urlRoot","get","type","call","hcontentMixin","HistoryContentMixin","ListDC","ListDatasetCollection","PairDC","PairDatasetCollection","ListPairedDC","ListPairedDatasetCollection","HistoryListDatasetCollection","extend","defaults","_","clone","prototype","history_content_type","collection_type","model_class","initialize","model","save","toString","join","HistoryPairDatasetCollection","HistoryListPairedDatasetCollection"],"mappings":"AAAAA,QACI,kCACA,oCACA,sBACD,SAAUC,EAAUC,GAEvB,YAkBA,SAASC,GAAeC,GACpB,MAAO,UAAgBC,EAAYC,GAO/B,MANIC,MAAKC,UACLF,EAAUA,MACVA,EAAQG,IAAMF,KAAKG,QAAUH,KAAKI,IAAK,cAAiB,YACxDN,EAAaA,MACbA,EAAWO,KAAO,sBAEfR,EAAOS,KAAMN,KAAMF,EAAYC,IAf9C,GAAIQ,GAAgBZ,EAAgBa,oBAChCC,EAASf,EAASgB,sBAClBC,EAASjB,EAASkB,sBAClBC,EAAenB,EAASoB,4BAoBxBC,EAA+BN,EAAOO,OAAQT,GAAgBS,QAG9DC,SAAWC,EAAEF,OAAQE,EAAEC,MAAOV,EAAOW,UAAUH,WAC3CI,qBAAsB,qBACtBC,gBAAsB,OACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO1B,GAC1BU,EAAOW,UAAUI,WAAWlB,KAAMN,KAAMyB,EAAO1B,GAC/CQ,EAAciB,WAAWlB,KAAMN,KAAMyB,EAAO1B,IAIhD2B,KAAO9B,EAAea,EAAOW,UAAUM,MAGvCC,SAAW,WACN,OAAU,gCAAiC3B,KAAKI,IAAK,QAAU,KAAMwB,KAAM,OAShFC,EAA+BlB,EAAOK,OAAQT,GAAgBS,QAG9DC,SAAWC,EAAEF,OAAQE,EAAEC,MAAOR,EAAOS,UAAUH,WAC3CI,qBAAsB,qBACtBC,gBAAsB,SACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO1B,GAC1BY,EAAOS,UAAUI,WAAWlB,KAAMN,KAAMyB,EAAO1B,GAC/CQ,EAAciB,WAAWlB,KAAMN,KAAMyB,EAAO1B,IAIhD2B,KAAO9B,EAAee,EAAOS,UAAUM,MAGvCC,SAAW,WACN,OAAU,gCAAiC3B,KAAKI,IAAK,QAAU,KAAMwB,KAAM,OAShFE,EAAqCjB,EAAaG,OAAQT,GAAgBS,QAG1EC,SAAWC,EAAEF,OAAQE,EAAEC,MAAON,EAAaO,UAAUH,WACjDI,qBAAsB,qBACtBC,gBAAsB,cACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO1B,GAC1Bc,EAAaO,UAAUI,WAAWlB,KAAMN,KAAMyB,EAAO1B,GACrDQ,EAAciB,WAAWlB,KAAMN,KAAMyB,EAAO1B,IAIhD2B,KAAO9B,EAAeiB,EAAaO,UAAUM,MAG7CC,SAAW,WACN,OAAU,sCAAuC3B,KAAKI,IAAK,QAAU,KAAMwB,KAAM,MAMtF,QACIb,6BAAsCA,EACtCc,6BAAsCA,EACtCC,mCAAsCA"}
|
||||
{"version":3,"file":"hdca-model.js","sources":["../../../src/mvc/history/hdca-model.js"],"names":["define","DC_MODEL","HISTORY_CONTENT","buildHDCASave","_super","attributes","options","this","isNew","url","urlRoot","get","type","call","hcontentMixin","HistoryContentMixin","ListDC","ListDatasetCollection","PairDC","PairDatasetCollection","ListPairedDC","ListPairedDatasetCollection","ListOfListsDC","ListOfListsDatasetCollection","HistoryListDatasetCollection","extend","defaults","_","clone","prototype","history_content_type","collection_type","model_class","initialize","model","save","toString","join","HistoryPairDatasetCollection","HistoryListPairedDatasetCollection","HistoryListOfListsDatasetCollection"],"mappings":"AAAAA,QACI,kCACA,oCACA,sBACD,SAAUC,EAAUC,GAEvB,YAmBA,SAASC,GAAeC,GACpB,MAAO,UAAgBC,EAAYC,GAO/B,MANIC,MAAKC,UACLF,EAAUA,MACVA,EAAQG,IAAMF,KAAKG,QAAUH,KAAKI,IAAK,cAAiB,YACxDN,EAAaA,MACbA,EAAWO,KAAO,sBAEfR,EAAOS,KAAMN,KAAMF,EAAYC,IAhB9C,GAAIQ,GAAgBZ,EAAgBa,oBAChCC,EAASf,EAASgB,sBAClBC,EAASjB,EAASkB,sBAClBC,EAAenB,EAASoB,4BACxBC,EAAgBrB,EAASsB,6BAoBzBC,EAA+BR,EAAOS,OAAQX,GAAgBW,QAG9DC,SAAWC,EAAEF,OAAQE,EAAEC,MAAOZ,EAAOa,UAAUH,WAC3CI,qBAAsB,qBACtBC,gBAAsB,OACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO5B,GAC1BU,EAAOa,UAAUI,WAAWpB,KAAMN,KAAM2B,EAAO5B,GAC/CQ,EAAcmB,WAAWpB,KAAMN,KAAM2B,EAAO5B,IAIhD6B,KAAOhC,EAAea,EAAOa,UAAUM,MAGvCC,SAAW,WACN,OAAU,gCAAiC7B,KAAKI,IAAK,QAAU,KAAM0B,KAAM,OAShFC,EAA+BpB,EAAOO,OAAQX,GAAgBW,QAG9DC,SAAWC,EAAEF,OAAQE,EAAEC,MAAOV,EAAOW,UAAUH,WAC3CI,qBAAsB,qBACtBC,gBAAsB,SACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO5B,GAC1BY,EAAOW,UAAUI,WAAWpB,KAAMN,KAAM2B,EAAO5B,GAC/CQ,EAAcmB,WAAWpB,KAAMN,KAAM2B,EAAO5B,IAIhD6B,KAAOhC,EAAee,EAAOW,UAAUM,MAGvCC,SAAW,WACN,OAAU,gCAAiC7B,KAAKI,IAAK,QAAU,KAAM0B,KAAM,OAOhFE,EAAqCnB,EAAaK,OAAQX,GAAgBW,QAE1EC,SAAWC,EAAEF,OAAQE,EAAEC,MAAOR,EAAaS,UAAUH,WACjDI,qBAAsB,qBACtBC,gBAAsB,cACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO5B,GAC1Bc,EAAaS,UAAUI,WAAWpB,KAAMN,KAAM2B,EAAO5B,GACrDQ,EAAcmB,WAAWpB,KAAMN,KAAM2B,EAAO5B,IAIhD6B,KAAOhC,EAAeiB,EAAaS,UAAUM,MAG7CC,SAAW,WACN,OAAU,sCAAuC7B,KAAKI,IAAK,QAAU,KAAM0B,KAAM,OAOtFG,EAAsClB,EAAcG,OAAQX,GAAgBW,QAE5EC,SAAWC,EAAEF,OAAQE,EAAEC,MAAON,EAAcO,UAAUH,WAClDI,qBAAsB,qBACtBC,gBAAsB,YACtBC,YAAsB,wCAG1BC,WAAa,SAAUC,EAAO5B,GAC1BgB,EAAcO,UAAUI,WAAWpB,KAAMN,KAAM2B,EAAO5B,GACtDQ,EAAcmB,WAAWpB,KAAMN,KAAM2B,EAAO5B,IAIhD6B,KAAOhC,EAAemB,EAAcO,UAAUM,MAG9CC,SAAW,WACN,OAAU,uCAAwC7B,KAAKI,IAAK,QAAU,KAAM0B,KAAM,MAMvF,QACIb,6BAAsCA,EACtCc,6BAAsCA,EACtCC,mCAAsCA,EACtCC,oCAAsCA"}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
define(["mvc/list/list-item","mvc/dataset/dataset-li","mvc/base-mvc","utils/localization"],function(a,b,c,d){"use strict";var e=a.FoldoutListItemView,f=a.ListItemView,g=e.extend({className:e.prototype.className+" dataset-collection",id:function(){return["dataset_collection",this.model.get("id")].join("-")},initialize:function(a){this.linkTarget=a.linkTarget||"_blank",this.hasUser=a.hasUser,e.prototype.initialize.call(this,a)},_setUpListeners:function(){e.prototype._setUpListeners.call(this),this.listenTo(this.model,"change",function(a){_.has(a.changed,"deleted")?this.render():_.has(a.changed,"element_count")&&this.$("> .title-bar .subtitle").replaceWith(this._renderSubtitle())})},_renderSubtitle:function(){return $(this.templates.subtitle(this.model.toJSON(),this))},_getFoldoutPanelOptions:function(){var a=e.prototype._getFoldoutPanelOptions.call(this);return _.extend(a,{linkTarget:this.linkTarget,hasUser:this.hasUser})},$selector:function(){return this.$("> .selector")},toString:function(){var a=this.model?this.model+"":"(no model)";return"DCListItemView("+a+")"}});g.prototype.templates=function(){var a=_.extend({},e.prototype.templates.warnings,{error:c.wrapTemplate(["<% if( model.error ){ %>",'<div class="errormessagesmall">',d("There was an error getting the data for this collection"),": <%- model.error %>","</div>","<% } %>"]),purged:c.wrapTemplate(["<% if( model.purged ){ %>",'<div class="purged-msg warningmessagesmall">',d("This collection has been deleted and removed from disk"),"</div>","<% } %>"]),deleted:c.wrapTemplate(["<% if( model.deleted && !model.purged ){ %>",'<div class="deleted-msg warningmessagesmall">',d("This collection has been deleted"),"</div>","<% } %>"])}),b=c.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"),f=c.wrapTemplate(['<div class="subtitle">','<% var countText = collection.element_count? ( collection.element_count + " " ) : ""; %>','<% if( collection.collection_type === "list" ){ %>',d("a list of <%- countText %>datasets"),'<% } else if( collection.collection_type === "paired" ){ %>',d("a pair of datasets"),'<% } else if( collection.collection_type === "list:paired" ){ %>',d("a list of <%- countText %>dataset pairs"),"<% } %>","</div>"],"collection");return _.extend({},e.prototype.templates,{warnings:a,titleBar:b,subtitle:f})}();var h=f.extend({className:f.prototype.className+" dataset-collection-element",initialize:function(a){a.logger&&(this.logger=this.model.logger=a.logger),this.log("DCEListItemView.initialize:",a),f.prototype.initialize.call(this,a)},toString:function(){var a=this.model?this.model+"":"(no model)";return"DCEListItemView("+a+")"}});h.prototype.templates=function(){var a=c.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({},f.prototype.templates,{titleBar:a})}();var i=b.DatasetListItemView.extend({className:b.DatasetListItemView.prototype.className+" dataset-collection-element",initialize:function(a){a.logger&&(this.logger=this.model.logger=a.logger),this.log("DatasetDCEListItemView.initialize:",a),b.DatasetListItemView.prototype.initialize.call(this,a)},_fetchModelDetails:function(){var a=this;return a.model.inReadyState()&&!a.model.hasDetails()?a.model.fetch({silent:!0}):jQuery.when()},toString:function(){var a=this.model?this.model+"":"(no model)";return"DatasetDCEListItemView("+a+")"}});i.prototype.templates=function(){var a=c.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({},b.DatasetListItemView.prototype.templates,{titleBar:a})}();var j=g.extend({className:g.prototype.className+" dataset-collection-element",_swapNewRender:function(a){g.prototype._swapNewRender.call(this,a);var b=this.model.get("state")||"ok";return this.$el.addClass("state-"+b),this.$el},toString:function(){var a=this.model?this.model+"":"(no model)";return"NestedDCDCEListItemView("+a+")"}});return{DCListItemView:g,DCEListItemView:h,DatasetDCEListItemView:i,NestedDCDCEListItemView:j}});
|
||||
define(["mvc/list/list-item","mvc/dataset/dataset-li","mvc/base-mvc","utils/localization"],function(a,b,c,d){"use strict";var e=a.FoldoutListItemView,f=a.ListItemView,g=e.extend({className:e.prototype.className+" dataset-collection",id:function(){return["dataset_collection",this.model.get("id")].join("-")},initialize:function(a){this.linkTarget=a.linkTarget||"_blank",this.hasUser=a.hasUser,e.prototype.initialize.call(this,a)},_setUpListeners:function(){e.prototype._setUpListeners.call(this),this.listenTo(this.model,"change",function(a){_.has(a.changed,"deleted")?this.render():_.has(a.changed,"element_count")&&this.$("> .title-bar .subtitle").replaceWith(this._renderSubtitle())})},_renderSubtitle:function(){return $(this.templates.subtitle(this.model.toJSON(),this))},_getFoldoutPanelOptions:function(){var a=e.prototype._getFoldoutPanelOptions.call(this);return _.extend(a,{linkTarget:this.linkTarget,hasUser:this.hasUser})},$selector:function(){return this.$("> .selector")},toString:function(){var a=this.model?this.model+"":"(no model)";return"DCListItemView("+a+")"}});g.prototype.templates=function(){var a=_.extend({},e.prototype.templates.warnings,{error:c.wrapTemplate(["<% if( model.error ){ %>",'<div class="errormessagesmall">',d("There was an error getting the data for this collection"),": <%- model.error %>","</div>","<% } %>"]),purged:c.wrapTemplate(["<% if( model.purged ){ %>",'<div class="purged-msg warningmessagesmall">',d("This collection has been deleted and removed from disk"),"</div>","<% } %>"]),deleted:c.wrapTemplate(["<% if( model.deleted && !model.purged ){ %>",'<div class="deleted-msg warningmessagesmall">',d("This collection has been deleted"),"</div>","<% } %>"])}),b=c.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"),f=c.wrapTemplate(['<div class="subtitle">','<% var countText = collection.element_count? ( collection.element_count + " " ) : ""; %>','<% if( collection.collection_type === "list" ){ %>',d("a list of <%- countText %>datasets"),'<% } else if( collection.collection_type === "paired" ){ %>',d("a pair of datasets"),'<% } else if( collection.collection_type === "list:paired" ){ %>',d("a list of <%- countText %>dataset pairs"),'<% } else if( collection.collection_type === "list:list" ){ %>',d("a list of <%- countText %>dataset lists"),"<% } %>","</div>"],"collection");return _.extend({},e.prototype.templates,{warnings:a,titleBar:b,subtitle:f})}();var h=f.extend({className:f.prototype.className+" dataset-collection-element",initialize:function(a){a.logger&&(this.logger=this.model.logger=a.logger),this.log("DCEListItemView.initialize:",a),f.prototype.initialize.call(this,a)},toString:function(){var a=this.model?this.model+"":"(no model)";return"DCEListItemView("+a+")"}});h.prototype.templates=function(){var a=c.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({},f.prototype.templates,{titleBar:a})}();var i=b.DatasetListItemView.extend({className:b.DatasetListItemView.prototype.className+" dataset-collection-element",initialize:function(a){a.logger&&(this.logger=this.model.logger=a.logger),this.log("DatasetDCEListItemView.initialize:",a),b.DatasetListItemView.prototype.initialize.call(this,a)},_fetchModelDetails:function(){var a=this;return a.model.inReadyState()&&!a.model.hasDetails()?a.model.fetch({silent:!0}):jQuery.when()},toString:function(){var a=this.model?this.model+"":"(no model)";return"DatasetDCEListItemView("+a+")"}});i.prototype.templates=function(){var a=c.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({},b.DatasetListItemView.prototype.templates,{titleBar:a})}();var j=g.extend({className:g.prototype.className+" dataset-collection-element",_swapNewRender:function(a){g.prototype._swapNewRender.call(this,a);var b=this.model.get("state")||"ok";return this.$el.addClass("state-"+b),this.$el},toString:function(){var a=this.model?this.model+"":"(no model)";return"NestedDCDCEListItemView("+a+")"}});return{DCListItemView:g,DCEListItemView:h,DatasetDCEListItemView:i,NestedDCDCEListItemView:j}});
|
||||
//# sourceMappingURL=../../../maps/mvc/collection/collection-li.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
define(["mvc/collection/collection-view","mvc/collection/collection-model","mvc/collection/collection-li-edit","mvc/base-mvc","utils/localization","ui/editable-text"],function(a,b,c,d,e){"use strict";var f=a.CollectionView,g=f.extend({DatasetDCEViewClass:c.DatasetDCEListItemEdit,NestedDCDCEViewClass:c.NestedDCDCEListItemEdit,initialize:function(a){f.prototype.initialize.call(this,a)},_setUpBehaviors:function(a){if(a=a||this.$el,f.prototype._setUpBehaviors.call(this,a),this.model&&Galaxy.user&&!Galaxy.user.isAnonymous()){var b=this,c="> .controls .name";a.find(c).attr("title",e("Click to rename collection")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(a){var d=b.model.get("name");a&&a!==d?(b.$el.find(c).text(a),b.model.save({name:a}).fail(function(){b.$el.find(c).text(b.model.previous("name"))})):b.$el.find(c).text(d)}})}},toString:function(){return"CollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),h=g.extend({DatasetDCEViewClass:c.DatasetDCEListItemEdit,toString:function(){return"ListCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),i=h.extend({toString:function(){return"PairCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),j=i.extend({_setUpBehaviors:function(a){f.prototype._setUpBehaviors.call(this,a)},toString:function(){return"NestedPairCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),k=g.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemEdit.extend({foldoutPanelClass:j}),toString:function(){return"ListOfPairsCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}});return{CollectionViewEdit:g,ListCollectionViewEdit:h,PairCollectionViewEdit:i,ListOfPairsCollectionViewEdit:k}});
|
||||
define(["mvc/collection/collection-view","mvc/collection/collection-model","mvc/collection/collection-li-edit","mvc/base-mvc","utils/localization","ui/editable-text"],function(a,b,c,d,e){"use strict";var f=a.CollectionView,g=f.extend({DatasetDCEViewClass:c.DatasetDCEListItemEdit,NestedDCDCEViewClass:c.NestedDCDCEListItemEdit,initialize:function(a){f.prototype.initialize.call(this,a)},_setUpBehaviors:function(a){if(a=a||this.$el,f.prototype._setUpBehaviors.call(this,a),this.model&&Galaxy.user&&!Galaxy.user.isAnonymous()){var b=this,c="> .controls .name";a.find(c).attr("title",e("Click to rename collection")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(a){var d=b.model.get("name");a&&a!==d?(b.$el.find(c).text(a),b.model.save({name:a}).fail(function(){b.$el.find(c).text(b.model.previous("name"))})):b.$el.find(c).text(d)}})}},toString:function(){return"CollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),h=g.extend({DatasetDCEViewClass:c.DatasetDCEListItemEdit,toString:function(){return"ListCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),i=h.extend({toString:function(){return"PairCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),j=i.extend({_setUpBehaviors:function(a){f.prototype._setUpBehaviors.call(this,a)},toString:function(){return"NestedPairCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),k=g.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemEdit.extend({foldoutPanelClass:j}),toString:function(){return"ListOfPairsCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}}),l=g.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemEdit.extend({foldoutPanelClass:j}),toString:function(){return"ListOfListsCollectionViewEdit("+(this.model?this.model.get("name"):"")+")"}});return{CollectionViewEdit:g,ListCollectionViewEdit:h,PairCollectionViewEdit:i,ListOfPairsCollectionViewEdit:k,ListOfListsCollectionViewEdit:l}});
|
||||
//# sourceMappingURL=../../../maps/mvc/collection/collection-view-edit.js.map
|
||||
@@ -1,2 +1,2 @@
|
||||
define(["mvc/list/list-view","mvc/collection/collection-model","mvc/collection/collection-li","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f="collections",g=a.ModelListPanel,h=g.extend({_logNamespace:f,className:g.prototype.className+" dataset-collection-panel",DatasetDCEViewClass:c.DatasetDCEListItemView,NestedDCDCEViewClass:c.NestedDCDCEListItemView,modelCollectionKey:"elements",initialize:function(a){g.prototype.initialize.call(this,a),this.linkTarget=a.linkTarget||"_blank",this.hasUser=a.hasUser,this.panelStack=[],this.parentName=a.parentName,this.foldoutStyle=a.foldoutStyle||"foldout"},_filterCollection:function(){return this.model.getVisibleContents()},_getItemViewClass:function(a){switch(a.get("element_type")){case"hda":return this.DatasetDCEViewClass;case"dataset_collection":return this.NestedDCDCEViewClass}throw new TypeError("Unknown element type:",a.get("element_type"))},_getItemViewOptions:function(a){var b=g.prototype._getItemViewOptions.call(this,a);return _.extend(b,{linkTarget:this.linkTarget,hasUser:this.hasUser,foldoutStyle:this.foldoutStyle})},_setUpItemViewListeners:function(a){var b=this;return g.prototype._setUpItemViewListeners.call(b,a),b.listenTo(a,{"expanded:drilldown":function(a,b){this._expandDrilldownPanel(b)},"collapsed:drilldown":function(a,b){this._collapseDrilldownPanel(b)}}),this},_expandDrilldownPanel:function(a){this.panelStack.push(a),this.$("> .controls").add(this.$list()).hide(),a.parentName=this.model.get("name"),this.$el.append(a.render().$el)},_collapseDrilldownPanel:function(){this.panelStack.pop(),this.render()},events:{"click .navigation .back":"close"},close:function(){this.$el.remove(),this.trigger("close")},toString:function(){return"CollectionView("+(this.model?this.model.get("name"):"")+")"}});h.prototype.templates=function(){var a=d.wrapTemplate(['<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 "),"<%- view.parentName %>","</a>","</div>",'<div class="title">','<div class="name"><%- collection.name || collection.element_identifier %></div>','<div class="subtitle">','<% if( collection.collection_type === "list" ){ %>',e("a list of datasets"),'<% } else if( collection.collection_type === "paired" ){ %>',e("a pair of datasets"),'<% } else if( collection.collection_type === "list:paired" ){ %>',e("a list of paired datasets"),"<% } %>","</div>","</div>","</div>"],"collection");return _.extend(_.clone(g.prototype.templates),{controls:a})}();var i=h.extend({DatasetDCEViewClass:c.DatasetDCEListItemView,toString:function(){return"ListCollectionView("+(this.model?this.model.get("name"):"")+")"}}),j=i.extend({toString:function(){return"PairCollectionView("+(this.model?this.model.get("name"):"")+")"}}),k=h.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemView.extend({foldoutPanelClass:j}),toString:function(){return"ListOfPairsCollectionView("+(this.model?this.model.get("name"):"")+")"}});return{CollectionView:h,ListCollectionView:i,PairCollectionView:j,ListOfPairsCollectionView:k}});
|
||||
define(["mvc/list/list-view","mvc/collection/collection-model","mvc/collection/collection-li","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f="collections",g=a.ModelListPanel,h=g.extend({_logNamespace:f,className:g.prototype.className+" dataset-collection-panel",DatasetDCEViewClass:c.DatasetDCEListItemView,NestedDCDCEViewClass:c.NestedDCDCEListItemView,modelCollectionKey:"elements",initialize:function(a){g.prototype.initialize.call(this,a),this.linkTarget=a.linkTarget||"_blank",this.hasUser=a.hasUser,this.panelStack=[],this.parentName=a.parentName,this.foldoutStyle=a.foldoutStyle||"foldout"},_filterCollection:function(){return this.model.getVisibleContents()},_getItemViewClass:function(a){switch(a.get("element_type")){case"hda":return this.DatasetDCEViewClass;case"dataset_collection":return this.NestedDCDCEViewClass}throw new TypeError("Unknown element type:",a.get("element_type"))},_getItemViewOptions:function(a){var b=g.prototype._getItemViewOptions.call(this,a);return _.extend(b,{linkTarget:this.linkTarget,hasUser:this.hasUser,foldoutStyle:this.foldoutStyle})},_setUpItemViewListeners:function(a){var b=this;return g.prototype._setUpItemViewListeners.call(b,a),b.listenTo(a,{"expanded:drilldown":function(a,b){this._expandDrilldownPanel(b)},"collapsed:drilldown":function(a,b){this._collapseDrilldownPanel(b)}}),this},_expandDrilldownPanel:function(a){this.panelStack.push(a),this.$("> .controls").add(this.$list()).hide(),a.parentName=this.model.get("name"),this.$el.append(a.render().$el)},_collapseDrilldownPanel:function(){this.panelStack.pop(),this.render()},events:{"click .navigation .back":"close"},close:function(){this.$el.remove(),this.trigger("close")},toString:function(){return"CollectionView("+(this.model?this.model.get("name"):"")+")"}});h.prototype.templates=function(){var a=d.wrapTemplate(['<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 "),"<%- view.parentName %>","</a>","</div>",'<div class="title">','<div class="name"><%- collection.name || collection.element_identifier %></div>','<div class="subtitle">','<% if( collection.collection_type === "list" ){ %>',e("a list of datasets"),'<% } else if( collection.collection_type === "paired" ){ %>',e("a pair of datasets"),'<% } else if( collection.collection_type === "list:paired" ){ %>',e("a list of paired datasets"),'<% } else if( collection.collection_type === "list:list" ){ %>',e("a list of dataset lists"),"<% } %>","</div>","</div>","</div>"],"collection");return _.extend(_.clone(g.prototype.templates),{controls:a})}();var i=h.extend({DatasetDCEViewClass:c.DatasetDCEListItemView,toString:function(){return"ListCollectionView("+(this.model?this.model.get("name"):"")+")"}}),j=i.extend({toString:function(){return"PairCollectionView("+(this.model?this.model.get("name"):"")+")"}}),k=h.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemView.extend({foldoutPanelClass:j}),toString:function(){return"ListOfPairsCollectionView("+(this.model?this.model.get("name"):"")+")"}}),l=h.extend({NestedDCDCEViewClass:c.NestedDCDCEListItemView.extend({foldoutPanelClass:j}),toString:function(){return"ListOfListsCollectionView("+(this.model?this.model.get("name"):"")+")"}});return{CollectionView:h,ListCollectionView:i,PairCollectionView:j,ListOfPairsCollectionView:k,ListOfListsCollectionView:l}});
|
||||
//# sourceMappingURL=../../../maps/mvc/collection/collection-view.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
define(["mvc/history/hdca-li","mvc/collection/collection-view-edit","ui/fa-icon-button","utils/localization"],function(a,b,c,d){"use strict";var e=a.HDCAListItemView,f=e.extend({_getFoldoutPanelClass:function(){switch(this.model.get("collection_type")){case"list":return b.ListCollectionViewEdit;case"paired":return b.PairCollectionViewEdit;case"list:paired":return b.ListOfPairsCollectionViewEdit}throw new TypeError("Uknown collection_type: "+this.model.get("collection_type"))},_renderPrimaryActions:function(){return this.log(this+"._renderPrimaryActions"),e.prototype._renderPrimaryActions.call(this).concat([this._renderDeleteButton()])},_renderDeleteButton:function(){var a=this,b=this.model.get("deleted");return c({title:d(b?"Dataset collection is already deleted":"Delete"),classes:"delete-btn",faIcon:"fa-times",disabled:b,onclick:function(){a.$el.find(".icon-btn.delete-btn").trigger("mouseout"),a.model.delete()}})},toString:function(){var a=this.model?this.model+"":"(no model)";return"HDCAListItemEdit("+a+")"}});return{HDCAListItemEdit:f}});
|
||||
define(["mvc/history/hdca-li","mvc/collection/collection-view-edit","ui/fa-icon-button","utils/localization"],function(a,b,c,d){"use strict";var e=a.HDCAListItemView,f=e.extend({_getFoldoutPanelClass:function(){switch(this.model.get("collection_type")){case"list":return b.ListCollectionViewEdit;case"paired":return b.PairCollectionViewEdit;case"list:paired":return b.ListOfPairsCollectionViewEdit;case"list:list":return b.ListOfListsCollectionViewEdit}throw new TypeError("Uknown collection_type: "+this.model.get("collection_type"))},_renderPrimaryActions:function(){return this.log(this+"._renderPrimaryActions"),e.prototype._renderPrimaryActions.call(this).concat([this._renderDeleteButton()])},_renderDeleteButton:function(){var a=this,b=this.model.get("deleted");return c({title:d(b?"Dataset collection is already deleted":"Delete"),classes:"delete-btn",faIcon:"fa-times",disabled:b,onclick:function(){a.$el.find(".icon-btn.delete-btn").trigger("mouseout"),a.model.delete()}})},toString:function(){var a=this.model?this.model+"":"(no model)";return"HDCAListItemEdit("+a+")"}});return{HDCAListItemEdit:f}});
|
||||
//# sourceMappingURL=../../../maps/mvc/history/hdca-li-edit.js.map
|
||||
@@ -1,2 +1,2 @@
|
||||
define(["mvc/dataset/states","mvc/collection/collection-li","mvc/collection/collection-view","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f=b.DCListItemView,g=f.extend({className:f.prototype.className+" history-content",_setUpListeners:function(){f.prototype._setUpListeners.call(this),this.listenTo(this.model,{"change:populated change:visible":function(){this.render()}})},_getFoldoutPanelClass:function(){switch(this.model.get("collection_type")){case"list":return c.ListCollectionView;case"paired":return c.PairCollectionView;case"list:paired":return c.ListOfPairsCollectionView}throw new TypeError("Uknown collection_type: "+this.model.get("collection_type"))},_swapNewRender:function(b){f.prototype._swapNewRender.call(this,b);var c=this.model.get("populated")?a.OK:a.RUNNING;return this.$el.addClass("state-"+c),this.$el},toString:function(){var a=this.model?this.model+"":"(no model)";return"HDCAListItemView("+a+")"}});return g.prototype.templates=function(){var a=_.extend({},f.prototype.templates.warnings,{hidden:d.wrapTemplate(["<% if( !collection.visible ){ %>",'<div class="hidden-msg warningmessagesmall">',e("This collection has been hidden"),"</div>","<% } %>"],"collection")}),b=d.wrapTemplate(['<div class="title-bar clear" tabindex="0">','<span class="state-icon"></span>','<div class="title">','<span class="hid"><%- collection.hid %></span> ','<span class="name"><%- collection.name %></span>',"</div>",'<div class="subtitle"></div>',"</div>"],"collection");return _.extend({},f.prototype.templates,{warnings:a,titleBar:b})}(),{HDCAListItemView:g}});
|
||||
define(["mvc/dataset/states","mvc/collection/collection-li","mvc/collection/collection-view","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f=b.DCListItemView,g=f.extend({className:f.prototype.className+" history-content",_setUpListeners:function(){f.prototype._setUpListeners.call(this),this.listenTo(this.model,{"change:populated change:visible":function(){this.render()}})},_getFoldoutPanelClass:function(){switch(this.model.get("collection_type")){case"list":return c.ListCollectionView;case"paired":return c.PairCollectionView;case"list:paired":return c.ListOfPairsCollectionView;case"list:list":return c.ListOfListsCollectionView}throw new TypeError("Uknown collection_type: "+this.model.get("collection_type"))},_swapNewRender:function(b){f.prototype._swapNewRender.call(this,b);var c=this.model.get("populated")?a.OK:a.RUNNING;return this.$el.addClass("state-"+c),this.$el},toString:function(){var a=this.model?this.model+"":"(no model)";return"HDCAListItemView("+a+")"}});return g.prototype.templates=function(){var a=_.extend({},f.prototype.templates.warnings,{hidden:d.wrapTemplate(["<% if( !collection.visible ){ %>",'<div class="hidden-msg warningmessagesmall">',e("This collection has been hidden"),"</div>","<% } %>"],"collection")}),b=d.wrapTemplate(['<div class="title-bar clear" tabindex="0">','<span class="state-icon"></span>','<div class="title">','<span class="hid"><%- collection.hid %></span> ','<span class="name"><%- collection.name %></span>',"</div>",'<div class="subtitle"></div>',"</div>"],"collection");return _.extend({},f.prototype.templates,{warnings:a,titleBar:b})}(),{HDCAListItemView:g}});
|
||||
//# sourceMappingURL=../../../maps/mvc/history/hdca-li.js.map
|
||||
@@ -1,2 +1,2 @@
|
||||
define(["mvc/collection/collection-model","mvc/history/history-content-model","utils/localization"],function(a,b){"use strict";function c(a){return function(b,c){return this.isNew()&&(c=c||{},c.url=this.urlRoot+this.get("history_id")+"/contents",b=b||{},b.type="dataset_collection"),a.call(this,b,c)}}var d=b.HistoryContentMixin,e=a.ListDatasetCollection,f=a.PairDatasetCollection,g=a.ListPairedDatasetCollection,h=e.extend(d).extend({defaults:_.extend(_.clone(e.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"list",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){e.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(e.prototype.save),toString:function(){return["HistoryListDatasetCollection(",this.get("name"),")"].join("")}}),i=f.extend(d).extend({defaults:_.extend(_.clone(f.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"paired",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){f.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(f.prototype.save),toString:function(){return["HistoryPairDatasetCollection(",this.get("name"),")"].join("")}}),j=g.extend(d).extend({defaults:_.extend(_.clone(g.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"list:paired",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){g.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(g.prototype.save),toString:function(){return["HistoryListPairedDatasetCollection(",this.get("name"),")"].join("")}});return{HistoryListDatasetCollection:h,HistoryPairDatasetCollection:i,HistoryListPairedDatasetCollection:j}});
|
||||
define(["mvc/collection/collection-model","mvc/history/history-content-model","utils/localization"],function(a,b){"use strict";function c(a){return function(b,c){return this.isNew()&&(c=c||{},c.url=this.urlRoot+this.get("history_id")+"/contents",b=b||{},b.type="dataset_collection"),a.call(this,b,c)}}var d=b.HistoryContentMixin,e=a.ListDatasetCollection,f=a.PairDatasetCollection,g=a.ListPairedDatasetCollection,h=a.ListOfListsDatasetCollection,i=e.extend(d).extend({defaults:_.extend(_.clone(e.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"list",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){e.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(e.prototype.save),toString:function(){return["HistoryListDatasetCollection(",this.get("name"),")"].join("")}}),j=f.extend(d).extend({defaults:_.extend(_.clone(f.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"paired",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){f.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(f.prototype.save),toString:function(){return["HistoryPairDatasetCollection(",this.get("name"),")"].join("")}}),k=g.extend(d).extend({defaults:_.extend(_.clone(g.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"list:paired",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){g.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(g.prototype.save),toString:function(){return["HistoryListPairedDatasetCollection(",this.get("name"),")"].join("")}}),l=h.extend(d).extend({defaults:_.extend(_.clone(h.prototype.defaults),{history_content_type:"dataset_collection",collection_type:"list:list",model_class:"HistoryDatasetCollectionAssociation"}),initialize:function(a,b){h.prototype.initialize.call(this,a,b),d.initialize.call(this,a,b)},save:c(h.prototype.save),toString:function(){return["HistoryListOfListsDatasetCollection(",this.get("name"),")"].join("")}});return{HistoryListDatasetCollection:i,HistoryPairDatasetCollection:j,HistoryListPairedDatasetCollection:k,HistoryListOfListsDatasetCollection:l}});
|
||||
//# sourceMappingURL=../../../maps/mvc/history/hdca-model.js.map
|
||||
@@ -1,2 +1,2 @@
|
||||
define(["mvc/history/history-content-model","mvc/history/hda-model","mvc/history/hdca-model","mvc/dataset/states","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f="history",g=Backbone.Collection.extend(e.LoggableMixin).extend({_logNamespace:f,model:function(a,d){if("dataset"===a.history_content_type)return new b.HistoryDatasetAssociation(a,d);if("dataset_collection"===a.history_content_type){switch(a.collection_type){case"list":return new c.HistoryListDatasetCollection(a,d);case"paired":return new c.HistoryPairDatasetCollection(a,d);case"list:paired":return new c.HistoryListPairedDatasetCollection(a,d)}return{validationError:"Unknown collection_type: "+a.history_content_type}}return{validationError:"Unknown history_content_type: "+a.history_content_type}},initialize:function(a,b){b=b||{},this.historyId=b.historyId,this.model.prototype.idAttribute="type_id",this.on("all",function(){this.debug(this+".event:",arguments)})},urlRoot:Galaxy.root+"api/histories",url:function(){return this.urlRoot+"/"+this.historyId+"/contents"},ids:function(){return this.map(function(a){return a.get("id")})},notReady:function(){return this.filter(function(a){return!a.inReadyState()})},running:function(){function a(a){return!a.inReadyState()}return new g(this.filter(a))},getByHid:function(a){return _.first(this.filter(function(b){return b.get("hid")===a}))},getVisible:function(a,b,c){c=c||[],this.debug("checking isVisible");var d=new g(this.filter(function(c){return c.isVisible(a,b)}));return _.each(c,function(a){_.isFunction(a)&&(d=new g(d.filter(a)))}),d},hidden:function(){function a(a){return a.hidden()}return new g(this.filter(a))},deleted:function(){function a(a){return a.get("deleted")}return new g(this.filter(a))},visibleAndUndeleted:function(){function a(a){return a.get("visible")&&!a.get("deleted")}return new g(this.filter(a))},haveDetails:function(){return this.all(function(a){return a.hasDetails()})},fetch:function(a){return a=a||{},a.data=_.defaults(a.data||{},{v:"dev"}),Backbone.Collection.prototype.fetch.call(this,a)},fetchUpdated:function(a,b){return b=b||{},b.traditional=!0,b.data=[{name:"v",value:"dev"}],a&&(b.data=b.data.concat(this._filtersFromMap({"update_time-ge":a.toISOString()}))),b.merge=!0,b.remove=!1,this.fetch(b)},_filtersFromMap:function(a){var b=[];return _.each(a,function(a,c){b.push({name:"q",value:c}),b.push({name:"qv",value:a})}),b},fetchAllDetails:function(a){a=a||{};var b={details:"all"};return a.data=a.data?_.extend(a.data,b):b,this.fetch(a)},fetchCollectionCounts:function(a){return a=a||{},a.data=_.defaults({keys:["type_id","element_count"].join(","),q:"history_content_type",qv:"dataset_collection"},a.data||{}),a.merge=!0,a.remove=!1,this.fetch(a)},ajaxQueue:function(a,b){var c=jQuery.Deferred(),d=this.length,e=[];if(!d)return c.resolve([]),c;var f=this.chain().reverse().map(function(g,h){return function(){var i=a.call(g,b);i.done(function(a){c.notify({curr:h,total:d,response:a,model:g})}),i.always(function(a){e.push(a),f.length?f.shift()():c.resolve(e)})}}).value();return f.shift()(),c},isCopyable:function(a){var b=["HistoryDatasetAssociation","HistoryDatasetCollectionAssociation"];return _.isObject(a)&&a.id&&_.contains(b,a.model_class)},copy:function(a){var b,c,d;_.isString(a)?(b=a,d="hda",c="dataset"):(b=a.id,d={HistoryDatasetAssociation:"hda",LibraryDatasetDatasetAssociation:"ldda",HistoryDatasetCollectionAssociation:"hdca"}[a.model_class]||"hda",c="hdca"===d?"dataset_collection":"dataset");var e=this,f=jQuery.post(this.url(),{content:b,source:d,type:c}).done(function(a){e.add([a])}).fail(function(){e.trigger("error",e,f,{},"Error copying contents",{type:c,id:b,source:d})});return f},matches:function(a){return this.filter(function(b){return b.matches(a)})},createHDCA:function(a,b,d){var e=this,f={list:c.HistoryListDatasetCollection,paired:c.HistoryPairDatasetCollection},g=new f[b]({history_id:this.historyId,name:d,element_identifiers:a});return g.save().done(function(){e.add(g)}).fail(function(a,b,c){e.trigger("error",a,b,c)})},clone:function(){var a=Backbone.Collection.prototype.clone.call(this);return a.historyId=this.historyId,a},print:function(){var a=this;a.each(function(b){a.debug(b),b.elements&&a.debug(" elements:",b.elements)})},toString:function(){return["HistoryContents(",[this.historyId,this.length].join(),")"].join("")}});return{HistoryContents:g}});
|
||||
define(["mvc/history/history-content-model","mvc/history/hda-model","mvc/history/hdca-model","mvc/dataset/states","mvc/base-mvc","utils/localization"],function(a,b,c,d,e){"use strict";var f="history",g=Backbone.Collection.extend(e.LoggableMixin).extend({_logNamespace:f,model:function(a,d){if("dataset"===a.history_content_type)return new b.HistoryDatasetAssociation(a,d);if("dataset_collection"===a.history_content_type){switch(a.collection_type){case"list":return new c.HistoryListDatasetCollection(a,d);case"paired":return new c.HistoryPairDatasetCollection(a,d);case"list:paired":return new c.HistoryListPairedDatasetCollection(a,d);case"list:list":return new c.HistoryListOfListsDatasetCollection(a,d)}var e="Unknown collection_type: "+a.collection_type;return console.warn(e,a),{validationError:e}}return{validationError:"Unknown history_content_type: "+a.history_content_type}},initialize:function(a,b){b=b||{},this.historyId=b.historyId,this.model.prototype.idAttribute="type_id",this.on("all",function(){this.debug(this+".event:",arguments)})},urlRoot:Galaxy.root+"api/histories",url:function(){return this.urlRoot+"/"+this.historyId+"/contents"},ids:function(){return this.map(function(a){return a.get("id")})},notReady:function(){return this.filter(function(a){return!a.inReadyState()})},running:function(){function a(a){return!a.inReadyState()}return new g(this.filter(a))},getByHid:function(a){return _.first(this.filter(function(b){return b.get("hid")===a}))},getVisible:function(a,b,c){c=c||[],this.debug("checking isVisible");var d=new g(this.filter(function(c){return c.isVisible(a,b)}));return _.each(c,function(a){_.isFunction(a)&&(d=new g(d.filter(a)))}),d},hidden:function(){function a(a){return a.hidden()}return new g(this.filter(a))},deleted:function(){function a(a){return a.get("deleted")}return new g(this.filter(a))},visibleAndUndeleted:function(){function a(a){return a.get("visible")&&!a.get("deleted")}return new g(this.filter(a))},haveDetails:function(){return this.all(function(a){return a.hasDetails()})},fetch:function(a){return a=a||{},a.data=_.defaults(a.data||{},{v:"dev"}),Backbone.Collection.prototype.fetch.call(this,a)},fetchUpdated:function(a,b){return b=b||{},b.traditional=!0,b.data=[{name:"v",value:"dev"}],a&&(b.data=b.data.concat(this._filtersFromMap({"update_time-ge":a.toISOString()}))),b.merge=!0,b.remove=!1,this.fetch(b)},_filtersFromMap:function(a){var b=[];return _.each(a,function(a,c){b.push({name:"q",value:c}),b.push({name:"qv",value:a})}),b},fetchAllDetails:function(a){a=a||{};var b={details:"all"};return a.data=a.data?_.extend(a.data,b):b,this.fetch(a)},fetchCollectionCounts:function(a){return a=a||{},a.data=_.defaults({keys:["type_id","element_count"].join(","),q:"history_content_type",qv:"dataset_collection"},a.data||{}),a.merge=!0,a.remove=!1,this.fetch(a)},ajaxQueue:function(a,b){var c=jQuery.Deferred(),d=this.length,e=[];if(!d)return c.resolve([]),c;var f=this.chain().reverse().map(function(g,h){return function(){var i=a.call(g,b);i.done(function(a){c.notify({curr:h,total:d,response:a,model:g})}),i.always(function(a){e.push(a),f.length?f.shift()():c.resolve(e)})}}).value();return f.shift()(),c},isCopyable:function(a){var b=["HistoryDatasetAssociation","HistoryDatasetCollectionAssociation"];return _.isObject(a)&&a.id&&_.contains(b,a.model_class)},copy:function(a){var b,c,d;_.isString(a)?(b=a,d="hda",c="dataset"):(b=a.id,d={HistoryDatasetAssociation:"hda",LibraryDatasetDatasetAssociation:"ldda",HistoryDatasetCollectionAssociation:"hdca"}[a.model_class]||"hda",c="hdca"===d?"dataset_collection":"dataset");var e=this,f=jQuery.ajax(this.url(),{method:"POST",contentType:"application/json",data:JSON.stringify({content:b,source:d,type:c})}).done(function(a){e.add([a])}).fail(function(){e.trigger("error",e,f,{},"Error copying contents",{type:c,id:b,source:d})});return f},matches:function(a){return this.filter(function(b){return b.matches(a)})},createHDCA:function(a,b,d){var e=this,f={list:c.HistoryListDatasetCollection,paired:c.HistoryPairDatasetCollection},g=new f[b]({history_id:this.historyId,name:d,element_identifiers:a});return g.save().done(function(){e.add(g)}).fail(function(a,b,c){e.trigger("error",a,b,c)})},clone:function(){var a=Backbone.Collection.prototype.clone.call(this);return a.historyId=this.historyId,a},print:function(){var a=this;a.each(function(b){a.debug(b),b.elements&&a.debug(" elements:",b.elements)})},toString:function(){return["HistoryContents(",[this.historyId,this.length].join(),")"].join("")}});return{HistoryContents:g}});
|
||||
//# sourceMappingURL=../../../maps/mvc/history/history-contents.js.map
|
||||
@@ -29,6 +29,7 @@
|
||||
* queries (term, below) */
|
||||
$("#email_select").select2({
|
||||
placeholder: "Select a user",
|
||||
width: "33%",
|
||||
ajax: {
|
||||
url: "${h.url_for(controller="/api/users", action="index")}",
|
||||
dataType: 'json',
|
||||
@@ -44,7 +45,7 @@
|
||||
$.each(data, function(index, item){
|
||||
results.push({
|
||||
id: item.email,
|
||||
text: item.email
|
||||
text: item.username + " : " + item.email
|
||||
});
|
||||
});
|
||||
return {
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<label>
|
||||
Email address of user to share with
|
||||
</label>
|
||||
<div style="float: left; width: 250px; margin-right: 10px;">
|
||||
<div style="float: left; width: 100%; margin-right: 10px;">
|
||||
<input type="hidden" id="email_select" name="email" >
|
||||
</input>
|
||||
</div>
|
||||
@@ -131,6 +131,7 @@
|
||||
|
||||
$("#email_select").select2({
|
||||
placeholder: "Select a user",
|
||||
width: "33%",
|
||||
multiple: false,
|
||||
initSelection: function(element, callback) {
|
||||
var data = [];
|
||||
|
||||
+60
-1
@@ -1,3 +1,5 @@
|
||||
import json
|
||||
from requests import put
|
||||
from base import api
|
||||
|
||||
TEST_USER_EMAIL = "user_for_users_index_test@bx.psu.edu"
|
||||
@@ -18,7 +20,64 @@ class UsersApiTestCase( api.ApiTestCase ):
|
||||
|
||||
def test_index_only_self_for_nonadmins( self ):
|
||||
self._setup_user( TEST_USER_EMAIL )
|
||||
with self._different_user( ):
|
||||
with self._different_user():
|
||||
all_users_response = self._get( "users" )
|
||||
# Non admin users can only see themselves
|
||||
assert len( all_users_response.json() ) == 1
|
||||
|
||||
def test_show( self ):
|
||||
user = self._setup_user( TEST_USER_EMAIL )
|
||||
with self._different_user( email=TEST_USER_EMAIL ):
|
||||
show_response = self.__show( user )
|
||||
self._assert_status_code_is( show_response, 200 )
|
||||
self.__assert_matches_user( user, show_response.json() )
|
||||
|
||||
def test_update( self ):
|
||||
new_name = 'linnaeus'
|
||||
user = self._setup_user( TEST_USER_EMAIL )
|
||||
not_the_user = self._setup_user( 'email@example.com' )
|
||||
with self._different_user( email=TEST_USER_EMAIL ):
|
||||
|
||||
# working
|
||||
update_response = self.__update( user, username=new_name )
|
||||
self._assert_status_code_is( update_response, 200 )
|
||||
update_json = update_response.json()
|
||||
self.assertEqual( update_json[ 'username' ], new_name )
|
||||
|
||||
# too short
|
||||
update_response = self.__update( user, username='mu' )
|
||||
self._assert_status_code_is( update_response, 400 )
|
||||
|
||||
# not them
|
||||
update_response = self.__update( not_the_user, username=new_name )
|
||||
self._assert_status_code_is( update_response, 403 )
|
||||
|
||||
# non-existent
|
||||
no_user_id = self.security.encode_id( 100 )
|
||||
update_url = self._api_url( "users/%s" % ( no_user_id ), use_key=True )
|
||||
update_response = put( update_url, data=json.dumps( dict( username=new_name ) ) )
|
||||
self._assert_status_code_is( update_response, 404 )
|
||||
|
||||
def test_admin_update( self ):
|
||||
new_name = 'flexo'
|
||||
user = self._setup_user( TEST_USER_EMAIL )
|
||||
|
||||
update_url = self._api_url( "users/%s" % ( user[ "id" ] ), params=dict( key=self.master_api_key ) )
|
||||
update_response = put( update_url, data=json.dumps( dict( username=new_name ) ) )
|
||||
self._assert_status_code_is( update_response, 200 )
|
||||
update_json = update_response.json()
|
||||
self.assertEqual( update_json[ 'username' ], new_name )
|
||||
|
||||
def __show( self, user ):
|
||||
return self._get( "users/%s" % ( user[ 'id' ] ) )
|
||||
|
||||
def __update( self, user, **new_data ):
|
||||
update_url = self._api_url( "users/%s" % ( user[ "id" ] ), use_key=True )
|
||||
# TODO: Awkward json.dumps required here because of https://trello.com/c/CQwmCeG6
|
||||
body = json.dumps( new_data )
|
||||
return put( update_url, data=body )
|
||||
|
||||
def __assert_matches_user( self, userA, userB ):
|
||||
self._assert_has_keys( userB, "id", "username", "total_disk_usage" )
|
||||
assert userA[ "id" ] == userB[ "id" ]
|
||||
assert userA[ "username" ] == userB[ "username" ]
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
User Manager testing.
|
||||
|
||||
Executable directly using: python -m test.unit.managers.test_UserManager
|
||||
"""
|
||||
import imp
|
||||
import os
|
||||
@@ -12,6 +15,7 @@ import sqlalchemy
|
||||
from six import string_types
|
||||
|
||||
from galaxy import exceptions, model
|
||||
from galaxy.managers import base as base_manager
|
||||
from galaxy.managers import histories, users
|
||||
|
||||
from .base import BaseTestCase
|
||||
@@ -215,6 +219,45 @@ class CurrentUserSerializerTestCase( BaseTestCase ):
|
||||
self.assertIsJsonifyable( serialized )
|
||||
|
||||
|
||||
# =============================================================================
|
||||
class UserDeserializerTestCase( BaseTestCase ):
|
||||
|
||||
def set_up_managers( self ):
|
||||
super( UserDeserializerTestCase, self ).set_up_managers()
|
||||
self.deserializer = users.UserDeserializer( self.app )
|
||||
|
||||
def _assertRaises_and_return_raised( self, exception_class, fn, *args, **kwargs ):
|
||||
try:
|
||||
fn( *args, **kwargs )
|
||||
except exception_class as exception:
|
||||
self.assertTrue( True )
|
||||
return exception
|
||||
assert False, '%s not raised' % ( exception_class.__name__ )
|
||||
|
||||
def test_username_validation( self ):
|
||||
user = self.user_manager.create( **user2_data )
|
||||
|
||||
# self.log( "usernames can be unicode" ) #TODO: nope they can't
|
||||
# self.deserializer.deserialize( user, { 'username': 'Σίσυφος' }, trans=self.trans )
|
||||
|
||||
self.log( "usernames must be long enough and with no non-hyphen punctuation" )
|
||||
exception = self._assertRaises_and_return_raised( base_manager.ModelDeserializingError,
|
||||
self.deserializer.deserialize, user, { 'username': 'ed' }, trans=self.trans )
|
||||
self.assertTrue( 'Public name must be at least' in str( exception ) )
|
||||
self.assertRaises( base_manager.ModelDeserializingError, self.deserializer.deserialize,
|
||||
user, { 'username': 'f.d.r.' }, trans=self.trans )
|
||||
|
||||
self.log( "usernames must be unique" )
|
||||
self.user_manager.create( **user3_data )
|
||||
self.assertRaises( base_manager.ModelDeserializingError, self.deserializer.deserialize,
|
||||
user, { 'username': 'user3' }, trans=self.trans )
|
||||
|
||||
self.log( "username should be updatable" )
|
||||
new_name = 'double-plus-good'
|
||||
self.deserializer.deserialize( user, { 'username': new_name }, trans=self.trans )
|
||||
self.assertEqual( self.user_manager.by_id( user.id ).username, new_name )
|
||||
|
||||
|
||||
# =============================================================================
|
||||
class AdminUserFilterParserTestCase( BaseTestCase ):
|
||||
|
||||
@@ -237,5 +280,4 @@ class AdminUserFilterParserTestCase( BaseTestCase ):
|
||||
|
||||
# =============================================================================
|
||||
if __name__ == '__main__':
|
||||
# or more generally, nosetests test_resourcemanagers.py -s -v
|
||||
unittest.main()
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
<tool id="Summary_Statistics1" name="Summary Statistics" version="1.1.0">
|
||||
<tool id="Summary_Statistics1" name="Summary Statistics" version="1.1.1">
|
||||
<description>for any numerical column</description>
|
||||
<edam_topics>
|
||||
<edam_topic>topic_2269</edam_topic>
|
||||
</edam_topics>
|
||||
<command interpreter="python">gsummary.py $input $out_file1 "$cond"</command>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.7.8">rpy2</requirement>
|
||||
</requirements>
|
||||
<stdio>
|
||||
<exit_code range="1" level="fatal" />
|
||||
</stdio>
|
||||
<command>ptyhon $__tool_directory__/gsummary.py "$input" "$out_file1" "$cond"</command>
|
||||
<inputs>
|
||||
<param format="tabular" name="input" type="data" label="Summary statistics on" help="Dataset missing? See TIP below"/>
|
||||
<param name="cond" size="30" type="text" value="c5" label="Column or expression" help="See syntax below">
|
||||
@@ -13,10 +19,6 @@
|
||||
<outputs>
|
||||
<data format="tabular" name="out_file1" />
|
||||
</outputs>
|
||||
<requirements>
|
||||
<requirement type="package" version="2.15.1">R</requirement>
|
||||
<requirement type="package">rpy</requirement>
|
||||
</requirements>
|
||||
<tests>
|
||||
<test>
|
||||
<param name="input" value="1.bed"/>
|
||||
|
||||
Reference in New Issue
Block a user