Node-Red configuration
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

ui_button.js 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. module.exports = function(RED) {
  2. var ui = require('../ui')(RED);
  3. function ButtonNode(config) {
  4. RED.nodes.createNode(this, config);
  5. var node = this;
  6. var group = RED.nodes.getNode(config.group);
  7. if (!group) { return; }
  8. var tab = RED.nodes.getNode(group.config.tab);
  9. if (!tab) { return; }
  10. var payloadType = config.payloadType;
  11. var payload = config.payload;
  12. if (payloadType === 'flow' || payloadType === 'global') {
  13. try {
  14. var parts = RED.util.normalisePropertyExpression(payload);
  15. if (parts.length === 0) {
  16. throw new Error();
  17. }
  18. }
  19. catch(err) {
  20. node.warn("Invalid payload property expression - defaulting to node id")
  21. payload = node.id;
  22. payloadType = 'str';
  23. }
  24. }
  25. else {
  26. payload = payload || node.id;
  27. }
  28. node.on("input", function(msg) {
  29. node.topi = RED.util.evaluateNodeProperty(config.topic,config.topicType || "str",node,msg);
  30. });
  31. var done = ui.add({
  32. node: node,
  33. tab: tab,
  34. group: group,
  35. emitOnlyNewValues: false,
  36. forwardInputMessages: config.passthru || false,
  37. storeFrontEndInputAsState: false,
  38. control: {
  39. type: 'button',
  40. label: config.label,
  41. tooltip: config.tooltip,
  42. color: config.color,
  43. bgcolor: config.bgcolor,
  44. className: config.className,
  45. icon: config.icon,
  46. order: config.order,
  47. value: payload,
  48. format: config.bgcolor,
  49. width: config.width || group.config.width || 3,
  50. height: config.height || 1
  51. },
  52. beforeSend: function (msg,m2) {
  53. var t = RED.util.evaluateNodeProperty(config.topic,config.topicType || "str",node,msg)
  54. if (typeof t === "undefined") { t = node.topi; }
  55. if (t !== undefined) { msg.topic = t; }
  56. if (((config.topicType || "str") === "str") && t == "") { delete msg.topic; }
  57. if (m2 !== undefined) { msg.event = m2.event; }
  58. },
  59. convertBack: function (value) {
  60. if (payloadType === "date") {
  61. value = Date.now();
  62. }
  63. else {
  64. try {
  65. value = RED.util.evaluateNodeProperty(payload,payloadType,node);
  66. }
  67. catch(e) {
  68. if (payloadType === "bin") { node.error("Badly formatted buffer"); }
  69. else { node.error(e,payload); }
  70. }
  71. }
  72. return value;
  73. }
  74. });
  75. node.on("close", done);
  76. }
  77. RED.nodes.registerType("ui_button", ButtonNode);
  78. };