define(
function( require ) {
var Backbone = require( "backbone" ),
_ = require( "underscore" ),
fui = require( "app/fui" ),
datasetManagementViewTpl = require( "plugins/text!app/templates/dataset-management.tpl" );
var DataManagementView = Backbone.Marionette.ItemView.extend( {
initialize: function(){
_.bindAll( this, "onRemoveDataset", "onConfirmAction",
"onDatasetRemoveSuccess", "onDatasetRemoveFail",
"onTaskStatus", "onTaskFailed", "cleanup" );
this.listenTo( this.model, "change", this.onModelChange, this );
fui.vent.on( "action.delete.confirm", this.onConfirmRemoveDataset, this );
fui.vent.on( "action.backup.confirm", this.onConfirmBackupDataset, this );
fui.vent.on( "task.status", this.onTaskStatus, this );
fui.vent.on( "task.failed", this.onTaskFailed, this );
},
template: _.template( datasetManagementViewTpl ),
ui: {
actionConfirmModal: "#actionConfirmModal"
},
el: "#dataset-management",
events: {
"click .action.remove": "onRemoveDataset",
"click .action.confirm": "onConfirmAction",
"click .action.backup": "onBackupDataset"
},
templateHelpers: {
},
cleanup: function() {
this.unbind();
this.undelegateEvents();
this.model.unbind( 'change', this.onModelChange, this );
fui.vent.unbind( 'action.delete.confirm', this.onConfirmRemoveDataset, this );
},
/** If the model changes, update the summary */
onModelChange: function( event ) {
this.cleanup();
this.render();
},
/** User has requested a dataset be removed */
onRemoveDataset: function( e ) {
e.preventDefault();
var elem = $(e.currentTarget);
var dsId = elem.data( "ds-id" );
var msg = sprintf( "Are you sure you want to delete dataset %s
? This action cannot be reversed.", dsId );
this.showConfirmationModal( msg, dsId, "action.delete.confirm" );
},
/** User has requested a dataset be backed up */
onBackupDataset: function( e ) {
e.preventDefault();
var elem = $(e.currentTarget);
var dsId = elem.data( "ds-id" );
var msg = sprintf( "Are you sure you want to create a backup of dataset %s
? This action may take some time to complete", dsId );
this.showConfirmationModal( msg, dsId, "action.backup.confirm" );
},
/** Show a generic modal confirmation */
showConfirmationModal: function( msg, dsId, eventId ) {
this.ui.actionConfirmModal
.find( ".modal-body p" )
.html( msg );
this.ui.actionConfirmModal
.find( ".action.confirm" )
.data( "ds-id", dsId )
.data( "event-id", eventId );
this.clearFeedback();
this.ui.actionConfirmModal.modal( 'show' );
},
/** Generic response to confirming the current modal dialogue */
onConfirmAction: function( e ) {
e.preventDefault();
var elem = $(e.currentTarget);
var dsId = elem.data( "ds-id" );
var eventId = elem.data( "event-id" );
//this.ui.actionConfirmModal.modal( 'hide' );
$('.modal.in').modal('hide');
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
_.delay( function() {
fui.vent.trigger( eventId, dsId );
}, 100 );
},
/** User has confirmed that the dataset can be deleted */
onConfirmRemoveDataset: function( dsId ) {
var self = this;
fui.models
.fusekiServer
.dataset( dsId )
.deleteDataset()
.done( function( data ) {self.onDatasetRemoveSuccess( data, dsId );} )
.error( function( jqxhr, msg, err ) {self.onDatasetRemoveFail( jqxhr, msg, err, dsId );} );
},
/** Callback after successfully removing a dataset */
onDatasetRemoveSuccess: function( data, dsId ) {
this.model.loadServerDescription();
},
/** Removing the dataset did not work: notify the user */
onDatasetRemoveFail: function( jqxhr, msg, err, dsId ) {
this.feedbackArea( dsId )
.html( sprintf( "
Sorry, removing dataset %s did not work, because: '%s'
", dsId, err || msg ) ); }, /** User has confirmed backing up the dataset */ onConfirmBackupDataset: function( dsId ) { var self = this; fui.models .fusekiServer .dataset( dsId ) .backupDataset(); }, /** Remove any current feedback content */ clearFeedback: function() { $(".action.feedback").empty(); }, /** Long running task has updated status */ onTaskStatus: function( status ) { var task = status.task; var msg = sprintf( "Task %s started at %s%s
", task.operationType, task.taskDescription.started, status.finished ? sprintf( ", finished at %s", status.finished ) : " – ongoing" ); this.feedbackArea( status.dsId ) .html( msg ); }, /** Long running task has failed to start */ onTaskFailed: function( status ) { this.feedbackArea( status.dsId ) .html( sprintf( "Task %s failed: '%s'
", task.operationType, task.errorMessage )); }, /** Find the feedback area for a particular dataset */ feedbackArea: function( dsId ) { return $(sprintf( ".action[data-ds-id='%s']", dsId ) ) .parent() .siblings(".action.feedback"); } }); return DataManagementView; } );