190e8449ce
- rename the directory from webgui to Phi - let the webserver's root point to Phi instead of Docs - redirect old /gui/ url to the new location (/)
100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
define([
|
|
'jquery', 'knockout', 'text!./Stopwatch.html', 'kojqui/button'
|
|
], function(jquery, ko, htmlString) {
|
|
|
|
function ViewModel(params) {
|
|
var self = this;
|
|
|
|
self.MODE = {
|
|
STOPPED : 0,
|
|
PAUSED : 1,
|
|
RUNNING : 2,
|
|
};
|
|
|
|
self.mode = ko.observable(self.MODE.STOPPED);
|
|
self.elapsedTime = ko.observable(0);
|
|
self.elapsedTimeSeconds = ko.pureComputed(function() {
|
|
return (self.elapsedTime() / 1000).toFixed(0);
|
|
});
|
|
|
|
self.startLabel = ko.pureComputed(function() {
|
|
return self.mode() == self.MODE.RUNNING ? "Pause" : "Start";
|
|
});
|
|
|
|
self.startIcons = ko.pureComputed(function() {
|
|
return self.mode() == self.MODE.RUNNING ? {
|
|
primary : 'ui-icon-pause'
|
|
} : {
|
|
primary : 'ui-icon-play'
|
|
};
|
|
});
|
|
|
|
function twoDigits(n) {
|
|
if (n >= 10)
|
|
return n.toString();
|
|
else
|
|
return '0' + n.toString();
|
|
}
|
|
|
|
self.hoursDisplay = ko.pureComputed(function() {
|
|
return twoDigits(Math.floor(self.elapsedTimeSeconds() / 3600));
|
|
});
|
|
|
|
self.minutesDisplay = ko.pureComputed(function() {
|
|
return twoDigits(Math.floor(self.elapsedTimeSeconds() / 60) % 60);
|
|
});
|
|
|
|
self.secondsDisplay = ko.pureComputed(function() {
|
|
return twoDigits(self.elapsedTimeSeconds() % 60);
|
|
});
|
|
|
|
self.startTime = 0;
|
|
self.runTime = 0;
|
|
self.cumulatedTime = 50;
|
|
|
|
self.startStopPause = function() {
|
|
switch (self.mode()) {
|
|
case self.MODE.STOPPED:
|
|
case self.MODE.PAUSED:
|
|
self.mode(self.MODE.RUNNING);
|
|
break;
|
|
case self.MODE.RUNNING:
|
|
self.mode(self.MODE.PAUSED);
|
|
self.cumulatedTime = self.elapsedTime();
|
|
break;
|
|
|
|
}
|
|
|
|
if (self.mode() == self.MODE.RUNNING) {
|
|
self.startTime = new Date();
|
|
self.update();
|
|
}
|
|
}
|
|
|
|
self.update = function() {
|
|
if (self.mode() != self.MODE.RUNNING)
|
|
return;
|
|
|
|
var now = new Date();
|
|
self.elapsedTime(self.cumulatedTime + (now - self.startTime));
|
|
setTimeout(function() {
|
|
self.update();
|
|
}, 100);
|
|
}
|
|
|
|
self.clear = function() {
|
|
self.cumulatedTime = 0;
|
|
self.startTime = new Date();
|
|
self.elapsedTime(0);
|
|
}
|
|
}
|
|
|
|
ViewModel.prototype.dispose = function() {
|
|
}
|
|
|
|
// Return component definition
|
|
return {
|
|
viewModel : ViewModel,
|
|
template : htmlString
|
|
};
|
|
});
|