mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-11 06:42:56 +01:00
96 lines
2.7 KiB
JavaScript
96 lines
2.7 KiB
JavaScript
'use strict';
|
|
|
|
const DateToStringNode = {
|
|
name: 'Date To String',
|
|
docs: 'https://docs.noodl.net/nodes/utilities/date-to-string',
|
|
category: 'Utilities',
|
|
initialize: function () {
|
|
this._internal.formatString = '{year}-{month}-{date}';
|
|
},
|
|
inputs: {
|
|
formatString: {
|
|
displayName: 'Format',
|
|
type: 'string',
|
|
default: '{year}-{month}-{date}',
|
|
set: function (value) {
|
|
if (this._internal.formatString === value) return;
|
|
this._internal.formatString = value;
|
|
|
|
if (this._internal.currentInput !== undefined) {
|
|
this._format();
|
|
this.flagOutputDirty('currentValue');
|
|
}
|
|
}
|
|
},
|
|
input: {
|
|
type: { name: 'date' },
|
|
displayName: 'Date',
|
|
set: function (value) {
|
|
const _value = typeof value === 'string' ? new Date(value) : value;
|
|
if (this._internal.currentInput === _value) return;
|
|
|
|
this._internal.currentInput = _value;
|
|
this._format();
|
|
}
|
|
}
|
|
},
|
|
outputs: {
|
|
currentValue: {
|
|
type: 'string',
|
|
displayName: 'Date String',
|
|
group: 'Value',
|
|
getter: function () {
|
|
return this._internal.dateString;
|
|
}
|
|
},
|
|
inputChanged: {
|
|
type: 'signal',
|
|
displayName: 'Date Changed',
|
|
group: 'Signals'
|
|
},
|
|
onError: {
|
|
type: 'signal',
|
|
displayName: 'Invalid Date',
|
|
group: 'Signals'
|
|
}
|
|
},
|
|
methods: {
|
|
_format() {
|
|
try {
|
|
const t = this._internal.currentInput;
|
|
const format = this._internal.formatString;
|
|
const date = ('0' + t.getDate()).slice(-2);
|
|
const month = ('0' + (t.getMonth() + 1)).slice(-2);
|
|
const monthShort = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(t);
|
|
const year = t.getFullYear();
|
|
const yearShort = year.toString().substring(2);
|
|
const hours = ('0' + t.getHours()).slice(-2);
|
|
const minutes = ('0' + t.getMinutes()).slice(-2);
|
|
const seconds = ('0' + t.getSeconds()).slice(-2);
|
|
|
|
this._internal.dateString = format
|
|
.replace(/\{date\}/g, date)
|
|
.replace(/\{month\}/g, month)
|
|
.replace(/\{monthShort\}/g, monthShort)
|
|
.replace(/\{year\}/g, year)
|
|
.replace(/\{yearShort\}/g, yearShort)
|
|
.replace(/\{hours\}/g, hours)
|
|
.replace(/\{minutes\}/g, minutes)
|
|
.replace(/\{seconds\}/g, seconds);
|
|
} catch (error) {
|
|
// Set the output to be blank, makes it easier to handle.
|
|
this._internal.dateString = '';
|
|
this.flagOutputDirty('onError');
|
|
}
|
|
|
|
// Flag that the value have changed
|
|
this.flagOutputDirty('currentValue');
|
|
this.sendSignalOnOutput('inputChanged');
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
node: DateToStringNode
|
|
};
|