144 lines
5.2 KiB
JavaScript
144 lines
5.2 KiB
JavaScript
|
/**
|
||
|
* Copyright JS Foundation and other contributors, http://js.foundation
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
**/
|
||
|
|
||
|
var ui = null;
|
||
|
|
||
|
function init(RED) {
|
||
|
if (!ui) {
|
||
|
ui = require("./ui")(RED);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* addWidget:
|
||
|
- options
|
||
|
- RED: RED object
|
||
|
- options: options to create dashboard widget
|
||
|
* [node] - the node that represents the control on a flow
|
||
|
* format - HTML code of widget
|
||
|
* [group] - group name (optional if templateScope = 'global')
|
||
|
* [width] - width of widget (default automatic)
|
||
|
* [height] - height of widget (default automatic)
|
||
|
* [order] - property to hold the placement order of the widget (default 0)
|
||
|
* [templateScope] - scope of widget/global or local (default local)
|
||
|
* [emitOnlyNewValues] - boolean (default true).
|
||
|
If true, it checks if the payload changed before sending it
|
||
|
to the front-end. If the payload is the same no message is sent.
|
||
|
* [forwardInputMessages] - boolean (default true).
|
||
|
If true, forwards input messages to the output
|
||
|
* [storeFrontEndInputAsState] - boolean (default true).
|
||
|
If true, any message received from front-end is stored as state
|
||
|
[persistantFrontEndValue] - boolean (default true).
|
||
|
If true, last received message is send again when front end reconnect.
|
||
|
* [convert] - callback to convert the value before sending it to the front-end
|
||
|
* [beforeEmit] - callback to prepare the message that is emitted to the front-end
|
||
|
* [convertBack] - callback to convert the message from front-end before sending it to the next connected node
|
||
|
* [beforeSend] - callback to prepare the message that is sent to the output
|
||
|
* [initController] - callback to initialize in controller
|
||
|
*/
|
||
|
|
||
|
function addWidget(RED, options) {
|
||
|
var is_local = (options.templateScope !== "global");
|
||
|
var group = null;
|
||
|
var tab = null;
|
||
|
init(RED);
|
||
|
|
||
|
var ui_control = {
|
||
|
type: "template",
|
||
|
order: options.order,
|
||
|
format: options.format,
|
||
|
class: "nr-dashboard-"+(options.node.type || "template-blank")
|
||
|
};
|
||
|
|
||
|
var node = options.node;
|
||
|
|
||
|
if (isNaN(options.order)) {
|
||
|
node.warn("*** Order property not set. Please contact developer. ***");
|
||
|
}
|
||
|
|
||
|
if (is_local) {
|
||
|
group = RED.nodes.getNode(options.group);
|
||
|
if (group === null) { return; }
|
||
|
tab = RED.nodes.getNode(group.config.tab);
|
||
|
ui_control.width = options.hasOwnProperty("width") ? options.width : group.config.width;
|
||
|
ui_control.height = options.hasOwnProperty("height") ? options.height : 0;
|
||
|
}
|
||
|
else {
|
||
|
node = {
|
||
|
id: "-dummy-",
|
||
|
on: function() {}
|
||
|
};
|
||
|
}
|
||
|
ui_control.templateScope = options.hasOwnProperty("templateScope") ? options.templateScope : "local";
|
||
|
var ui_options = {
|
||
|
node: node,
|
||
|
control: ui_control
|
||
|
}
|
||
|
if (is_local) {
|
||
|
ui_options.group = group;
|
||
|
ui_options.tab = tab;
|
||
|
}
|
||
|
if (options.hasOwnProperty("emitOnlyNewValues")) {
|
||
|
ui_options.emitOnlyNewValues = options.emitOnlyNewValues;
|
||
|
}
|
||
|
if (options.hasOwnProperty("forwardInputMessages")) {
|
||
|
ui_options.forwardInputMessages = options.forwardInputMessages;
|
||
|
}
|
||
|
if (options.hasOwnProperty("storeFrontEndInputAsState")) {
|
||
|
ui_options.storeFrontEndInputAsState = options.storeFrontEndInputAsState;
|
||
|
}
|
||
|
if (options.hasOwnProperty("persistantFrontEndValue")) {
|
||
|
ui_options.persistantFrontEndValue = options.persistantFrontEndValue;
|
||
|
}
|
||
|
if (options.hasOwnProperty("convert")) {
|
||
|
ui_options.convert = options.convert;
|
||
|
}
|
||
|
if (options.hasOwnProperty("beforeEmit")) {
|
||
|
ui_options.beforeEmit = options.beforeEmit;
|
||
|
}
|
||
|
if (options.hasOwnProperty("convertBack")) {
|
||
|
ui_options.convertBack = options.convertBack;
|
||
|
}
|
||
|
if (options.hasOwnProperty("beforeSend")) {
|
||
|
ui_options.beforeSend = options.beforeSend;
|
||
|
}
|
||
|
if (options.hasOwnProperty("initController")) {
|
||
|
ui_control.initController = options.initController.toString();
|
||
|
}
|
||
|
return ui.add(ui_options);
|
||
|
}
|
||
|
|
||
|
/* getSizes:
|
||
|
returns the grid size in pixels
|
||
|
default - { sx: 48, sy: 48, gx: 6, gy: 6, cx: 6, cy: 6, px: 0, py: 0 }
|
||
|
*/
|
||
|
|
||
|
/* getTheme:
|
||
|
returns the current theme object
|
||
|
*/
|
||
|
|
||
|
/* isDark:
|
||
|
returns true or false if the dahsboard theme background is dark or light.
|
||
|
*/
|
||
|
|
||
|
module.exports = function (RED) {
|
||
|
return {
|
||
|
addWidget: function (options) { return addWidget(RED, options); },
|
||
|
getSizes: function() { return require("./ui")(RED).getSizes(); },
|
||
|
getTheme: function() { return require("./ui")(RED).getTheme(); },
|
||
|
isDark: function() { return require("./ui")(RED).isDark(); }
|
||
|
};
|
||
|
};
|