diff --git a/resources/views/tasks/time_tracker.blade.php b/resources/views/tasks/time_tracker.blade.php
index d5ece07c2df9..7f6b03587086 100644
--- a/resources/views/tasks/time_tracker.blade.php
+++ b/resources/views/tasks/time_tracker.blade.php
@@ -245,28 +245,13 @@
{!! Former::text('duration')
->placeholder('duration')
- ->data_bind("timepicker: duration, timepickerOptions: {timeFormat: 'H:i:s', showAsDuration: true}")
+ ->data_bind("typeahead: duration")
->raw() !!}
|
|
-
diff --git a/resources/views/tasks/time_tracker_knockout.blade.php b/resources/views/tasks/time_tracker_knockout.blade.php
index 8436cded0911..6a71a024e3b6 100644
--- a/resources/views/tasks/time_tracker_knockout.blade.php
+++ b/resources/views/tasks/time_tracker_knockout.blade.php
@@ -49,7 +49,6 @@
ko.utils.registerEventHandler(element, 'change', function () {
var value = valueAccessor();
var seconds = $(element).timepicker('getSecondsFromMidnight');
- console.log('seconds:' + seconds);
value(seconds);
});
},
@@ -76,6 +75,55 @@
}
};
+ var defaultTimes = [];
+ for (var i=15; i<(15*4*24); i+=15) {
+ var time = moment.utc(i * 1000 * 60).format("HH:mm:ss");
+ defaultTimes.push(time);
+ }
+
+ var timeMatcher = function(strs) {
+ return function findMatches(q, cb) {
+ var matches, substringRegex;
+ matches = [];
+ substrRegex = new RegExp(q, 'i');
+ $.each(strs, function(i, str) {
+ if (substrRegex.test(str)) {
+ matches.push(str);
+ }
+ });
+ cb(matches);
+ };
+ };
+
+ ko.bindingHandlers.typeahead = {
+ init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
+ var $element = $(element);
+ var allBindings = allBindingsAccessor();
+ $element.typeahead({
+ highlight: true,
+ minLength: 0,
+ },
+ {
+ name: 'times',
+ source: timeMatcher(defaultTimes)
+ }).on('typeahead:select', function(element, datum, name) {
+ var value = valueAccessor();
+ var duration = moment.duration(datum).asSeconds();
+ value(duration);
+ });
+ },
+
+ update: function (element, valueAccessor) {
+ var value = ko.utils.unwrapObservable(valueAccessor());
+ if (value) {
+ var duration = moment.duration(value * 1000);
+ var value = Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss")
+ $(element).typeahead('val', value);
+ //$(element).typeahead('val', moment.utc(value * 1000).format("H:mm:ss"));
+ }
+ }
+ };
+
function ViewModel() {
var self = this;
@@ -672,9 +720,6 @@
var startValid = true;
var endValid = true;
if (!timeLog.isEmpty()) {
- console.log('1: ' + (lastTime && timeLog.startTime() < lastTime));
- console.log('2: ' + (timeLog.endTime() && timeLog.startTime() > timeLog.endTime()));
- console.log('end: ' + timeLog.endTime());
if ((lastTime && timeLog.startTime() < lastTime) || (timeLog.endTime() && timeLog.startTime() > timeLog.endTime())) {
startValid = false;
}
@@ -1130,8 +1175,12 @@
}
var endTime = self.endTime() ? self.endTime() : moment().unix();
return endTime - self.startTime();
+ //var duration = moment.duration((endTime - self.startTime()) * 1000);
+ //console.log(Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss"));
+ //return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
},
write: function(value) {
+ console.log('end: ' + (self.startTime() + value));
self.endTime(self.startTime() + value);
}
});