mirror of
https://github.com/nasa/openmct.git
synced 2025-05-23 18:54:09 +00:00
Initialize value for datetime control based on available data, and keep up-to-date with changes from UI. Supports clocks/timers, which use datetime as an entry field, WTD-1221.
105 lines
4.0 KiB
JavaScript
105 lines
4.0 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
* Open MCT Web includes source code licensed under additional open source
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
* this source code distribution or the Licensing information page available
|
|
* at runtime from the About dialog for additional information.
|
|
*****************************************************************************/
|
|
/*global define,moment*/
|
|
|
|
define(
|
|
["../../lib/moment.min"],
|
|
function () {
|
|
"use strict";
|
|
|
|
var DATE_FORMAT = "YYYY-DDD";
|
|
|
|
/**
|
|
* Controller for the `datetime` form control.
|
|
* This is a composite control; it includes multiple
|
|
* input fields but outputs a single timestamp (in
|
|
* milliseconds since start of 1970) to the ngModel.
|
|
*
|
|
* @constructor
|
|
*/
|
|
function DateTimeController($scope) {
|
|
|
|
// Update the
|
|
function update() {
|
|
var date = $scope.datetime.date,
|
|
hour = $scope.datetime.hour,
|
|
min = $scope.datetime.min,
|
|
sec = $scope.datetime.sec,
|
|
fullDateTime = moment.utc(date, DATE_FORMAT)
|
|
.hour(hour || 0)
|
|
.minute(min || 0)
|
|
.second(sec || 0);
|
|
|
|
if (fullDateTime.isValid()) {
|
|
$scope.ngModel[$scope.field] = fullDateTime.valueOf();
|
|
}
|
|
|
|
// If anything is complete, say so in scope; there are
|
|
// ng-required usages that will update off of this (to
|
|
// allow datetime to be optional while still permitting
|
|
// incomplete input)
|
|
$scope.partiallyComplete =
|
|
Object.keys($scope.datetime).some(function (key) {
|
|
return $scope.datetime[key];
|
|
});
|
|
|
|
// Treat empty input as an undefined value
|
|
if (!$scope.partiallyComplete) {
|
|
$scope.ngModel[$scope.field] = undefined;
|
|
}
|
|
}
|
|
|
|
function updateDateTime(value) {
|
|
var m;
|
|
if (value !== undefined) {
|
|
m = moment.utc(value);
|
|
$scope.datetime = {
|
|
date: m.format(DATE_FORMAT),
|
|
hour: m.format("H"),
|
|
min: m.format("m"),
|
|
sec: m.format("s")
|
|
};
|
|
} else {
|
|
$scope.datetime = {};
|
|
}
|
|
}
|
|
|
|
// ...and update form values when actual field in model changes
|
|
$scope.$watch("ngModel[field]", updateDateTime);
|
|
|
|
// Update value whenever any field changes.
|
|
$scope.$watch("datetime.date", update);
|
|
$scope.$watch("datetime.hour", update);
|
|
$scope.$watch("datetime.min", update);
|
|
$scope.$watch("datetime.sec", update);
|
|
|
|
// Initialize forms values
|
|
updateDateTime(
|
|
($scope.ngModel && $scope.field) ?
|
|
$scope.ngModel[$scope.field] : undefined
|
|
);
|
|
}
|
|
|
|
return DateTimeController;
|
|
|
|
}
|
|
); |