Merge remote-tracking branch 'github/master' into open181

Conflicts:
	platform/commonUI/general/res/templates/controls/time-controller.html
This commit is contained in:
Victor Woeltjen 2015-10-21 14:40:42 -07:00
commit 608800ae63
32 changed files with 1295 additions and 731 deletions

View File

@ -34,6 +34,10 @@
{
"key": "time",
"name": "Time"
},
{
"key": "yesterday",
"name": "Yesterday"
}
],
"ranges": [
@ -61,4 +65,4 @@
}
]
}
}
}

View File

@ -29,23 +29,25 @@ define(
function () {
"use strict";
var firstObservedTime = Math.floor(Date.now() / 1000);
var ONE_DAY = 60 * 60 * 24,
firstObservedTime = Math.floor(Date.now() / 1000) - ONE_DAY;
/**
*
* @constructor
*/
function SinewaveTelemetrySeries(request) {
var latestObservedTime = Math.floor(Date.now() / 1000),
var timeOffset = (request.domain === 'yesterday') ? ONE_DAY : 0,
latestTime = Math.floor(Date.now() / 1000) - timeOffset,
firstTime = firstObservedTime - timeOffset,
endTime = (request.end !== undefined) ?
Math.floor(request.end / 1000) : latestObservedTime,
count =
Math.min(endTime, latestObservedTime) - firstObservedTime,
period = request.period || 30,
Math.floor(request.end / 1000) : latestTime,
count = Math.min(endTime, latestTime) - firstTime,
period = +request.period || 30,
generatorData = {},
offset = (request.start !== undefined) ?
Math.floor(request.start / 1000) - firstObservedTime :
0;
requestStart = (request.start === undefined) ? firstTime :
Math.max(Math.floor(request.start / 1000), firstTime),
offset = requestStart - firstTime;
if (request.size !== undefined) {
offset = Math.max(offset, count - request.size);
@ -56,8 +58,8 @@ define(
};
generatorData.getDomainValue = function (i, domain) {
return (i + offset) * 1000 +
(domain !== 'delta' ? (firstObservedTime * 1000) : 0);
return (i + offset) * 1000 + firstTime * 1000 -
(domain === 'yesterday' ? ONE_DAY : 0);
};
generatorData.getRangeValue = function (i, range) {

View File

@ -375,20 +375,6 @@
overflow-y: $showBar;
}
@mixin wait-spinner($b: 5px, $c: $colorAlt1) {
display: block;
position: absolute;
-webkit-animation: rotation .6s infinite linear;
-moz-animation: rotation .6s infinite linear;
-o-animation: rotation .6s infinite linear;
animation: rotation .6s infinite linear;
border-color: rgba($c, 0.25);
border-top-color: rgba($c, 1.0);
border-style: solid;
border-width: $b;
border-radius: 100%;
}
@mixin test($c: #ffcc00, $a: 0.2) {
background-color: rgba($c, $a) !important;
}

View File

@ -356,7 +356,7 @@ label.checkbox.custom {
.l-month-year-pager {
$pagerW: 20px;
//@include test();
font-size: 0.8rem;
//font-size: 0.8rem;
height: $r1H;
margin-bottom: $interiorMargin;
position: relative;

View File

@ -10,8 +10,8 @@
}
.l-time-controller {
$minW: 400px;
mct-include.l-time-controller {
$minW: 500px;
$knobHOffset: 0px;
$knobM: ($sliderKnobW + $knobHOffset) * -1;
$rangeValPad: $interiorMargin;
@ -22,11 +22,17 @@
$r2H: nth($ueTimeControlH,2);
$r3H: nth($ueTimeControlH,3);
//height: $r1H + $r2H + $r3H + ($interiorMargin * 2);
@include absPosDefault();
//@include test();
display: block;
top: auto;
height: $r1H + $r2H + $r3H + ($interiorMargin * 2);
min-width: $minW;
font-size: 0.8rem;
.l-time-range-inputs-holder,
.l-time-range-slider {
font-size: 0.8em;
//font-size: 0.8em;
}
.l-time-range-inputs-holder,
@ -36,7 +42,6 @@
//@include test();
@include absPosDefault(0, visible);
@include box-sizing(border-box);
min-width: $minW;
top: auto;
}
.l-time-range-slider,
@ -141,7 +146,7 @@
@include webkitProp(transform, translateX(-50%));
color: $colorPlotLabelFg;
display: inline-block;
font-size: 0.7em;
font-size: 0.9em;
position: absolute;
top: 8px;
white-space: nowrap;

View File

@ -19,24 +19,45 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(359deg);}
@include keyframes(rotation) {
0% { transform: rotate(0deg); }
100% { transform: rotate(359deg); }
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(359deg);}
@mixin wait-spinner2($b: 5px, $c: $colorAlt1) {
@include keyframes(rotateCentered) {
0% { transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% { transform: translateX(-50%) translateY(-50%) rotate(359deg); }
}
@include animation-name(rotateCentered);
@include animation-duration(0.5s);
@include animation-iteration-count(infinite);
@include animation-timing-function(linear);
border-color: rgba($c, 0.25);
border-top-color: rgba($c, 1.0);
border-style: solid;
border-width: 5px;
@include border-radius(100%);
@include box-sizing(border-box);
display: block;
position: absolute;
height: 0; width: 0;
padding: 7%;
left: 50%; top: 50%;
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(359deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(359deg);}
@mixin wait-spinner($b: 5px, $c: $colorAlt1) {
display: block;
position: absolute;
-webkit-animation: rotation .6s infinite linear;
-moz-animation: rotation .6s infinite linear;
-o-animation: rotation .6s infinite linear;
animation: rotation .6s infinite linear;
border-color: rgba($c, 0.25);
border-top-color: rgba($c, 1.0);
border-style: solid;
border-width: $b;
@include border-radius(100%);
}
.t-wait-spinner,
@ -96,4 +117,28 @@
margin-top: 0 !important;
padding: 0 !important;
top: 0; left: 0;
}
.loading {
// Can be applied to any block element with height and width
pointer-events: none;
&:before,
&:after {
content: '';
}
&:before {
@include wait-spinner2(5px, $colorLoadingFg);
z-index: 10;
}
&:after {
@include absPosDefault();
background: $colorLoadingBg;
display: block;
z-index: 9;
}
&.tree-item:before {
padding: $menuLineH / 4;
border-width: 2px;
}
}

View File

@ -214,8 +214,6 @@
.search-scroll {
order: 3;
//padding-right: $rightPadding;
margin-top: 4px;
// Adjustable scrolling size
@ -227,28 +225,6 @@
.load-icon {
position: relative;
&.loading {
pointer-events: none;
margin-left: $leftMargin;
.title-label {
// Text styling
font-style: italic;
font-size: .9em;
opacity: 0.5;
// Text positioning
margin-left: $iconWidth + $leftMargin;
line-height: 24px;
}
.wait-spinner {
margin-left: $leftMargin;
}
}
&:not(.loading) {
cursor: pointer;
}
}
.load-more-button {

View File

@ -83,7 +83,6 @@ ul.tree {
.icon {
&.l-icon-link,
&.l-icon-alert {
//@include txtShdw($shdwItemTreeIcon);
position: absolute;
z-index: 2;
}
@ -105,26 +104,12 @@ ul.tree {
@include absPosDefault();
display: block;
left: $runningItemW + ($interiorMargin * 3);
//right: $treeContextTriggerW + $interiorMargin;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
&.loading {
pointer-events: none;
.label {
opacity: 0.5;
.title-label {
font-style: italic;
}
}
.wait-spinner {
margin-left: 14px;
}
}
&.selected {
background: $colorItemTreeSelectedBg;
color: $colorItemTreeSelectedFg;
@ -142,9 +127,6 @@ ul.tree {
&:hover {
background: rgba($colorBodyFg, 0.1); //lighten($colorBodyBg, 5%);
color: pullForward($colorBodyFg, 20%);
//.context-trigger {
// display: block;
//}
.icon {
color: $colorItemTreeIconHover;
}
@ -158,7 +140,6 @@ ul.tree {
.context-trigger {
$h: 0.9rem;
//display: none;
top: -1px;
position: absolute;
right: $interiorMarginSm;

View File

@ -294,9 +294,7 @@
}
&.l-controls-visible {
&.l-time-controller-visible {
> ng-include {
bottom: nth($ueTimeControlH,1) + nth($ueTimeControlH,2) +nth($ueTimeControlH,3) + ($interiorMargin * 3);
}
bottom: nth($ueTimeControlH,1) + nth($ueTimeControlH,2) +nth($ueTimeControlH,3) + ($interiorMargin * 3);
}
}
}

View File

@ -19,16 +19,14 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<!-- MINE -->
<div class="l-time-controller" ng-controller="TimeRangeController">
<div ng-controller="TimeRangeController">
<div class="l-time-range-inputs-holder">
<span class="l-time-range-inputs-elem ui-symbol type-icon">&#x43;</span>
<span class="l-time-range-input" ng-controller="ToggleController as t1">
<!--<span class="lbl">Start</span>-->
<span class="s-btn time-range-start">
<input type="text" ng-model="boundsModel.start"></input>
<a class="ui-symbol icon icon-calendar" ng-click="t1.toggle()">
</a>
<a class="ui-symbol icon icon-calendar" ng-click="t1.toggle()"></a>
<mct-popup ng-if="t1.isActive()">
<div mct-click-elsewhere="t1.setState(false)">
<mct-control key="'datetime-picker'"

View File

@ -35,6 +35,8 @@ define(
*/
function TimeConductorController($scope, now) {
var tickCount = 2,
innerMinimumSpan = 1000, // 1 second
outerMinimumSpan = 1000 * 60 * 60, // 1 hour
initialDragValue;
function formatTimestamp(ts) {
@ -139,7 +141,7 @@ define(
$scope.ngModel.inner.start = clamp(
initialDragValue + delta,
$scope.ngModel.outer.start,
$scope.ngModel.inner.end
$scope.ngModel.inner.end - innerMinimumSpan
);
updateViewFromModel($scope.ngModel);
}
@ -148,7 +150,7 @@ define(
var delta = toMillis(pixels);
$scope.ngModel.inner.end = clamp(
initialDragValue + delta,
$scope.ngModel.inner.start,
$scope.ngModel.inner.start + innerMinimumSpan,
$scope.ngModel.outer.end
);
updateViewFromModel($scope.ngModel);
@ -174,12 +176,18 @@ define(
function updateOuterStart(t) {
var ngModel = $scope.ngModel;
ngModel.outer.end =
Math.max(ngModel.outer.start, ngModel.outer.end);
ngModel.outer.end = Math.max(
ngModel.outer.start + outerMinimumSpan,
ngModel.outer.end
);
ngModel.inner.start =
Math.max(ngModel.outer.start, ngModel.inner.start);
ngModel.inner.end =
Math.max(ngModel.outer.start, ngModel.inner.end);
ngModel.inner.end = Math.max(
ngModel.inner.start + innerMinimumSpan,
ngModel.inner.end
);
$scope.startOuterText = formatTimestamp(t);
@ -188,12 +196,18 @@ define(
function updateOuterEnd(t) {
var ngModel = $scope.ngModel;
ngModel.outer.start =
Math.min(ngModel.outer.end, ngModel.outer.start);
ngModel.inner.start =
Math.min(ngModel.outer.end, ngModel.inner.start);
ngModel.outer.start = Math.min(
ngModel.outer.end - outerMinimumSpan,
ngModel.outer.start
);
ngModel.inner.end =
Math.min(ngModel.outer.end, ngModel.inner.end);
ngModel.inner.start = Math.min(
ngModel.inner.end - innerMinimumSpan,
ngModel.inner.start
);
$scope.endOuterText = formatTimestamp(t);

View File

@ -26,6 +26,11 @@ define(
function (TimeRangeController) {
"use strict";
var SEC = 1000,
MIN = 60 * SEC,
HOUR = 60 * MIN,
DAY = 24 * HOUR;
describe("The TimeRangeController", function () {
var mockScope,
mockNow,
@ -61,6 +66,107 @@ define(
.toHaveBeenCalledWith("ngModel", jasmine.any(Function));
});
describe("when dragged", function () {
beforeEach(function () {
mockScope.ngModel = {
outer: {
start: DAY * 1000,
end: DAY * 1001
},
inner: {
start: DAY * 1000 + HOUR * 3,
end: DAY * 1001 - HOUR * 3
}
};
mockScope.spanWidth = 1000;
fireWatch("spanWidth", mockScope.spanWidth);
fireWatchCollection("ngModel", mockScope.ngModel);
});
it("updates the start time for left drags", function () {
mockScope.startLeftDrag();
mockScope.leftDrag(250);
expect(mockScope.ngModel.inner.start)
.toEqual(DAY * 1000 + HOUR * 9);
});
it("updates the end time for right drags", function () {
mockScope.startRightDrag();
mockScope.rightDrag(-250);
expect(mockScope.ngModel.inner.end)
.toEqual(DAY * 1000 + HOUR * 15);
});
it("updates both start and end for middle drags", function () {
mockScope.startMiddleDrag();
mockScope.middleDrag(-125);
expect(mockScope.ngModel.inner).toEqual({
start: DAY * 1000,
end: DAY * 1000 + HOUR * 18
});
mockScope.middleDrag(250);
expect(mockScope.ngModel.inner).toEqual({
start: DAY * 1000 + HOUR * 6,
end: DAY * 1001
});
});
it("enforces a minimum inner span", function () {
mockScope.startRightDrag();
mockScope.rightDrag(-9999999);
expect(mockScope.ngModel.inner.end)
.toBeGreaterThan(mockScope.ngModel.inner.start);
});
});
describe("when outer bounds are changed", function () {
beforeEach(function () {
mockScope.ngModel = {
outer: {
start: DAY * 1000,
end: DAY * 1001
},
inner: {
start: DAY * 1000 + HOUR * 3,
end: DAY * 1001 - HOUR * 3
}
};
mockScope.spanWidth = 1000;
fireWatch("spanWidth", mockScope.spanWidth);
fireWatchCollection("ngModel", mockScope.ngModel);
});
it("enforces a minimum outer span", function () {
mockScope.ngModel.outer.end =
mockScope.ngModel.outer.start - DAY * 100;
fireWatch(
"ngModel.outer.end",
mockScope.ngModel.outer.end
);
expect(mockScope.ngModel.outer.end)
.toBeGreaterThan(mockScope.ngModel.outer.start);
mockScope.ngModel.outer.start =
mockScope.ngModel.outer.end + DAY * 100;
fireWatch(
"ngModel.outer.start",
mockScope.ngModel.outer.start
);
expect(mockScope.ngModel.outer.end)
.toBeGreaterThan(mockScope.ngModel.outer.start);
});
it("enforces a minimum inner span when outer span changes", function () {
mockScope.ngModel.outer.end =
mockScope.ngModel.outer.start - DAY * 100;
fireWatch(
"ngModel.outer.end",
mockScope.ngModel.outer.end
);
expect(mockScope.ngModel.inner.end)
.toBeGreaterThan(mockScope.ngModel.inner.start);
});
});
});
}

View File

@ -1059,27 +1059,22 @@ mct-container {
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg); }
to {
-webkit-transform: rotate(359deg); } }
@-moz-keyframes rotation {
from {
-moz-transform: rotate(0deg); }
to {
-moz-transform: rotate(359deg); } }
@-o-keyframes rotation {
from {
-o-transform: rotate(0deg); }
to {
-o-transform: rotate(359deg); } }
@keyframes rotation {
from {
0% {
transform: rotate(0deg); }
to {
100% {
transform: rotate(359deg); } }
/* line 42, ../../../../general/res/sass/helpers/_wait-spinner.scss */
@-webkit-keyframes rotation {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(359deg); } }
@keyframes rotation {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(359deg); } }
/* line 63, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.t-wait-spinner,
.wait-spinner {
display: block;
@ -1092,6 +1087,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.5em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
top: 50%;
left: 50%;
@ -1102,7 +1099,7 @@ mct-container {
margin-top: -5%;
margin-left: -5%;
z-index: 2; }
/* line 53, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 74, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.t-wait-spinner.inline,
.wait-spinner.inline {
display: inline-block !important;
@ -1110,26 +1107,26 @@ mct-container {
position: relative !important;
vertical-align: middle; }
/* line 61, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 82, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder {
pointer-events: none;
position: absolute; }
/* line 65, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 86, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.align-left .t-wait-spinner {
left: 0;
margin-left: 0; }
/* line 70, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.full-size {
display: inline-block;
height: 100%;
width: 100%; }
/* line 73, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 94, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.full-size .t-wait-spinner {
top: 0;
margin-top: 0;
padding: 30%; }
/* line 82, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 103, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.treeview .wait-spinner {
display: block;
position: absolute;
@ -1141,6 +1138,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.25em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
height: 10px;
width: 10px;
@ -1149,7 +1148,7 @@ mct-container {
top: 2px;
left: 0; }
/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 112, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.wait-spinner.sm {
display: block;
position: absolute;
@ -1161,6 +1160,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.25em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
height: 13px;
width: 13px;
@ -1170,6 +1171,77 @@ mct-container {
top: 0;
left: 0; }
/* line 122, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading {
pointer-events: none; }
/* line 125, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:before, .loading:after {
content: ''; }
/* line 129, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:before {
-moz-animation-name: rotateCentered;
-webkit-animation-name: rotateCentered;
animation-name: rotateCentered;
-moz-animation-duration: 0.5s;
-webkit-animation-duration: 0.5s;
animation-duration: 0.5s;
-moz-animation-iteration-count: infinite;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
border-color: rgba(255, 199, 0, 0.25);
border-top-color: #ffc700;
border-style: solid;
border-width: 5px;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: block;
position: absolute;
height: 0;
width: 0;
padding: 7%;
left: 50%;
top: 50%;
z-index: 10; }
@-moz-keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
@-webkit-keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
@keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
/* line 133, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:after {
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
background: rgba(153, 153, 153, 0.2);
display: block;
z-index: 9; }
/* line 139, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading.tree-item:before {
padding: 0.375rem;
border-width: 2px; }
/* Styles for messages */
/* line 4, ../../../../general/res/sass/_messages.scss */
.message.block {
@ -1938,7 +2010,6 @@ label.checkbox.custom {
width: 230px; }
/* line 356, ../../../../general/res/sass/controls/_controls.scss */
.l-datetime-picker .l-month-year-pager {
font-size: 0.8rem;
height: 15px;
margin-bottom: 5px;
position: relative; }
@ -2378,206 +2449,216 @@ label.checkbox.custom {
right: 0;
width: auto; }
/* line 27, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder,
.l-time-controller .l-time-range-slider {
font-size: 0.8em; }
/* line 32, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder,
.l-time-controller .l-time-range-slider-holder,
.l-time-controller .l-time-range-ticks-holder {
overflow: visible;
/* line 13, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller {
overflow: hidden;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
min-width: 400px;
top: auto; }
/* line 42, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider,
.l-time-controller .l-time-range-ticks {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
left: 150px;
right: 150px; }
/* line 49, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder {
height: 33px;
bottom: 46px;
padding-top: 5px;
border-top: 1px solid rgba(153, 153, 153, 0.1); }
/* line 54, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .type-icon {
font-size: 120%;
vertical-align: middle; }
/* line 58, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem {
margin-right: 5px; }
/* line 61, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input .lbl,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .lbl {
color: #666666; }
/* line 64, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon, .l-time-controller .l-time-range-inputs-holder .l-time-range-input .l-datetime-picker .l-month-year-pager .icon.pager, .l-datetime-picker .l-month-year-pager .l-time-controller .l-time-range-inputs-holder .l-time-range-input .icon.pager,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .ui-symbol.icon,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .l-datetime-picker .l-month-year-pager .icon.pager,
.l-datetime-picker .l-month-year-pager .l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .icon.pager {
font-size: 11px;
width: 11px; }
/* line 71, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder {
height: 20px;
bottom: 23px; }
/* line 74, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
background: none;
border: none; }
/* line 79, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line {
-moz-transform: translateX(50%);
-ms-transform: translateX(50%);
-webkit-transform: translateX(50%);
transform: translateX(50%);
position: absolute;
top: 0;
right: 0;
bottom: 0px;
left: auto;
width: 8px;
height: auto;
z-index: 2; }
/* line 89, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before, .l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
background-color: #00c2ff;
content: "";
position: absolute; }
/* line 95, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before {
top: 0;
right: auto;
bottom: -10px;
left: 3px;
width: 2px; }
/* line 101, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
top: 50%;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: 8px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:before, .l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:after {
background-color: #fff; }
/* line 117, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder:not(:active) .knob,
.l-time-controller .l-time-range-slider-holder:not(:active) .range {
-moz-transition-property: left, right;
-o-transition-property: left, right;
-webkit-transition-property: left, right;
transition-property: left, right;
-moz-transition-duration: 500ms;
-o-transition-duration: 500ms;
-webkit-transition-duration: 500ms;
transition-duration: 500ms;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out; }
/* line 126, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder {
height: 20px; }
/* line 128, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks {
border-top: 1px solid rgba(255, 255, 255, 0.2); }
/* line 130, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick {
background-color: rgba(255, 255, 255, 0.2);
border: none;
height: 5px;
width: 1px;
margin-left: -1px;
position: absolute; }
/* line 137, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick:first-child {
margin-left: 0; }
/* line 140, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick .l-time-range-tick-label {
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
color: #666666;
display: inline-block;
font-size: 0.7em;
position: absolute;
top: 8px;
white-space: nowrap;
z-index: 2; }
/* line 154, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob {
z-index: 2; }
/* line 156, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob .range-value {
-moz-transition-property: visibility, opacity, background-color, border-color;
-o-transition-property: visibility, opacity, background-color, border-color;
-webkit-transition-property: visibility, opacity, background-color, border-color;
transition-property: visibility, opacity, background-color, border-color;
-moz-transition-duration: 0.25s;
-o-transition-duration: 0.25s;
-webkit-transition-duration: 0.25s;
transition-duration: 0.25s;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
padding: 0 10px;
display: block;
top: auto;
height: 83px;
min-width: 500px;
font-size: 0.8rem; }
/* line 38, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder,
mct-include.l-time-controller .l-time-range-slider-holder,
mct-include.l-time-controller .l-time-range-ticks-holder {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
top: auto; }
/* line 47, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider,
mct-include.l-time-controller .l-time-range-ticks {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
left: 150px;
right: 150px; }
/* line 54, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder {
height: 33px;
bottom: 46px;
padding-top: 5px;
border-top: 1px solid rgba(153, 153, 153, 0.1); }
/* line 59, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .type-icon {
font-size: 120%;
vertical-align: middle; }
/* line 63, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem {
margin-right: 5px; }
/* line 66, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .lbl,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .lbl {
color: #666666; }
/* line 69, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon, mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .l-datetime-picker .l-month-year-pager .icon.pager, .l-datetime-picker .l-month-year-pager mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .icon.pager,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .ui-symbol.icon,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .l-datetime-picker .l-month-year-pager .icon.pager,
.l-datetime-picker .l-month-year-pager mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .icon.pager {
font-size: 11px;
width: 11px; }
/* line 76, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder {
height: 20px;
line-height: 20px;
white-space: nowrap; }
/* line 165, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob:hover .range-value {
color: #0099cc; }
/* line 168, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-l {
margin-left: -10px; }
/* line 171, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-l .range-value {
text-align: right;
right: 10px; }
/* line 176, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r {
margin-right: -10px; }
/* line 179, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r .range-value {
left: 10px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:before, .l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:after {
background-color: #fff; }
bottom: 23px; }
/* line 79, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
background: none;
border: none; }
/* line 84, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line {
-moz-transform: translateX(50%);
-ms-transform: translateX(50%);
-webkit-transform: translateX(50%);
transform: translateX(50%);
position: absolute;
top: 0;
right: 0;
bottom: 0px;
left: auto;
width: 8px;
height: auto;
z-index: 2; }
/* line 94, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before, mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
background-color: #00c2ff;
content: "";
position: absolute; }
/* line 100, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before {
top: 0;
right: auto;
bottom: -10px;
left: 3px;
width: 2px; }
/* line 106, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
top: 50%;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: 8px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:before, mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:after {
background-color: #fff; }
/* line 122, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder:not(:active) .knob,
mct-include.l-time-controller .l-time-range-slider-holder:not(:active) .range {
-moz-transition-property: left, right;
-o-transition-property: left, right;
-webkit-transition-property: left, right;
transition-property: left, right;
-moz-transition-duration: 500ms;
-o-transition-duration: 500ms;
-webkit-transition-duration: 500ms;
transition-duration: 500ms;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out; }
/* line 131, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder {
height: 20px; }
/* line 133, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks {
border-top: 1px solid rgba(255, 255, 255, 0.2); }
/* line 135, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick {
background-color: rgba(255, 255, 255, 0.2);
border: none;
height: 5px;
width: 1px;
margin-left: -1px;
position: absolute; }
/* line 142, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick:first-child {
margin-left: 0; }
/* line 145, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick .l-time-range-tick-label {
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
color: #666666;
display: inline-block;
font-size: 0.9em;
position: absolute;
top: 8px;
white-space: nowrap;
z-index: 2; }
/* line 159, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob {
z-index: 2; }
/* line 161, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob .range-value {
-moz-transition-property: visibility, opacity, background-color, border-color;
-o-transition-property: visibility, opacity, background-color, border-color;
-webkit-transition-property: visibility, opacity, background-color, border-color;
transition-property: visibility, opacity, background-color, border-color;
-moz-transition-duration: 0.25s;
-o-transition-duration: 0.25s;
-webkit-transition-duration: 0.25s;
transition-duration: 0.25s;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
padding: 0 10px;
position: absolute;
height: 20px;
line-height: 20px;
white-space: nowrap; }
/* line 170, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob:hover .range-value {
color: #0099cc; }
/* line 173, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-l {
margin-left: -10px; }
/* line 176, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-l .range-value {
text-align: right;
right: 10px; }
/* line 181, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r {
margin-right: -10px; }
/* line 184, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r .range-value {
left: 10px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:before, mct-include.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:after {
background-color: #fff; }
/* line 193, ../../../../general/res/sass/controls/_time-controller.scss */
/* line 198, ../../../../general/res/sass/controls/_time-controller.scss */
.s-time-range-val {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
@ -3512,11 +3593,11 @@ span.req {
left: 0;
width: auto;
height: auto; }
/* line 297, ../../../../general/res/sass/user-environ/_layout.scss */
.object-holder.l-controls-visible.l-time-controller-visible > ng-include {
/* line 296, ../../../../general/res/sass/user-environ/_layout.scss */
.object-holder.l-controls-visible.l-time-controller-visible {
bottom: 88px; }
/* line 304, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 302, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .s-btn, .object-browse-bar .s-menu-btn,
.top-bar .buttons-main .s-btn,
.top-bar .buttons-main .s-menu-btn,
@ -3528,12 +3609,12 @@ span.req {
line-height: 25px;
vertical-align: top; }
/* line 317, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 315, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .view-switcher,
.top-bar .view-switcher {
margin-right: 20px; }
/* line 322, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 320, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar {
overflow: visible;
position: absolute;
@ -3549,22 +3630,22 @@ span.req {
height: 24px;
line-height: 24px;
white-space: nowrap; }
/* line 330, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 328, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .left {
padding-right: 20px; }
/* line 332, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 330, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .left .l-back {
display: inline-block;
float: left;
margin-right: 10px; }
/* line 340, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 338, ../../../../general/res/sass/user-environ/_layout.scss */
.l-flex {
display: flex;
display: -webkit-flex;
flex-flow: row nowrap;
-webkit-flex-flow: row nowrap; }
/* line 343, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 341, ../../../../general/res/sass/user-environ/_layout.scss */
.l-flex .left {
flex: 1 1 0;
-webkit-flex: 1 1 0;
@ -4063,25 +4144,30 @@ span.req {
position: relative; }
/* line 228, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon {
position: relative; }
/* line 230, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading {
pointer-events: none;
margin-left: 6px; }
/* line 234, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading .title-label {
font-style: italic;
font-size: .9em;
opacity: 0.5;
margin-left: 26px;
line-height: 24px; }
/* line 244, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading .wait-spinner {
margin-left: 6px; }
/* line 249, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon:not(.loading) {
cursor: pointer; }
/* line 254, ../../../../general/res/sass/search/_search.scss */
position: relative;
/* &.loading {
pointer-events: none;
margin-left: $leftMargin;
.title-label {
// Text styling
font-style: italic;
font-size: .9em;
opacity: 0.5;
// Text positioning
margin-left: $iconWidth + $leftMargin;
line-height: 24px;
}
.wait-spinner {
margin-left: $leftMargin;
}
}
&:not(.loading) {
cursor: pointer;
}*/ }
/* line 255, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-more-button {
margin-top: 5px 0;
font-size: 0.8em;
@ -4352,7 +4438,21 @@ ul.tree {
height: 1.5rem;
line-height: 1.5rem;
margin-bottom: 3px;
position: relative; }
position: relative;
/*
&.loading {
pointer-events: none;
.label {
opacity: 0.5;
.title-label {
font-style: italic;
}
}
.wait-spinner {
margin-left: 14px;
}
}
*/ }
/* line 48, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .view-control,
.search-result-item .view-control {
@ -4435,63 +4535,47 @@ ul.tree {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 115, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading,
.search-result-item.loading {
pointer-events: none; }
/* line 117, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .label,
.search-result-item.loading .label {
opacity: 0.5; }
/* line 119, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .label .title-label,
.search-result-item.loading .label .title-label {
font-style: italic; }
/* line 123, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .wait-spinner,
.search-result-item.loading .wait-spinner {
margin-left: 14px; }
/* line 128, ../../../../general/res/sass/tree/_tree.scss */
/* line 130, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected,
.search-result-item.selected {
background: #006080;
color: #cccccc; }
/* line 131, ../../../../general/res/sass/tree/_tree.scss */
/* line 133, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected .view-control,
.search-result-item.selected .view-control {
color: rgba(255, 255, 255, 0.3); }
/* line 134, ../../../../general/res/sass/tree/_tree.scss */
/* line 136, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected .label .type-icon,
.search-result-item.selected .label .type-icon {
color: #cccccc; }
@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) {
/* line 142, ../../../../general/res/sass/tree/_tree.scss */
/* line 144, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.selected):hover,
.search-result-item:not(.selected):hover {
background: rgba(153, 153, 153, 0.1);
color: #cccccc; }
/* line 148, ../../../../general/res/sass/tree/_tree.scss */
/* line 150, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.selected):hover .icon,
.search-result-item:not(.selected):hover .icon {
color: #33ccff; } }
/* line 155, ../../../../general/res/sass/tree/_tree.scss */
/* line 157, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.loading),
.search-result-item:not(.loading) {
cursor: pointer; }
/* line 159, ../../../../general/res/sass/tree/_tree.scss */
/* line 161, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .context-trigger,
.search-result-item .context-trigger {
top: -1px;
position: absolute;
right: 3px; }
/* line 165, ../../../../general/res/sass/tree/_tree.scss */
/* line 167, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .context-trigger .invoke-menu,
.search-result-item .context-trigger .invoke-menu {
font-size: 0.75em;
height: 0.9rem;
line-height: 0.9rem; }
/* line 174, ../../../../general/res/sass/tree/_tree.scss */
/* line 176, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .label {
left: 15px; }

View File

@ -163,4 +163,8 @@ $colorCalCellSelectedFg: $colorItemTreeSelectedFg;
$colorCalCellInMonthBg: pushBack($colorMenuBg, 5%);
// About Screen
$colorAboutLink: #84b3ff;
$colorAboutLink: #84b3ff;
// Loading
$colorLoadingBg: rgba($colorBodyFg, 0.2);
$colorLoadingFg: $colorAlt1;

View File

@ -1056,27 +1056,22 @@ mct-container {
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg); }
to {
-webkit-transform: rotate(359deg); } }
@-moz-keyframes rotation {
from {
-moz-transform: rotate(0deg); }
to {
-moz-transform: rotate(359deg); } }
@-o-keyframes rotation {
from {
-o-transform: rotate(0deg); }
to {
-o-transform: rotate(359deg); } }
@keyframes rotation {
from {
0% {
transform: rotate(0deg); }
to {
100% {
transform: rotate(359deg); } }
/* line 42, ../../../../general/res/sass/helpers/_wait-spinner.scss */
@-webkit-keyframes rotation {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(359deg); } }
@keyframes rotation {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(359deg); } }
/* line 63, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.t-wait-spinner,
.wait-spinner {
display: block;
@ -1089,6 +1084,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.5em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
top: 50%;
left: 50%;
@ -1099,7 +1096,7 @@ mct-container {
margin-top: -5%;
margin-left: -5%;
z-index: 2; }
/* line 53, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 74, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.t-wait-spinner.inline,
.wait-spinner.inline {
display: inline-block !important;
@ -1107,26 +1104,26 @@ mct-container {
position: relative !important;
vertical-align: middle; }
/* line 61, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 82, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder {
pointer-events: none;
position: absolute; }
/* line 65, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 86, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.align-left .t-wait-spinner {
left: 0;
margin-left: 0; }
/* line 70, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.full-size {
display: inline-block;
height: 100%;
width: 100%; }
/* line 73, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 94, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.l-wait-spinner-holder.full-size .t-wait-spinner {
top: 0;
margin-top: 0;
padding: 30%; }
/* line 82, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 103, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.treeview .wait-spinner {
display: block;
position: absolute;
@ -1138,6 +1135,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.25em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
height: 10px;
width: 10px;
@ -1146,7 +1145,7 @@ mct-container {
top: 2px;
left: 0; }
/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */
/* line 112, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.wait-spinner.sm {
display: block;
position: absolute;
@ -1158,6 +1157,8 @@ mct-container {
border-top-color: #0099cc;
border-style: solid;
border-width: 0.25em;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
height: 13px;
width: 13px;
@ -1167,6 +1168,77 @@ mct-container {
top: 0;
left: 0; }
/* line 122, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading {
pointer-events: none; }
/* line 125, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:before, .loading:after {
content: ''; }
/* line 129, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:before {
-moz-animation-name: rotateCentered;
-webkit-animation-name: rotateCentered;
animation-name: rotateCentered;
-moz-animation-duration: 0.5s;
-webkit-animation-duration: 0.5s;
animation-duration: 0.5s;
-moz-animation-iteration-count: infinite;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-moz-animation-timing-function: linear;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
border-color: rgba(119, 107, 162, 0.25);
border-top-color: #776ba2;
border-style: solid;
border-width: 5px;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: block;
position: absolute;
height: 0;
width: 0;
padding: 7%;
left: 50%;
top: 50%;
z-index: 10; }
@-moz-keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
@-webkit-keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
@keyframes rotateCentered {
0% {
transform: translateX(-50%) translateY(-50%) rotate(0deg); }
100% {
transform: translateX(-50%) translateY(-50%) rotate(359deg); } }
/* line 133, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading:after {
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
background: rgba(119, 107, 162, 0.1);
display: block;
z-index: 9; }
/* line 139, ../../../../general/res/sass/helpers/_wait-spinner.scss */
.loading.tree-item:before {
padding: 0.375rem;
border-width: 2px; }
/* Styles for messages */
/* line 4, ../../../../general/res/sass/_messages.scss */
.message.block {
@ -1908,7 +1980,6 @@ label.checkbox.custom {
width: 230px; }
/* line 356, ../../../../general/res/sass/controls/_controls.scss */
.l-datetime-picker .l-month-year-pager {
font-size: 0.8rem;
height: 15px;
margin-bottom: 5px;
position: relative; }
@ -2342,206 +2413,216 @@ label.checkbox.custom {
right: 0;
width: auto; }
/* line 27, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder,
.l-time-controller .l-time-range-slider {
font-size: 0.8em; }
/* line 32, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder,
.l-time-controller .l-time-range-slider-holder,
.l-time-controller .l-time-range-ticks-holder {
overflow: visible;
/* line 13, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller {
overflow: hidden;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
min-width: 400px;
top: auto; }
/* line 42, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider,
.l-time-controller .l-time-range-ticks {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
left: 150px;
right: 150px; }
/* line 49, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder {
height: 33px;
bottom: 46px;
padding-top: 5px;
border-top: 1px solid rgba(102, 102, 102, 0.2); }
/* line 54, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .type-icon {
font-size: 120%;
vertical-align: middle; }
/* line 58, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem {
margin-right: 5px; }
/* line 61, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input .lbl,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .lbl {
color: #999999; }
/* line 64, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon, .l-time-controller .l-time-range-inputs-holder .l-time-range-input .l-datetime-picker .l-month-year-pager .icon.pager, .l-datetime-picker .l-month-year-pager .l-time-controller .l-time-range-inputs-holder .l-time-range-input .icon.pager,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .ui-symbol.icon,
.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .l-datetime-picker .l-month-year-pager .icon.pager,
.l-datetime-picker .l-month-year-pager .l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .icon.pager {
font-size: 11px;
width: 11px; }
/* line 71, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder {
height: 20px;
bottom: 23px; }
/* line 74, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
background: none;
border: none; }
/* line 79, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line {
-moz-transform: translateX(50%);
-ms-transform: translateX(50%);
-webkit-transform: translateX(50%);
transform: translateX(50%);
position: absolute;
top: 0;
right: 0;
bottom: 0px;
left: auto;
width: 8px;
height: auto;
z-index: 2; }
/* line 89, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before, .l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
background-color: #666;
content: "";
position: absolute; }
/* line 95, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before {
top: 0;
right: auto;
bottom: -10px;
left: 3px;
width: 2px; }
/* line 101, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
top: 50%;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: 8px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:before, .l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:after {
background-color: #0052b5; }
/* line 117, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-slider-holder:not(:active) .knob,
.l-time-controller .l-time-range-slider-holder:not(:active) .range {
-moz-transition-property: left, right;
-o-transition-property: left, right;
-webkit-transition-property: left, right;
transition-property: left, right;
-moz-transition-duration: 500ms;
-o-transition-duration: 500ms;
-webkit-transition-duration: 500ms;
transition-duration: 500ms;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out; }
/* line 126, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder {
height: 20px; }
/* line 128, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks {
border-top: 1px solid rgba(0, 0, 0, 0.2); }
/* line 130, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick {
background-color: rgba(0, 0, 0, 0.2);
border: none;
height: 5px;
width: 1px;
margin-left: -1px;
position: absolute; }
/* line 137, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick:first-child {
margin-left: 0; }
/* line 140, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick .l-time-range-tick-label {
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
color: #999999;
display: inline-block;
font-size: 0.7em;
position: absolute;
top: 8px;
white-space: nowrap;
z-index: 2; }
/* line 154, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob {
z-index: 2; }
/* line 156, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob .range-value {
-moz-transition-property: visibility, opacity, background-color, border-color;
-o-transition-property: visibility, opacity, background-color, border-color;
-webkit-transition-property: visibility, opacity, background-color, border-color;
transition-property: visibility, opacity, background-color, border-color;
-moz-transition-duration: 0.25s;
-o-transition-duration: 0.25s;
-webkit-transition-duration: 0.25s;
transition-duration: 0.25s;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
padding: 0 10px;
display: block;
top: auto;
height: 83px;
min-width: 500px;
font-size: 0.8rem; }
/* line 38, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder,
mct-include.l-time-controller .l-time-range-slider-holder,
mct-include.l-time-controller .l-time-range-ticks-holder {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
top: auto; }
/* line 47, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider,
mct-include.l-time-controller .l-time-range-ticks {
overflow: visible;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
left: 150px;
right: 150px; }
/* line 54, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder {
height: 33px;
bottom: 46px;
padding-top: 5px;
border-top: 1px solid rgba(102, 102, 102, 0.2); }
/* line 59, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .type-icon {
font-size: 120%;
vertical-align: middle; }
/* line 63, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem {
margin-right: 5px; }
/* line 66, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .lbl,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .lbl {
color: #999999; }
/* line 69, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon, mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .l-datetime-picker .l-month-year-pager .icon.pager, .l-datetime-picker .l-month-year-pager mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-input .icon.pager,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .ui-symbol.icon,
mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .l-datetime-picker .l-month-year-pager .icon.pager,
.l-datetime-picker .l-month-year-pager mct-include.l-time-controller .l-time-range-inputs-holder .l-time-range-inputs-elem .icon.pager {
font-size: 11px;
width: 11px; }
/* line 76, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder {
height: 20px;
line-height: 20px;
white-space: nowrap; }
/* line 165, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob:hover .range-value {
color: rgba(0, 153, 204, 0.7); }
/* line 168, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-l {
margin-left: -10px; }
/* line 171, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-l .range-value {
text-align: right;
right: 10px; }
/* line 176, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r {
margin-right: -10px; }
/* line 179, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r .range-value {
left: 10px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:before, .l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:after {
background-color: #0052b5; }
bottom: 23px; }
/* line 79, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
background: none;
border: none; }
/* line 84, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line {
-moz-transform: translateX(50%);
-ms-transform: translateX(50%);
-webkit-transform: translateX(50%);
transform: translateX(50%);
position: absolute;
top: 0;
right: 0;
bottom: 0px;
left: auto;
width: 8px;
height: auto;
z-index: 2; }
/* line 94, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before, mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
background-color: #666;
content: "";
position: absolute; }
/* line 100, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:before {
top: 0;
right: auto;
bottom: -10px;
left: 3px;
width: 2px; }
/* line 106, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range .toi-line:after {
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
top: 50%;
right: 0;
bottom: auto;
left: 0;
width: auto;
height: 8px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:before, mct-include.l-time-controller .l-time-range-slider-holder .range-holder .range:hover .toi-line:after {
background-color: #0052b5; }
/* line 122, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-slider-holder:not(:active) .knob,
mct-include.l-time-controller .l-time-range-slider-holder:not(:active) .range {
-moz-transition-property: left, right;
-o-transition-property: left, right;
-webkit-transition-property: left, right;
transition-property: left, right;
-moz-transition-duration: 500ms;
-o-transition-duration: 500ms;
-webkit-transition-duration: 500ms;
transition-duration: 500ms;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out; }
/* line 131, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder {
height: 20px; }
/* line 133, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks {
border-top: 1px solid rgba(0, 0, 0, 0.2); }
/* line 135, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick {
background-color: rgba(0, 0, 0, 0.2);
border: none;
height: 5px;
width: 1px;
margin-left: -1px;
position: absolute; }
/* line 142, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick:first-child {
margin-left: 0; }
/* line 145, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick .l-time-range-tick-label {
transform: translateX(-50%);
-webkit-transform: translateX(-50%);
color: #999999;
display: inline-block;
font-size: 0.9em;
position: absolute;
top: 8px;
white-space: nowrap;
z-index: 2; }
/* line 159, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob {
z-index: 2; }
/* line 161, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob .range-value {
-moz-transition-property: visibility, opacity, background-color, border-color;
-o-transition-property: visibility, opacity, background-color, border-color;
-webkit-transition-property: visibility, opacity, background-color, border-color;
transition-property: visibility, opacity, background-color, border-color;
-moz-transition-duration: 0.25s;
-o-transition-duration: 0.25s;
-webkit-transition-duration: 0.25s;
transition-duration: 0.25s;
-moz-transition-timing-function: ease-in-out;
-o-transition-timing-function: ease-in-out;
-webkit-transition-timing-function: ease-in-out;
transition-timing-function: ease-in-out;
padding: 0 10px;
position: absolute;
height: 20px;
line-height: 20px;
white-space: nowrap; }
/* line 170, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob:hover .range-value {
color: rgba(0, 153, 204, 0.7); }
/* line 173, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-l {
margin-left: -10px; }
/* line 176, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-l .range-value {
text-align: right;
right: 10px; }
/* line 181, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r {
margin-right: -10px; }
/* line 184, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r .range-value {
left: 10px; }
/* line 3, ../../../../general/res/sass/controls/_time-controller.scss */
mct-include.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:before, mct-include.l-time-controller .knob.knob-r:hover + .range-holder .range .toi-line:after {
background-color: #0052b5; }
/* line 193, ../../../../general/res/sass/controls/_time-controller.scss */
/* line 198, ../../../../general/res/sass/controls/_time-controller.scss */
.s-time-range-val {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
@ -3459,11 +3540,11 @@ span.req {
left: 0;
width: auto;
height: auto; }
/* line 297, ../../../../general/res/sass/user-environ/_layout.scss */
.object-holder.l-controls-visible.l-time-controller-visible > ng-include {
/* line 296, ../../../../general/res/sass/user-environ/_layout.scss */
.object-holder.l-controls-visible.l-time-controller-visible {
bottom: 88px; }
/* line 304, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 302, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .s-btn, .object-browse-bar .s-menu-btn,
.top-bar .buttons-main .s-btn,
.top-bar .buttons-main .s-menu-btn,
@ -3475,12 +3556,12 @@ span.req {
line-height: 25px;
vertical-align: top; }
/* line 317, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 315, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .view-switcher,
.top-bar .view-switcher {
margin-right: 20px; }
/* line 322, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 320, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar {
overflow: visible;
position: absolute;
@ -3496,22 +3577,22 @@ span.req {
height: 24px;
line-height: 24px;
white-space: nowrap; }
/* line 330, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 328, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .left {
padding-right: 20px; }
/* line 332, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 330, ../../../../general/res/sass/user-environ/_layout.scss */
.object-browse-bar .left .l-back {
display: inline-block;
float: left;
margin-right: 10px; }
/* line 340, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 338, ../../../../general/res/sass/user-environ/_layout.scss */
.l-flex {
display: flex;
display: -webkit-flex;
flex-flow: row nowrap;
-webkit-flex-flow: row nowrap; }
/* line 343, ../../../../general/res/sass/user-environ/_layout.scss */
/* line 341, ../../../../general/res/sass/user-environ/_layout.scss */
.l-flex .left {
flex: 1 1 0;
-webkit-flex: 1 1 0;
@ -4010,25 +4091,30 @@ span.req {
position: relative; }
/* line 228, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon {
position: relative; }
/* line 230, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading {
pointer-events: none;
margin-left: 6px; }
/* line 234, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading .title-label {
font-style: italic;
font-size: .9em;
opacity: 0.5;
margin-left: 26px;
line-height: 24px; }
/* line 244, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon.loading .wait-spinner {
margin-left: 6px; }
/* line 249, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-icon:not(.loading) {
cursor: pointer; }
/* line 254, ../../../../general/res/sass/search/_search.scss */
position: relative;
/* &.loading {
pointer-events: none;
margin-left: $leftMargin;
.title-label {
// Text styling
font-style: italic;
font-size: .9em;
opacity: 0.5;
// Text positioning
margin-left: $iconWidth + $leftMargin;
line-height: 24px;
}
.wait-spinner {
margin-left: $leftMargin;
}
}
&:not(.loading) {
cursor: pointer;
}*/ }
/* line 255, ../../../../general/res/sass/search/_search.scss */
.search .search-scroll .load-more-button {
margin-top: 5px 0;
font-size: 0.8em;
@ -4281,7 +4367,21 @@ ul.tree {
height: 1.5rem;
line-height: 1.5rem;
margin-bottom: 3px;
position: relative; }
position: relative;
/*
&.loading {
pointer-events: none;
.label {
opacity: 0.5;
.title-label {
font-style: italic;
}
}
.wait-spinner {
margin-left: 14px;
}
}
*/ }
/* line 48, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .view-control,
.search-result-item .view-control {
@ -4363,63 +4463,47 @@ ul.tree {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 115, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading,
.search-result-item.loading {
pointer-events: none; }
/* line 117, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .label,
.search-result-item.loading .label {
opacity: 0.5; }
/* line 119, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .label .title-label,
.search-result-item.loading .label .title-label {
font-style: italic; }
/* line 123, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.loading .wait-spinner,
.search-result-item.loading .wait-spinner {
margin-left: 14px; }
/* line 128, ../../../../general/res/sass/tree/_tree.scss */
/* line 130, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected,
.search-result-item.selected {
background: #1ac6ff;
color: #fcfcfc; }
/* line 131, ../../../../general/res/sass/tree/_tree.scss */
/* line 133, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected .view-control,
.search-result-item.selected .view-control {
color: #fcfcfc; }
/* line 134, ../../../../general/res/sass/tree/_tree.scss */
/* line 136, ../../../../general/res/sass/tree/_tree.scss */
.tree-item.selected .label .type-icon,
.search-result-item.selected .label .type-icon {
color: #fcfcfc; }
@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) {
/* line 142, ../../../../general/res/sass/tree/_tree.scss */
/* line 144, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.selected):hover,
.search-result-item:not(.selected):hover {
background: rgba(102, 102, 102, 0.1);
color: #333333; }
/* line 148, ../../../../general/res/sass/tree/_tree.scss */
/* line 150, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.selected):hover .icon,
.search-result-item:not(.selected):hover .icon {
color: #0099cc; } }
/* line 155, ../../../../general/res/sass/tree/_tree.scss */
/* line 157, ../../../../general/res/sass/tree/_tree.scss */
.tree-item:not(.loading),
.search-result-item:not(.loading) {
cursor: pointer; }
/* line 159, ../../../../general/res/sass/tree/_tree.scss */
/* line 161, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .context-trigger,
.search-result-item .context-trigger {
top: -1px;
position: absolute;
right: 3px; }
/* line 165, ../../../../general/res/sass/tree/_tree.scss */
/* line 167, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .context-trigger .invoke-menu,
.search-result-item .context-trigger .invoke-menu {
font-size: 0.75em;
height: 0.9rem;
line-height: 0.9rem; }
/* line 174, ../../../../general/res/sass/tree/_tree.scss */
/* line 176, ../../../../general/res/sass/tree/_tree.scss */
.tree-item .label {
left: 15px; }

View File

@ -36,7 +36,7 @@ $timeControllerToiLineColor: $colorBodyFg;
$timeControllerToiLineColorHov: #0052b5;
// General Colors
$colorAlt1: #ff6600;
$colorAlt1: #776ba2;
$colorAlert: #ff3c00;
$colorIconLink: #49dedb;
$colorPausedBg: #ff9900;
@ -161,4 +161,8 @@ $colorCalCellSelectedFg: $colorItemTreeSelectedFg;
$colorCalCellInMonthBg: pullForward($colorMenuBg, 5%);
// About Screen
$colorAboutLink: #84b3ff;
$colorAboutLink: #84b3ff;
// Loading
$colorLoadingFg: $colorAlt1;
$colorLoadingBg: rgba($colorLoadingFg, 0.1);

View File

@ -23,7 +23,23 @@
{
"key": "conductorService",
"implementation": "ConductorService.js",
"depends": [ "now" ]
"depends": [ "now", "TIME_CONDUCTOR_DOMAINS" ]
}
],
"templates": [
{
"key": "time-conductor",
"templateUrl": "templates/time-conductor.html"
}
],
"constants": [
{
"key": "TIME_CONDUCTOR_DOMAINS",
"value": [
{ "key": "time", "name": "Time" },
{ "key": "yesterday", "name": "Yesterday" }
],
"comment": "Placeholder; to be replaced by inspection of available domains."
}
]
}

View File

@ -0,0 +1,10 @@
<mct-include key="'time-controller'"
ng-model='ngModel.conductor'>
</mct-include>
<mct-control key="'select'"
ng-model='ngModel'
field="'domain'"
options="ngModel.options"
style="position: absolute; right: 0px; bottom: 46px;"
>
</mct-control>

View File

@ -26,9 +26,8 @@ define(
function () {
"use strict";
var CONDUCTOR_HEIGHT = "100px",
TEMPLATE = [
"<mct-include key=\"'time-controller'\" ng-model='conductor'>",
var TEMPLATE = [
"<mct-include key=\"'time-conductor'\" ng-model='ngModel' class='l-time-controller'>",
"</mct-include>"
].join(''),
THROTTLE_MS = 200,
@ -78,7 +77,8 @@ define(
function bounds(start, end) {
return {
start: conductor.displayStart(),
end: conductor.displayEnd()
end: conductor.displayEnd(),
domain: conductor.domain()
};
}
@ -89,12 +89,30 @@ define(
}
function updateConductorInner() {
conductor.displayStart(conductorScope.conductor.inner.start);
conductor.displayEnd(conductorScope.conductor.inner.end);
var innerBounds = conductorScope.ngModel.conductor.inner;
conductor.displayStart(innerBounds.start);
conductor.displayEnd(innerBounds.end);
lastObservedBounds = lastObservedBounds || bounds();
broadcastBounds();
}
function updateDomain(value) {
conductor.domain(value);
repScope.$broadcast('telemetry:display:bounds', bounds(
conductor.displayStart(),
conductor.displayEnd(),
conductor.domain()
));
}
// telemetry domain metadata -> option for a select control
function makeOption(domainOption) {
return {
name: domainOption.name,
value: domainOption.key
};
}
broadcastBounds = this.throttle(function () {
var newlyObservedBounds = bounds();
@ -107,12 +125,19 @@ define(
}
}, THROTTLE_MS);
conductorScope.conductor = { outer: bounds(), inner: bounds() };
conductorScope.ngModel = {};
conductorScope.ngModel.conductor =
{ outer: bounds(), inner: bounds() };
conductorScope.ngModel.options =
conductor.domainOptions().map(makeOption);
conductorScope.ngModel.domain = conductor.domain();
conductorScope
.$watch('conductor.inner.start', updateConductorInner);
.$watch('ngModel.conductor.inner.start', updateConductorInner);
conductorScope
.$watch('conductor.inner.end', updateConductorInner);
.$watch('ngModel.conductor.inner.end', updateConductorInner);
conductorScope
.$watch('ngModel.domain', updateDomain);
repScope.$on('telemetry:view', updateConductorInner);
};

View File

@ -39,12 +39,15 @@ define(
* @param {Function} now a function which returns the current time
* as a UNIX timestamp, in milliseconds
*/
function ConductorService(now) {
function ConductorService(now, domains) {
var initialEnd =
Math.ceil(now() / SIX_HOURS_IN_MS) * SIX_HOURS_IN_MS;
this.conductor =
new TimeConductor(initialEnd - ONE_DAY_IN_MS, initialEnd);
this.conductor = new TimeConductor(
initialEnd - ONE_DAY_IN_MS,
initialEnd,
domains
);
}
/**

View File

@ -44,12 +44,14 @@ define(
ConductorTelemetryDecorator.prototype.amendRequests = function (requests) {
var conductor = this.conductorService.getConductor(),
start = conductor.displayStart(),
end = conductor.displayEnd();
end = conductor.displayEnd(),
domain = conductor.domain();
function amendRequest(request) {
request = request || {};
request.start = start;
request.end = end;
request.domain = domain;
return request;
}

View File

@ -40,8 +40,10 @@ define(
* @param {number} start the initial start time
* @param {number} end the initial end time
*/
function TimeConductor(start, end) {
function TimeConductor(start, end, domains) {
this.range = { start: start, end: end };
this.domains = domains;
this.activeDomain = domains[0].key;
}
/**
@ -68,6 +70,34 @@ define(
return this.range.end;
};
/**
* Get available domain options which can be used to bound time
* selection.
* @returns {TelemetryDomain[]} available domains
*/
TimeConductor.prototype.domainOptions = function () {
return this.domains;
};
/**
* Get or set (if called with an argument) the active domain.
* @param {string} [key] the key identifying the domain choice
* @returns {TelemetryDomain} the active telemetry domain
*/
TimeConductor.prototype.domain = function (key) {
function matchesKey(domain) {
return domain.key === key;
}
if (arguments.length > 0) {
if (!this.domains.some(matchesKey)) {
throw new Error("Unknown domain " + key);
}
this.activeDomain = key;
}
return this.activeDomain;
};
return TimeConductor;
}
);

View File

@ -21,12 +21,9 @@
*****************************************************************************/
/*global define,describe,it,expect,beforeEach,waitsFor,afterEach,jasmine*/
/**
* EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015.
*/
define(
["../src/ConductorRepresenter"],
function (ConductorRepresenter) {
["../src/ConductorRepresenter", "./TestTimeConductor"],
function (ConductorRepresenter, TestTimeConductor) {
"use strict";
var SCOPE_METHODS = [
@ -77,10 +74,7 @@ define(
testViews = [ { someKey: "some value" } ];
mockScope = jasmine.createSpyObj('scope', SCOPE_METHODS);
mockElement = jasmine.createSpyObj('element', ELEMENT_METHODS);
mockConductor = jasmine.createSpyObj(
'conductor',
[ 'displayStart', 'displayEnd' ]
);
mockConductor = new TestTimeConductor();
mockCompiledTemplate = jasmine.createSpy('template');
mockNewScope = jasmine.createSpyObj('newScope', SCOPE_METHODS);
mockNewElement = jasmine.createSpyObj('newElement', ELEMENT_METHODS);
@ -135,11 +129,12 @@ define(
it("exposes conductor state in scope", function () {
mockConductor.displayStart.andReturn(1977);
mockConductor.displayEnd.andReturn(1984);
mockConductor.domain.andReturn('d');
representer.represent(testViews[0], {});
expect(mockNewScope.conductor).toEqual({
inner: { start: 1977, end: 1984 },
outer: { start: 1977, end: 1984 }
expect(mockNewScope.ngModel.conductor).toEqual({
inner: { start: 1977, end: 1984, domain: 'd' },
outer: { start: 1977, end: 1984, domain: 'd' }
});
});
@ -151,17 +146,27 @@ define(
representer.represent(testViews[0], {});
mockNewScope.conductor = testState;
mockNewScope.ngModel.conductor = testState;
fireWatch(mockNewScope, 'conductor.inner.start', testState.inner.start);
fireWatch(
mockNewScope,
'ngModel.conductor.inner.start',
testState.inner.start
);
expect(mockConductor.displayStart).toHaveBeenCalledWith(42);
fireWatch(mockNewScope, 'conductor.inner.end', testState.inner.end);
fireWatch(
mockNewScope,
'ngModel.conductor.inner.end',
testState.inner.end
);
expect(mockConductor.displayEnd).toHaveBeenCalledWith(1984);
});
describe("when bounds are changing", function () {
var mockThrottledFn = jasmine.createSpy('throttledFn'),
var startWatch = "ngModel.conductor.inner.start",
endWatch = "ngModel.conductor.inner.end",
mockThrottledFn = jasmine.createSpy('throttledFn'),
testBounds;
function fireThrottledFn() {
@ -172,7 +177,7 @@ define(
mockThrottle.andReturn(mockThrottledFn);
representer.represent(testViews[0], {});
testBounds = { start: 0, end: 1000 };
mockNewScope.conductor.inner = testBounds;
mockNewScope.ngModel.conductor.inner = testBounds;
mockConductor.displayStart.andCallFake(function () {
return testBounds.start;
});
@ -184,14 +189,14 @@ define(
it("does not broadcast while bounds are changing", function () {
expect(mockScope.$broadcast).not.toHaveBeenCalled();
testBounds.start = 100;
fireWatch(mockNewScope, 'conductor.inner.start', testBounds.start);
fireWatch(mockNewScope, startWatch, testBounds.start);
testBounds.end = 500;
fireWatch(mockNewScope, 'conductor.inner.end', testBounds.end);
fireWatch(mockNewScope, endWatch, testBounds.end);
fireThrottledFn();
testBounds.start = 200;
fireWatch(mockNewScope, 'conductor.inner.start', testBounds.start);
fireWatch(mockNewScope, startWatch, testBounds.start);
testBounds.end = 400;
fireWatch(mockNewScope, 'conductor.inner.end', testBounds.end);
fireWatch(mockNewScope, endWatch, testBounds.end);
fireThrottledFn();
expect(mockScope.$broadcast).not.toHaveBeenCalled();
});
@ -199,17 +204,56 @@ define(
it("does broadcast when bounds have stabilized", function () {
expect(mockScope.$broadcast).not.toHaveBeenCalled();
testBounds.start = 100;
fireWatch(mockNewScope, 'conductor.inner.start', testBounds.start);
fireWatch(mockNewScope, startWatch, testBounds.start);
testBounds.end = 500;
fireWatch(mockNewScope, 'conductor.inner.end', testBounds.end);
fireWatch(mockNewScope, endWatch, testBounds.end);
fireThrottledFn();
fireWatch(mockNewScope, 'conductor.inner.start', testBounds.start);
fireWatch(mockNewScope, 'conductor.inner.end', testBounds.end);
fireWatch(mockNewScope, startWatch, testBounds.start);
fireWatch(mockNewScope, endWatch, testBounds.end);
fireThrottledFn();
expect(mockScope.$broadcast).toHaveBeenCalled();
});
});
it("exposes domain selection in scope", function () {
representer.represent(testViews[0], null);
expect(mockNewScope.ngModel.domain)
.toEqual(mockConductor.domain());
});
it("exposes domain options in scope", function () {
representer.represent(testViews[0], null);
mockConductor.domainOptions().forEach(function (option, i) {
expect(mockNewScope.ngModel.options[i].value)
.toEqual(option.key);
expect(mockNewScope.ngModel.options[i].name)
.toEqual(option.name);
});
});
it("updates domain selection from scope", function () {
var choice;
representer.represent(testViews[0], null);
// Choose a domain that isn't currently selected
mockNewScope.ngModel.options.forEach(function (option) {
if (option.value !== mockNewScope.ngModel.domain) {
choice = option.value;
}
});
expect(mockConductor.domain)
.not.toHaveBeenCalledWith(choice);
mockNewScope.ngModel.domain = choice;
fireWatch(mockNewScope, "ngModel.domain", choice);
expect(mockConductor.domain)
.toHaveBeenCalledWith(choice);
});
});
}
);

View File

@ -21,9 +21,6 @@
*****************************************************************************/
/*global define,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015.
*/
define(
["../src/ConductorService"],
function (ConductorService) {
@ -38,7 +35,10 @@ define(
beforeEach(function () {
mockNow = jasmine.createSpy('now');
mockNow.andReturn(TEST_NOW);
conductorService = new ConductorService(mockNow);
conductorService = new ConductorService(mockNow, [
{ key: "d1", name: "Domain #1" },
{ key: "d2", name: "Domain #2" }
]);
});
it("initializes a time conductor around the current time", function () {

View File

@ -23,8 +23,8 @@
define(
["../src/ConductorTelemetryDecorator"],
function (ConductorTelemetryDecorator) {
["../src/ConductorTelemetryDecorator", "./TestTimeConductor"],
function (ConductorTelemetryDecorator, TestTimeConductor) {
"use strict";
describe("ConductorTelemetryDecorator", function () {
@ -54,10 +54,7 @@ define(
'conductorService',
['getConductor']
);
mockConductor = jasmine.createSpyObj(
'conductor',
[ 'queryStart', 'queryEnd', 'displayStart', 'displayEnd' ]
);
mockConductor = new TestTimeConductor();
mockPromise = jasmine.createSpyObj(
'promise',
['then']
@ -78,10 +75,9 @@ define(
return j * j * j;
});
mockConductor.queryStart.andReturn(-12321);
mockConductor.queryEnd.andReturn(-12321);
mockConductor.displayStart.andReturn(42);
mockConductor.displayEnd.andReturn(1977);
mockConductor.domain.andReturn("testDomain");
decorator = new ConductorTelemetryDecorator(
mockConductorService,
@ -89,24 +85,72 @@ define(
);
});
it("adds display start/end times to historical requests", function () {
describe("decorates historical requests", function () {
var request;
beforeEach(function () {
decorator.requestTelemetry([{ someKey: "some value" }]);
request = mockTelemetryService.requestTelemetry
.mostRecentCall.args[0][0];
});
it("with start times", function () {
expect(request.start).toEqual(mockConductor.displayStart());
});
it("with end times", function () {
expect(request.end).toEqual(mockConductor.displayEnd());
});
it("with domain selection", function () {
expect(request.domain).toEqual(mockConductor.domain());
});
});
describe("decorates subscription requests", function () {
var request;
beforeEach(function () {
var mockCallback = jasmine.createSpy('callback');
decorator.subscribe(mockCallback, [{ someKey: "some value" }]);
request = mockTelemetryService.subscribe
.mostRecentCall.args[1][0];
});
it("with start times", function () {
expect(request.start).toEqual(mockConductor.displayStart());
});
it("with end times", function () {
expect(request.end).toEqual(mockConductor.displayEnd());
});
it("with domain selection", function () {
expect(request.domain).toEqual(mockConductor.domain());
});
});
it("adds display start/end times & domain selection to historical requests", function () {
decorator.requestTelemetry([{ someKey: "some value" }]);
expect(mockTelemetryService.requestTelemetry)
.toHaveBeenCalledWith([{
someKey: "some value",
start: mockConductor.displayStart(),
end: mockConductor.displayEnd()
end: mockConductor.displayEnd(),
domain: jasmine.any(String)
}]);
});
it("adds display start/end times to subscription requests", function () {
it("adds display start/end times & domain selection to subscription requests", function () {
var mockCallback = jasmine.createSpy('callback');
decorator.subscribe(mockCallback, [{ someKey: "some value" }]);
expect(mockTelemetryService.subscribe)
.toHaveBeenCalledWith(jasmine.any(Function), [{
someKey: "some value",
start: mockConductor.displayStart(),
end: mockConductor.displayEnd()
end: mockConductor.displayEnd(),
domain: jasmine.any(String)
}]);
});

View File

@ -0,0 +1,50 @@
/*****************************************************************************
* 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,describe,it,expect,beforeEach,waitsFor,jasmine,spyOn*/
define(
["../src/TimeConductor"],
function (TimeConductor) {
'use strict';
function TestTimeConductor() {
var self = this;
TimeConductor.apply(this, [
402514200000,
444546000000,
[
{ key: "domain0", name: "Domain #1" },
{ key: "domain1", name: "Domain #2" }
]
]);
Object.keys(TimeConductor.prototype).forEach(function (method) {
spyOn(self, method).andCallThrough();
});
}
TestTimeConductor.prototype = TimeConductor.prototype;
return TestTimeConductor;
}
);

View File

@ -21,9 +21,6 @@
*****************************************************************************/
/*global define,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015.
*/
define(
["../src/TimeConductor"],
function (TimeConductor) {
@ -32,12 +29,17 @@ define(
describe("TimeConductor", function () {
var testStart,
testEnd,
testDomains,
conductor;
beforeEach(function () {
testStart = 42;
testEnd = 12321;
conductor = new TimeConductor(testStart, testEnd);
testDomains = [
{ key: "d1", name: "Domain #1" },
{ key: "d2", name: "Domain #2" }
];
conductor = new TimeConductor(testStart, testEnd, testDomains);
});
it("provides accessors for query/display start/end times", function () {
@ -52,6 +54,25 @@ define(
expect(conductor.displayEnd()).toEqual(4);
});
it("exposes domain options", function () {
expect(conductor.domainOptions()).toEqual(testDomains);
});
it("exposes the current domain choice", function () {
expect(conductor.domain()).toEqual(testDomains[0].key);
});
it("allows the domain choice to be changed", function () {
conductor.domain(testDomains[1].key);
expect(conductor.domain()).toEqual(testDomains[1].key);
});
it("throws an error on attempts to set an invalid domain", function () {
expect(function () {
conductor.domain("invalid-domain");
}).toThrow();
});
});
}
);

View File

@ -105,11 +105,13 @@ define(
index
);
setDisplayedValue(
telemetryObject,
telemetrySeries.getRangeValue(index),
limit && datum && limit.evaluate(datum)
);
if (index >= 0) {
setDisplayedValue(
telemetryObject,
telemetrySeries.getRangeValue(index),
limit && datum && limit.evaluate(datum)
);
}
}
// Update the displayed value for this object

View File

@ -64,6 +64,16 @@ define(
this.updateTicks();
}
/**
* Tests whether this subplot has domain data to show for the current pan/zoom level. Absence of domain data
* implies that there is no range data displayed either
* @returns {boolean} true if domain data exists for the current pan/zoom level
*/
SubPlot.prototype.hasDomainData = function() {
return this.panZoomStack
&& this.panZoomStack.getDimensions()[0] > 0;
};
// Utility function for filtering out empty strings.
function isNonEmpty(v) {
return typeof v === 'string' && v !== "";
@ -253,7 +263,10 @@ define(
this.hovering = true;
this.subPlotBounds = $event.target.getBoundingClientRect();
this.mousePosition = this.toMousePosition($event);
this.updateHoverCoordinates();
//If there is a domain to display, show hover coordinates, otherwise hover coordinates are meaningless
if (this.hasDomainData()) {
this.updateHoverCoordinates();
}
if (this.marqueeStart) {
this.updateMarqueeBox();
}

View File

@ -53,7 +53,8 @@ define(
for (i = 0; i < count; i += 1) {
result.push({
label: format(i * step + start)
//If data to show, display label for each tick line, otherwise show lines but suppress labels.
label: span > 0 ? format(i * step + start) : ''
});
}

View File

@ -157,6 +157,15 @@ define(
);
});
it ("indicates when there is domain data shown", function () {
expect(subplot.hasDomainData()).toEqual(true);
});
it ("indicates when there is no domain data shown", function () {
mockPanZoomStack.getDimensions.andReturn([0,0]);
expect(subplot.hasDomainData()).toEqual(false);
});
it("disallows marquee zoom when start and end Marquee is at the same position", function () {
expect(mockPanZoomStack.pushPanZoom).not.toHaveBeenCalled();

View File

@ -110,20 +110,23 @@ define(
* Get the latest telemetry datum for this domain object. This
* will be from real-time telemetry, unless an index is specified,
* in which case it will be pulled from the historical telemetry
* series at the specified index.
* series at the specified index. If there is no latest available
* datum, this will return undefined.
*
* @param {DomainObject} domainObject the object of interest
* @param {number} [index] the index of the data of interest
* @returns {TelemetryDatum} the most recent datum
*/
self.getDatum = function (telemetryObject, index) {
function makeNewDatum(series) {
return series ?
subscription.makeDatum(telemetryObject, series, index) :
undefined;
}
return typeof index !== 'number' ?
subscription.getDatum(telemetryObject) :
subscription.makeDatum(
telemetryObject,
this.getSeries(telemetryObject),
index
);
makeNewDatum(this.getSeries(telemetryObject));
};
return self;