module.exports = RED => { let ui; RED.nodes.registerType( 'ui_microwave_clock', function( config ) { RED.nodes.createNode( this, config ); if( !ui ) { try { ui = RED.require( 'node-red-dashboard' )( RED ); } catch {} } if( ui && RED.nodes.getNode( config.group ) ) { this.on( 'close', ui.addWidget( { node: this, format: ` `, width: +config.width || +RED.nodes.getNode( config.group ).config.width, height: +config.height || 1, group: config.group, order: config.order, beforeEmit: msg => ( { msg } ), initController: $scope => $scope.$watch( 'msg.payload', payload => { const total_seconds = +payload || 0; let remaining_seconds = total_seconds; let hours = Math.floor(remaining_seconds / 3600.0); remaining_seconds -= hours * 3600.0; let minutes = Math.floor(remaining_seconds / 60.0); remaining_seconds -= minutes * 60.0; let seconds = remaining_seconds; let s = hours.toString().padStart( 4, ' ' ); s += minutes.toString().padStart( 2, '0' ); s += seconds.toString().padStart( 2, '0' ); s += !( seconds % 2 ) ? ':' : ' '; s += !( seconds % 2 ) ? ':' : ' '; $scope.segs = []; for( const c of s ) { $scope.segs.push( { '0': [ true, true, true, false, true, true, true ], '1': [ false, false, true, false, false, true, false ], '2': [ true, false, true, true, true, false, true ], '3': [ true, false, true, true, false, true, true ], '4': [ false, true, true, true, false, true, false ], '5': [ true, true, false, true, false, true, true ], '6': [ true, true, false, true, true, true, true ], '7': [ true, false, true, false, false, true, false ], '8': [ true, true, true, true, true, true, true ], '9': [ true, true, true, true, false, true, true ], ' ': [ false, false, false, false, false, false, false ], ':': [ true ] }[ c ] ); } } ) } ) ); } } ); };