Human readable time

This commit is contained in:
tim000x3 2025-04-18 06:27:10 -04:00
parent c832c30340
commit 158a9028f8
2 changed files with 88 additions and 12 deletions

View File

@ -9,6 +9,52 @@ module.exports = function ($timeout) {
onDone: "=onDone"
},
link: function (scope, element, attrs) {
// Format conversion functions
scope.msToTimeString = function(ms) {
if (ms === null || ms === undefined) return '';
var totalSeconds = Math.floor(ms / 1000);
var minutes = Math.floor(totalSeconds / 60);
var seconds = totalSeconds % 60;
return minutes + ':' + (seconds < 10 ? '0' + seconds : seconds);
};
scope.timeStringToMs = function(timeString) {
if (!timeString) return 0;
var parts = timeString.split(':');
if (parts.length !== 2) return 0;
var minutes = parseInt(parts[0], 10);
var seconds = parseInt(parts[1], 10);
if (isNaN(minutes) || isNaN(seconds)) return 0;
return (minutes * 60 + seconds) * 1000;
};
// Initialize time string fields
scope.seekPositionTime = '';
scope.endPositionTime = '';
// Watch for program changes to update time strings
scope.$watch('program', function(newVal) {
if (newVal) {
scope.seekPositionTime = scope.msToTimeString(newVal.seekPosition);
scope.endPositionTime = scope.msToTimeString(newVal.endPosition);
}
});
// Update milliseconds when time strings change
scope.$watch('seekPositionTime', function(newVal) {
if (scope.program && newVal) {
scope.program.seekPosition = scope.timeStringToMs(newVal);
}
});
scope.$watch('endPositionTime', function(newVal) {
if (scope.program && newVal) {
scope.program.endPosition = scope.timeStringToMs(newVal);
}
});
scope.finished = (prog) => {
if (prog.title === "")
scope.error = { title: 'You must set a program title.' }

View File

@ -22,12 +22,22 @@
<input class="form-control form-control-sm" type="text" ng-model="program.subtitle"></input>
<label>Summary</label>
<textarea class="form-control form-control-sm" ng-model="program.summary"></textarea>
<label>Start Position (ms)</label>
<input class="form-control form-control-sm" type="number" ng-model="program.seekPosition" min="0" placeholder="0 (start of file)">
<label>End Position (ms, optional)
<label>Start Position Offset (optional)</label>
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="seekPositionTime" placeholder="Min:Sec (leave blank for start of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 5:30)</small>
</div>
</div>
<label>End Position Offset (optional)
<span class="text-danger pull-right">{{error.endPosition}}</span>
</label>
<input class="form-control form-control-sm" type="number" ng-model="program.endPosition" min="0" placeholder="Leave blank for end of file">
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="endPositionTime" placeholder="Min:Sec (leave blank for end of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 10:45)</small>
</div>
</div>
<label>Rating</label>
<input class="form-control form-control-sm" type="text" ng-model="program.rating"></input>
<label>Icon</label>
@ -46,12 +56,22 @@
<input class="form-control form-control-sm" type="text" ng-model="program.subtitle"></input>
<label>Summary</label>
<textarea class="form-control form-control-sm" ng-model="program.summary"></textarea>
<label>Start Position (ms)</label>
<input class="form-control form-control-sm" type="number" ng-model="program.seekPosition" min="0" placeholder="0 (start of file)">
<label>End Position (ms, optional)
<label>Start Position Offset (optional)</label>
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="seekPositionTime" placeholder="Min:Sec (leave blank for start of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 5:30)</small>
</div>
</div>
<label>End Position Offset (optional)
<span class="text-danger pull-right">{{error.endPosition}}</span>
</label>
<input class="form-control form-control-sm" type="number" ng-model="program.endPosition" min="0" placeholder="Leave blank for end of file">
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="endPositionTime" placeholder="Min:Sec (leave blank for end of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 10:45)</small>
</div>
</div>
<label>Rating</label>
<input class="form-control form-control-sm" type="text" ng-model="program.rating"></input>
<label>Icon</label>
@ -80,12 +100,22 @@
<input class="form-control form-control-sm" type="number" ng-model="program.episode"></input>
<label>Summary</label>
<textarea class="form-control form-control-sm" ng-model="program.summary"></textarea>
<label>Start Position (ms)</label>
<input class="form-control form-control-sm" type="number" ng-model="program.seekPosition" min="0" placeholder="0 (start of file)">
<label>End Position (ms, optional)
<label>Start Position Offset (optional)</label>
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="seekPositionTime" placeholder="Min:Sec (leave blank for start of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 5:30)</small>
</div>
</div>
<label>End Position Offset (optional)
<span class="text-danger pull-right">{{error.endPosition}}</span>
</label>
<input class="form-control form-control-sm" type="number" ng-model="program.endPosition" min="0" placeholder="Leave blank for end of file">
<div class="form-row mb-3">
<div class="col">
<input class="form-control form-control-sm" type="text" ng-model="endPositionTime" placeholder="Min:Sec (leave blank for end of file)">
<small class="form-text text-muted">Format: minutes:seconds (e.g. 10:45)</small>
</div>
</div>
<label>Rating</label>
<input class="form-control form-control-sm" type="text" ng-model="program.rating"></input>
<label>Icon</label>