From 27fa56d838bf553eb666d5d9c2a5ecf3353134cc Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 9 Dec 2015 12:33:11 -0800 Subject: [PATCH] [Clocks/Timers] Update code style for controllers --- .../clock/src/controllers/ClockController.js | 68 +++++----- .../src/controllers/RefreshingController.js | 6 + .../clock/src/controllers/TimerController.js | 120 ++++++++++-------- .../clock/src/controllers/TimerFormatter.js | 64 +++++----- 4 files changed, 136 insertions(+), 122 deletions(-) diff --git a/platform/features/clock/src/controllers/ClockController.js b/platform/features/clock/src/controllers/ClockController.js index eba2a07e27..387c8d44ad 100644 --- a/platform/features/clock/src/controllers/ClockController.js +++ b/platform/features/clock/src/controllers/ClockController.js @@ -30,19 +30,21 @@ define( * 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 text, - ampm, - use24, - lastTimestamp, + var lastTimestamp, unlisten, - timeFormat; + timeFormat, + self = this; function update() { var m = moment.utc(lastTimestamp); - text = timeFormat && m.format(timeFormat); - ampm = m.format("A"); // Just the AM or PM part + self.textValue = timeFormat && m.format(timeFormat); + self.ampmValue = m.format("A"); // Just the AM or PM part } function tick(timestamp) { @@ -56,8 +58,8 @@ define( if (clockFormat !== undefined) { baseFormat = clockFormat[0]; - use24 = clockFormat[1] === 'clock24'; - timeFormat = use24 ? + self.use24 = clockFormat[1] === 'clock24'; + timeFormat = self.use24 ? baseFormat.replace('hh', "HH") : baseFormat; update(); @@ -69,32 +71,32 @@ define( // Listen for clock ticks ... and stop listening on destroy unlisten = tickerService.listen(tick); $scope.$on('$destroy', unlisten); - - return { - /** - * Get the clock's time zone, as displayable text. - * @returns {string} - */ - zone: function () { - return "UTC"; - }, - /** - * Get the current time, as displayable text. - * @returns {string} - */ - text: function () { - return text; - }, - /** - * Get the text to display to qualify a time as AM or PM. - * @returns {string} - */ - ampm: function () { - return use24 ? '' : ampm; - } - }; } + /** + * Get the clock's time zone, as displayable text. + * @returns {string} + */ + ClockController.prototype.zone = function () { + return "UTC"; + }; + + /** + * 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; } ); diff --git a/platform/features/clock/src/controllers/RefreshingController.js b/platform/features/clock/src/controllers/RefreshingController.js index 4853da0f57..30d4d7841e 100644 --- a/platform/features/clock/src/controllers/RefreshingController.js +++ b/platform/features/clock/src/controllers/RefreshingController.js @@ -31,6 +31,12 @@ define( * * This is a short-term workaround to assure Timer views stay * up-to-date; should be replaced by a global auto-refresh. + * + * @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 RefreshingController($scope, tickerService) { var unlisten; diff --git a/platform/features/clock/src/controllers/TimerController.js b/platform/features/clock/src/controllers/TimerController.js index 6bde70dd29..79d52e8bfe 100644 --- a/platform/features/clock/src/controllers/TimerController.js +++ b/platform/features/clock/src/controllers/TimerController.js @@ -33,26 +33,30 @@ define( * Controller for views of a Timer domain object. * * @constructor + * @memberof platform/features/clock + * @param {angular.Scope} $scope the Angular scope + * @param $window Angular-provided window object + * @param {Function} now a function which returns the current + * time (typically wrapping `Date.now`) */ function TimerController($scope, $window, now) { var timerObject, - relevantAction, - sign = '', - text = '', formatter, active = true, relativeTimestamp, - lastTimestamp; + lastTimestamp, + self = this; function update() { var timeDelta = lastTimestamp - relativeTimestamp; if (formatter && !isNaN(timeDelta)) { - text = formatter(timeDelta); - sign = timeDelta < 0 ? "-" : timeDelta >= 1000 ? "+" : ""; + self.textValue = formatter(timeDelta); + self.signValue = timeDelta < 0 ? "-" : + timeDelta >= 1000 ? "+" : ""; } else { - text = ""; - sign = ""; + self.textValue = ""; + self.signValue = ""; } } @@ -75,7 +79,7 @@ define( updateFormat(formatKey); updateTimestamp(timestamp); - relevantAction = actionCapability && + self.relevantAction = actionCapability && actionCapability.getActions(actionKey)[0]; update(); @@ -92,13 +96,14 @@ define( } function tick() { - var lastSign = sign, lastText = text; + var lastSign = self.signValue, + lastText = self.textValue; lastTimestamp = now(); update(); // We're running in an animation frame, not in a digest cycle. // We need to trigger a digest cycle if our displayable data // changes. - if (lastSign !== sign || lastText !== text) { + if (lastSign !== self.signValue || lastText !== self.textValue) { $scope.$apply(); } if (active) { @@ -117,51 +122,58 @@ define( active = false; }); - return { - /** - * Get the glyph to display for the start/restart button. - * @returns {string} glyph to display - */ - buttonGlyph: function () { - return relevantAction ? - relevantAction.getMetadata().glyph : ""; - }, - /** - * Get the text to show for the start/restart button - * (e.g. in a tooltip) - * @returns {string} name of the action - */ - buttonText: function () { - return relevantAction ? - relevantAction.getMetadata().name : ""; - }, - /** - * Perform the action associated with the start/restart button. - */ - clickButton: function () { - if (relevantAction) { - relevantAction.perform(); - updateObject($scope.domainObject); - } - }, - /** - * Get the sign (+ or -) of the current timer value, as - * displayable text. - * @returns {string} sign of the current timer value - */ - sign: function () { - return sign; - }, - /** - * Get the text to display for the current timer value. - * @returns {string} current timer value - */ - text: function () { - return text; - } - }; + this.signValue = ''; + this.textValue = ''; + this.updateObject = updateObject; } + /** + * Get the glyph to display for the start/restart button. + * @returns {string} glyph to display + */ + TimerController.prototype.buttonGlyph = function () { + return this.relevantAction ? + this.relevantAction.getMetadata().glyph : ""; + }; + + /** + * Get the text to show for the start/restart button + * (e.g. in a tooltip) + * @returns {string} name of the action + */ + TimerController.prototype.buttonText = function () { + return this.relevantAction ? + this.relevantAction.getMetadata().name : ""; + }; + + + /** + * Perform the action associated with the start/restart button. + */ + TimerController.prototype.clickButton = function () { + if (this.relevantAction) { + this.relevantAction.perform(); + this.updateObject(this.$scope.domainObject); + } + }; + + /** + * Get the sign (+ or -) of the current timer value, as + * displayable text. + * @returns {string} sign of the current timer value + */ + TimerController.prototype.sign = function () { + return this.signValue; + }; + + /** + * Get the text to display for the current timer value. + * @returns {string} current timer value + */ + TimerController.prototype.text = function () { + return this.textValue; + }; + return TimerController; } ); diff --git a/platform/features/clock/src/controllers/TimerFormatter.js b/platform/features/clock/src/controllers/TimerFormatter.js index bea92b38f4..e9ebb79a6b 100644 --- a/platform/features/clock/src/controllers/TimerFormatter.js +++ b/platform/features/clock/src/controllers/TimerFormatter.js @@ -37,45 +37,39 @@ define( * supports `TimerController`. * * @constructor + * @memberof platform/features/clock */ function TimerFormatter() { - - // Round this timestamp down to the second boundary - // (e.g. 1124ms goes down to 1000ms, -2400ms goes down to -3000ms) - function toWholeSeconds(duration) { - return Math.abs(Math.floor(duration / 1000) * 1000); - } - - // Short-form format, e.g. 02:22:11 - function short(duration) { - return moment.duration(toWholeSeconds(duration), 'ms') - .format(SHORT_FORMAT, { trim: false }); - } - - // Long-form format, e.g. 3d 02:22:11 - function long(duration) { - return moment.duration(toWholeSeconds(duration), 'ms') - .format(LONG_FORMAT, { trim: false }); - } - - return { - /** - * Format a duration for display, using the short form. - * (e.g. 03:33:11) - * @param {number} duration the duration, in milliseconds - * @param {boolean} sign true if positive - */ - short: short, - /** - * Format a duration for display, using the long form. - * (e.g. 0d 03:33:11) - * @param {number} duration the duration, in milliseconds - * @param {boolean} sign true if positive - */ - long: long - }; } + // Round this timestamp down to the second boundary + // (e.g. 1124ms goes down to 1000ms, -2400ms goes down to -3000ms) + function toWholeSeconds(duration) { + return Math.abs(Math.floor(duration / 1000) * 1000); + } + + /** + * Format a duration for display, using the short form. + * (e.g. 03:33:11) + * @param {number} duration the duration, in milliseconds + * @param {boolean} sign true if positive + */ + TimerFormatter.prototype.short = function (duration) { + return moment.duration(toWholeSeconds(duration), 'ms') + .format(SHORT_FORMAT, { trim: false }); + }; + + /** + * Format a duration for display, using the long form. + * (e.g. 0d 03:33:11) + * @param {number} duration the duration, in milliseconds + * @param {boolean} sign true if positive + */ + TimerFormatter.prototype.long = function (duration) { + return moment.duration(toWholeSeconds(duration), 'ms') + .format(LONG_FORMAT, { trim: false }); + }; + return TimerFormatter; } );