From 33b2225d107d8351398d40ec4119cf68d3a66e8b Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo <charlesh88@gmail.com> Date: Wed, 13 Jul 2016 18:48:17 -0700 Subject: [PATCH] [Frontend] Styling for Time Conductor v2 Fixes #933 In-progress: restructured markup to move modeModel farther out; animated icon --- .../browse/res/templates/browse-object.html | 2 +- .../res/sass/controls/_time-conductor.scss | 109 +++++++++- .../res/templates/time-conductor.html | 187 +++++++++--------- 3 files changed, 204 insertions(+), 94 deletions(-) diff --git a/platform/commonUI/browse/res/templates/browse-object.html b/platform/commonUI/browse/res/templates/browse-object.html index 86fb09d2ab5..0524519ca43 100644 --- a/platform/commonUI/browse/res/templates/browse-object.html +++ b/platform/commonUI/browse/res/templates/browse-object.html @@ -62,6 +62,6 @@ <!-- put time conductor in here? --> <mct-representation mct-object="domainObject" key="'time-conductor'" - class="abs holder flex-elem flex-fixed l-time-conductor-holder"> + class="abs holder flex-elem flex-fixed l-flex-row l-time-conductor-holder"> </mct-representation> </div> diff --git a/platform/commonUI/general/res/sass/controls/_time-conductor.scss b/platform/commonUI/general/res/sass/controls/_time-conductor.scss index 05a7f1fe113..3e62fa159e3 100644 --- a/platform/commonUI/general/res/sass/controls/_time-conductor.scss +++ b/platform/commonUI/general/res/sass/controls/_time-conductor.scss @@ -5,8 +5,94 @@ } } -.l-time-conductor { +@include keyframes(clock-hands) { + 0% { + @include transform(translate(-50%, -50%) rotate(0deg)); + } + 100% { + @include transform(translate(-50%, -50%) rotate(360deg)); + } +} + +.l-time-conductor-holder { $minW: 500px; + border-top: 1px solid $colorInteriorBorder; + min-width: $minW; + padding-top: $interiorMargin; +} + +.time-conductor-icon { + $c: $colorBtnBg; //$colorTimeCondKeyBg; + $d: 20px; + background: $c; + border-radius: 4px; + height: $d !important; + width: $d; + position: relative; + // Icon shape: brackets + &:before, + &:after { + content: ''; + background: $colorBodyBg; + position: absolute; + } + &:before { + $in: 7px; + left: $in; + top: 0; + right: $in; + bottom: 0; + + } + &:after { + $in: 4px; + left: $in; + top: $in; + right: $in; + bottom: $in; + } + + // Clock hands + div[class*="hand"] { + $handW: 2px; + $handH: 8px; + @include transform(translate(-50%, -50%)); + @include animation-iteration-count(infinite); + @include animation-timing-function(linear); + position: absolute; + height: $handW; + width: $handW; + left: 50%; + top: 50%; + z-index: 2; + &:before { + background-color: $c; + content: ''; + display: block; + position: absolute; + width: 100%; + bottom: -1px; + } + &.hand-little { + z-index: 2; + @include animation-duration(12s); + &:before { + //background: red; + height: ceil($handH * 0.7); + } + } + &.hand-big { + z-index: 1; + @include animation-duration(1s); + &:before { + //background: green; + height: $handH; + } + } + } +} + +.l-time-conductor { $knobHOffset: 0px; $rangeValPad: $interiorMargin; $rangeValOffset: $sliderKnobW + $interiorMargin; @@ -19,9 +105,6 @@ $glyphIconRealtime: '\43'; $glyphIconLatest: '\44'; - border-top: 1px solid $colorInteriorBorder; - padding-top: $interiorMargin; - min-width: $minW; position: relative; > .l-row-elem { @@ -126,10 +209,28 @@ .l-time-conductor-controls { margin-top: $interiorMargin; } + // Fixed + &.fixed-mode { + .time-conductor-icon div[class*="hand"] { + &.hand-little { + @include transform(rotate(120deg)); + } + } + } // Realtime, latest modes &.realtime-mode, &.latest-mode { + .time-conductor-icon { + background: $colorTimeCondKeyBg; + div[class*="hand"] { + @include animation-name(clock-hands); + &:before { + background: $colorTimeCondKeyBg; + } + } + } + .l-time-conductor-inputs-holder { .l-time-range-input-w { input[type="text"]:not(.error) { diff --git a/platform/features/conductor-v2/res/templates/time-conductor.html b/platform/features/conductor-v2/res/templates/time-conductor.html index 081b9812200..d0cff37f095 100644 --- a/platform/features/conductor-v2/res/templates/time-conductor.html +++ b/platform/features/conductor-v2/res/templates/time-conductor.html @@ -1,101 +1,110 @@ + <!-- Parent holder for time conductor. follow-mode | fixed-mode --> <div ng-controller="TimeConductorController as tcController" - class="l-time-conductor l-flex-col {{modeModel.selected}}-mode"> + class="holder grows flex-elem l-flex-row l-time-conductor {{modeModel.selected}}-mode"> + + <div class="flex-elem holder time-conductor-icon"> + <div class="hand-little"></div> + <div class="hand-big"></div> + </div> + + <div class="flex-elem holder grows l-flex-col l-time-conductor-inner"> <!-- Holds inputs and ticks --> - <div class="l-time-conductor-ticks l-row-elem l-flex-row flex-elem no-margin"> - <form class="abs l-time-conductor-inputs-holder" - ng-submit="tcController.updateBoundsFromForm(formModel)"> - <span class="l-time-range-w start-w"> - <span class="l-time-range-input-w start-date"> - <mct-control key="'datetime-field'" - structure="{ - format: 'utc', - validate: tcController.validateStart - }" - ng-model="formModel" - ng-mouseup="tcController.changing['start'] = true" - ng-blur="tcController.changing['start'] = false; tcController.updateBoundsFromForm(formModel)" - field="'start'" - class="time-range-input"> - </mct-control> + <div class="l-time-conductor-ticks l-row-elem l-flex-row flex-elem no-margin"> + <form class="abs l-time-conductor-inputs-holder" + ng-submit="tcController.updateBoundsFromForm(formModel)"> + <span class="l-time-range-w start-w"> + <span class="l-time-range-input-w start-date"> + <mct-control key="'datetime-field'" + structure="{ + format: 'utc', + validate: tcController.validateStart + }" + ng-model="formModel" + ng-mouseup="tcController.changing['start'] = true" + ng-blur="tcController.changing['start'] = false; tcController.updateBoundsFromForm(formModel)" + field="'start'" + class="time-range-input"> + </mct-control> + </span> + <span class="l-time-range-input-w time-delta start-delta" + ng-class="{'hide':(modeModel.selected === 'fixed')}"> + - + <mct-control key="'datetime-field'" + structure="{ + format: 'duration', + validate: tcController.validateStartDelta + }" + ng-model="formModel" + ng-mouseup="tcController.changing['startDelta'] = true" + ng-blur="tcController.changing['startDelta'] = false; tcController.updateDeltasFromForm(formModel)" + field="'startDelta'" + class="hrs-min-input"> + </mct-control> + </span> </span> - <span class="l-time-range-input-w time-delta start-delta" - ng-class="{'hide':(modeModel.selected === 'fixed')}"> - - - <mct-control key="'datetime-field'" - structure="{ - format: 'duration', - validate: tcController.validateStartDelta - }" - ng-model="formModel" - ng-mouseup="tcController.changing['startDelta'] = true" - ng-blur="tcController.changing['startDelta'] = false; tcController.updateDeltasFromForm(formModel)" - field="'startDelta'" - class="hrs-min-input"> - </mct-control> - </span> - </span> - <span class="l-time-range-w end-w"> - <span class="l-time-range-input-w time-delta end-delta" - ng-class="{'hide':(modeModel.selected === 'fixed')}"> - + - <mct-control key="'datetime-field'" - structure="{ - format: 'duration', - validate: tcController.validateEndDelta - }" - ng-model="formModel" - ng-mouseup="tcController.changing['endDelta'] = true" - ng-blur="tcController.changing['endDelta'] = false; tcController.updateDeltasFromForm(formModel)" - field="'endDelta'" - class="hrs-min-input"> - </mct-control> - </span> - <span class="l-time-range-input-w end-date" - ng-controller="ToggleController as t2"> - <mct-control key="'datetime-field'" - structure="{ - format: 'utc', - validate: tcController.validateEnd - }" - ng-model="formModel" - ng-mouseup="tcController.changing['end'] = true" - ng-blur="tcController.changing['end'] = false; tcController.updateBoundsFromForm(formModel)" - field="'end'" - class="time-range-input"> - </mct-control> + <span class="l-time-range-w end-w"> + <span class="l-time-range-input-w time-delta end-delta" + ng-class="{'hide':(modeModel.selected === 'fixed')}"> + + + <mct-control key="'datetime-field'" + structure="{ + format: 'duration', + validate: tcController.validateEndDelta + }" + ng-model="formModel" + ng-mouseup="tcController.changing['endDelta'] = true" + ng-blur="tcController.changing['endDelta'] = false; tcController.updateDeltasFromForm(formModel)" + field="'endDelta'" + class="hrs-min-input"> + </mct-control> + </span> + <span class="l-time-range-input-w end-date" + ng-controller="ToggleController as t2"> + <mct-control key="'datetime-field'" + structure="{ + format: 'utc', + validate: tcController.validateEnd + }" + ng-model="formModel" + ng-mouseup="tcController.changing['end'] = true" + ng-blur="tcController.changing['end'] = false; tcController.updateBoundsFromForm(formModel)" + field="'end'" + class="time-range-input"> + </mct-control> + </span> </span> - </span> - <input type="submit" class="hidden"> - </form> - <mct-conductor-axis></mct-conductor-axis> - </div> + <input type="submit" class="hidden"> + </form> + <mct-conductor-axis></mct-conductor-axis> + </div> - <!-- Holds data availability, time of interest --> - <div class="l-data-visualization l-row-elem l-flex-row flex-elem"></div> + <!-- Holds data availability, time of interest --> + <div class="l-data-visualization l-row-elem l-flex-row flex-elem"></div> - <!-- Holds time system and session selectors, and zoom control --> - <div class="l-time-conductor-controls l-row-elem l-flex-row flex-elem"> - <mct-representation - key="'mode-selector'" - mct-object="domainObject" - ng-model="modeModel" - class="holder flex-elem menus-up mode-selector"> - </mct-representation> - <mct-control - key="'menu-button'" - class="holder flex-elem menus-up time-system" - ng-model="conductorModel.timeSystem" - structure="{ - text: 'UTC', - options: [ - {name: 'UTC', key:'utc', glyph:'\u0043'}, - {name: 'SCET', key:'scet', glyph:'\u0043'}, - {name: 'SCLK', key:'sclk', glyph:'\u0043'} - ]}"> - </mct-control> + <!-- Holds time system and session selectors, and zoom control --> + <div class="l-time-conductor-controls l-row-elem l-flex-row flex-elem"> + <mct-representation + key="'mode-selector'" + mct-object="domainObject" + ng-model="modeModel" + class="holder flex-elem menus-up mode-selector"> + </mct-representation> + <mct-control + key="'menu-button'" + class="holder flex-elem menus-up time-system" + ng-model="conductorModel.timeSystem" + structure="{ + text: 'UTC', + options: [ + {name: 'UTC', key:'utc', glyph:'\u0043'}, + {name: 'SCET', key:'scet', glyph:'\u0043'}, + {name: 'SCLK', key:'sclk', glyph:'\u0043'} + ]}"> + </mct-control> + </div> </div> </div> \ No newline at end of file