Skip to content

Commit e17b5ba

Browse files
committed
fix #69
1 parent f26afb9 commit e17b5ba

File tree

6 files changed

+103
-44
lines changed

6 files changed

+103
-44
lines changed

nodes/blind-control.html

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,13 +1599,15 @@
15991599
$dialogTimeRegInput.attr('timedata', dialogAddData.timeReg.ts);
16001600
_dialogGenHelpText();
16011601
}, {
1602-
kind: 'getTimeData',
1603-
config : $nodeConfig.val(),
1604-
type: opType,
1605-
value: $dialogTimeRegInput.typedInput('value'),
1602+
nodeId: node.id,
1603+
kind: 'getTimeData',
1604+
config: $nodeConfig.val(),
1605+
type: opType,
1606+
value: $dialogTimeRegInput.typedInput('value'),
16061607
offsetType: $dialogTimeRegOffset.typedInput('type'),
1607-
offset: $dialogTimeRegOffset.typedInput('value'),
1608-
multiplier: parseInt($dialogTimeRegMultiplier.val())
1608+
offset: $dialogTimeRegOffset.typedInput('value'),
1609+
multiplier: parseInt($dialogTimeRegMultiplier.val()),
1610+
noOffsetError: true
16091611
});
16101612
$dialogTimeMinInput.change();
16111613
$dialogTimeMaxInput.change();
@@ -1652,13 +1654,15 @@
16521654
$dialogTimeMinInput.attr('timedata', dialogAddData.timeMin.ts);
16531655
_dialogGenHelpText();
16541656
}, {
1657+
nodeId: node.id,
16551658
kind: 'getTimeData',
16561659
config: $nodeConfig.val(),
16571660
type: opType,
16581661
value: $dialogTimeMinInput.typedInput('value'),
16591662
offsetType: $dialogTimeMinOffset.typedInput('type'),
16601663
offset: $dialogTimeMinOffset.typedInput('value'),
1661-
multiplier: parseInt($dialogTimeMinMultiplier.val())
1664+
multiplier: parseInt($dialogTimeMinMultiplier.val()),
1665+
noOffsetError: true
16621666
});
16631667
}
16641668
});
@@ -1704,13 +1708,15 @@
17041708
$dialogTimeMaxInput.attr('timedata', dialogAddData.timeMax.ts);
17051709
_dialogGenHelpText();
17061710
}, {
1711+
nodeId: node.id,
17071712
kind: 'getTimeData',
17081713
config: $nodeConfig.val(),
17091714
type: opType,
17101715
value: $dialogTimeMaxInput.typedInput('value'),
17111716
offsetType: $dialogTimeMaxOffset.typedInput('type'),
17121717
offset: $dialogTimeMaxOffset.typedInput('value'),
1713-
multiplier: parseInt($dialogTimeMaxMultiplier.val())
1718+
multiplier: parseInt($dialogTimeMaxMultiplier.val()),
1719+
noOffsetError: true
17141720
});
17151721
}
17161722
});

nodes/position-config.js

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,8 @@ module.exports = function (RED) {
388388
* @param {*} [opCallback] - callback function for getting getPropValue
389389
* @returns {number} float property
390390
*/
391-
getFloatProp(_srcNode, msg, type, value, def, opCallback) {
392-
// _srcNode.debug('getFloatProp type='+type+' value='+value);
391+
getFloatProp(_srcNode, msg, type, value, def, opCallback, noError) {
392+
_srcNode.debug('getFloatProp type='+type+' value='+value);
393393
let data; // 'msg', 'flow', 'global', 'num', 'bin', 'env', 'jsonata'
394394
if (type === 'num') {
395395
data = Number(value); // extra conversation to handle empty string as 0
@@ -404,10 +404,12 @@ module.exports = function (RED) {
404404
data = this.getPropValue(_srcNode, msg, { type, value, callback:opCallback });
405405
}
406406
if (data === null || typeof data === 'undefined') {
407+
if (noError) { return NaN; }
407408
throw new Error(RED._('errors.error', { message: RED._('errors.notEvaluableProperty', {type, value}) }));
408409
}
409410
data = parseFloat(data);
410411
if (isNaN(data)) {
412+
if (noError) { return NaN; }
411413
throw new Error('the value of ' + type + '.' + value + ' is not a valid Number!');
412414
}
413415
return data;
@@ -440,7 +442,7 @@ module.exports = function (RED) {
440442
let result = null;
441443
if (data.type === null || data.type === 'none' || data.type === '' || (typeof data.type === 'undefined')) {
442444
if (data.value === '' || (typeof data.value === 'undefined')) {
443-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
445+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
444446
result = hlp.addOffset(now, offsetX, data.multiplier);
445447
return hlp.getFormattedDateOut(result, data.format, (this.tzOffset === 0), this.tzOffset);
446448
}
@@ -451,15 +453,15 @@ module.exports = function (RED) {
451453
}
452454
return Date.now();
453455
} else if (data.type === 'dateSpecific') {
454-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
456+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
455457
result = hlp.addOffset(now, offsetX, data.multiplier);
456458
return hlp.getFormattedDateOut(result, data.format, (this.tzOffset === 0), this.tzOffset);
457459
} else if ((data.type === 'pdsTime') || (data.type === 'pdmTime')) {
458460
if (data.type === 'pdsTime') { // sun
459-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
461+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
460462
result = this.getSunTimeByName(now, data.value, offsetX, data.multiplier, data.next, data.days);
461463
} else if (data.type === 'pdmTime') { // moon
462-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
464+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
463465
result = this.getMoonTimeByName(now, data.value, offsetX, data.multiplier, data.next, data.days);
464466
}
465467
if (result && result.value && !result.error) {
@@ -470,14 +472,14 @@ module.exports = function (RED) {
470472
return Object.assign({}, this.getSunTimePrevNext(now));
471473
} else if (data.type === 'entered' || data.type === 'dateEntered') {
472474
result = hlp.getDateOfText(String(data.value), (this.tzOffset === 0), this.tzOffset);
473-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
475+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
474476
result = hlp.normalizeDate(result, offsetX, data.multiplier, data.next, data.days);
475477
return hlp.getFormattedDateOut(result, data.format, (this.tzOffset === 0), this.tzOffset);
476478
} else if (data.type === 'dayOfMonth') {
477479
result = new Date();
478480
result = hlp.getSpecialDayOfMonth(result.getFullYear(),result.getMonth(), data.value);
479481
if (result !== null && typeof result !== 'undefined') {
480-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
482+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
481483
result = hlp.normalizeDate(result, offsetX, data.multiplier, data.next, data.days);
482484
return hlp.getFormattedDateOut(result, data.format, (this.tzOffset === 0), this.tzOffset);
483485
}
@@ -515,7 +517,7 @@ module.exports = function (RED) {
515517
* @returns {timePropResultType} value of the type input
516518
*/
517519
getTimeProp(_srcNode, msg, data) {
518-
// _srcNode.debug(`getTimeProp data=${util.inspect(data, { colors: true, compact: 10, breakLength: Infinity })} tzOffset=${this.tzOffset}`);
520+
_srcNode.debug(`getTimeProp data=${util.inspect(data, { colors: true, compact: 10, breakLength: Infinity })} tzOffset=${this.tzOffset}`);
519521
let result = {
520522
value: null,
521523
error: null,
@@ -535,44 +537,44 @@ module.exports = function (RED) {
535537
}
536538
result.fix = true;
537539
} else if (data.type === 'dateSpecific') {
538-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
540+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
539541
result.value = hlp.normalizeDate(now, offsetX, data.multiplier, data.next, data.days);
540542
if (this.tzOffset) {
541543
result.value = hlp.convertDateTimeZone(result.value);
542544
}
543545
result.fix = true;
544546
} else if (data.type === 'dayOfMonth') {
545547
result.value = hlp.getSpecialDayOfMonth(now.getFullYear(), now.getMonth(), data.value);
546-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
548+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
547549
result.value = hlp.normalizeDate(result.value, offsetX, data.multiplier, data.next, data.days);
548550
if (this.tzOffset) {
549551
result.value = hlp.convertDateTimeZone(result.value);
550552
}
551553
} else if (data.type === 'entered') {
552554
result.value = hlp.getTimeOfText(String(data.value), now, (this.tzOffset === 0), this.tzOffset);
553555
if (result.value !== null) {
554-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
556+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
555557
result.value = hlp.normalizeDate(result.value, offsetX, data.multiplier, data.next, data.days);
556558
}
557559
result.fix = true;
558560
} else if (data.type === 'dateEntered') {
559561
result.value = hlp.getDateOfText(String(data.value), (this.tzOffset === 0), this.tzOffset);
560562
if (result.value !== null) {
561-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
563+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
562564
result.value = hlp.normalizeDate(result.value, offsetX, data.multiplier, data.next, data.days);
563565
}
564566
result.fix = true;
565567
} else if (data.type === 'pdsTime') {
566568
// sun
567-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
569+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
568570
result = this.getSunTimeByName(now, data.value, offsetX, data.multiplier, data.next, data.days);
569571
if (this.tzOffset) {
570572
result.value = hlp.convertDateTimeZone(result.value, this.tzOffset);
571573
}
572574
result.fix = true;
573575
} else if (data.type === 'pdmTime') {
574576
// moon
575-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
577+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
576578
result = this.getMoonTimeByName(now, data.value, offsetX, data.multiplier, data.next, data.days);
577579
if (this.tzOffset) {
578580
result.value = hlp.convertDateTimeZone(result.value, this.tzOffset);
@@ -587,7 +589,7 @@ module.exports = function (RED) {
587589
} else {
588590
result.value = hlp.getDateOfText(data.value, (this.tzOffset === 0), this.tzOffset);
589591
}
590-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
592+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
591593
result.value = hlp.normalizeDate(result.value, offsetX, data.multiplier, data.next, data.days);
592594
if (this.tzOffset) {
593595
result.value = hlp.convertDateTimeZone(result.value, this.tzOffset);
@@ -602,7 +604,7 @@ module.exports = function (RED) {
602604
} else {
603605
result.value = hlp.getDateOfText(res, (this.tzOffset === 0), this.tzOffset);
604606
}
605-
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0);
607+
const offsetX = this.getFloatProp(_srcNode, msg, data.offsetType, data.offset, 0, data.offsetCallback, data.noOffsetError);
606608
result.value = hlp.normalizeDate(result.value, offsetX, data.multiplier, data.next, data.days);
607609
if (this.tzOffset) {
608610
result.value = hlp.convertDateTimeZone(result.value, this.tzOffset);
@@ -1095,7 +1097,7 @@ module.exports = function (RED) {
10951097
});
10961098

10971099
RED.httpAdmin.get('/sun-position/data', RED.auth.needsPermission('sun-position.read'), (req, res) => {
1098-
// console.log('RED.httpAdmin.get - result for getTimeData', req.query.config);
1100+
// console.log('RED.httpAdmin.get', req.query.config);
10991101
if (req.query.config && req.query.config !== '_ADD_') {
11001102
const posConfig = RED.nodes.getNode(req.query.config);
11011103
if (!posConfig) {
@@ -1104,11 +1106,18 @@ module.exports = function (RED) {
11041106
}));
11051107
return;
11061108
}
1109+
let scrNode;
1110+
if (req.query.nodeId) {
1111+
scrNode = RED.nodes.getNode(req.query.nodeId);
1112+
}
1113+
if (!scrNode) {
1114+
scrNode = posConfig;
1115+
}
11071116
let obj = {};
11081117
switch (req.query.kind) {
11091118
case 'getTimeData': {
11101119
try {
1111-
obj = posConfig.getTimeProp(posConfig, undefined, req.query); // req.query.type, req.query.value, req.query.offsetType, req.query.offset, req.query.multiplier, req.query.next, req.query.days);
1120+
obj = posConfig.getTimeProp(scrNode, undefined, req.query); // req.query.type, req.query.value, req.query.offsetType, req.query.offset, req.query.multiplier, req.query.next, req.query.days);
11121121
} catch(err) {
11131122
obj.value = NaN;
11141123
obj.error = err.message;
@@ -1119,7 +1128,7 @@ module.exports = function (RED) {
11191128
}
11201129
case 'getOutDataData': {
11211130
try {
1122-
obj = posConfig.getOutDataProp(posConfig, undefined, req.query); // req.query.type, req.query.value, req.query.format, req.query.offset, req.query.offsetType, req.query.multiplier, req.query.next, req.query.days);
1131+
obj = posConfig.getOutDataProp(scrNode, undefined, req.query); // req.query.type, req.query.value, req.query.format, req.query.offset, req.query.offsetType, req.query.multiplier, req.query.next, req.query.days);
11231132
} catch(err) {
11241133
obj.value = NaN;
11251134
obj.error = err.message;

nodes/time-comp.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -597,14 +597,16 @@
597597
const titleOrg = $div.attr('titleOrg');
598598
$div.attr('title', bdDateToTime(d, ' - ') + titleOrg);
599599
}, {
600+
nodeId: node.id,
600601
kind: 'getTimeData',
601602
config: $nodeConfig.val(),
602603
type: opType,
603604
value: $input.typedInput('value'),
604605
format: $('#node-input-inputFormat').val(),
605606
offsetType: $('#node-input-inputOffset').typedInput('type'),
606607
offset: $('#node-input-inputOffset').typedInput('value'),
607-
multiplier: $('#node-input-inputOffsetMultiplier').val()
608+
multiplier: $('#node-input-inputOffsetMultiplier').val(),
609+
noOffsetError: true
608610
});
609611
}
610612
});
@@ -816,14 +818,16 @@
816818
getBackendData(d => {
817819
$operandDiv.attr('title', bdDateToTime(d));
818820
}, {
821+
nodeId: node.id,
819822
kind: 'getTimeData',
820823
config: $nodeConfig.val(),
821824
type: opType,
822825
value: $operand.typedInput('value'),
823826
format: $formatIp.val(),
824827
offsetType: $offset.typedInput('type'),
825828
offset: $offset.typedInput('value'),
826-
multiplier: $multiplier.val()
829+
multiplier: $multiplier.val(),
830+
noOffsetError: true
827831
});
828832
resizeRule(containerRow);
829833
});
@@ -898,14 +902,16 @@
898902
const titleOrg = $div.attr('titleOrg');
899903
$div.attr('title', ((d) ? (String(d) + ' - ') : '') + titleOrg);
900904
}, {
905+
nodeId: node.id,
901906
kind: 'getOutDataData',
902907
config: $nodeConfig.val(),
903908
type: $('#node-input-result1Value').typedInput('type'),
904909
value: $('#node-input-result1Value').typedInput('value'),
905910
format: $('#node-input-result1Format').val(),
906911
offsetType: $('#node-input-result1Offset').typedInput('type'),
907912
offset: $('#node-input-result1Offset').typedInput('value'),
908-
multiplier: $('#node-input-result1OffsetMultiplier').val()
913+
multiplier: $('#node-input-result1OffsetMultiplier').val(),
914+
noOffsetError: true
909915
});
910916
}
911917
}

0 commit comments

Comments
 (0)