/***************************************************************************** * Open MCT, Copyright (c) 2009-2016, United States Government * as represented by the Administrator of the National Aeronautics and Space * Administration. All rights reserved. * * Open MCT 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 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. *****************************************************************************/ define([ 'moment', 'moment-timezone' ], function ( moment, momentTimezone ) { /** * Controller for views of a Clock domain object. * * @constructor * @memberof platform/features/clock * @param {angular.Scope} $scope the Angular scope * @param {platform/features/clock.TickerService} tickerService * a service used to align behavior with clock ticks */ function ClockController($scope, tickerService) { var lastTimestamp, unlisten, timeFormat, zoneName, self = this; function update() { var m = zoneName ? moment.utc(lastTimestamp).tz(zoneName) : moment.utc(lastTimestamp); self.zoneAbbr = m.zoneAbbr(); self.textValue = timeFormat && m.format(timeFormat); self.ampmValue = m.format("A"); // Just the AM or PM part } function tick(timestamp) { lastTimestamp = timestamp; update(); } function updateModel(model) { var baseFormat; if (model !== undefined) { baseFormat = model.clockFormat[0]; self.use24 = model.clockFormat[1] === 'clock24'; timeFormat = self.use24 ? baseFormat.replace('hh', "HH") : baseFormat; // If wrong timezone is provided, the UTC will be used zoneName = momentTimezone.tz.names().includes(model.timezone) ? model.timezone : "UTC"; update(); } } // Pull in the model (clockFormat and timezone) from the domain object model $scope.$watch('model', updateModel); // Listen for clock ticks ... and stop listening on destroy unlisten = tickerService.listen(tick); $scope.$on('$destroy', unlisten); } /** * Get the clock's time zone, as displayable text. * @returns {string} */ ClockController.prototype.zone = function () { return this.zoneAbbr; }; /** * Get the current time, as displayable text. * @returns {string} */ ClockController.prototype.text = function () { return this.textValue; }; /** * Get the text to display to qualify a time as AM or PM. * @returns {string} */ ClockController.prototype.ampm = function () { return this.use24 ? '' : this.ampmValue; }; return ClockController; } );