1
0
Fork 0
fgdata/Phi/widgets/metar.js

60 lines
1.7 KiB
JavaScript
Raw Normal View History

2015-03-05 13:58:48 +00:00
define([
'knockout', 'text!./metar.html', 'fgcommand', 'kojqui/tooltip'
], function(ko, htmlString, fgCommand ) {
2015-03-05 13:58:48 +00:00
function ViewModel(params) {
var NO_METAR = "*** no METAR ";
2015-03-05 13:58:48 +00:00
self.scrolledMetar = ko.observable("");
self.textStart = 0;
self.metar = ko.observable(NO_METAR);
self.valid = ko.observable(false).extend({ fgprop: 'metar-valid' });
self.valid.subscribe(function(newValue) {
self.textStart = 0;
if( false == newValue ) {
self.metar(NO_METAR);
return;
}
self.metar("Wait.. ");
fgCommand.getPropertyValue('/environment/metar/data', function(value) {
2015-03-05 13:58:48 +00:00
self.textStart = 0;
// start with station id (4 upcase chars), skip leading garbage
var idx = value.search("[A-Z]{4}");
if( idx >= 0 ) value = value.substring(idx);
self.metar(value);
2015-03-05 13:58:48 +00:00
});
});
self.textLength = 20;
self.timerId = 0;
self.longTimeout = 1500;
self.shortTimeout = 50;
function scrollText ( id ){
if( id != self.timerId )
return;
2015-03-05 13:58:48 +00:00
var t = self.metar() + " " + self.metar();
var a = self.textStart;
var b = a+self.textLength;
self.scrolledMetar( t.substring(a,b) );
var timeout = t.charAt(a) == ' ' ? self.longTimeout : self.shortTimeout;
2015-03-05 13:58:48 +00:00
if( ++a >= self.metar().length )
a = 0;
self.textStart = a;
setTimeout(function() { scrollText(id); }, timeout );
}
scrollText( ++self.timerId );
2015-03-05 13:58:48 +00:00
}
ViewModel.prototype.dispose = function() {
self.timerId++;
2015-03-05 13:58:48 +00:00
}
// Return component definition
return {
viewModel : ViewModel,
template : htmlString
};
});