smart-energy-monitor/software/flow/node_modules/node-red-dashboard/nodes/ui_base.js

126 lines
4.9 KiB
JavaScript
Raw Normal View History

2023-02-22 17:26:41 +01:00
module.exports = function(RED) {
var ui = require('../ui')(RED);
var path= require('path');
var gsp = require.resolve('gridstack');
var node;
var uiset = RED.settings.ui || "{}";
function BaseNode(config) {
RED.nodes.createNode(this, config);
node = this;
var baseFontName = "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif";
var defaultLightTheme = {
baseColor: '#0094CE',
baseFont: baseFontName
}
var defaultDarkTheme = {
baseColor: '#097479',
baseFont: baseFontName
}
var defaultCustomTheme = {
name: 'Untitled Theme 1',
baseColor: defaultLightTheme.baseColor,
baseFont: baseFontName
}
var defaultAngularTheme = {
primary:'indigo',
accents:'teal',
warn: "red",
background:'grey',
palette:'light'
};
// Setup theme name
// First try old format (for upgrading with old flow file)
// Then try new format
// Else fallback to theme-light
var themeName;
if (typeof(config.theme) === 'string') { themeName = config.theme; }
else { themeName = config.theme.name || "theme-light"; }
// Setup other styles
var defaultThemeState = {}
if (themeName === 'theme-light') {
defaultThemeState["base-font"] = {value: baseFontName};
defaultThemeState["base-color"] = {value: "#0094CE"};
defaultThemeState["page-backgroundColor"] = {value: "#fafafa"};
defaultThemeState["page-titlebar-backgroundColor"] = {value: "#0094CE"};
defaultThemeState["page-sidebar-backgroundColor"] = {value: "#ffffff"};
defaultThemeState["group-backgroundColor"] = {value: "#ffffff"};
defaultThemeState["group-textColor"] = {value: "#000000"};
defaultThemeState["group-borderColor"] = {value: "#ffffff"};
defaultThemeState["widget-textColor"] = {value: "#111111"};
defaultThemeState["widget-backgroundColor"] = {value: "#0094CE"};
}
else {
defaultThemeState["base-font"] = {value: baseFontName};
defaultThemeState["base-color"] = {value: "#097479"};
defaultThemeState["page-backgroundColor"] = {value: "#111111"};
defaultThemeState["page-titlebar-backgroundColor"] = {value: "#097479"};
defaultThemeState["page-sidebar-backgroundColor"] = {value: "#333333"};
defaultThemeState["group-backgroundColor"] = {value: "#333333"};
defaultThemeState["group-textColor"] = {value: "#10cfd8"};
defaultThemeState["group-borderColor"] = {value: "#555555"};
defaultThemeState["widget-textColor"] = {value: "#eeeeee"};
defaultThemeState["widget-backgroundColor"] = {value: "#097479"};
}
var defaultThemeObject = {
name: themeName,
lightTheme: config.theme.lightTheme || defaultLightTheme,
darkTheme: config.theme.darkTheme || defaultDarkTheme,
customTheme: config.theme.customTheme || defaultCustomTheme,
angularTheme: config.theme.angularTheme || defaultAngularTheme,
themeState: config.theme.themeState || defaultThemeState
}
this.config = {
theme: defaultThemeObject,
site: config.site
}
ui.addBaseConfig(this.config);
}
RED.nodes.registerType("ui_base", BaseNode);
RED.library.register("themes");
RED.httpAdmin.get('/uisettings', function(req, res) {
res.json(uiset);
});
const optsjs = { root: path.join(__dirname , '../dist/js'), dotfiles: 'deny' };
const optscss = { root: path.join(__dirname , '../dist/css'), dotfiles: 'deny' };
const optsgs = { root: path.dirname(gsp), dotfiles: 'deny' };
RED.httpAdmin.get('/ui_base/js/*', function(req, res) {
res.sendFile(req.params[0], optsjs, function (err) {
if (err) {
res.sendStatus(404);
if (node) { node.warn("JS File not found."); }
else { console.log("ui_base - error:",err); }
}
});
});
RED.httpAdmin.get('/ui_base/css/*', function(req, res) {
res.sendFile(req.params[0], optscss, function (err) {
if (err) {
res.sendStatus(404);
if (node) { node.warn("CSS File not found."); }
else { console.log("ui_base - error:",err); }
}
});
});
RED.httpAdmin.get('/ui_base/gs/*', function(req, res) {
res.sendFile(req.params[0], optsgs, function (err) {
if (err) {
res.sendStatus(404);
if (node) { node.warn("Gridstack file not found."); }
else { console.log("ui_base - error:",err); }
}
});
});
};