'use strict'; define( [ 'app', 'marionette', 'backgrid', 'Logs/Files/FilenameCell', 'Cells/RelativeDateCell', 'Logs/Files/Collection', 'Logs/Files/Row', 'Logs/Files/ContentsView', 'Logs/Files/ContentsModel', 'Shared/Toolbar/ToolbarLayout' ], function (App, Marionette, Backgrid, FilenameCell, RelativeDateCell, LogFileCollection, LogFileRow, ContentsView, ContentsModel, ToolbarLayout) { return Marionette.Layout.extend({ template: 'Logs/Files/LayoutTemplate', regions: { toolbar : '#x-toolbar', grid : '#x-grid', contents : '#x-contents' }, columns: [ { name : 'filename', label: 'Filename', cell : FilenameCell }, { name : 'lastWriteTime', label: 'Last Write Time', cell : RelativeDateCell } ], initialize: function () { this.collection = new LogFileCollection(); App.vent.on(App.Commands.ShowLogFile, this._showLogFile, this); }, onShow: function () { this._fetchAndShow(); this._showToolbar(); this._showTable(); }, _fetchAndShow: function () { var self = this; var promise = this.collection.fetch(); promise.done(function () { self._showLogFile({ model: self.collection.first() }); }); }, _showToolbar: function () { var leftSideButtons = { type : 'default', storeState: false, items : [ { title : 'Refresh', icon : 'icon-refresh', ownerContext : this, callback : this._refreshLogs }, { title : 'Delete Log Files', icon : 'icon-trash', command : 'deleteLogFiles', successMessage : 'Log files have been deleted', errorMessage : 'Failed to delete log files', ownerContext : this, onSuccess: this._refreshLogs } ] }; 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' })); }, _showLogFile: function (options) { this.contents.close(); if (!options.model) { return; } var self = this; var filename = options.model.get('filename'); $.ajax({ url: '/log/' + filename, success: function (data) { var model = new ContentsModel({ filename: filename, contents: data }); self.contents.show(new ContentsView({ model: model })); } }); }, _refreshLogs: function () { this._fetchAndShow(); } }); });