History panel, tags: use select2 for tag controls; Fix broken tags set implementation for HDAs; pack scripts

This commit is contained in:
Carl Eberhard
2013-11-01 15:25:41 -04:00
parent 6cdece1128
commit d297415e85
23 changed files with 178 additions and 233 deletions
@@ -13,7 +13,7 @@ log = logging.getLogger( __name__ )
class HistoryContentsController( BaseAPIController, UsesHistoryDatasetAssociationMixin, UsesHistoryMixin,
UsesLibraryMixin, UsesLibraryMixinItems ):
UsesLibraryMixin, UsesLibraryMixinItems, UsesTagsMixin ):
@web.expose_api_anonymous
def index( self, trans, history_id, ids=None, **kwd ):
-1
View File
@@ -259,7 +259,6 @@ var HDABaseView = Backbone.View.extend( LoggableMixin ).extend(
* @returns {jQuery} rendered DOM
*/
_render_body : function(){
console.debug( 'model:', this.model.toJSON() );
var $body = $( '<div>Error: unknown dataset state "' + this.model.get( 'state' ) + '".</div>' ),
// cheesy: get function by assumed matching name
renderFn = this[ '_render_body_' + this.model.get( 'state' ) ];
+7 -29
View File
@@ -380,6 +380,10 @@ var HDAEditView = hdaBase.HDABaseView.extend( LoggableMixin ).extend(
this._render_tagButton(),
this._render_annotateButton()
]);
this.tagsEditor = new TagsEditor({
model : this.model,
el : $body.find( '.tags-display' )
}).render();
return $body;
},
@@ -400,7 +404,7 @@ var HDAEditView = hdaBase.HDABaseView.extend( LoggableMixin ).extend(
'click .dataset-unhide' : function( ev ){ this.model.unhide(); return false; },
'click .dataset-purge' : 'confirmPurge',
'click .dataset-tag-btn' : 'loadAndDisplayTags',
'click .dataset-tag-btn' : 'displayTags',
'click .dataset-annotate-btn' : 'loadAndDisplayAnnotation'
},
@@ -415,34 +419,8 @@ var HDAEditView = hdaBase.HDABaseView.extend( LoggableMixin ).extend(
/** Find the tag area and, if initial: load the html (via ajax) for displaying them; otherwise, unhide/hide
*/
//TODO: into sub-MV
loadAndDisplayTags : function( event ){
this.log( this + '.loadAndDisplayTags', event );
var view = this,
$tagArea = this.$el.find( '.tags-display' ),
$tagElt = $tagArea.find( '.tags' );
// Show or hide tag area; if showing tag area and it's empty, fill it.
if( $tagArea.is( ":hidden" ) ){
if( !jQuery.trim( $tagElt.html() ) ){
// Need to fill tag element.
var xhr = $.ajax( this.urls.tags.get );
xhr.fail( function( xhr, status, error ){
view.log( "Tagging failed", xhr, status, error );
view.trigger( 'error', view, xhr, {}, _l( "Tagging failed" ) );
});
xhr.done( function( tagHtml ){
$tagElt.html( tagHtml );
$tagElt.find( "[title]" ).tooltip();
$tagArea.slideDown( view.fxSpeed );
});
} else {
// Tag element is filled; show.
$tagArea.slideDown( view.fxSpeed );
}
} else {
// Hide.
$tagArea.slideUp( view.fxSpeed );
}
displayTags : function( event ){
this.$el.find( '.tags-display' ).slideToggle( this.fxSpeed );
return false;
},
+3 -1
View File
@@ -50,7 +50,9 @@ var HistoryDatasetAssociation = Backbone.Model.extend( LoggableMixin ).extend(
meta_files : [],
misc_blurb : '',
misc_info : ''
misc_info : '',
tags : null
},
/** fetch location of this HDA's history in the api */
+7 -30
View File
@@ -637,6 +637,10 @@ var HistoryPanel = Backbone.View.extend( LoggableMixin ).extend(
this._render_tagButton(),
this._render_annotateButton()
]);
this.tagsEditor = new TagsEditor({
model : this.model,
el : $newRender.find( '.history-controls .tags-display' )
}).render();
}
this._setUpBehaviours( $newRender );
@@ -755,7 +759,7 @@ var HistoryPanel = Backbone.View.extend( LoggableMixin ).extend(
// ------------------------------------------------------------------------ panel events
/** event map */
events : {
'click .history-tag-button' : 'loadAndDisplayTags',
'click .history-tag-button' : 'displayTags',
//TODO: switch to common close (X) idiom
// allow (error) messages to be clicked away
'click .message-container' : 'clearMessages'
@@ -801,35 +805,8 @@ var HistoryPanel = Backbone.View.extend( LoggableMixin ).extend(
/** Find the tag area and, if initial: load the html (via ajax) for displaying them; otherwise, unhide/hide
*/
//TODO: into sub-MV
loadAndDisplayTags : function( event ){
var panel = this,
$tagArea = this.$el.find( '.history-controls .tags-display' ),
$tagElt = $tagArea.find( '.tags' );
// Show or hide tag area; if showing tag area and it's empty, fill it
if( $tagArea.is( ":hidden" ) ){
if( !jQuery.trim( $tagElt.html() ) ){
// Need to fill tag element.
var xhr = jQuery.ajax( panel.model.tagUrl() );
xhr.fail( function( xhr, status, error ){
panel.log( 'Error loading tag area html', xhr, error, status );
panel.trigger( 'error', panel, xhr, null, _l( "Error loading tags" ) );
});
xhr.done( function( html ){
//panel.log( panel + ' tag elt html (ajax)', tag_elt_html );
$tagElt.html( html );
$tagElt.find( "[title]" ).tooltip();
$tagArea.slideDown( panel.fxSpeed );
});
} else {
// Tag element already filled: show
$tagArea.slideDown( panel.fxSpeed );
}
} else {
// Currently shown: Hide
$tagArea.slideUp( panel.fxSpeed );
}
displayTags : function( event ){
this.$el.find( '.history-controls .tags-display' ).slideToggle( this.fxSpeed );
return false;
},
+85 -63
View File
@@ -1,66 +1,88 @@
/*==============================================================================
Backbone MV for Tags
TODO:
move rendering from tagging_common.py
move functionality from controllers/tag.py
?? - polymorph on class or simply class as attr?
==============================================================================*/
/** Single Tag model
*/
var Tag = BaseModel.extend( LoggableMixin ).extend({
/** */
var TagsEditor = Backbone.View.extend( LoggableMixin ).extend({
// uncomment this out see log messages
logger : console,
defaults : {
id : null,
itemClass : null
tagName : 'div',
className : 'tags-display',
/** */
initialize : function( options ){
//console.debug( this, options );
this.listenTo( this.model, 'change:tags', function(){
this.render();
});
},
toString : function(){
return 'Tag()';
}
/** */
render : function(){
var view = this;
this.$el.html( this.template() );
this.$el.find( '.tags-input' ).select2({
placeholder : 'Add tags',
width : '100%',
tags : function(){
// initialize possible tags in the dropdown based on all the tags the user has used so far
return view.getTagsUsed();
}
});
this._behaviors();
return this;
},
/** */
template : function(){
return [
//TODO: make prompt optional
'<label class="prompt">', _l( 'Tags' ), '</label>',
// set up initial tags by adding as CSV to input vals (necc. to init select2)
'<input class="tags-input" value="', this.tagsToCSV( this.model.get( 'tags' ) ), '" />'
].join( '' );
},
/** */
tagsToCSV : function( tagsArray ){
if( !_.isArray( tagsArray ) || _.isEmpty( tagsArray ) ){
return '';
}
return tagsArray.sort().join( ',' );
},
/** */
getTagsUsed : function(){
return _.map( Galaxy.currUser.get( 'tags_used' ), function( tag ){
return { id: tag, text: tag };
});
},
/** */
_behaviors : function(){
var view = this;
this.$el.find( '.tags-input' ).on( 'change', function( event ){
// save the model's tags in either remove or added event
view.model.save({ tags: event.val }, { silent: true });
// if it's new, add the tag to the users tags
if( event.added ){
view.addNewTagToTagsUsed( event.added.text );
}
});
},
/** */
addNewTagToTagsUsed : function( newTag ){
var tagsUsed = Galaxy.currUser.get( 'tags_used' );
if( !_.contains( tagsUsed, newTag ) ){
tagsUsed.push( newTag );
tagsUsed.sort();
Galaxy.currUser.set( 'tags_used', tagsUsed );
}
},
/** */
remove : function(){
this.$el.off();
Backbone.View.prototype.remove.call( this );
},
/** */
toString : function(){ return [ 'TagSetView(', this.model + '', ')' ].join(''); }
});
//------------------------------------------------------------------------------
/** Single Tag view
*/
var TagView = BaseView.extend( LoggableMixin ).extend({
// uncomment this out see log messages
logger : console,
toString : function(){
return 'TagView()';
}
});
//==============================================================================
/** A collection of Tags
*/
var TagCollection = Backbone.Collection.extend( LoggableMixin ).extend({
model : Tag,
// uncomment this out see log messages
logger : console,
toString : function(){
return 'TagCollection()';
}
});
//------------------------------------------------------------------------------
/** View for a TagCollection (and it's controls) - as per an hda's tag controls on the history panel
*/
var TagList = BaseView.extend( LoggableMixin ).extend({
// uncomment this out see log messages
logger : console,
toString : function(){
return 'TagList()';
}
});
+2
View File
@@ -490,3 +490,5 @@ var faIconButton = function( options ){
}
return $button;
};
//var hideUntilActivated;
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 -1
View File
@@ -1 +1 @@
var Tag=BaseModel.extend(LoggableMixin).extend({logger:console,defaults:{id:null,itemClass:null},toString:function(){return"Tag()"}});var TagView=BaseView.extend(LoggableMixin).extend({logger:console,toString:function(){return"TagView()"}});var TagCollection=Backbone.Collection.extend(LoggableMixin).extend({model:Tag,logger:console,toString:function(){return"TagCollection()"}});var TagList=BaseView.extend(LoggableMixin).extend({logger:console,toString:function(){return"TagList()"}});
var TagsEditor=Backbone.View.extend(LoggableMixin).extend({tagName:"div",className:"tags-display",initialize:function(a){this.listenTo(this.model,"change:tags",function(){this.render()})},render:function(){var a=this;this.$el.html(this.template());this.$el.find(".tags-input").select2({placeholder:"Add tags",width:"100%",tags:function(){return a.getTagsUsed()}});this._behaviors();return this},template:function(){return['<label class="prompt">',_l("Tags"),"</label>",'<input class="tags-input" value="',this.tagsToCSV(this.model.get("tags")),'" />'].join("")},tagsToCSV:function(a){if(!_.isArray(a)||_.isEmpty(a)){return""}return a.sort().join(",")},getTagsUsed:function(){return _.map(Galaxy.currUser.get("tags_used"),function(a){return{id:a,text:a}})},_behaviors:function(){var a=this;this.$el.find(".tags-input").on("change",function(b){a.model.save({tags:b.val},{silent:true});if(b.added){a.addNewTagToTagsUsed(b.added.text)}})},addNewTagToTagsUsed:function(a){var b=Galaxy.currUser.get("tags_used");if(!_.contains(b,a)){b.push(a);b.sort();Galaxy.currUser.set("tags_used",b)}},remove:function(){this.$el.off();Backbone.View.prototype.remove.call(this)},toString:function(){return["TagSetView(",this.model+"",")"].join("")}});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a["template-history-historyPanel"]=b(function(i,u,s,n,A){this.compilerInfo=[4,">= 1.0.0"];s=this.merge(s,i.helpers);A=A||{};var t="",k,f,r=this,e="function",c=s.blockHelperMissing,d=this.escapeExpression;function q(F,E){var B="",D,C;B+='\n <div class="history-name" title="';C={hash:{},inverse:r.noop,fn:r.program(2,p,E),data:E};if(D=s.local){D=D.call(F,C)}else{D=F.local;D=typeof D===e?D.apply(F):D}if(!s.local){D=c.call(F,D,C)}if(D||D===0){B+=D}B+='">\n ';if(D=s.name){D=D.call(F,{hash:{},data:E})}else{D=F.name;D=typeof D===e?D.apply(F):D}B+=d(D)+"\n </div>\n ";return B}function p(C,B){return"Click to rename history"}function o(E,D){var B="",C;B+='\n <div class="history-size">';if(C=s.nice_size){C=C.call(E,{hash:{},data:D})}else{C=E.nice_size;C=typeof C===e?C.apply(E):C}B+=d(C)+"</div>\n ";return B}function m(F,E){var B="",D,C;B+='\n <div class="warningmessagesmall"><strong>\n ';C={hash:{},inverse:r.noop,fn:r.program(7,l,E),data:E};if(D=s.local){D=D.call(F,C)}else{D=F.local;D=typeof D===e?D.apply(F):D}if(!s.local){D=c.call(F,D,C)}if(D||D===0){B+=D}B+="\n </strong></div>\n ";return B}function l(C,B){return"You are currently viewing a deleted history!"}function h(E,D){var B="",C;B+='\n \n <div class="';if(C=s.status){C=C.call(E,{hash:{},data:D})}else{C=E.status;C=typeof C===e?C.apply(E):C}B+=d(C)+'message">';if(C=s.message){C=C.call(E,{hash:{},data:D})}else{C=E.message;C=typeof C===e?C.apply(E):C}B+=d(C)+"</div>\n ";return B}function z(C,B){return"You are over your disk quota"}function y(C,B){return"Tool execution is on hold until your disk usage drops below your allocated quota"}function x(C,B){return"Tags"}function w(C,B){return"Annotation"}function v(C,B){return"Click to edit annotation"}function j(D,C){var B;if(B=s.annotation){B=B.call(D,{hash:{},data:C})}else{B=D.annotation;B=typeof B===e?B.apply(D):B}return d(B)}function g(C,B){return"Your history is empty. Click 'Get Data' on the left pane to start"}t+='<div class="history-controls">\n\n <div class="history-title">\n ';k=s["if"].call(u,u.name,{hash:{},inverse:r.noop,fn:r.program(1,q,A),data:A});if(k||k===0){t+=k}t+='\n </div>\n\n <div class="history-subtitle clear">\n ';k=s["if"].call(u,u.nice_size,{hash:{},inverse:r.noop,fn:r.program(4,o,A),data:A});if(k||k===0){t+=k}t+='\n\n <div class="history-secondary-actions">\n </div>\n </div>\n\n ';k=s["if"].call(u,u.deleted,{hash:{},inverse:r.noop,fn:r.program(6,m,A),data:A});if(k||k===0){t+=k}t+='\n\n <div class="message-container">\n ';k=s["if"].call(u,u.message,{hash:{},inverse:r.noop,fn:r.program(9,h,A),data:A});if(k||k===0){t+=k}t+='\n </div>\n\n <div class="quota-message errormessage">\n ';f={hash:{},inverse:r.noop,fn:r.program(11,z,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+=".\n ";f={hash:{},inverse:r.noop,fn:r.program(13,y,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+='.\n </div>\n \n \n \n <div class="tags-display">\n <label class="prompt">';f={hash:{},inverse:r.noop,fn:r.program(15,x,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+='</label>\n <div class="tags"></div>\n </div>\n\n \n <div class="annotation-display">\n <label class="prompt">';f={hash:{},inverse:r.noop,fn:r.program(17,w,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+='</label>\n <div class="annotation" title="';f={hash:{},inverse:r.noop,fn:r.program(19,v,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+='"\n \n >';k=s["if"].call(u,u.annotation,{hash:{},inverse:r.noop,fn:r.program(21,j,A),data:A});if(k||k===0){t+=k}t+='</div>\n </div>\n\n </div>\n\n \n <div class="datasets-list"></div>\n\n <div class="empty-history-message infomessagesmall">\n ';f={hash:{},inverse:r.noop,fn:r.program(23,g,A),data:A};if(k=s.local){k=k.call(u,f)}else{k=u.local;k=typeof k===e?k.apply(u):k}if(!s.local){k=c.call(u,k,f)}if(k||k===0){t+=k}t+="\n </div>";return t})})();
(function(){var b=Handlebars.template,a=Handlebars.templates=Handlebars.templates||{};a["template-history-historyPanel"]=b(function(h,t,r,m,z){this.compilerInfo=[4,">= 1.0.0"];r=this.merge(r,h.helpers);z=z||{};var s="",j,f,q=this,e="function",c=r.blockHelperMissing,d=this.escapeExpression;function p(E,D){var A="",C,B;A+='\n <div class="history-name" title="';B={hash:{},inverse:q.noop,fn:q.program(2,o,D),data:D};if(C=r.local){C=C.call(E,B)}else{C=E.local;C=typeof C===e?C.apply(E):C}if(!r.local){C=c.call(E,C,B)}if(C||C===0){A+=C}A+='">\n ';if(C=r.name){C=C.call(E,{hash:{},data:D})}else{C=E.name;C=typeof C===e?C.apply(E):C}A+=d(C)+"\n </div>\n ";return A}function o(B,A){return"Click to rename history"}function n(D,C){var A="",B;A+='\n <div class="history-size">';if(B=r.nice_size){B=B.call(D,{hash:{},data:C})}else{B=D.nice_size;B=typeof B===e?B.apply(D):B}A+=d(B)+"</div>\n ";return A}function l(E,D){var A="",C,B;A+='\n <div class="warningmessagesmall"><strong>\n ';B={hash:{},inverse:q.noop,fn:q.program(7,k,D),data:D};if(C=r.local){C=C.call(E,B)}else{C=E.local;C=typeof C===e?C.apply(E):C}if(!r.local){C=c.call(E,C,B)}if(C||C===0){A+=C}A+="\n </strong></div>\n ";return A}function k(B,A){return"You are currently viewing a deleted history!"}function g(D,C){var A="",B;A+='\n \n <div class="';if(B=r.status){B=B.call(D,{hash:{},data:C})}else{B=D.status;B=typeof B===e?B.apply(D):B}A+=d(B)+'message">';if(B=r.message){B=B.call(D,{hash:{},data:C})}else{B=D.message;B=typeof B===e?B.apply(D):B}A+=d(B)+"</div>\n ";return A}function y(B,A){return"You are over your disk quota"}function x(B,A){return"Tool execution is on hold until your disk usage drops below your allocated quota"}function w(B,A){return"Annotation"}function v(B,A){return"Click to edit annotation"}function u(C,B){var A;if(A=r.annotation){A=A.call(C,{hash:{},data:B})}else{A=C.annotation;A=typeof A===e?A.apply(C):A}return d(A)}function i(B,A){return"Your history is empty. Click 'Get Data' on the left pane to start"}s+='<div class="history-controls">\n\n <div class="history-title">\n ';j=r["if"].call(t,t.name,{hash:{},inverse:q.noop,fn:q.program(1,p,z),data:z});if(j||j===0){s+=j}s+='\n </div>\n\n <div class="history-subtitle clear">\n ';j=r["if"].call(t,t.nice_size,{hash:{},inverse:q.noop,fn:q.program(4,n,z),data:z});if(j||j===0){s+=j}s+='\n\n <div class="history-secondary-actions">\n </div>\n </div>\n\n ';j=r["if"].call(t,t.deleted,{hash:{},inverse:q.noop,fn:q.program(6,l,z),data:z});if(j||j===0){s+=j}s+='\n\n <div class="message-container">\n ';j=r["if"].call(t,t.message,{hash:{},inverse:q.noop,fn:q.program(9,g,z),data:z});if(j||j===0){s+=j}s+='\n </div>\n\n <div class="quota-message errormessage">\n ';f={hash:{},inverse:q.noop,fn:q.program(11,y,z),data:z};if(j=r.local){j=j.call(t,f)}else{j=t.local;j=typeof j===e?j.apply(t):j}if(!r.local){j=c.call(t,j,f)}if(j||j===0){s+=j}s+=".\n ";f={hash:{},inverse:q.noop,fn:q.program(13,x,z),data:z};if(j=r.local){j=j.call(t,f)}else{j=t.local;j=typeof j===e?j.apply(t):j}if(!r.local){j=c.call(t,j,f)}if(j||j===0){s+=j}s+='.\n </div>\n \n \n \n <div class="tags-display"></div>\n\n \n <div class="annotation-display">\n <label class="prompt">';f={hash:{},inverse:q.noop,fn:q.program(15,w,z),data:z};if(j=r.local){j=j.call(t,f)}else{j=t.local;j=typeof j===e?j.apply(t):j}if(!r.local){j=c.call(t,j,f)}if(j||j===0){s+=j}s+='</label>\n <div class="annotation" title="';f={hash:{},inverse:q.noop,fn:q.program(17,v,z),data:z};if(j=r.local){j=j.call(t,f)}else{j=t.local;j=typeof j===e?j.apply(t):j}if(!r.local){j=c.call(t,j,f)}if(j||j===0){s+=j}s+='"\n \n >';j=r["if"].call(t,t.annotation,{hash:{},inverse:q.noop,fn:q.program(19,u,z),data:z});if(j||j===0){s+=j}s+='</div>\n </div>\n\n </div>\n\n \n <div class="datasets-list"></div>\n\n <div class="empty-history-message infomessagesmall">\n ';f={hash:{},inverse:q.noop,fn:q.program(21,i,z),data:z};if(j=r.local){j=j.call(t,f)}else{j=t.local;j=typeof j===e?j.apply(t):j}if(!r.local){j=c.call(t,j,f)}if(j||j===0){s+=j}s+="\n </div>";return s})})();
@@ -108,15 +108,9 @@ function program14(depth0,data) {
var buffer = "", stack1, options;
buffer += "\n "
+ "\n <div class=\"tags-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"tags\"></div>\n </div>\n\n "
+ "\n <div class=\"tags-display\"></div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
@@ -126,19 +120,19 @@ function program14(depth0,data) {
else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "-annotation\" class=\"annotation editable-text\"\n title=\"";
options = {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\"></div>\n </div>\n\n <div class=\"dataset-display-applications\">\n ";
stack1 = helpers.each.call(depth0, depth0.display_apps, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers.each.call(depth0, depth0.display_apps, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n\n ";
stack1 = helpers.each.call(depth0, depth0.display_types, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers.each.call(depth0, depth0.display_types, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </div>\n\n <div class=\"dataset-peek\">\n ";
stack1 = helpers['if'].call(depth0, depth0.peek, {hash:{},inverse:self.noop,fn:self.program(25, program25, data),data:data});
stack1 = helpers['if'].call(depth0, depth0.peek, {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </div>\n\n ";
return buffer;
@@ -146,22 +140,16 @@ function program14(depth0,data) {
function program15(depth0,data) {
return "Tags";
return "Annotation";
}
function program17(depth0,data) {
return "Annotation";
}
function program19(depth0,data) {
return "Edit dataset annotation";
}
function program21(depth0,data) {
function program19(depth0,data) {
var buffer = "", stack1;
buffer += "\n <div class=\"display-application\">\n <span class=\"display-application-location\">";
@@ -169,12 +157,12 @@ function program21(depth0,data) {
else { stack1 = depth0.label; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "</span>\n <span class=\"display-application-links\">\n ";
stack1 = helpers.each.call(depth0, depth0.links, {hash:{},inverse:self.noop,fn:self.program(22, program22, data),data:data});
stack1 = helpers.each.call(depth0, depth0.links, {hash:{},inverse:self.noop,fn:self.program(20, program20, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </span>\n </div>\n ";
return buffer;
}
function program22(depth0,data) {
function program20(depth0,data) {
var buffer = "", stack1, options;
buffer += "\n <a target=\"";
@@ -186,7 +174,7 @@ function program22(depth0,data) {
else { stack1 = depth0.href; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "\">";
options = {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
@@ -194,7 +182,7 @@ function program22(depth0,data) {
buffer += "</a>\n ";
return buffer;
}
function program23(depth0,data) {
function program21(depth0,data) {
var stack1;
if (stack1 = helpers.text) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
@@ -202,7 +190,7 @@ function program23(depth0,data) {
return escapeExpression(stack1);
}
function program25(depth0,data) {
function program23(depth0,data) {
var buffer = "", stack1;
buffer += "\n <pre class=\"peek\">";
@@ -886,22 +874,16 @@ function program13(depth0,data) {
function program15(depth0,data) {
return "Tags";
return "Annotation";
}
function program17(depth0,data) {
return "Annotation";
}
function program19(depth0,data) {
return "Click to edit annotation";
}
function program21(depth0,data) {
function program19(depth0,data) {
var stack1;
if (stack1 = helpers.annotation) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
@@ -909,7 +891,7 @@ function program21(depth0,data) {
return escapeExpression(stack1);
}
function program23(depth0,data) {
function program21(depth0,data) {
return "Your history is empty. Click 'Get Data' on the left pane to start";
@@ -941,33 +923,27 @@ function program23(depth0,data) {
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += ".\n </div>\n \n "
+ "\n "
+ "\n <div class=\"tags-display\">\n <label class=\"prompt\">";
+ "\n <div class=\"tags-display\"></div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"tags\"></div>\n </div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"annotation\" title=\"";
options = {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\"\n "
+ "\n >";
stack1 = helpers['if'].call(depth0, depth0.annotation, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers['if'].call(depth0, depth0.annotation, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</div>\n </div>\n\n </div>"
+ "\n\n "
+ "\n <div class=\"datasets-list\"></div>\n\n <div class=\"empty-history-message infomessagesmall\">\n ";
options = {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
@@ -108,15 +108,9 @@ function program14(depth0,data) {
var buffer = "", stack1, options;
buffer += "\n "
+ "\n <div class=\"tags-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"tags\"></div>\n </div>\n\n "
+ "\n <div class=\"tags-display\"></div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
@@ -126,19 +120,19 @@ function program14(depth0,data) {
else { stack1 = depth0.id; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "-annotation\" class=\"annotation editable-text\"\n title=\"";
options = {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\"></div>\n </div>\n\n <div class=\"dataset-display-applications\">\n ";
stack1 = helpers.each.call(depth0, depth0.display_apps, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers.each.call(depth0, depth0.display_apps, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n\n ";
stack1 = helpers.each.call(depth0, depth0.display_types, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers.each.call(depth0, depth0.display_types, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </div>\n\n <div class=\"dataset-peek\">\n ";
stack1 = helpers['if'].call(depth0, depth0.peek, {hash:{},inverse:self.noop,fn:self.program(25, program25, data),data:data});
stack1 = helpers['if'].call(depth0, depth0.peek, {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </div>\n\n ";
return buffer;
@@ -146,22 +140,16 @@ function program14(depth0,data) {
function program15(depth0,data) {
return "Tags";
return "Annotation";
}
function program17(depth0,data) {
return "Annotation";
}
function program19(depth0,data) {
return "Edit dataset annotation";
}
function program21(depth0,data) {
function program19(depth0,data) {
var buffer = "", stack1;
buffer += "\n <div class=\"display-application\">\n <span class=\"display-application-location\">";
@@ -169,12 +157,12 @@ function program21(depth0,data) {
else { stack1 = depth0.label; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "</span>\n <span class=\"display-application-links\">\n ";
stack1 = helpers.each.call(depth0, depth0.links, {hash:{},inverse:self.noop,fn:self.program(22, program22, data),data:data});
stack1 = helpers.each.call(depth0, depth0.links, {hash:{},inverse:self.noop,fn:self.program(20, program20, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\n </span>\n </div>\n ";
return buffer;
}
function program22(depth0,data) {
function program20(depth0,data) {
var buffer = "", stack1, options;
buffer += "\n <a target=\"";
@@ -186,7 +174,7 @@ function program22(depth0,data) {
else { stack1 = depth0.href; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
buffer += escapeExpression(stack1)
+ "\">";
options = {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
@@ -194,7 +182,7 @@ function program22(depth0,data) {
buffer += "</a>\n ";
return buffer;
}
function program23(depth0,data) {
function program21(depth0,data) {
var stack1;
if (stack1 = helpers.text) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
@@ -202,7 +190,7 @@ function program23(depth0,data) {
return escapeExpression(stack1);
}
function program25(depth0,data) {
function program23(depth0,data) {
var buffer = "", stack1;
buffer += "\n <pre class=\"peek\">";
@@ -87,22 +87,16 @@ function program13(depth0,data) {
function program15(depth0,data) {
return "Tags";
return "Annotation";
}
function program17(depth0,data) {
return "Annotation";
}
function program19(depth0,data) {
return "Click to edit annotation";
}
function program21(depth0,data) {
function program19(depth0,data) {
var stack1;
if (stack1 = helpers.annotation) { stack1 = stack1.call(depth0, {hash:{},data:data}); }
@@ -110,7 +104,7 @@ function program21(depth0,data) {
return escapeExpression(stack1);
}
function program23(depth0,data) {
function program21(depth0,data) {
return "Your history is empty. Click 'Get Data' on the left pane to start";
@@ -142,33 +136,27 @@ function program23(depth0,data) {
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += ".\n </div>\n \n "
+ "\n "
+ "\n <div class=\"tags-display\">\n <label class=\"prompt\">";
+ "\n <div class=\"tags-display\"></div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"tags\"></div>\n </div>\n\n "
+ "\n <div class=\"annotation-display\">\n <label class=\"prompt\">";
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</label>\n <div class=\"annotation\" title=\"";
options = {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(17, program17, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "\"\n "
+ "\n >";
stack1 = helpers['if'].call(depth0, depth0.annotation, {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data});
stack1 = helpers['if'].call(depth0, depth0.annotation, {hash:{},inverse:self.noop,fn:self.program(19, program19, data),data:data});
if(stack1 || stack1 === 0) { buffer += stack1; }
buffer += "</div>\n </div>\n\n </div>"
+ "\n\n "
+ "\n <div class=\"datasets-list\"></div>\n\n <div class=\"empty-history-message infomessagesmall\">\n ";
options = {hash:{},inverse:self.noop,fn:self.program(23, program23, data),data:data};
options = {hash:{},inverse:self.noop,fn:self.program(21, program21, data),data:data};
if (stack1 = helpers.local) { stack1 = stack1.call(depth0, options); }
else { stack1 = depth0.local; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; }
if (!helpers.local) { stack1 = blockHelperMissing.call(depth0, stack1, options); }
+1 -4
View File
@@ -98,10 +98,7 @@
{{#unless deleted }}
{{! TODO: move to mvc/tag.js }}
<div class="tags-display">
<label class="prompt">{{#local}}Tags{{/local}}</label>
<div class="tags"></div>
</div>
<div class="tags-display"></div>
{{! TODO: move to mvc/annotations.js }}
<div class="annotation-display">
@@ -40,10 +40,7 @@
{{! tags and annotations }}
{{! TODO: move to mvc/tag.js }}
<div class="tags-display">
<label class="prompt">{{#local}}Tags{{/local}}</label>
<div class="tags"></div>
</div>
<div class="tags-display"></div>
{{! TODO: move to mvc/annotations.js }}
<div class="annotation-display">
+3 -1
View File
@@ -1524,6 +1524,8 @@ div.permissionContainer{padding-left:20px}
.history-panel .history-controls .quota-message{display:none;margin:8px 0px 5px 0px}
.history-panel .history-controls .tags-display,.history-panel .history-controls .annotation-display{display:none;margin-bottom:8px}.history-panel .history-controls .tags-display label,.history-panel .history-controls .annotation-display label{display:block;margin:0px;padding:0px;font-weight:normal;font-style:italic;font-size:90%;color:#555}
.history-panel .history-controls .tags-display label:after,.history-panel .history-controls .annotation-display label:after{content:':'}
.history-panel .history-controls .tags-display .select2-container{min-width:0px}.history-panel .history-controls .tags-display .select2-container .select2-choices{border-radius:3px}
.history-panel .history-controls .tags-display input{border-radius:3px}
.history-panel .history-controls .annotation-display .annotation{border-radius:3px;border:1px solid fadout(#999, 50%);padding:4px;white-space:pre-line}
.history-panel .history-controls .annotation-display textarea{margin:0px 0px 2px 0px;display:block;border-radius:3px;width:100%}
.history-panel .dataset{border-width:1px 0px 0px 0px}
@@ -1550,7 +1552,7 @@ div.permissionContainer{padding-left:20px}
.dataset .dataset-body .dataset-actions .left .icon-btn-group{margin-right:2px}.dataset .dataset-body .dataset-actions .left .icon-btn-group .icon-btn{margin-right:0}
.dataset .dataset-body .dataset-actions .left:not(:empty){margin-bottom:8px}
.dataset .dataset-body .dataset-actions .right{float:right}.dataset .dataset-body .dataset-actions .right .icon-btn{margin-left:2px}
.dataset .dataset-body .tags-display{display:none;margin-bottom:8px}
.dataset .dataset-body .tags-display{display:none;margin-bottom:8px}.dataset .dataset-body .tags-display .select2-container{min-width:0px}.dataset .dataset-body .tags-display .select2-container .select2-choices{border-radius:3px}
.dataset .dataset-body .annotation-display{display:none;margin-bottom:8px}.dataset .dataset-body .annotation-display .annotation{border-radius:3px;border:1px solid rgba(153,153,153,0.30000000000000004);padding:4px;white-space:pre-line}
.dataset .dataset-body .annotation-display textarea{margin:0px 0px 2px 0px;display:block;border-radius:3px;width:100%}
.dataset .dataset-body .dataset-display-applications .display-application:last-child{margin-bottom:8px}
+17
View File
@@ -134,6 +134,17 @@
content: ':';
}
}
.tags-display {
.select2-container {
min-width: 0px;
.select2-choices {
border-radius: 3px;
}
}
input {
border-radius: 3px;
}
}
.annotation-display {
.annotation {
border-radius: 3px;
@@ -321,6 +332,12 @@
.tags-display {
display: none;
.vertical-spacing;
.select2-container {
min-width: 0px;
.select2-choices {
border-radius: 3px;
}
}
}
.annotation-display {
display: none;
@@ -90,7 +90,7 @@ ${history_panel_javascripts()}
## ----------------------------------------------------------------------------- generic 'base' function
<%def name="history_panel_javascripts()">
${h.js(
"libs/jquery/jquery.autocomplete", "galaxy.autocom_tagging"
"mvc/tags"
)}
##TODO: concat these