Files
Prowlarr-Prowlarr/src/UI/System/Logs/Files/LogFileLayout.js
Keivan Beigi 428a1439e5 rjs -> webpack
2015-02-02 17:43:14 -08:00

108 lines
3.8 KiB
JavaScript

var vent = require('../../../vent');
var Marionette = require('marionette');
var Backgrid = require('backgrid');
var FilenameCell = require('./FilenameCell');
var RelativeDateCell = require('../../../Cells/RelativeDateCell');
var DownloadLogCell = require('./DownloadLogCell');
var LogFileRow = require('./Row');
var ContentsView = require('./ContentsView');
var ContentsModel = require('./ContentsModel');
var ToolbarLayout = require('../../../Shared/Toolbar/ToolbarLayout');
var LoadingView = require('../../../Shared/LoadingView');
require('../../../jQuery/jquery.spin');
module.exports = Marionette.Layout.extend({
template : 'System/Logs/Files/LogFileLayoutTemplate',
regions : {
toolbar : '#x-toolbar',
grid : '#x-grid',
contents : '#x-contents'
},
columns : [{
name : 'filename',
label : 'Filename',
cell : FilenameCell,
sortable : false
}, {
name : 'lastWriteTime',
label : 'Last Write Time',
cell : RelativeDateCell,
sortable : false
}, {
name : 'downloadUrl',
label : '',
cell : DownloadLogCell,
sortable : false
}],
initialize : function(options){
this.collection = options.collection;
this.deleteFilesCommand = options.deleteFilesCommand;
this.listenTo(vent, vent.Commands.ShowLogFile, this._fetchLogFileContents);
this.listenTo(vent, vent.Events.CommandComplete, this._commandComplete);
this.listenTo(this.collection, 'sync', this._collectionSynced);
this.collection.fetch();
},
onShow : function(){
this._showToolbar();
this._showTable();
},
_showToolbar : function(){
var leftSideButtons = {
type : 'default',
storeState : false,
items : [{
title : 'Refresh',
icon : 'icon-refresh',
ownerContext : this,
callback : this._refreshTable
}, {
title : 'Delete Log Files',
icon : 'icon-trash',
command : this.deleteFilesCommand,
successMessage : 'Log files have been deleted',
errorMessage : 'Failed to delete log files'
}]
};
this.toolbar.show(new ToolbarLayout({
left : [leftSideButtons],
context : this
}));
},
_showTable : function(){
this.grid.show(new Backgrid.Grid({
row : LogFileRow,
columns : this.columns,
collection : this.collection,
className : 'table table-hover'
}));
},
_collectionSynced : function(){
if(!this.collection.any()) {
return;
}
var model = this.collection.first();
this._fetchLogFileContents({model : model});
},
_fetchLogFileContents : function(options){
this.contents.show(new LoadingView());
var model = options.model;
var contentsModel = new ContentsModel(model.toJSON());
this.listenToOnce(contentsModel, 'sync', this._showDetails);
contentsModel.fetch({dataType : 'text'});
},
_showDetails : function(model){
this.contents.show(new ContentsView({model : model}));
},
_refreshTable : function(buttonContext){
this.contents.close();
var promise = this.collection.fetch();
if(buttonContext) {
buttonContext.ui.icon.spinForPromise(promise);
}
},
_commandComplete : function(options){
if(options.command.get('name') === this.deleteFilesCommand.toLowerCase()) {
this._refreshTable();
}
}
});