Merge branch 'dev' into azure-blob-objectstore

This commit is contained in:
Alexander Lenail
2016-07-18 12:09:38 -04:00
55 changed files with 751 additions and 379 deletions
@@ -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
};
});
+6 -3
View File
@@ -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">&raquo;</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">&laquo;</a>
</body>
+1 -1
View File
@@ -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 )
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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.
+14 -22
View File
@@ -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)
+6 -8
View File
@@ -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
+62 -13
View File
@@ -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
+2 -2
View File
@@ -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 ):
"""
+23 -1
View File
@@ -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
+7 -10
View File
@@ -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():
+43 -9
View File
@@ -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()
+11 -7
View File
@@ -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
+4 -3
View File
@@ -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 -2
View File
@@ -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):
+3 -3
View File
@@ -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":"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"}
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":"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"}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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 -1
View File
@@ -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
+2 -1
View File
@@ -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 {
+2 -1
View File
@@ -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
View File
@@ -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" ]
+43 -1
View File
@@ -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()
+8 -6
View File
@@ -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"/>