diff --git a/lib/dashboard.js b/lib/dashboard.js index cdd2a81..65267f7 100644 --- a/lib/dashboard.js +++ b/lib/dashboard.js @@ -15,7 +15,6 @@ var THROTTLE_TIMEOUT = 150; var Dashboard = function Dashboard(options) { this.options = options || {}; this.views = {}; - this.settings = options.settings; this.screen = blessed.screen({ smartCSR: true, @@ -31,7 +30,7 @@ var Dashboard = function Dashboard(options) { }; Dashboard.prototype._createViews = function () { - this.layouts = generateLayouts(this.options.layoutsFile); + this.layouts = generateLayouts(this.options.layoutsFile, this.options.settings); this.views = []; // container prevents stream view scrolling from interfering with side views @@ -136,11 +135,6 @@ Dashboard.prototype._showLayout = function (id) { var View = views.getConstructor(layoutConfig.view); if (View) { - if (this.settings[layoutConfig.view.type]) { - layoutConfig = _.merge(layoutConfig, { - view: this.settings[layoutConfig.view.type] - }); - } var view = new View({ parent: this.container, logProvider: this.logProvider, diff --git a/lib/generate-layouts.js b/lib/generate-layouts.js index 091b82c..e8a1642 100644 --- a/lib/generate-layouts.js +++ b/lib/generate-layouts.js @@ -1,11 +1,11 @@ "use strict"; + var _ = require("lodash"); var assert = require("assert"); var path = require("path"); var defaultLayoutConfig = require("./default-layout-config"); var validate = require("jsonschema").validate; var layoutConfigSchema = require("./layout-config-schema.json"); -/* eslint-disable no-magic-numbers */ // Each layout consists of vertical panels, that contains its position and horizontal views. // Flex-like positions of panels and views defined by 'grow' and 'size' parameters. @@ -108,7 +108,7 @@ var createLayout = function (panelsConfig) { }, []); }; -module.exports = function generateLayouts(layoutsFile) { +var loadConfigs = function (layoutsFile) { var layoutConfig = defaultLayoutConfig; if (layoutsFile) { /* eslint-disable global-require */ @@ -124,6 +124,23 @@ module.exports = function generateLayouts(layoutsFile) { "Layout config is invalid:\n\n * " + validationResult.errors.join("\n * ") + "\n" ); } + return layoutConfig; +}; + +var applyCustomizations = function (customizations) { + return function (panelsConfig) { + return panelsConfig.map(function (view) { + var customization = customizations[view.type]; + if (!customization) { + return view; + } + return _.merge(view, { view: customization }); + }); + }; +}; - return layoutConfig.map(createLayout); +module.exports = function generateLayouts(layoutsFile, customizations) { + return loadConfigs(layoutsFile) + .map(applyCustomizations(customizations || {})) + .map(createLayout); };