123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.initController = exports.beforeEmitFactory = void 0;
- const miscellanious_1 = require("./miscellanious");
- const getColorForValue = (colorForValue, value, RED) => {
- let color, found = false;
- try {
- if (Array.isArray(colorForValue)) {
- for (let index = 0; index < colorForValue.length; index++) {
- const compareWith = colorForValue[index];
- if (RED.util.compareObjects(compareWith.value, value)) {
- color = compareWith.color;
- found = true;
- break;
- }
- }
- }
- else if (typeof colorForValue === 'object') {
- color = colorForValue[value];
- found = color !== undefined && color !== null;
- }
- }
- catch (_error) {
- // TODO: Not an error to receive an unaccounted for value, but we should log to Node-RED debug log
- // console.log("Error trying to find color for value '" + value + "'", error)
- }
- if (found === false || color === undefined) {
- color = 'gray';
- }
- return [color, found];
- };
- const beforeEmitFactory = (node, RED) => {
- return (
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- msg, value) => {
- if (node.allowColorForValueInMessage === true &&
- typeof msg.colorForValue !== 'undefined') {
- const ledMsg = msg;
- const msgColorForValue = ledMsg.colorForValue;
- if (msgColorForValue !== undefined) {
- node.overrideColorForValue = msgColorForValue;
- }
- }
- const colorForValue = node.overrideColorForValue || node.colorForValue;
- const [color, glow] = getColorForValue(colorForValue, value, RED);
- return {
- msg: {
- ...msg,
- color,
- glow: node.showGlow ? glow : false,
- sizeMultiplier: node.height
- }
- };
- };
- };
- exports.beforeEmitFactory = beforeEmitFactory;
- // TODO: why is initController stringed and evaled??? we have to move erryone into this file :/
- const initController = ($scope, _events) => {
- $scope.flag = true;
- // TODO: From miscellanious.ts, we need to resolve this issue
- // Based on: https://stackoverflow.com/a/14570614
- const observeDOMFactory = () => {
- const MutationObserver = window.MutationObserver || miscellanious_1.WebKitMutationObserver;
- return (observe, callback) => {
- if (!observe) {
- throw new Error('Element to observe not provided');
- }
- if (observe.nodeType !== 1 &&
- observe.nodeType !== 9 &&
- observe.nodeType !== 11) {
- throw new Error('Unexpected Node type (' + observe.nodeType + ') provided: ' + observe);
- }
- if (MutationObserver) {
- const observer = new MutationObserver((mutations, observer) => {
- observer.disconnect();
- callback(mutations);
- });
- observer.observe(observe, {
- childList: true,
- subtree: true
- });
- }
- else if (window.addEventListener !== undefined) {
- const options = {
- capture: false,
- once: true
- };
- observe.addEventListener('DOMNodeInserted', callback, options);
- observe.addEventListener('DOMNodeRemoved', callback, options);
- }
- };
- };
- const glowSize = 7;
- const ledStyle = (color, glow, sizeMultiplier) => {
- if (glow) {
- return `
- background-color: ${color};
- box-shadow:
- #0000009e 0 0px ${2 / window.devicePixelRatio}px 0px,
- ${color} 0 0px ${glowSize * sizeMultiplier}px ${Math.floor((glowSize * sizeMultiplier) / 3)}px,
- inset #00000017 0 -1px 1px 0px;`;
- }
- else {
- // TODO: duplicate code because of execution scope, fix this shit :|
- return `
- background-color: ${color};
- box-shadow:
- #0000009e 0 0px ${2 / window.devicePixelRatio}px 0px,
- inset #ffffff8c 0px 1px 2px,
- inset #00000033 0 -1px 1px 0px,
- inset ${color} 0 -1px 2px;`;
- }
- };
- const update = (msg, element) => {
- if (!msg) {
- return;
- }
- if (!element) {
- return;
- }
- const color = msg.color;
- const glow = msg.glow;
- const sizeMultiplier = msg.sizeMultiplier;
- $(element).attr('style', ledStyle(color, glow, sizeMultiplier));
- };
- const retrieveElementFromDocument = (id, document) => {
- // TODO: share code to make sure we're always using the same id composure
- const elementId = 'led_' + id;
- if (!document) {
- return undefined;
- }
- return document.getElementById(elementId);
- };
- const observeDOM = observeDOMFactory();
- const updateWithScope = (msg) => {
- if (!$scope) {
- return;
- }
- const id = $scope.$eval('$id');
- const attemptUpdate = () => {
- const element = retrieveElementFromDocument(id, document);
- if (element) {
- update(msg, element);
- }
- else {
- // HACK: is there a proper way to wait for this node's element to be rendered?
- observeDOM(document, (_change) => {
- attemptUpdate();
- });
- }
- };
- attemptUpdate();
- };
- $scope.$watch('msg', updateWithScope);
- };
- exports.initController = initController;
- //# sourceMappingURL=processing.js.map
|