123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /**
- * 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(); }
- };
- };
|