From 43347936b3a91d5edb03653ca2518dea9449f890 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jendrik=20J=C3=A4ger?= Date: Fri, 25 Aug 2023 07:56:24 +0200 Subject: [PATCH] Add button group ui node --- button-group.html | 82 +++++++++++++++++++++++++++++++++++++++++++++++ button-group.js | 58 +++++++++++++++++++++++++++++++++ package.json | 16 +++++++++ 3 files changed, 156 insertions(+) create mode 100644 button-group.html create mode 100644 button-group.js create mode 100644 package.json diff --git a/button-group.html b/button-group.html new file mode 100644 index 0000000..902f737 --- /dev/null +++ b/button-group.html @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/button-group.js b/button-group.js new file mode 100644 index 0000000..8915d4d --- /dev/null +++ b/button-group.js @@ -0,0 +1,58 @@ +module.exports = function (RED) { + function ButtonGroupNode(config) { + var ui = undefined; + try { + var node = this; + if (ui === undefined) { + ui = RED.require("node-red-dashboard")(RED); + } + RED.nodes.createNode(this, config); + + var sizes = ui.getSizes(); + + var widthPx = config.buttonwidth * sizes.sx - sizes.gx; + + var heightPx = config.buttonheight * sizes.sy - sizes.gy; + + var html = `
+ {{button.label}} +
`; + + var done = ui.addWidget({ + node: node, + order: config.order, + group: config.group, + width: config.width, + height: config.height, + format: html, + templateScope: 'local', + emitOnlyNewValues: false, + forwardInputMessages: false, + storeFrontEndInputAsState: false, + convertBack: function (value) { + return value; + }, + beforeEmit: function (msg, value) { + return { msg: { buttons: value, socketid: msg.socketid } }; + }, + beforeSend: function (msg, orig) { + if (orig) { + orig.msg.topic = config.topic; + return orig.msg; + } + }, + initController: function ($scope, events) { + $scope.buttonClick = function (e) { + e.preventDefault(); + var buttonId = e.target.id; + $scope.send({ "payload": $scope.msg.buttons[buttonId].payload }); + }; + } + }); + } catch (e) { + console.log(e) + } + node.on('close', done); + } + RED.nodes.registerType("ui_button_group", ButtonGroupNode); +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..4000fde --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "node-red-contrib-ui-cocktail", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Jendrik Jäger", + "license": "ISC", + "node-red": { + "nodes": { + "ui_button_group": "button-group.js" + } + } +} \ No newline at end of file