From e87338965555918775ba3f5695989a19e1d2f4ec Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 2 Sep 2015 15:57:52 -0700 Subject: [PATCH 001/226] [Conductor] Add time conductor widget Add widget for the time conductor using a representer, WTD-1515. --- bundles.json | 1 + platform/features/conductor/README.md | 3 + platform/features/conductor/bundle.json | 10 ++ .../conductor/src/ConductorRepresenter.js | 106 ++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 platform/features/conductor/README.md create mode 100644 platform/features/conductor/bundle.json create mode 100644 platform/features/conductor/src/ConductorRepresenter.js diff --git a/bundles.json b/bundles.json index 79ab2dd246..4018e453ee 100644 --- a/bundles.json +++ b/bundles.json @@ -17,6 +17,7 @@ "platform/features/plot", "platform/features/scrolling", "platform/features/events", + "platform/features/conductor", "platform/forms", "platform/identity", "platform/persistence/queue", diff --git a/platform/features/conductor/README.md b/platform/features/conductor/README.md new file mode 100644 index 0000000000..97c7dde3c2 --- /dev/null +++ b/platform/features/conductor/README.md @@ -0,0 +1,3 @@ +Provides the time conductor, a control which appears at the +bottom of the screen allowing telemetry start and end times +to be modified. diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json new file mode 100644 index 0000000000..d9905b6f24 --- /dev/null +++ b/platform/features/conductor/bundle.json @@ -0,0 +1,10 @@ +{ + "extensions": { + "representers": [ + { + "implementation": "ConductorRepresenter.js", + "depends": [ "$compile", "views[]" ] + } + ] + } +} diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js new file mode 100644 index 0000000000..364cbe3296 --- /dev/null +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -0,0 +1,106 @@ +/***************************************************************************** + * 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*/ + +define( + [], + function () { + "use strict"; + + var CONDUCTOR_HEIGHT = "100px", + TEMPLATE = [ + '
', + "", + '
' + ].join(''); + + /** + * The ConductorRepresenter attaches the universal time conductor + * to views. + * + * @memberof platform/commonUI/edit + * @implements {Representer} + * @constructor + */ + function ConductorRepresenter($compile, views, scope, element) { + var conductorScope; + + // Angular doesn't like objects to retain references to scope + this.getScope = function () { return scope; }; + this.conductorScope = function (s) { + return (conductorScope = arguments.length > 0 ? s : conductorScope); + }; + + this.element = element; + this.showing = false; + this.views = views; + this.$compile = $compile; + + this.originalHeight = element.css('height'); + this.hadAbs = element.hasClass('abs'); + } + + // Handle a specific representation of a specific domain object + ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { + if (this.showing) { + this.destroy(); + } + + if (this.views.indexOf(representation) !== -1) { + // Create a new scope for the conductor + this.conductorScope(this.getScope().$new()); + this.conductorElement = + this.$compile(TEMPLATE)(this.conductorScope()); + this.element.after(this.conductorElement[0]); + this.element.addClass('abs'); + this.element.css('bottom', CONDUCTOR_HEIGHT); + this.showing = true; + } + }; + + // Respond to the destruction of the current representation. + ConductorRepresenter.prototype.destroy = function destroy() { + // Restore the original size of the mct-representation + if (!this.hadAbs) { + this.element.removeClass('abs'); + } + this.element.css('height', this.originalHeight); + + // ...and remove the conductor + if (this.conductorElement) { + this.conductorElement.remove(); + this.conductorElement = undefined; + } + + // Finally, destroy its scope + if (this.conductorScope()) { + this.conductorScope().$destroy(); + this.conductorScope(undefined); + } + + this.showing = false; + }; + + return ConductorRepresenter; + } +); + From 91fe3d798f61caa903905f95ade35bb69fab55ea Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 2 Sep 2015 16:31:58 -0700 Subject: [PATCH 002/226] [Time Conductor] Begin adding controller WTD-1515 --- platform/commonUI/general/bundle.json | 5 ++ .../templates/controls/time-controller.html | 78 +++++++++---------- .../controllers/TimeConductorController.js | 62 +++++++++++++++ 3 files changed, 102 insertions(+), 43 deletions(-) create mode 100644 platform/commonUI/general/src/controllers/TimeConductorController.js diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 33242ccdcf..cd239c7d08 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -57,6 +57,11 @@ } ], "controllers": [ + { + "key": "TimeConductorController", + "implementation": "controllers/TimeConductorController.js", + "depends": [ "$scope" ] + }, { "key": "TreeNodeController", "implementation": "controllers/TreeNodeController.js", diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index fe1b6ff14a..346b1b7143 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -22,48 +22,40 @@ properly on the range left and right bounds. --> -
+
+
+ Start: + End: +
-
-
- Start: - End: -
+
+
+
+
+
+
+
+
+
{{startInnerText}}
+
+
+
{{startOuterText}}
+
+
+
+
-
-
-
-
-
-
-
-
05/22 14:46
-
-
-
07/22 01:21
-
-
-
-
- -
-
-
- {{tick}} -
-
-
-
\ No newline at end of file +
+
+
+ {{tick}} +
+
+
+
diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js new file mode 100644 index 0000000000..a186651c0c --- /dev/null +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -0,0 +1,62 @@ +/***************************************************************************** + * 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,Promise*/ + +define( + [], + function () { + "use strict"; + + /** + * A ToggleController is used to activate/deactivate things. + * A common usage is for "twistie" + * + * @memberof platform/commonUI/general + * @constructor + */ + function TimeConductorController($scope) { + var tickCount = 2; + + $scope.state = false; + + $scope.ticks = [0, 1]; + + function updateTicks() { + var i; + $scope.ticks = []; + for (i = 0; i < tickCount; i += 1) { + $scope.ticks.push(i / (tickCount - 1)); + } + } + + function updateSpanWidth(w) { + // Space about 100px apart + tickCount = Math.max(Math.floor(w / 100), 2); + updateTicks(); + } + + $scope.$watch("spanWidth", updateSpanWidth); + } + + return TimeConductorController; + } +); From a18cc50a43a3f35ec208ff09a83dfb7db1526ef4 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 2 Sep 2015 16:53:10 -0700 Subject: [PATCH 003/226] [Time Conductor] Begin binding control to data --- platform/commonUI/general/bundle.json | 2 +- .../templates/controls/time-controller.html | 4 +- .../controllers/TimeConductorController.js | 64 ++++++++++++++++--- 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index cd239c7d08..73de6ba4a2 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -60,7 +60,7 @@ { "key": "TimeConductorController", "implementation": "controllers/TimeConductorController.js", - "depends": [ "$scope" ] + "depends": [ "$scope", "now" ] }, { "key": "TreeNodeController", diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 346b1b7143..97638bfbd7 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -25,7 +25,7 @@ properly on the range left and right bounds.
Start: - End: + End:
@@ -41,7 +41,7 @@ properly on the range left and right bounds.
{{startInnerText}}
-
{{startOuterText}}
+
{{endInnerText}}
diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js index a186651c0c..d87a844336 100644 --- a/platform/commonUI/general/src/controllers/TimeConductorController.js +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -22,29 +22,41 @@ /*global define,Promise*/ define( - [], - function () { + ['moment'], + function (moment) { "use strict"; + var DATE_FORMAT = "YYYY-MM-DD HH:mm:ss"; + /** - * A ToggleController is used to activate/deactivate things. - * A common usage is for "twistie" - * * @memberof platform/commonUI/general * @constructor */ - function TimeConductorController($scope) { + function TimeConductorController($scope, now) { var tickCount = 2; $scope.state = false; + $scope.ticks = []; - $scope.ticks = [0, 1]; + function formatTimestamp(ts) { + return moment.utc(ts).format(DATE_FORMAT); + } + + // From 0.0-1.0 to "0%"-"1%" + function toPercent(p) { + return (100 * p) + "%"; + } function updateTicks() { - var i; + var i, p, ts, start, end, span; + end = $scope.ngModel.outer[1]; + start = $scope.ngModel.outer[0]; + span = end - start; $scope.ticks = []; for (i = 0; i < tickCount; i += 1) { - $scope.ticks.push(i / (tickCount - 1)); + p = i / (tickCount - 1); + ts = p * span + start; + $scope.ticks.push(formatTimestamp(ts)); } } @@ -54,7 +66,41 @@ define( updateTicks(); } + function updateFromParameters(ngModel) { + var t = now(), span; + + ngModel = ngModel || { + outer: [ t - 24 * 3600 * 1000, t ], + inner: [ t - 24 * 3600 * 1000, t ] + }; + + // First, dates for the date pickers for outer bounds + $scope.startOuterDate = new Date(ngModel.outer[0]); + $scope.endOuterDate = new Date(ngModel.outer[1]); + + // Then readable dates for the knobs + $scope.startInnerText = formatTimestamp(ngModel.inner[0]); + $scope.endInnerText = formatTimestamp(ngModel.inner[1]); + + // And positions for the knobs + span = ngModel.outer[1] - ngModel.outer[0]; + $scope.startInnerPct = + toPercent((ngModel.inner[0] - ngModel.outer[0]) / span); + $scope.endInnerPct = + toPercent((ngModel.outer[1] - ngModel.inner[1]) / span); + + // Stick it back is scope (in case we just set defaults) + $scope.ngModel = ngModel; + + updateTicks(); + } + + // Initialize scope to defaults + updateFromParameters(); + + $scope.$watchCollection("ngModel", updateFromParameters); $scope.$watch("spanWidth", updateSpanWidth); + } return TimeConductorController; From 57a947eaef6a0841231614decfa8ff6afe41361d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 2 Sep 2015 17:19:20 -0700 Subject: [PATCH 004/226] [Time Conductor] Accept drag gestures WTD-1515 --- .../templates/controls/time-controller.html | 12 ++- .../controllers/TimeConductorController.js | 75 ++++++++++++++++++- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 97638bfbd7..90e9510865 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -34,13 +34,21 @@ properly on the range left and right bounds. mct-resize="spanWidth = bounds.width">
-
+
{{startInnerText}}
-
+
{{endInnerText}}
diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js index d87a844336..17a4298577 100644 --- a/platform/commonUI/general/src/controllers/TimeConductorController.js +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -33,10 +33,10 @@ define( * @constructor */ function TimeConductorController($scope, now) { - var tickCount = 2; + var tickCount = 2, + initialDragValue; + - $scope.state = false; - $scope.ticks = []; function formatTimestamp(ts) { return moment.utc(ts).format(DATE_FORMAT); @@ -95,6 +95,75 @@ define( updateTicks(); } + function startLeftDrag() { + initialDragValue = $scope.ngModel.inner[0]; + } + + function startRightDrag() { + initialDragValue = $scope.ngModel.inner[1]; + } + + function startMiddleDrag() { + initialDragValue = [ + $scope.ngModel.inner[0], + $scope.ngModel.inner[0] + ]; + } + + function toMillis(pixels) { + var span = $scope.ngModel.outer[1] - $scope.ngModel.outer[0]; + return (pixels / $scope.spanWidth) * span; + } + + function clamp(value, low, high) { + return Math.max(low, Math.min(high, value)); + } + + function leftDrag(pixels) { + var delta = toMillis(pixels); + $scope.ngModel.inner[0] = clamp( + initialDragValue + delta, + $scope.ngModel.outer[0], + $scope.ngModel.inner[1] + ); + updateFromParameters($scope.ngModel); + } + + function rightDrag(pixels) { + var delta = toMillis(pixels); + $scope.ngModel.inner[1] = clamp( + initialDragValue + delta, + $scope.ngModel.inner[0], + $scope.ngModel.outer[1] + ); + updateFromParameters($scope.ngModel); + } + + function middleDrag(pixels) { + var delta = toMillis(pixels), + index = delta < 0 ? 0 : 1, + opposite = (index === 0) ? 1 : 0, + span = initialDragValue[opposite] - initialDragValue[index]; + + $scope.ngModel.inner[index] = clamp( + initialDragValue[index] + delta, + $scope.ngModel.outer[0], + $scope.ngModel.outer[1] + ); + $scope.ngModel.inner[opposite] = + $scope.ngModel.inner[index] + span; + } + + $scope.startLeftDrag = startLeftDrag; + $scope.startRightDrag = startRightDrag; + //$scope.startMiddleDrag = startMiddleDrag; + $scope.leftDrag = leftDrag; + $scope.rightDrag = rightDrag; + //$scope.middleDrag = middleDrag; + + $scope.state = false; + $scope.ticks = []; + // Initialize scope to defaults updateFromParameters(); From 9d6b70f43319e2d204be25b21ce58794f88ffff2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 2 Sep 2015 17:25:41 -0700 Subject: [PATCH 005/226] [Time Conductor] Handle middle drag WTD-1515 --- .../src/controllers/TimeConductorController.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js index 17a4298577..ea978a10c3 100644 --- a/platform/commonUI/general/src/controllers/TimeConductorController.js +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -106,7 +106,7 @@ define( function startMiddleDrag() { initialDragValue = [ $scope.ngModel.inner[0], - $scope.ngModel.inner[0] + $scope.ngModel.inner[1] ]; } @@ -142,24 +142,27 @@ define( function middleDrag(pixels) { var delta = toMillis(pixels), index = delta < 0 ? 0 : 1, - opposite = (index === 0) ? 1 : 0, - span = initialDragValue[opposite] - initialDragValue[index]; + opposite = Math.abs(1 - index); + // Adjust the position of the edge in the direction of drag $scope.ngModel.inner[index] = clamp( initialDragValue[index] + delta, $scope.ngModel.outer[0], $scope.ngModel.outer[1] ); - $scope.ngModel.inner[opposite] = - $scope.ngModel.inner[index] + span; + // Adjust opposite knob to maintain span + $scope.ngModel.inner[opposite] = $scope.ngModel.inner[index] + + initialDragValue[opposite] - initialDragValue[index]; + + updateFromParameters($scope.ngModel); } $scope.startLeftDrag = startLeftDrag; $scope.startRightDrag = startRightDrag; - //$scope.startMiddleDrag = startMiddleDrag; + $scope.startMiddleDrag = startMiddleDrag; $scope.leftDrag = leftDrag; $scope.rightDrag = rightDrag; - //$scope.middleDrag = middleDrag; + $scope.middleDrag = middleDrag; $scope.state = false; $scope.ticks = []; From fc2860810b3f5e8a17bdd47c9731888f2d2f7e65 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 11:03:17 -0700 Subject: [PATCH 006/226] [Time Controller] Allow manual date entry WTD-1515 --- .../templates/controls/time-controller.html | 8 +++- .../controllers/TimeConductorController.js | 43 ++++++++++++------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 90e9510865..5f60741672 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -24,8 +24,12 @@ properly on the range left and right bounds.
- Start: - End: + Start: + End:
diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js index ea978a10c3..26f120c7b0 100644 --- a/platform/commonUI/general/src/controllers/TimeConductorController.js +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -36,12 +36,15 @@ define( var tickCount = 2, initialDragValue; - - function formatTimestamp(ts) { return moment.utc(ts).format(DATE_FORMAT); } + function parseTimestamp(text, fallback) { + var m = moment.utc(text, DATE_FORMAT); + return m.isValid() ? m.valueOf() : fallback; + } + // From 0.0-1.0 to "0%"-"1%" function toPercent(p) { return (100 * p) + "%"; @@ -66,17 +69,16 @@ define( updateTicks(); } - function updateFromParameters(ngModel) { + function updateViewFromModel(ngModel) { var t = now(), span; - ngModel = ngModel || { - outer: [ t - 24 * 3600 * 1000, t ], - inner: [ t - 24 * 3600 * 1000, t ] - }; + ngModel = ngModel || {}; + ngModel.outer = ngModel.outer || [ t - 24 * 3600 * 1000, t ]; + ngModel.inner = ngModel.inner || [ t - 24 * 3600 * 1000, t ]; // First, dates for the date pickers for outer bounds - $scope.startOuterDate = new Date(ngModel.outer[0]); - $scope.endOuterDate = new Date(ngModel.outer[1]); + $scope.startOuterDate = formatTimestamp(ngModel.outer[0]); + $scope.endOuterDate = formatTimestamp(ngModel.outer[1]); // Then readable dates for the knobs $scope.startInnerText = formatTimestamp(ngModel.inner[0]); @@ -126,7 +128,7 @@ define( $scope.ngModel.outer[0], $scope.ngModel.inner[1] ); - updateFromParameters($scope.ngModel); + updateViewFromModel($scope.ngModel); } function rightDrag(pixels) { @@ -136,7 +138,7 @@ define( $scope.ngModel.inner[0], $scope.ngModel.outer[1] ); - updateFromParameters($scope.ngModel); + updateViewFromModel($scope.ngModel); } function middleDrag(pixels) { @@ -154,7 +156,17 @@ define( $scope.ngModel.inner[opposite] = $scope.ngModel.inner[index] + initialDragValue[opposite] - initialDragValue[index]; - updateFromParameters($scope.ngModel); + updateViewFromModel($scope.ngModel); + } + + function updateOuterStart(text) { + var ngModel = $scope.ngModel; + ngModel.outer[0] = parseTimestamp(text, ngModel.outer[0]); + } + + function updateOuterEnd(text) { + var ngModel = $scope.ngModel; + ngModel.outer[1] = parseTimestamp(text, ngModel.outer[1]); } $scope.startLeftDrag = startLeftDrag; @@ -168,11 +180,12 @@ define( $scope.ticks = []; // Initialize scope to defaults - updateFromParameters(); + updateViewFromModel($scope.ngModel); - $scope.$watchCollection("ngModel", updateFromParameters); + $scope.$watchCollection("ngModel", updateViewFromModel); $scope.$watch("spanWidth", updateSpanWidth); - + $scope.$watch("startOuterDate", updateOuterStart); + $scope.$watch("endOuterDate", updateOuterEnd); } return TimeConductorController; From e4dec21ceb9f85daa798f5bd598f0b1c290a2fea Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 11:38:06 -0700 Subject: [PATCH 007/226] [Time Controller] Add telemetry capability wrapper WTD-1515 --- .../src/ConductorTelemetryCapability.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 platform/features/conductor/src/ConductorTelemetryCapability.js diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js new file mode 100644 index 0000000000..ea10bddb15 --- /dev/null +++ b/platform/features/conductor/src/ConductorTelemetryCapability.js @@ -0,0 +1,53 @@ +/***************************************************************************** + * 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*/ + +define( + [], + function () { + 'use strict'; + + function ConductorTelemetryCapability(timeConductor, telemetryCapability, domainObject) { + this.wrappedCapability = telemetryCapability; + } + + ConductorTelemetryCapability.prototype.getMetadata = function () { + return this.wrappedCapability.getMetadata; + }; + + ConductorTelemetryCapability.prototype.requestData = function (request) { + request = request || {}; + request.start = this.timeConductor.getStart(); + request.end = this.timeConductor.getEnd(); + return this.wrappedCapability.requestData(request); + }; + + ConductorTelemetryCapability.prototype.subscribe = function (callback, request) { + request = request || {}; + request.start = this.timeConductor.getStart(); + request.end = this.timeConductor.getEnd(); + return this.wrappedCapability.subscribe(callback, request); + }; + + return ConductorTelemetryCapability; + } +); From f74da6b93557649a14f246f796b3449dddc6039e Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 11:40:40 -0700 Subject: [PATCH 008/226] [Time Controller] Add overflow hidden Add overflow: hidden so that time controller does not exceed edges of the screen. WTD-1515 --- platform/features/conductor/src/ConductorRepresenter.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 364cbe3296..5e68f2e2a4 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -28,7 +28,10 @@ define( var CONDUCTOR_HEIGHT = "100px", TEMPLATE = [ - '
', + '
', "", '
' ].join(''); From b668fb58fbef2e8f2b4b54c82b50b94ed540d2f1 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 11:44:11 -0700 Subject: [PATCH 009/226] [Time Controller] Show only outermost controller WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 5e68f2e2a4..5cbf1ce6e8 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -34,7 +34,8 @@ define( 'height: ' + CONDUCTOR_HEIGHT + '">', "", '
' - ].join(''); + ].join(''), + GLOBAL_SHOWING = false; /** * The ConductorRepresenter attaches the universal time conductor @@ -64,11 +65,9 @@ define( // Handle a specific representation of a specific domain object ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { - if (this.showing) { - this.destroy(); - } + this.destroy(); - if (this.views.indexOf(representation) !== -1) { + if (this.views.indexOf(representation) !== -1 && !GLOBAL_SHOWING) { // Create a new scope for the conductor this.conductorScope(this.getScope().$new()); this.conductorElement = @@ -77,11 +76,18 @@ define( this.element.addClass('abs'); this.element.css('bottom', CONDUCTOR_HEIGHT); this.showing = true; + GLOBAL_SHOWING = true; } }; // Respond to the destruction of the current representation. ConductorRepresenter.prototype.destroy = function destroy() { + // We may not have decided to show in the first place, + // so circumvent any unnecessary cleanup + if (!this.showing) { + return; + } + // Restore the original size of the mct-representation if (!this.hadAbs) { this.element.removeClass('abs'); @@ -101,6 +107,7 @@ define( } this.showing = false; + GLOBAL_SHOWING = false; }; return ConductorRepresenter; From 681cd0bb9cb561fdc0e244e8f94729731be6b968 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 14:53:23 -0700 Subject: [PATCH 010/226] [Time Controller] Add conductor service WTD-1515. --- .../conductor/src/ConductorService.js | 46 ++++++++++++++ .../src/ConductorTelemetryCapability.js | 10 +-- .../features/conductor/src/TimeConductor.js | 63 +++++++++++++++++++ 3 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 platform/features/conductor/src/ConductorService.js create mode 100644 platform/features/conductor/src/TimeConductor.js diff --git a/platform/features/conductor/src/ConductorService.js b/platform/features/conductor/src/ConductorService.js new file mode 100644 index 0000000000..c40838ff53 --- /dev/null +++ b/platform/features/conductor/src/ConductorService.js @@ -0,0 +1,46 @@ +/***************************************************************************** + * 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*/ + +define( + ['./TimeConductor'], + function (TimeConductor) { + 'use strict'; + + var ONE_DAY_IN_MS = 1000 * 60 * 60 * 24, + SIX_HOURS_IN_MS = ONE_DAY_IN_MS / 4; + + function ConductorService(now) { + var initialEnd = + Math.ceil(now() / SIX_HOURS_IN_MS) * SIX_HOURS_IN_MS; + + this.conductor = + new TimeConductor(initialEnd - ONE_DAY_IN_MS, initialEnd); + } + + ConductorService.prototype.getConductor = function () { + return this.conductor; + }; + + return ConductorService; + } +); diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js index ea10bddb15..f1269a36e7 100644 --- a/platform/features/conductor/src/ConductorTelemetryCapability.js +++ b/platform/features/conductor/src/ConductorTelemetryCapability.js @@ -31,20 +31,20 @@ define( } ConductorTelemetryCapability.prototype.getMetadata = function () { - return this.wrappedCapability.getMetadata; + return this.wrappedCapability.getMetadata(); }; ConductorTelemetryCapability.prototype.requestData = function (request) { request = request || {}; - request.start = this.timeConductor.getStart(); - request.end = this.timeConductor.getEnd(); + request.start = this.timeConductor.queryStart(); + request.end = this.timeConductor.queryEnd(); return this.wrappedCapability.requestData(request); }; ConductorTelemetryCapability.prototype.subscribe = function (callback, request) { request = request || {}; - request.start = this.timeConductor.getStart(); - request.end = this.timeConductor.getEnd(); + request.start = this.timeConductor.queryStart(); + request.end = this.timeConductor.queryEnd(); return this.wrappedCapability.subscribe(callback, request); }; diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js new file mode 100644 index 0000000000..d4eefeffd8 --- /dev/null +++ b/platform/features/conductor/src/TimeConductor.js @@ -0,0 +1,63 @@ +/***************************************************************************** + * 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*/ + +define( + function () { + 'use strict'; + + function TimeConductor(start, end) { + this.inner = [ start, end ]; + this.outer = [ start, end ]; + } + + TimeConductor.prototype.queryStart = function (value) { + if (arguments.length > 0) { + this.outer[0] = value; + } + return this.outer[0]; + }; + + TimeConductor.prototype.queryEnd = function (value) { + if (arguments.length > 0) { + this.outer[1] = value; + } + return this.outer[1]; + }; + + TimeConductor.prototype.displayStart = function (value) { + if (arguments.length > 0) { + this.inner[0] = value; + } + return this.inner[0]; + }; + + TimeConductor.prototype.displayEnd = function (value) { + if (arguments.length > 0) { + this.inner[1] = value; + } + return this.inner[1]; + }; + + return TimeConductor; + } +); From dbfb8b9861f3e89502132bdcf90754d308d099a6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 14:58:49 -0700 Subject: [PATCH 011/226] [Time Controller] Add capability decorator WTD-1515 --- .../src/ConductorCapabilityDecorator.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 platform/features/conductor/src/ConductorCapabilityDecorator.js diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorCapabilityDecorator.js new file mode 100644 index 0000000000..b88d5cdbad --- /dev/null +++ b/platform/features/conductor/src/ConductorCapabilityDecorator.js @@ -0,0 +1,54 @@ +/***************************************************************************** + * 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*/ + +define( + ['./ConductorTelemetryCapability'], + function (ConductorTelemetryCapability) { + 'use strict'; + + function ConductorCapabilityDecorator(conductorService, capabilityService) { + this.conductorService = conductorService; + this.capabilityService = capabilityService; + } + + ConductorCapabilityDecorator.getCapabilities = function (model) { + var capabilities = this.capabilityService.getCapabilities(model), + TelemetryCapability = capabilities.telemetry, + conductorService = this.conductorService; + + if (TelemetryCapability) { + capabilities.telemetry = function (domainObject) { + return new ConductorCapabilityDecorator( + conductorService.getConductor(), + new TelemetryCapability(domainObject), + domainObject + ); + }; + } + + return capabilities; + }; + + return ConductorCapabilityDecorator; + } +); From bf4765fcb6f807562cfd3310725c5abb07c5dbda Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 15:13:03 -0700 Subject: [PATCH 012/226] [Time Controller] Bind displayed control to state Bind changes to the displayed time controller to changes to the underlying state of the time conductor, WTD-1515. --- platform/features/conductor/bundle.json | 15 +++++++++- .../conductor/src/ConductorRepresenter.js | 30 +++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json index d9905b6f24..139f9942c3 100644 --- a/platform/features/conductor/bundle.json +++ b/platform/features/conductor/bundle.json @@ -3,7 +3,20 @@ "representers": [ { "implementation": "ConductorRepresenter.js", - "depends": [ "$compile", "views[]" ] + "depends": [ "conductorService", "$compile", "views[]" ] + } + ], + "components": [ + { + "implementation": "ConductorCapabilityDecorator.js", + "depends": [ "conductorService" ] + } + ], + "services": [ + { + "key": "conductorService", + "implementation": "ConductorService.js", + "depends": [ "now" ] } ] } diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 5cbf1ce6e8..e7fc76aec5 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -32,7 +32,8 @@ define( '"position: absolute; bottom: 0; width: 100%; ', 'overflow: hidden; ', 'height: ' + CONDUCTOR_HEIGHT + '">', - "", + "", + "", '
' ].join(''), GLOBAL_SHOWING = false; @@ -45,7 +46,7 @@ define( * @implements {Representer} * @constructor */ - function ConductorRepresenter($compile, views, scope, element) { + function ConductorRepresenter(conductorService, $compile, views, scope, element) { var conductorScope; // Angular doesn't like objects to retain references to scope @@ -54,6 +55,7 @@ define( return (conductorScope = arguments.length > 0 ? s : conductorScope); }; + this.conductorService = conductorService; this.element = element; this.showing = false; this.views = views; @@ -63,6 +65,29 @@ define( this.hadAbs = element.hasClass('abs'); } + // Update the time conductor from the scope + ConductorRepresenter.prototype.wireScope = function () { + var scope = this.conductorScope(), + conductor = this.conductorService.getConductor(); + + function updateConductor() { + conductor.queryStart(scope.conductor.outer[0]); + conductor.queryEnd(scope.conductor.outer[1]); + conductor.displayStart(scope.conductor.inner[0]); + conductor.displayEnd(scope.conductor.inner[1]); + } + + scope.conductor = { + outer: [ conductor.queryStart(), conductor.queryEnd() ], + inner: [ conductor.displayStart(), conductor.displayEnd() ] + }; + + scope.$watch('conductor.outer[0]', updateConductor); + scope.$watch('conductor.outer[1]', updateConductor); + scope.$watch('conductor.inner[0]', updateConductor); + scope.$watch('conductor.inner[1]', updateConductor); + }; + // Handle a specific representation of a specific domain object ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { this.destroy(); @@ -70,6 +95,7 @@ define( if (this.views.indexOf(representation) !== -1 && !GLOBAL_SHOWING) { // Create a new scope for the conductor this.conductorScope(this.getScope().$new()); + this.wireScope(); this.conductorElement = this.$compile(TEMPLATE)(this.conductorScope()); this.element.after(this.conductorElement[0]); From 436e010738e5f5a2336b5f262362f9b79186973d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 3 Sep 2015 15:59:46 -0700 Subject: [PATCH 013/226] [Time Conductor] Broadcast changes WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index e7fc76aec5..7dec43da72 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -46,7 +46,7 @@ define( * @implements {Representer} * @constructor */ - function ConductorRepresenter(conductorService, $compile, views, scope, element) { + function ConductorRepresenter($interval, conductorService, $compile, views, scope, element) { var conductorScope; // Angular doesn't like objects to retain references to scope @@ -60,6 +60,7 @@ define( this.showing = false; this.views = views; this.$compile = $compile; + this.$interval = $interval; this.originalHeight = element.css('height'); this.hadAbs = element.hasClass('abs'); @@ -68,13 +69,25 @@ define( // Update the time conductor from the scope ConductorRepresenter.prototype.wireScope = function () { var scope = this.conductorScope(), - conductor = this.conductorService.getConductor(); + conductor = this.conductorService.getConductor(), + self = this; - function updateConductor() { + function updateConductorOuter() { conductor.queryStart(scope.conductor.outer[0]); conductor.queryEnd(scope.conductor.outer[1]); + self.getScope().$broadcast('telemetry:query:bounds', { + start: conductor.queryStart(), + end: conductor.queryEnd() + }); + } + + function updateConductorInner() { conductor.displayStart(scope.conductor.inner[0]); conductor.displayEnd(scope.conductor.inner[1]); + self.getScope().$broadcast('telemetry:display:bounds', { + start: conductor.displayStart(), + end: conductor.displayEnd() + }); } scope.conductor = { @@ -82,10 +95,10 @@ define( inner: [ conductor.displayStart(), conductor.displayEnd() ] }; - scope.$watch('conductor.outer[0]', updateConductor); - scope.$watch('conductor.outer[1]', updateConductor); - scope.$watch('conductor.inner[0]', updateConductor); - scope.$watch('conductor.inner[1]', updateConductor); + scope.$watch('conductor.outer[0]', updateConductorOuter); + scope.$watch('conductor.outer[1]', updateConductorOuter); + scope.$watch('conductor.inner[0]', updateConductorInner); + scope.$watch('conductor.inner[1]', updateConductorInner); }; // Handle a specific representation of a specific domain object From 35ff4efbca4db96ac5c60c66f885aabe8dc8202f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 09:44:08 -0700 Subject: [PATCH 014/226] [Time Conductor] Add placeholder specs Add empty specs for classes related to time conductor, WTD-1515 --- .../test/ConductorCapabilityDecoratorSpec.js | 36 +++++++++++++++++++ .../test/ConductorRepresenterSpec.js | 36 +++++++++++++++++++ .../conductor/test/ConductorServiceSpec.js | 36 +++++++++++++++++++ .../test/ConductorTelemetryCapabilitySpec.js | 36 +++++++++++++++++++ .../conductor/test/TimeConductorSpec.js | 36 +++++++++++++++++++ platform/features/conductor/test/suite.json | 7 ++++ 6 files changed, 187 insertions(+) create mode 100644 platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js create mode 100644 platform/features/conductor/test/ConductorRepresenterSpec.js create mode 100644 platform/features/conductor/test/ConductorServiceSpec.js create mode 100644 platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js create mode 100644 platform/features/conductor/test/TimeConductorSpec.js create mode 100644 platform/features/conductor/test/suite.json diff --git a/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js b/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js new file mode 100644 index 0000000000..d0f4dda4fc --- /dev/null +++ b/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js @@ -0,0 +1,36 @@ +/***************************************************************************** + * 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*/ + +/** + * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. + */ +define( + ["../src/ConductorCapabilityDecorator"], + function (ConductorCapabilityDecorator) { + "use strict"; + + describe("ConductorCapabilityDecorator", function () { + + }); + } +); diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js new file mode 100644 index 0000000000..ab5012930a --- /dev/null +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -0,0 +1,36 @@ +/***************************************************************************** + * 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*/ + +/** + * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. + */ +define( + ["../src/ConductorRepresenter"], + function (ConductorRepresenter) { + "use strict"; + + describe("ConductorRepresenter", function () { + + }); + } +); diff --git a/platform/features/conductor/test/ConductorServiceSpec.js b/platform/features/conductor/test/ConductorServiceSpec.js new file mode 100644 index 0000000000..152faa462a --- /dev/null +++ b/platform/features/conductor/test/ConductorServiceSpec.js @@ -0,0 +1,36 @@ +/***************************************************************************** + * 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*/ + +/** + * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. + */ +define( + ["../src/ConductorService"], + function (ConductorService) { + "use strict"; + + describe("ConductorService", function () { + + }); + } +); diff --git a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js new file mode 100644 index 0000000000..cdcee1b39a --- /dev/null +++ b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js @@ -0,0 +1,36 @@ +/***************************************************************************** + * 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*/ + +/** + * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. + */ +define( + ["../src/ConductorTelemetryCapability"], + function (ConductorTelemetryCapability) { + "use strict"; + + describe("ConductorTelemetryCapability", function () { + + }); + } +); diff --git a/platform/features/conductor/test/TimeConductorSpec.js b/platform/features/conductor/test/TimeConductorSpec.js new file mode 100644 index 0000000000..8e95f6f798 --- /dev/null +++ b/platform/features/conductor/test/TimeConductorSpec.js @@ -0,0 +1,36 @@ +/***************************************************************************** + * 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*/ + +/** + * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. + */ +define( + ["../src/TimeConductor"], + function (TimeConductor) { + "use strict"; + + describe("TimeConductor", function () { + + }); + } +); diff --git a/platform/features/conductor/test/suite.json b/platform/features/conductor/test/suite.json new file mode 100644 index 0000000000..85a155c5df --- /dev/null +++ b/platform/features/conductor/test/suite.json @@ -0,0 +1,7 @@ +[ + "ConductorCapabilityDecorator", + "ConductorRepresenter", + "ConductorService", + "ConductorTelemetryCapability", + "TimeConductor" +] From a481b377cba67addc838dbb3f24b2b73d865123d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 10:24:14 -0700 Subject: [PATCH 015/226] [Time Conductor] Add terminology note to readme WTD-1515 --- platform/features/conductor/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/features/conductor/README.md b/platform/features/conductor/README.md index 97c7dde3c2..196093ae1f 100644 --- a/platform/features/conductor/README.md +++ b/platform/features/conductor/README.md @@ -1,3 +1,9 @@ Provides the time conductor, a control which appears at the bottom of the screen allowing telemetry start and end times to be modified. + +Note that the term "time controller" is generally preferred +outside of the code base (e.g. in UI documents, issues, etc.); +the term "time conductor" is being used in code to avoid +confusion with "controllers" in the Model-View-Controller +sense. From f83588d980a1aaf30d342e18fb6fd0a61b9c3e2a Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 10:32:01 -0700 Subject: [PATCH 016/226] [Time Controller] Begin adding test cases WTD-1515 --- .../conductor/test/ConductorServiceSpec.js | 24 ++++++++++++++++- .../conductor/test/TimeConductorSpec.js | 27 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/test/ConductorServiceSpec.js b/platform/features/conductor/test/ConductorServiceSpec.js index 152faa462a..5146ca5f42 100644 --- a/platform/features/conductor/test/ConductorServiceSpec.js +++ b/platform/features/conductor/test/ConductorServiceSpec.js @@ -29,8 +29,30 @@ define( function (ConductorService) { "use strict"; - describe("ConductorService", function () { + var TEST_NOW = 1020304050; + describe("ConductorService", function () { + var mockNow, + conductorService; + + beforeEach(function () { + mockNow = jasmine.createSpy('now'); + mockNow.andReturn(TEST_NOW); + conductorService = new ConductorService(mockNow); + }); + + it("initializes a time conductor around the current time", function () { + var conductor = conductorService.getConductor(); + expect(conductor.queryStart() <= TEST_NOW).toBeTruthy(); + expect(conductor.queryEnd() >= TEST_NOW).toBeTruthy(); + expect(conductor.queryEnd() > conductor.queryStart()) + .toBeTruthy(); + }); + + it("provides a single shared time conductor instance", function () { + expect(conductorService.getConductor()) + .toBe(conductorService.getConductor()); + }); }); } ); diff --git a/platform/features/conductor/test/TimeConductorSpec.js b/platform/features/conductor/test/TimeConductorSpec.js index 8e95f6f798..558322329e 100644 --- a/platform/features/conductor/test/TimeConductorSpec.js +++ b/platform/features/conductor/test/TimeConductorSpec.js @@ -30,6 +30,33 @@ define( "use strict"; describe("TimeConductor", function () { + var testStart, + testEnd, + conductor; + + beforeEach(function () { + testStart = 42; + testEnd = 12321; + conductor = new TimeConductor(testStart, testEnd); + }); + + it("provides accessors for query/display start/end times", function () { + expect(conductor.queryStart()).toEqual(testStart); + expect(conductor.queryEnd()).toEqual(testEnd); + expect(conductor.displayStart()).toEqual(testStart); + expect(conductor.displayEnd()).toEqual(testEnd); + }); + + it("provides setters for query/display start/end times", function () { + expect(conductor.queryStart(1)).toEqual(1); + expect(conductor.queryEnd(2)).toEqual(2); + expect(conductor.displayStart(3)).toEqual(3); + expect(conductor.displayEnd(4)).toEqual(4); + expect(conductor.queryStart()).toEqual(1); + expect(conductor.queryEnd()).toEqual(2); + expect(conductor.displayStart()).toEqual(3); + expect(conductor.displayEnd()).toEqual(4); + }); }); } From 9ccd0b9188c341f9727cdf355a79ef9a9ba2cae5 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 10:47:38 -0700 Subject: [PATCH 017/226] [Time Conductor] Test capability decorator WTD-1515 --- .../src/ConductorCapabilityDecorator.js | 2 +- .../test/ConductorCapabilityDecoratorSpec.js | 65 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorCapabilityDecorator.js index b88d5cdbad..2ad5982e34 100644 --- a/platform/features/conductor/src/ConductorCapabilityDecorator.js +++ b/platform/features/conductor/src/ConductorCapabilityDecorator.js @@ -31,7 +31,7 @@ define( this.capabilityService = capabilityService; } - ConductorCapabilityDecorator.getCapabilities = function (model) { + ConductorCapabilityDecorator.prototype.getCapabilities = function (model) { var capabilities = this.capabilityService.getCapabilities(model), TelemetryCapability = capabilities.telemetry, conductorService = this.conductorService; diff --git a/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js b/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js index d0f4dda4fc..b98270148b 100644 --- a/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js +++ b/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js @@ -30,7 +30,72 @@ define( "use strict"; describe("ConductorCapabilityDecorator", function () { + var mockCapabilityService, + mockConductorService, + testModel, + testCapabilities, + decorator; + function instantiate(Constructor) { + return new Constructor(); + } + + beforeEach(function () { + testCapabilities = { + telemetry: jasmine.createSpy('Telemetry'), + other: jasmine.createSpy('Other') + }; + + mockCapabilityService = jasmine.createSpyObj( + 'capabilityService', + [ 'getCapabilities' ] + ); + mockConductorService = jasmine.createSpyObj( + 'conductorService', + [ 'getConductor' ] + ); + testModel = { someKey: "some value" }; + + mockCapabilityService.getCapabilities.andCallFake(function () { + // Wrap with object.create so we can still + // reliably expect properties of testCapabilities itself + return Object.create(testCapabilities); + }); + + decorator = new ConductorCapabilityDecorator( + mockConductorService, + mockCapabilityService + ); + }); + + it("delegates to the decorated capability service", function () { + expect(mockCapabilityService.getCapabilities).not.toHaveBeenCalled(); + decorator.getCapabilities(testModel); + expect(mockCapabilityService.getCapabilities).toHaveBeenCalled(); + }); + + it("wraps the 'telemetry' capability of objects", function () { + var capabilities = decorator.getCapabilities(testModel); + expect(capabilities.telemetry) + .not.toBe(testCapabilities.telemetry); + + // Should wrap - verify by invocation + expect(testCapabilities.telemetry).not.toHaveBeenCalled(); + instantiate(capabilities.telemetry); + expect(testCapabilities.telemetry).toHaveBeenCalled(); + }); + + it("does not wrap other capabilities", function () { + var capabilities = decorator.getCapabilities(testModel); + expect(capabilities.other) + .toBe(testCapabilities.other); + }); + + it("gets a time conductor from the conductorService", function () { + expect(mockConductorService.getConductor).not.toHaveBeenCalled(); + instantiate(decorator.getCapabilities(testModel).telemetry); + expect(mockConductorService.getConductor).toHaveBeenCalled(); + }); }); } ); From 8a76c3a42540b01482a2265228bd453041c668c5 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 10:57:50 -0700 Subject: [PATCH 018/226] [Time Controller] Test conductor's telemetry capability WTD-1515 --- .../src/ConductorCapabilityDecorator.js | 3 +- .../src/ConductorTelemetryCapability.js | 6 +- .../test/ConductorTelemetryCapabilitySpec.js | 65 +++++++++++++++++++ 3 files changed, 68 insertions(+), 6 deletions(-) diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorCapabilityDecorator.js index 2ad5982e34..ad4115d48c 100644 --- a/platform/features/conductor/src/ConductorCapabilityDecorator.js +++ b/platform/features/conductor/src/ConductorCapabilityDecorator.js @@ -40,8 +40,7 @@ define( capabilities.telemetry = function (domainObject) { return new ConductorCapabilityDecorator( conductorService.getConductor(), - new TelemetryCapability(domainObject), - domainObject + new TelemetryCapability(domainObject) ); }; } diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js index f1269a36e7..02950ac8f2 100644 --- a/platform/features/conductor/src/ConductorTelemetryCapability.js +++ b/platform/features/conductor/src/ConductorTelemetryCapability.js @@ -26,7 +26,8 @@ define( function () { 'use strict'; - function ConductorTelemetryCapability(timeConductor, telemetryCapability, domainObject) { + function ConductorTelemetryCapability(timeConductor, telemetryCapability) { + this.timeConductor = timeConductor; this.wrappedCapability = telemetryCapability; } @@ -42,9 +43,6 @@ define( }; ConductorTelemetryCapability.prototype.subscribe = function (callback, request) { - request = request || {}; - request.start = this.timeConductor.queryStart(); - request.end = this.timeConductor.queryEnd(); return this.wrappedCapability.subscribe(callback, request); }; diff --git a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js index cdcee1b39a..e5c9066e22 100644 --- a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js +++ b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js @@ -30,6 +30,71 @@ define( "use strict"; describe("ConductorTelemetryCapability", function () { + var mockConductor, + mockTelemetryCapability, + mockUnsubscribe, + testMetadata, + testStartTime, + testEndTime, + conductorTelemetryCapability; + + beforeEach(function () { + mockConductor = jasmine.createSpyObj( + 'timeConductor', + [ + 'queryStart', + 'queryEnd', + 'displayStart', + 'displayEnd' + ] + ); + mockTelemetryCapability = jasmine.createSpyObj( + 'telemetry', + [ 'getMetadata', 'requestData', 'subscribe' ] + ); + mockUnsubscribe = jasmine.createSpy('unsubscribe'); + + testStartTime = 42; + testEndTime = 12321; + testMetadata = { someKey: 'some value' }; + mockTelemetryCapability.getMetadata.andReturn(testMetadata); + mockTelemetryCapability.subscribe.andReturn(mockUnsubscribe); + mockConductor.queryStart.andReturn(testStartTime); + mockConductor.queryEnd.andReturn(testEndTime); + + conductorTelemetryCapability = new ConductorTelemetryCapability( + mockConductor, + mockTelemetryCapability + ); + }); + + it("simply delegates getMetadata calls", function () { + expect(conductorTelemetryCapability.getMetadata()) + .toBe(testMetadata); + }); + + it("adds start/end times to requests", function () { + conductorTelemetryCapability + .requestData({ someKey: "some value" }); + expect(mockTelemetryCapability.requestData).toHaveBeenCalledWith({ + someKey: "some value", + start: testStartTime, + end: testEndTime + }); + }); + + it("simply delegates subscribe calls", function () { + var mockCallback = jasmine.createSpy('callback'), + testRequest = { someKey: "some value" }; + expect(conductorTelemetryCapability.subscribe( + mockCallback, + testRequest + )).toBe(mockUnsubscribe); + expect(mockTelemetryCapability.subscribe).toHaveBeenCalledWith( + mockCallback, + { someKey: "some value" } + ); + }); }); } From 5c1d209effe6efccdfd88e1b2993227672be26b4 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 11:53:51 -0700 Subject: [PATCH 019/226] [Time Controller] Simplify ConductorRepresenter WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 7dec43da72..d75edefd13 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -46,75 +46,75 @@ define( * @implements {Representer} * @constructor */ - function ConductorRepresenter($interval, conductorService, $compile, views, scope, element) { + function ConductorRepresenter(conductorService, $compile, views, scope, element) { var conductorScope; - // Angular doesn't like objects to retain references to scope - this.getScope = function () { return scope; }; + // Angular doesn't like objects to retain references to scopes + this.getScope = function () { + return scope; + }; this.conductorScope = function (s) { return (conductorScope = arguments.length > 0 ? s : conductorScope); }; this.conductorService = conductorService; this.element = element; - this.showing = false; this.views = views; this.$compile = $compile; - this.$interval = $interval; - - this.originalHeight = element.css('height'); - this.hadAbs = element.hasClass('abs'); } // Update the time conductor from the scope - ConductorRepresenter.prototype.wireScope = function () { - var scope = this.conductorScope(), - conductor = this.conductorService.getConductor(), - self = this; - + function wireScope(conductor, conductorScope, repScope) { function updateConductorOuter() { - conductor.queryStart(scope.conductor.outer[0]); - conductor.queryEnd(scope.conductor.outer[1]); - self.getScope().$broadcast('telemetry:query:bounds', { + conductor.queryStart(conductorScope.conductor.outer[0]); + conductor.queryEnd(conductorScope.conductor.outer[1]); + repScope.$broadcast('telemetry:query:bounds', { start: conductor.queryStart(), end: conductor.queryEnd() }); } function updateConductorInner() { - conductor.displayStart(scope.conductor.inner[0]); - conductor.displayEnd(scope.conductor.inner[1]); - self.getScope().$broadcast('telemetry:display:bounds', { + conductor.displayStart(conductorScope.conductor.inner[0]); + conductor.displayEnd(conductorScope.conductor.inner[1]); + repScope.$broadcast('telemetry:display:bounds', { start: conductor.displayStart(), end: conductor.displayEnd() }); } - scope.conductor = { + conductorScope.conductor = { outer: [ conductor.queryStart(), conductor.queryEnd() ], inner: [ conductor.displayStart(), conductor.displayEnd() ] }; - scope.$watch('conductor.outer[0]', updateConductorOuter); - scope.$watch('conductor.outer[1]', updateConductorOuter); - scope.$watch('conductor.inner[0]', updateConductorInner); - scope.$watch('conductor.inner[1]', updateConductorInner); - }; + conductorScope.$watch('conductor.outer[0]', updateConductorOuter); + conductorScope.$watch('conductor.outer[1]', updateConductorOuter); + conductorScope.$watch('conductor.inner[0]', updateConductorInner); + conductorScope.$watch('conductor.inner[1]', updateConductorInner); + } // Handle a specific representation of a specific domain object ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { this.destroy(); if (this.views.indexOf(representation) !== -1 && !GLOBAL_SHOWING) { + // Track original states + this.originalHeight = this.element.css('height'); + this.hadAbs = this.element.hasClass('abs'); + // Create a new scope for the conductor this.conductorScope(this.getScope().$new()); - this.wireScope(); + this.wireScope( + this.conductorService.getConductor(), + this.conductorScope(), + this.getScope() + ); this.conductorElement = this.$compile(TEMPLATE)(this.conductorScope()); this.element.after(this.conductorElement[0]); this.element.addClass('abs'); this.element.css('bottom', CONDUCTOR_HEIGHT); - this.showing = true; GLOBAL_SHOWING = true; } }; @@ -123,7 +123,7 @@ define( ConductorRepresenter.prototype.destroy = function destroy() { // We may not have decided to show in the first place, // so circumvent any unnecessary cleanup - if (!this.showing) { + if (!this.conductorElement) { return; } @@ -145,7 +145,6 @@ define( this.conductorScope(undefined); } - this.showing = false; GLOBAL_SHOWING = false; }; From af462ff3ee114662272611853c679c20682c4892 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 12:12:21 -0700 Subject: [PATCH 020/226] [Time Controller] Begin adding mocks Begin adding/configuring mocks to support testing ConductorRepresenter, WTD-1515 --- .../test/ConductorRepresenterSpec.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js index ab5012930a..d096131a89 100644 --- a/platform/features/conductor/test/ConductorRepresenterSpec.js +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -29,7 +29,48 @@ define( function (ConductorRepresenter) { "use strict"; + var SCOPE_METHODS = [ + '$on', + '$watch', + '$broadcast', + '$emit', + '$new', + '$destroy' + ], + ELEMENT_METHODS = [ + 'hasClass', + 'addClass', + 'css' + ]; + describe("ConductorRepresenter", function () { + var mockConductorService, + mockCompile, + testViews, + mockScope, + mockElement, + mockConductor, + mockCompiledTemplate, + mockNewScope, + mockNewElement, + representer; + + beforeEach(function () { + mockConductorService = jasmine.createSpyObj( + 'conductorService', + ['getConductor'] + ); + mockCompile = jasmine.createSpy('$compile'); + testViews = [ { someKey: "some value" } ]; + mockScope = jasmine.createSpyObj('scope', SCOPE_METHODS); + mockElement = jasmine.createSpyObj('element', ELEMENT_METHODS); + mockConductor = jasmine.createSpyObj( + 'conductor', + [ 'queryStart', 'queryEnd', 'displayStart', 'displayEnd' ] + ); + mockCompiledTemplate = jasmine.createSpy('template'); + mockNewScope = jasmine.createSpyObj('newScope', SCOPE_METHODS); + }); }); } From 01a6d2e6a71505b4e33bb5ed4255b16c846880a1 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 12:44:49 -0700 Subject: [PATCH 021/226] [Time Controller] Test ConductorRepresenter WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 2 +- .../test/ConductorRepresenterSpec.js | 94 ++++++++++++++++++- 2 files changed, 93 insertions(+), 3 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index d75edefd13..2583c50b14 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -105,7 +105,7 @@ define( // Create a new scope for the conductor this.conductorScope(this.getScope().$new()); - this.wireScope( + wireScope( this.conductorService.getConductor(), this.conductorScope(), this.getScope() diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js index d096131a89..931eec506f 100644 --- a/platform/features/conductor/test/ConductorRepresenterSpec.js +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -19,7 +19,7 @@ * 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*/ +/*global define,describe,it,expect,beforeEach,waitsFor,afterEach,jasmine*/ /** * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. @@ -40,7 +40,10 @@ define( ELEMENT_METHODS = [ 'hasClass', 'addClass', - 'css' + 'removeClass', + 'css', + 'after', + 'remove' ]; describe("ConductorRepresenter", function () { @@ -55,6 +58,14 @@ define( mockNewElement, representer; + function fireWatch(scope, watch, value) { + scope.$watch.calls.forEach(function (call) { + if (call.args[0] === watch) { + call.args[1](value); + } + }); + } + beforeEach(function () { mockConductorService = jasmine.createSpyObj( 'conductorService', @@ -70,6 +81,85 @@ define( ); mockCompiledTemplate = jasmine.createSpy('template'); mockNewScope = jasmine.createSpyObj('newScope', SCOPE_METHODS); + mockNewElement = jasmine.createSpyObj('newElement', ELEMENT_METHODS); + mockNewElement[0] = mockNewElement; + + mockConductorService.getConductor.andReturn(mockConductor); + mockCompile.andReturn(mockCompiledTemplate); + mockCompiledTemplate.andReturn(mockNewElement); + mockScope.$new.andReturn(mockNewScope); + + representer = new ConductorRepresenter( + mockConductorService, + mockCompile, + testViews, + mockScope, + mockElement + ); + }); + + afterEach(function () { + representer.destroy(); + }); + + it("adds a conductor to views", function () { + representer.represent(testViews[0], {}); + expect(mockElement.after).toHaveBeenCalledWith(mockNewElement); + }); + + it("adds nothing to non-view representations", function () { + representer.represent({ someKey: "something else" }, {}); + expect(mockElement.after).not.toHaveBeenCalled(); + }); + + it("removes the conductor when destroyed", function () { + representer.represent(testViews[0], {}); + expect(mockNewElement.remove).not.toHaveBeenCalled(); + representer.destroy(); + expect(mockNewElement.remove).toHaveBeenCalled(); + }); + + it("destroys any new scope created", function () { + representer.represent(testViews[0], {}); + representer.destroy(); + expect(mockNewScope.$destroy.calls.length) + .toEqual(mockScope.$new.calls.length); + }); + + it("exposes conductor state in scope", function () { + mockConductor.queryStart.andReturn(42); + mockConductor.queryEnd.andReturn(12321); + mockConductor.displayStart.andReturn(1977); + mockConductor.displayEnd.andReturn(1984); + representer.represent(testViews[0], {}); + + expect(mockNewScope.conductor).toEqual({ + inner: [ 1977, 1984 ], + outer: [ 42, 12321 ] + }); + }); + + it("updates conductor state from scope", function () { + var testState = { + inner: [ 42, 1984 ], + outer: [ -1977, 12321 ] + }; + + representer.represent(testViews[0], {}); + + mockNewScope.conductor = testState; + + fireWatch(mockNewScope, 'conductor.inner[0]', testState.inner[0]); + expect(mockConductor.displayStart).toHaveBeenCalledWith(42); + + fireWatch(mockNewScope, 'conductor.inner[1]', testState.inner[1]); + expect(mockConductor.displayEnd).toHaveBeenCalledWith(1984); + + fireWatch(mockNewScope, 'conductor.outer[0]', -1977); + expect(mockConductor.queryStart).toHaveBeenCalledWith(-1977); + + fireWatch(mockNewScope, 'conductor.outer[1]', 12321); + expect(mockConductor.queryEnd).toHaveBeenCalledWith(12321); }); }); From bfb19dea744c5f1593a172b5cc189e0710bf570d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 12:52:02 -0700 Subject: [PATCH 022/226] [Time Controller] Use start time in example WTD-1515 --- example/generator/src/SinewaveTelemetryProvider.js | 8 ++++---- ...ewaveTelemetry.js => SinewaveTelemetrySeries.js} | 13 +++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) rename example/generator/src/{SinewaveTelemetry.js => SinewaveTelemetrySeries.js} (84%) diff --git a/example/generator/src/SinewaveTelemetryProvider.js b/example/generator/src/SinewaveTelemetryProvider.js index 014510f67c..c4062e659c 100644 --- a/example/generator/src/SinewaveTelemetryProvider.js +++ b/example/generator/src/SinewaveTelemetryProvider.js @@ -25,8 +25,8 @@ * Module defining SinewaveTelemetryProvider. Created by vwoeltje on 11/12/14. */ define( - ["./SinewaveTelemetry"], - function (SinewaveTelemetry) { + ["./SinewaveTelemetrySeries"], + function (SinewaveTelemetrySeries) { "use strict"; /** @@ -45,7 +45,7 @@ define( function generateData(request) { return { key: request.key, - telemetry: new SinewaveTelemetry(request) + telemetry: new SinewaveTelemetrySeries(request) }; } @@ -112,4 +112,4 @@ define( return SinewaveTelemetryProvider; } -); \ No newline at end of file +); diff --git a/example/generator/src/SinewaveTelemetry.js b/example/generator/src/SinewaveTelemetrySeries.js similarity index 84% rename from example/generator/src/SinewaveTelemetry.js rename to example/generator/src/SinewaveTelemetrySeries.js index 6c255bf56a..9ed2320a4a 100644 --- a/example/generator/src/SinewaveTelemetry.js +++ b/example/generator/src/SinewaveTelemetrySeries.js @@ -35,9 +35,10 @@ define( * * @constructor */ - function SinewaveTelemetry(request) { - var latestObservedTime = Date.now(), - count = Math.floor((latestObservedTime - firstObservedTime) / 1000), + function SinewaveTelemetrySeries(request) { + var firstTime = (request || {}).start || firstObservedTime, + latestObservedTime = Date.now(), + count = Math.floor((latestObservedTime - firstTime) / 1000), period = request.period || 30, generatorData = {}; @@ -47,7 +48,7 @@ define( generatorData.getDomainValue = function (i, domain) { return i * 1000 + - (domain !== 'delta' ? firstObservedTime : 0); + (domain !== 'delta' ? firstTime : 0); }; generatorData.getRangeValue = function (i, range) { @@ -58,6 +59,6 @@ define( return generatorData; } - return SinewaveTelemetry; + return SinewaveTelemetrySeries; } -); \ No newline at end of file +); From 3ce40ab870bd9a43dfac79fb0055d2b9e402a4f6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 13:02:36 -0700 Subject: [PATCH 023/226] [Time Controller] Fix capability decoration WTD-1515 --- platform/features/conductor/bundle.json | 2 ++ platform/features/conductor/src/ConductorCapabilityDecorator.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json index 139f9942c3..39d45628bb 100644 --- a/platform/features/conductor/bundle.json +++ b/platform/features/conductor/bundle.json @@ -8,6 +8,8 @@ ], "components": [ { + "type": "decorator", + "provides": "capabilityService", "implementation": "ConductorCapabilityDecorator.js", "depends": [ "conductorService" ] } diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorCapabilityDecorator.js index ad4115d48c..85b34152f3 100644 --- a/platform/features/conductor/src/ConductorCapabilityDecorator.js +++ b/platform/features/conductor/src/ConductorCapabilityDecorator.js @@ -38,7 +38,7 @@ define( if (TelemetryCapability) { capabilities.telemetry = function (domainObject) { - return new ConductorCapabilityDecorator( + return new ConductorTelemetryCapability( conductorService.getConductor(), new TelemetryCapability(domainObject) ); From c2985d61b7723b0fab74d4343d90aa05018afdbf Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 13:57:26 -0700 Subject: [PATCH 024/226] [Plot] Follow universal time controller Follow displayable area of universal time controller, WTD-1515 --- platform/features/plot/src/PlotController.js | 15 ++++++- .../src/elements/PlotPanZoomStackGroup.js | 3 +- .../features/plot/src/elements/PlotUpdater.js | 41 ++++++++++++++++--- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index a54fff83dd..be126e2ed2 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -138,6 +138,16 @@ define( } } + // Change the displayable bounds + function setBasePanZoom(event, bounds) { + var start = bounds.start, + end = bounds.end; + if (updater) { + updater.setDomainBounds(start, end); + self.update(); + } + } + // Create a new subscription; telemetrySubscriber gets // to do the meaningful work here. function subscribe(domainObject) { @@ -172,11 +182,14 @@ define( this.scheduleUpdate = throttle(function () { self.modeOptions.getModeHandler().getSubPlots() .forEach(updateSubplot); - }); + }, 50); // Subscribe to telemetry when a domain object becomes available $scope.$watch('domainObject', subscribe); + // Respond to external bounds changes + $scope.$on("telemetry:display:bounds", setBasePanZoom); + // Unsubscribe when the plot is destroyed $scope.$on("$destroy", releaseSubscription); diff --git a/platform/features/plot/src/elements/PlotPanZoomStackGroup.js b/platform/features/plot/src/elements/PlotPanZoomStackGroup.js index 3746958ecb..e1b61a06eb 100644 --- a/platform/features/plot/src/elements/PlotPanZoomStackGroup.js +++ b/platform/features/plot/src/elements/PlotPanZoomStackGroup.js @@ -143,8 +143,7 @@ define( PlotPanZoomStackGroup.prototype.getDepth = function () { // All stacks are kept in sync, so look up depth // from the first one. - return this.stacks.length > 0 ? - this.stacks[0].getDepth() : 0; + return this.stacks.length > 0 ? this.stacks[0].getDepth() : 0; }; /** diff --git a/platform/features/plot/src/elements/PlotUpdater.js b/platform/features/plot/src/elements/PlotUpdater.js index 851fa56096..c30786986d 100644 --- a/platform/features/plot/src/elements/PlotUpdater.js +++ b/platform/features/plot/src/elements/PlotUpdater.js @@ -141,10 +141,10 @@ define( PlotUpdater.prototype.initializeDomainOffset = function (values) { this.domainOffset = ((this.domainOffset === undefined) && (values.length > 0)) ? - (values.reduce(function (a, b) { - return (a || 0) + (b || 0); - }, 0) / values.length) : - this.domainOffset; + (values.reduce(function (a, b) { + return (a || 0) + (b || 0); + }, 0) / values.length) : + this.domainOffset; }; // Expand range slightly so points near edges are visible @@ -159,7 +159,10 @@ define( // Update dimensions and origin based on extrema of plots PlotUpdater.prototype.updateBounds = function () { - var bufferArray = this.bufferArray; + var bufferArray = this.bufferArray, + priorDomainOrigin = this.origin[0], + priorDomainDimensions = this.dimensions[0]; + if (bufferArray.length > 0) { this.domainExtrema = bufferArray.map(function (lineBuffer) { return lineBuffer.getDomainExtrema(); @@ -178,6 +181,18 @@ define( // Enforce some minimum visible area this.expandRange(); + // Suppress domain changes when pinned + if (this.hasSpecificDomainBounds) { + this.origin[0] = priorDomainOrigin; + this.dimensions[0] = priorDomainDimensions; + if (this.following) { + this.origin[0] = Math.max( + this.domainExtrema[1] - this.dimensions[0], + this.origin[0] + ); + } + } + // ...then enforce a fixed duration if needed if (this.fixedDuration !== undefined) { this.origin[0] = this.origin[0] + this.dimensions[0] - @@ -281,6 +296,22 @@ define( return this.bufferArray; }; + /** + * Set the start and end boundaries (usually time) for the + * domain axis of this updater. + */ + PlotUpdater.prototype.setDomainBounds = function (start, end) { + this.fixedDuration = end - start; + this.origin[0] = start; + this.dimensions[0] = this.fixedDuration; + + // Suppress follow behavior if we have windowed in on the past + this.hasSpecificDomainBounds = true; + this.following = end >= this.domainExtrema[1]; + + this.updateBounds(); + }; + /** * Fill in historical data. */ From d158aa602831555bacf3179ee95f7119be387d69 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 14:04:09 -0700 Subject: [PATCH 025/226] [Plot] Follow time conductor more smoothly WTD-1515 --- platform/features/plot/src/PlotController.js | 2 +- platform/features/plot/src/elements/PlotUpdater.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index be126e2ed2..c8a76e09ec 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -182,7 +182,7 @@ define( this.scheduleUpdate = throttle(function () { self.modeOptions.getModeHandler().getSubPlots() .forEach(updateSubplot); - }, 50); + }); // Subscribe to telemetry when a domain object becomes available $scope.$watch('domainObject', subscribe); diff --git a/platform/features/plot/src/elements/PlotUpdater.js b/platform/features/plot/src/elements/PlotUpdater.js index c30786986d..7701f02aa5 100644 --- a/platform/features/plot/src/elements/PlotUpdater.js +++ b/platform/features/plot/src/elements/PlotUpdater.js @@ -308,8 +308,6 @@ define( // Suppress follow behavior if we have windowed in on the past this.hasSpecificDomainBounds = true; this.following = end >= this.domainExtrema[1]; - - this.updateBounds(); }; /** From 77d11e1bcfa26861f71b85cf3479c42f6ffea312 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 14:24:45 -0700 Subject: [PATCH 026/226] [Time Controller] Fix sine wave generation Generate sine wave correctly when start time has been specified, WTD-1515 --- .../generator/src/SinewaveTelemetrySeries.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/example/generator/src/SinewaveTelemetrySeries.js b/example/generator/src/SinewaveTelemetrySeries.js index 9ed2320a4a..930206541f 100644 --- a/example/generator/src/SinewaveTelemetrySeries.js +++ b/example/generator/src/SinewaveTelemetrySeries.js @@ -29,31 +29,34 @@ define( function () { "use strict"; - var firstObservedTime = Date.now(); + var firstObservedTime = Math.floor(Date.now() / 1000); /** * * @constructor */ function SinewaveTelemetrySeries(request) { - var firstTime = (request || {}).start || firstObservedTime, - latestObservedTime = Date.now(), - count = Math.floor((latestObservedTime - firstTime) / 1000), + var latestObservedTime = Math.floor(Date.now() / 1000), + count = latestObservedTime - firstObservedTime, period = request.period || 30, - generatorData = {}; + generatorData = {}, + offset = (request.start !== undefined) ? + Math.floor(request.start / 1000) - firstObservedTime : + 0; generatorData.getPointCount = function () { - return count; + return count - offset; }; generatorData.getDomainValue = function (i, domain) { - return i * 1000 + - (domain !== 'delta' ? firstTime : 0); + return (i + offset) * 1000 + + (domain !== 'delta' ? + (firstObservedTime * 1000) : 0); }; generatorData.getRangeValue = function (i, range) { range = range || "sin"; - return Math[range](i * Math.PI * 2 / period); + return Math[range]((i + offset) * Math.PI * 2 / period); }; return generatorData; From 600ff1a3ee4ca11bf05ca149035ad424fb08b508 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:07:46 -0700 Subject: [PATCH 027/226] [Plot] Requery on event Requery on a query change event from a time conductor, WTD-1515 --- platform/features/plot/src/PlotController.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index c8a76e09ec..a5772b8411 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -65,6 +65,7 @@ define( subPlotFactory = new SubPlotFactory(telemetryFormatter), cachedObjects = [], updater, + lastBounds, handle; // Populate the scope with axis information (specifically, options @@ -139,13 +140,14 @@ define( } // Change the displayable bounds - function setBasePanZoom(event, bounds) { + function setBasePanZoom(unused, bounds) { var start = bounds.start, end = bounds.end; if (updater) { updater.setDomainBounds(start, end); self.update(); } + lastBounds = bounds; } // Create a new subscription; telemetrySubscriber gets @@ -175,6 +177,18 @@ define( } } + // Initiate a new query for data because query bounds changed + function requery() { + if (handle) { + recreateUpdater(); + requestTelemetry(); + // Keep any externally-provided bounds + if (lastBounds) { + setBasePanZoom({}, lastBounds); + } + } + } + this.modeOptions = new PlotModeOptions([], subPlotFactory); this.updateValues = updateValues; @@ -190,6 +204,9 @@ define( // Respond to external bounds changes $scope.$on("telemetry:display:bounds", setBasePanZoom); + // Respond to external query range changes + $scope.$on("telemetry:query:bounds", throttle(requery, 250)); + // Unsubscribe when the plot is destroyed $scope.$on("$destroy", releaseSubscription); From c58ffb4a529d24a2894276aba0fba11a22fecdaa Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:15:09 -0700 Subject: [PATCH 028/226] [Time Controller] Update inner span Update inner span when outer dates change (if needed), WTD-1515 --- .../controllers/TimeConductorController.js | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/platform/commonUI/general/src/controllers/TimeConductorController.js b/platform/commonUI/general/src/controllers/TimeConductorController.js index 26f120c7b0..e440e048cd 100644 --- a/platform/commonUI/general/src/controllers/TimeConductorController.js +++ b/platform/commonUI/general/src/controllers/TimeConductorController.js @@ -69,8 +69,22 @@ define( updateTicks(); } + function updateViewForInnerSpanFromModel(ngModel) { + var span = ngModel.outer[1] - ngModel.outer[0]; + + // Expose readable dates for the knobs + $scope.startInnerText = formatTimestamp(ngModel.inner[0]); + $scope.endInnerText = formatTimestamp(ngModel.inner[1]); + + // And positions for the knobs + $scope.startInnerPct = + toPercent((ngModel.inner[0] - ngModel.outer[0]) / span); + $scope.endInnerPct = + toPercent((ngModel.outer[1] - ngModel.inner[1]) / span); + } + function updateViewFromModel(ngModel) { - var t = now(), span; + var t = now(); ngModel = ngModel || {}; ngModel.outer = ngModel.outer || [ t - 24 * 3600 * 1000, t ]; @@ -80,16 +94,8 @@ define( $scope.startOuterDate = formatTimestamp(ngModel.outer[0]); $scope.endOuterDate = formatTimestamp(ngModel.outer[1]); - // Then readable dates for the knobs - $scope.startInnerText = formatTimestamp(ngModel.inner[0]); - $scope.endInnerText = formatTimestamp(ngModel.inner[1]); - - // And positions for the knobs - span = ngModel.outer[1] - ngModel.outer[0]; - $scope.startInnerPct = - toPercent((ngModel.inner[0] - ngModel.outer[0]) / span); - $scope.endInnerPct = - toPercent((ngModel.outer[1] - ngModel.inner[1]) / span); + // Then various updates for the inner span + updateViewForInnerSpanFromModel(ngModel); // Stick it back is scope (in case we just set defaults) $scope.ngModel = ngModel; @@ -162,11 +168,19 @@ define( function updateOuterStart(text) { var ngModel = $scope.ngModel; ngModel.outer[0] = parseTimestamp(text, ngModel.outer[0]); + ngModel.outer[1] = Math.max(ngModel.outer[0], ngModel.outer[1]); + ngModel.inner[0] = Math.max(ngModel.outer[0], ngModel.inner[0]); + ngModel.inner[1] = Math.max(ngModel.outer[0], ngModel.inner[1]); + updateViewForInnerSpanFromModel(ngModel); } function updateOuterEnd(text) { var ngModel = $scope.ngModel; ngModel.outer[1] = parseTimestamp(text, ngModel.outer[1]); + ngModel.outer[0] = Math.min(ngModel.outer[1], ngModel.outer[0]); + ngModel.inner[0] = Math.min(ngModel.outer[1], ngModel.inner[0]); + ngModel.inner[1] = Math.min(ngModel.outer[1], ngModel.inner[1]); + updateViewForInnerSpanFromModel(ngModel); } $scope.startLeftDrag = startLeftDrag; From b66759e5194e5b21a08132972ff9b250a2b89931 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:31:47 -0700 Subject: [PATCH 029/226] [Plot] Initially establish bounds Initially establish domain bounds with time controller, WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 2 ++ platform/features/plot/src/PlotController.js | 32 ++++++++++--------- .../features/plot/src/elements/PlotUpdater.js | 3 +- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 2583c50b14..f0a32c69a0 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -92,6 +92,8 @@ define( conductorScope.$watch('conductor.outer[1]', updateConductorOuter); conductorScope.$watch('conductor.inner[0]', updateConductorInner); conductorScope.$watch('conductor.inner[1]', updateConductorInner); + + repScope.$on('telemetry:view', updateConductorInner); } // Handle a specific representation of a specific domain object diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index a5772b8411..3b846d33b8 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -95,6 +95,17 @@ define( } } + // Change the displayable bounds + function setBasePanZoom(unused, bounds) { + var start = bounds.start, + end = bounds.end; + if (updater) { + updater.setDomainBounds(start, end); + self.update(); + } + lastBounds = bounds; + } + // Reinstantiate the plot updater (e.g. because we have a // new subscription.) This will clear the plot. function recreateUpdater() { @@ -108,6 +119,10 @@ define( handle, ($scope.axes[1].active || {}).key ); + // Keep any externally-provided bounds + if (lastBounds) { + setBasePanZoom({}, lastBounds); + } } // Handle new telemetry data in this plot @@ -139,17 +154,6 @@ define( } } - // Change the displayable bounds - function setBasePanZoom(unused, bounds) { - var start = bounds.start, - end = bounds.end; - if (updater) { - updater.setDomainBounds(start, end); - self.update(); - } - lastBounds = bounds; - } - // Create a new subscription; telemetrySubscriber gets // to do the meaningful work here. function subscribe(domainObject) { @@ -182,10 +186,6 @@ define( if (handle) { recreateUpdater(); requestTelemetry(); - // Keep any externally-provided bounds - if (lastBounds) { - setBasePanZoom({}, lastBounds); - } } } @@ -210,6 +210,8 @@ define( // Unsubscribe when the plot is destroyed $scope.$on("$destroy", releaseSubscription); + // Notify any external observers that a new telemetry view is here + $scope.$emit("telemetry:view"); } /** diff --git a/platform/features/plot/src/elements/PlotUpdater.js b/platform/features/plot/src/elements/PlotUpdater.js index 7701f02aa5..d4b4ad3eec 100644 --- a/platform/features/plot/src/elements/PlotUpdater.js +++ b/platform/features/plot/src/elements/PlotUpdater.js @@ -307,7 +307,8 @@ define( // Suppress follow behavior if we have windowed in on the past this.hasSpecificDomainBounds = true; - this.following = end >= this.domainExtrema[1]; + this.following = + !this.domainExtrema || (end >= this.domainExtrema[1]); }; /** From 142af3db777bdfae9fef3bb89cc3aed2e74d9295 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:44:18 -0700 Subject: [PATCH 030/226] [Time Controller] Add JSDoc WTD-1515 --- .../src/ConductorCapabilityDecorator.js | 11 +++++ .../conductor/src/ConductorRepresenter.js | 8 +++- .../conductor/src/ConductorService.js | 15 +++++++ .../src/ConductorTelemetryCapability.js | 13 ++++++ .../features/conductor/src/TimeConductor.js | 45 +++++++++++++++++++ 5 files changed, 91 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorCapabilityDecorator.js index 85b34152f3..7c6ba46133 100644 --- a/platform/features/conductor/src/ConductorCapabilityDecorator.js +++ b/platform/features/conductor/src/ConductorCapabilityDecorator.js @@ -26,6 +26,17 @@ define( function (ConductorTelemetryCapability) { 'use strict'; + /** + * Decorates the `capabilityService` such that any exposed `telemetry` + * capabilities have their requests mediated by the time conductor. + * + * @constructor + * @memberof platform/features/conductor + * @implements {CapabilityService} + * @param {platform/features/conductor.ConductorService} conductorServe + * the service which exposes the global time conductor + * @param {CapabilityService} capabilityService the decorated service + */ function ConductorCapabilityDecorator(conductorService, capabilityService) { this.conductorService = conductorService; this.capabilityService = capabilityService; diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index f0a32c69a0..0617c771b1 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -42,9 +42,15 @@ define( * The ConductorRepresenter attaches the universal time conductor * to views. * - * @memberof platform/commonUI/edit * @implements {Representer} * @constructor + * @memberof platform/features/conductor + * @param {platform/features/conductor.ConductorService} conductorService + * service which provides the active time conductor + * @param $compile Angular's $compile + * @param {ViewDefinition[]} views all defined views + * @param {Scope} the scope of the representation + * @param element the jqLite-wrapped representation element */ function ConductorRepresenter(conductorService, $compile, views, scope, element) { var conductorScope; diff --git a/platform/features/conductor/src/ConductorService.js b/platform/features/conductor/src/ConductorService.js index c40838ff53..59cfa95e3c 100644 --- a/platform/features/conductor/src/ConductorService.js +++ b/platform/features/conductor/src/ConductorService.js @@ -29,6 +29,16 @@ define( var ONE_DAY_IN_MS = 1000 * 60 * 60 * 24, SIX_HOURS_IN_MS = ONE_DAY_IN_MS / 4; + /** + * Provides a single global instance of the time conductor, which + * controls both query ranges and displayed ranges for telemetry + * data. + * + * @constructor + * @memberof platform/features/conductor + * @param {Function} now a function which returns the current time + * as a UNIX timestamp, in milliseconds + */ function ConductorService(now) { var initialEnd = Math.ceil(now() / SIX_HOURS_IN_MS) * SIX_HOURS_IN_MS; @@ -37,6 +47,11 @@ define( new TimeConductor(initialEnd - ONE_DAY_IN_MS, initialEnd); } + /** + * Get the global instance of the time conductor. + * @returns {platform/features/conductor.TimeConductor} the + * time conductor + */ ConductorService.prototype.getConductor = function () { return this.conductor; }; diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js index 02950ac8f2..5d224b0415 100644 --- a/platform/features/conductor/src/ConductorTelemetryCapability.js +++ b/platform/features/conductor/src/ConductorTelemetryCapability.js @@ -26,6 +26,19 @@ define( function () { 'use strict'; + /** + * Wrapper for the `telemetry` capability which adds start/end + * times to all requests based on the current state of a time + * conductor. + * + * @constructor + * @memberof platform/features/conductor + * @augments {platform/telemetry.TelemetryCapability} + * @param {platform/features/conductor.TimeConductor} timeConductor + * the time conductor which controls these queries + * @param {platform/telemetry.TelemetryCapability} telemetryCapability + * the wrapped capability + */ function ConductorTelemetryCapability(timeConductor, telemetryCapability) { this.timeConductor = timeConductor; this.wrappedCapability = telemetryCapability; diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js index d4eefeffd8..eeb104839a 100644 --- a/platform/features/conductor/src/TimeConductor.js +++ b/platform/features/conductor/src/TimeConductor.js @@ -21,15 +21,44 @@ *****************************************************************************/ /*global define*/ +/** + * The time conductor bundle adds a global control to the bottom of the + * outermost viewing area. This controls both the range for time-based + * queries and for time-based displays. + * + * @namespace platform/features/conductor + */ define( function () { 'use strict'; + /** + * Wrapper for the `telemetry` capability which adds start/end + * times to all requests based on the current state of a time + * conductor. + * + * Note that both start and end times are in units which may + * vary depending on the domains of telemetry being used. Most + * commonly, these are UNIX timestamps in milliseconds. + * + * @memberof platform/features/conductor + * @constructor + * @augments {platform/telemetry.TelemetryCapability} + * @param {platform/features/conductor.TimeConductor} timeConductor + * the time conductor which controls these queries + * @param {platform/telemetry.TelemetryCapability} telemetryCapability + * the wrapped capability + */ function TimeConductor(start, end) { this.inner = [ start, end ]; this.outer = [ start, end ]; } + /** + * Get or set (if called with an argument) the start time for queries. + * @param {number} [value] the start time to set + * @returns {number} the start time + */ TimeConductor.prototype.queryStart = function (value) { if (arguments.length > 0) { this.outer[0] = value; @@ -37,6 +66,11 @@ define( return this.outer[0]; }; + /** + * Get or set (if called with an argument) the end time for queries. + * @param {number} [value] the end time to set + * @returns {number} the end time + */ TimeConductor.prototype.queryEnd = function (value) { if (arguments.length > 0) { this.outer[1] = value; @@ -44,6 +78,12 @@ define( return this.outer[1]; }; + + /** + * Get or set (if called with an argument) the start time for displays. + * @param {number} [value] the start time to set + * @returns {number} the start time + */ TimeConductor.prototype.displayStart = function (value) { if (arguments.length > 0) { this.inner[0] = value; @@ -51,6 +91,11 @@ define( return this.inner[0]; }; + /** + * Get or set (if called with an argument) the end time for displays. + * @param {number} [value] the end time to set + * @returns {number} the end time + */ TimeConductor.prototype.displayEnd = function (value) { if (arguments.length > 0) { this.inner[1] = value; From 4d276888e1f806d188196bbbdd68947694425acd Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:53:55 -0700 Subject: [PATCH 031/226] [Plot] Update failining spec WTD-1515 --- platform/features/plot/test/PlotControllerSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/features/plot/test/PlotControllerSpec.js b/platform/features/plot/test/PlotControllerSpec.js index e6c79b4e54..e9fec60aaf 100644 --- a/platform/features/plot/test/PlotControllerSpec.js +++ b/platform/features/plot/test/PlotControllerSpec.js @@ -49,7 +49,7 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$watch", "$on" ] + [ "$watch", "$on", "$emit" ] ); mockFormatter = jasmine.createSpyObj( "formatter", From 29c460556aa61c6becb6cd330a8aaf95b15890cb Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Sep 2015 15:59:38 -0700 Subject: [PATCH 032/226] [Representers] Destroy representers Invoke the destroy methods of any active representers when a scope is destroyed; supports time controller, which needs to accurately track when it has or hasn't been attached to a view. WTD-1515 --- .../representation/src/MCTRepresentation.js | 18 ++++++++++++++---- .../test/MCTRepresentationSpec.js | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index 49b2ae0f57..98a814c362 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -136,6 +136,14 @@ define( } } + // Destroy (deallocate any resources associated with) any + // active representers. + function destroyRepresenters() { + activeRepresenters.forEach(function (activeRepresenter) { + activeRepresenter.destroy(); + }); + } + // General-purpose refresh mechanism; should set up the scope // as appropriate for current representation key and // domain object. @@ -152,10 +160,8 @@ define( // via the "inclusion" field $scope.inclusion = representation && getPath(representation); - // Any existing gestures are no longer valid; release them. - activeRepresenters.forEach(function (activeRepresenter) { - activeRepresenter.destroy(); - }); + // Any existing representers are no longer valid; release them. + destroyRepresenters(); // Log if a key was given, but no matching representation // was found. @@ -209,6 +215,10 @@ define( // model's "modified" field, by the mutation capability. $scope.$watch("domainObject.getModel().modified", refreshCapabilities); + // Make sure any resources allocated by representers also get + // released. + $scope.$on("$destroy", destroyRepresenters); + // Do one initial refresh, so that we don't need another // digest iteration just to populate the scope. Failure to // do this can result in unstable digest cycles, which diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 337f214a86..a50347df70 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -106,7 +106,7 @@ define( mockSce.trustAsResourceUrl.andCallFake(function (url) { return url; }); - mockScope = jasmine.createSpyObj("scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("scope", [ "$watch", "$on" ]); mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS); mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS); From 47b97a504ea5c16d8b571ecdfab74eabbb920056 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 16:28:01 -0700 Subject: [PATCH 033/226] [Telemetry] Document TelemetryRequest Document TelemetryRequest to record new parameters in support of the time conductor, WTD-1515 --- platform/telemetry/src/TelemetryAggregator.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/platform/telemetry/src/TelemetryAggregator.js b/platform/telemetry/src/TelemetryAggregator.js index fb4cf81fe0..86257befb7 100644 --- a/platform/telemetry/src/TelemetryAggregator.js +++ b/platform/telemetry/src/TelemetryAggregator.js @@ -31,6 +31,30 @@ define( function () { "use strict"; + /** + * Describes a request for telemetry data. Note that responses + * may contain either a sub- or superset of the requested data. + * @typedef TelemetryRequest + * @property {string} source an identifier for the relevant + * source of telemetry data + * @property {string} key an identifier for the specific + * series of telemetry data provided by that source + * @property {number} [start] the earliest domain value of + * interest for that telemetry data; for time-based + * domains, this is in milliseconds since the start + * of 1970 + * @property {number} [end] the latest domain value of interest + * for that telemetry data; for time-based domains, + * this is in milliseconds since 1970 + * @property {string} [domain] the domain for the query; if + * omitted, this will be whatever the "normal" + * domain is for a given telemetry series (the + * first domain from its metadata) + * @property {number} [size] if set, indicates the maximum number + * of data points of interest for this request (more + * recent domain values will be preferred) + */ + /** * Request telemetry data. * @param {TelemetryRequest[]} requests and array of From c026bfa17da75e29bc6d1dd073cd6769fa2872b8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 16:37:10 -0700 Subject: [PATCH 034/226] [Time Conductor] Begin adding support to fixed position Begin adding support for universal time controller to fixed position view, WTD-1515. --- platform/features/layout/bundle.json | 3 +- .../features/layout/src/FixedController.js | 39 ++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/platform/features/layout/bundle.json b/platform/features/layout/bundle.json index f1006d67e8..8a8d158e32 100644 --- a/platform/features/layout/bundle.json +++ b/platform/features/layout/bundle.json @@ -168,7 +168,8 @@ "$q", "dialogService", "telemetrySubscriber", - "telemetryFormatter" + "telemetryFormatter", + "throttle" ] } ], diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index 410c0d2f94..1fa057642a 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -38,9 +38,9 @@ define( * @constructor * @param {Scope} $scope the controller's Angular scope */ - function FixedController($scope, $q, dialogService, telemetrySubscriber, telemetryFormatter) { + function FixedController($scope, $q, dialogService, telemetryHandler, telemetryFormatter, throttle) { var self = this, - subscription, + handle, names = {}, // Cache names by ID values = {}, // Cache values by ID elementProxiesById = {}; @@ -87,14 +87,14 @@ define( limit = telemetryObject && telemetryObject.getCapability('limit'), datum = telemetryObject && - subscription.getDatum(telemetryObject), + handle.getDatum(telemetryObject), alarm = limit && datum && limit.evaluate(datum); if (id) { (elementProxiesById[id] || []).forEach(function (element) { names[id] = telemetryObject.getModel().name; values[id] = telemetryFormatter.formatRangeValue( - subscription.getRangeValue(telemetryObject) + handle.getRangeValue(telemetryObject) ); element.name = names[id]; element.value = values[id]; @@ -115,8 +115,8 @@ define( // Update telemetry values based on new data available function updateValues() { - if (subscription) { - subscription.getTelemetryObjects().forEach(updateValue); + if (handle) { + handle.getTelemetryObjects().forEach(updateValue); } } @@ -178,22 +178,24 @@ define( // Free up subscription to telemetry function releaseSubscription() { - if (subscription) { - subscription.unsubscribe(); - subscription = undefined; + if (handle) { + handle.unsubscribe(); + handle = undefined; } } // Subscribe to telemetry updates for this domain object function subscribe(domainObject) { // Release existing subscription (if any) - if (subscription) { - subscription.unsubscribe(); + if (handle) { + handle.unsubscribe(); } // Make a new subscription - subscription = domainObject && - telemetrySubscriber.subscribe(domainObject, updateValues); + handle = domainObject && telemetryHandler.handle( + domainObject, + updateValues + ); } // Handle changes in the object's composition @@ -204,6 +206,11 @@ define( subscribe($scope.domainObject); } + // Trigger a new query for telemetry data + function requery() { + subscribe($scope.domainObject); + } + // Add an element to this view function addElement(element) { // Ensure that configuration field is populated @@ -277,6 +284,12 @@ define( // Position panes where they are dropped $scope.$on("mctDrop", handleDrop); + + // Respond to external bounds changes + $scope.$on("telemetry:display:bounds", throttle(requery, 250)); + + // Respond to external query range changes + $scope.$on("telemetry:query:bounds", throttle(requery, 250)); } /** From 760f4b818f2f152d08b04cb2221ede22cc282d70 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 16:53:06 -0700 Subject: [PATCH 035/226] [Time Conductor] Update fixed position from history WTD-1515 --- .../features/layout/src/FixedController.js | 76 +++++++++++++------ 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index 1fa057642a..9d1b4f900f 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -43,7 +43,8 @@ define( handle, names = {}, // Cache names by ID values = {}, // Cache values by ID - elementProxiesById = {}; + elementProxiesById = {}, + maxDomainValue = Number.POSITIVE_INFINITY; // Convert from element x/y/width/height to an // appropriate ng-style argument, to position elements. @@ -81,25 +82,51 @@ define( return element.handles().map(generateDragHandle); } - // Update the displayed value for this object - function updateValue(telemetryObject) { - var id = telemetryObject && telemetryObject.getId(), + // Update the value displayed in elements of this telemetry object + function setDisplayedValue(telemetryObject, value, alarm) { + var id = telemetryObject.getId(); + (elementProxiesById[id] || []).forEach(function (element) { + names[id] = telemetryObject.getModel().name; + values[id] = telemetryFormatter.formatRangeValue(value); + element.name = names[id]; + element.value = values[id]; + element.cssClass = alarm && alarm.cssClass; + }); + } + + // Update the displayed value for this object, from a specific + // telemetry series + function updateValueFromSeries(telemetryObject, telemetrySeries) { + var index = telemetrySeries.getPointCount() - 1, limit = telemetryObject && telemetryObject.getCapability('limit'), - datum = telemetryObject && - handle.getDatum(telemetryObject), - alarm = limit && datum && limit.evaluate(datum); + datum = telemetryObject && handle.getDatum( + telemetryObject, + telemetrySeries, + index + ); - if (id) { - (elementProxiesById[id] || []).forEach(function (element) { - names[id] = telemetryObject.getModel().name; - values[id] = telemetryFormatter.formatRangeValue( - handle.getRangeValue(telemetryObject) - ); - element.name = names[id]; - element.value = values[id]; - element.cssClass = alarm && alarm.cssClass; - }); + setDisplayedValue( + telemetryObject, + telemetrySeries.getRangeValue(index), + limit && datum && limit.evaluate(datum) + ); + } + + // Update the displayed value for this object + function updateValue(telemetryObject) { + var limit = telemetryObject && + telemetryObject.getCapability('limit'), + datum = telemetryObject && + handle.getDatum(telemetryObject); + + if (telemetryObject && + handle.getDomainValue(telemetryObject) < maxDomainValue) { + setDisplayedValue( + telemetryObject, + handle.getRangeValue(telemetryObject), + limit && datum && limit.evaluate(datum) + ); } } @@ -207,8 +234,14 @@ define( } // Trigger a new query for telemetry data - function requery() { - subscribe($scope.domainObject); + function updateDisplayBounds(bounds) { + maxDomainValue = bounds.end; + if (handle) { + handle.request( + { size: 1 }, // Only need a single data point + updateValueFromSeries + ); + } } // Add an element to this view @@ -286,10 +319,7 @@ define( $scope.$on("mctDrop", handleDrop); // Respond to external bounds changes - $scope.$on("telemetry:display:bounds", throttle(requery, 250)); - - // Respond to external query range changes - $scope.$on("telemetry:query:bounds", throttle(requery, 250)); + $scope.$on("telemetry:display:bounds", updateDisplayBounds); } /** From 351181d38eec032ff7f66d8b54065c5da6e3181d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 16:58:15 -0700 Subject: [PATCH 036/226] [Time Controller] Allow datum retrieval from histories WTD-1515 --- platform/telemetry/src/TelemetryHandle.js | 9 +++++++-- platform/telemetry/src/TelemetrySubscription.js | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/telemetry/src/TelemetryHandle.js b/platform/telemetry/src/TelemetryHandle.js index 145edfc5d7..1061c6386b 100644 --- a/platform/telemetry/src/TelemetryHandle.js +++ b/platform/telemetry/src/TelemetryHandle.js @@ -79,8 +79,7 @@ define( /** * Change the request duration. - * @param {object|number} request the duration of historical - * data to look at; or, the request to issue + * @param {TelemetryRequest} request the request to issue * @param {Function} [callback] a callback that will be * invoked as new data becomes available, with the * domain object for which new data is available. @@ -107,6 +106,12 @@ define( .then(issueRequests); }; + self.getDatum = function (telemetryObject, series, index) { + return arguments.length > 1 ? + subscription.getDatum(telemetryObject) : + subscription.makeDatum(telemetryObject, series, index); + }; + return self; } diff --git a/platform/telemetry/src/TelemetrySubscription.js b/platform/telemetry/src/TelemetrySubscription.js index 8b4d7d7a9c..93539d1ab0 100644 --- a/platform/telemetry/src/TelemetrySubscription.js +++ b/platform/telemetry/src/TelemetrySubscription.js @@ -239,6 +239,10 @@ define( initialize(); this.unlistenToMutation = addMutationListener(); + + // Expose makeDatum for TelemetryHandler to use, but not + // as part of public API + this.makeDatum = makeDatum; } TelemetrySubscription.prototype.unsubscribeAll = function () { From d2dfec3ce7338fdf02359bc6342ab820d525cdca Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 17:03:58 -0700 Subject: [PATCH 037/226] [Time Controller] Simplify retrieval of datum objects ...for historical data. Supports WTD-1515 --- .../features/layout/src/FixedController.js | 1 - platform/telemetry/src/TelemetryHandle.js | 20 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index 9d1b4f900f..9482f71aba 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -102,7 +102,6 @@ define( telemetryObject.getCapability('limit'), datum = telemetryObject && handle.getDatum( telemetryObject, - telemetrySeries, index ); diff --git a/platform/telemetry/src/TelemetryHandle.js b/platform/telemetry/src/TelemetryHandle.js index 1061c6386b..ae25fd9bfa 100644 --- a/platform/telemetry/src/TelemetryHandle.js +++ b/platform/telemetry/src/TelemetryHandle.js @@ -106,10 +106,24 @@ define( .then(issueRequests); }; - self.getDatum = function (telemetryObject, series, index) { - return arguments.length > 1 ? + /** + * 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. + * + * @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) { + return typeof index !== 'number' ? subscription.getDatum(telemetryObject) : - subscription.makeDatum(telemetryObject, series, index); + subscription.makeDatum( + telemetryObject, + this.getSeries(telemetryObject), + index + ); }; return self; From fdbc91131bdff31b3467bfe2d20c3be5278c5d7d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 8 Sep 2015 17:18:39 -0700 Subject: [PATCH 038/226] [Time Controller] Update bundle definition ...for Fixed Position view to reflect changes to dependencies, WTD-1515. --- platform/features/layout/bundle.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/features/layout/bundle.json b/platform/features/layout/bundle.json index 8a8d158e32..0fd8b9dea4 100644 --- a/platform/features/layout/bundle.json +++ b/platform/features/layout/bundle.json @@ -167,7 +167,7 @@ "$scope", "$q", "dialogService", - "telemetrySubscriber", + "telemetryHandler", "telemetryFormatter", "throttle" ] From a4dda695dde28ae5d338961303678645d09ded50 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 9 Sep 2015 16:46:00 -0700 Subject: [PATCH 039/226] [Time Controller] Get conductor working with fixed pos. WTD-1515 --- .../generator/src/SinewaveTelemetrySeries.js | 12 +++++++--- .../src/ConductorTelemetryCapability.js | 23 ++++++++++++++++--- .../features/layout/src/FixedController.js | 4 ++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/example/generator/src/SinewaveTelemetrySeries.js b/example/generator/src/SinewaveTelemetrySeries.js index 930206541f..5b7914a867 100644 --- a/example/generator/src/SinewaveTelemetrySeries.js +++ b/example/generator/src/SinewaveTelemetrySeries.js @@ -37,21 +37,27 @@ define( */ function SinewaveTelemetrySeries(request) { var latestObservedTime = Math.floor(Date.now() / 1000), - count = latestObservedTime - firstObservedTime, + endTime = (request.end !== undefined) ? + Math.floor(request.end / 1000) : latestObservedTime, + count = + Math.min(endTime, latestObservedTime) - firstObservedTime, period = request.period || 30, generatorData = {}, offset = (request.start !== undefined) ? Math.floor(request.start / 1000) - firstObservedTime : 0; + if (request.size !== undefined) { + offset = Math.max(offset, count - request.size); + } + generatorData.getPointCount = function () { return count - offset; }; generatorData.getDomainValue = function (i, domain) { return (i + offset) * 1000 + - (domain !== 'delta' ? - (firstObservedTime * 1000) : 0); + (domain !== 'delta' ? (firstObservedTime * 1000) : 0); }; generatorData.getRangeValue = function (i, range) { diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js index 5d224b0415..ca9a18a24b 100644 --- a/platform/features/conductor/src/ConductorTelemetryCapability.js +++ b/platform/features/conductor/src/ConductorTelemetryCapability.js @@ -44,18 +44,35 @@ define( this.wrappedCapability = telemetryCapability; } + ConductorTelemetryCapability.prototype.amendRequest = function (request) { + request = request || {}; + + // This isn't really the right check, but it happens to distinguish + // plots (which want to query for the full set of data for easy + // panning) from views like fixed position, which only want the + // single latest data point. + if (request.size !== undefined) { + request.start = this.timeConductor.displayStart(); + request.end = this.timeConductor.displayEnd(); + } else { + request.start = this.timeConductor.queryStart(); + request.end = this.timeConductor.queryEnd(); + } + + return request; + }; + ConductorTelemetryCapability.prototype.getMetadata = function () { return this.wrappedCapability.getMetadata(); }; ConductorTelemetryCapability.prototype.requestData = function (request) { - request = request || {}; - request.start = this.timeConductor.queryStart(); - request.end = this.timeConductor.queryEnd(); + request = this.amendRequest(request); return this.wrappedCapability.requestData(request); }; ConductorTelemetryCapability.prototype.subscribe = function (callback, request) { + request = this.amendRequest(request); return this.wrappedCapability.subscribe(callback, request); }; diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index 9482f71aba..fd446bcb20 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -120,7 +120,7 @@ define( handle.getDatum(telemetryObject); if (telemetryObject && - handle.getDomainValue(telemetryObject) < maxDomainValue) { + (handle.getDomainValue(telemetryObject) < maxDomainValue)) { setDisplayedValue( telemetryObject, handle.getRangeValue(telemetryObject), @@ -233,7 +233,7 @@ define( } // Trigger a new query for telemetry data - function updateDisplayBounds(bounds) { + function updateDisplayBounds(event, bounds) { maxDomainValue = bounds.end; if (handle) { handle.request( From e3b191b5dce459ba6718271f115e895d563ca770 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 9 Sep 2015 16:52:46 -0700 Subject: [PATCH 040/226] [Time Controller] Update failing specs Update failing specs to reflect support for time conductor, WTD-1515 --- .../test/ConductorTelemetryCapabilitySpec.js | 8 +++- .../layout/test/FixedControllerSpec.js | 45 +++++++++++-------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js index e5c9066e22..2cc30229bc 100644 --- a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js +++ b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js @@ -83,7 +83,7 @@ define( }); }); - it("simply delegates subscribe calls", function () { + it("adds start/end times to subscribe calls", function () { var mockCallback = jasmine.createSpy('callback'), testRequest = { someKey: "some value" }; expect(conductorTelemetryCapability.subscribe( @@ -92,7 +92,11 @@ define( )).toBe(mockUnsubscribe); expect(mockTelemetryCapability.subscribe).toHaveBeenCalledWith( mockCallback, - { someKey: "some value" } + { + someKey: "some value", + start: testStartTime, + end: testEndTime + } ); }); diff --git a/platform/features/layout/test/FixedControllerSpec.js b/platform/features/layout/test/FixedControllerSpec.js index b95bbc9eb5..95b9842a4c 100644 --- a/platform/features/layout/test/FixedControllerSpec.js +++ b/platform/features/layout/test/FixedControllerSpec.js @@ -30,10 +30,10 @@ define( var mockScope, mockQ, mockDialogService, - mockSubscriber, + mockHandler, mockFormatter, mockDomainObject, - mockSubscription, + mockHandle, mockEvent, testGrid, testModel, @@ -78,9 +78,9 @@ define( '$scope', [ "$on", "$watch", "commit" ] ); - mockSubscriber = jasmine.createSpyObj( - 'telemetrySubscriber', - [ 'subscribe' ] + mockHandler = jasmine.createSpyObj( + 'telemetryHandler', + [ 'handle' ] ); mockQ = jasmine.createSpyObj('$q', ['when']); mockDialogService = jasmine.createSpyObj( @@ -95,9 +95,15 @@ define( 'domainObject', [ 'getId', 'getModel', 'getCapability' ] ); - mockSubscription = jasmine.createSpyObj( + mockHandle = jasmine.createSpyObj( 'subscription', - [ 'unsubscribe', 'getTelemetryObjects', 'getRangeValue', 'getDatum' ] + [ + 'unsubscribe', + 'getDomainValue', + 'getTelemetryObjects', + 'getRangeValue', + 'getDatum' + ] ); mockEvent = jasmine.createSpyObj( 'event', @@ -116,13 +122,14 @@ define( { type: "fixed.telemetry", id: 'c', x: 1, y: 1 } ]}; - mockSubscriber.subscribe.andReturn(mockSubscription); - mockSubscription.getTelemetryObjects.andReturn( + mockHandler.handle.andReturn(mockHandle); + mockHandle.getTelemetryObjects.andReturn( testModel.composition.map(makeMockDomainObject) ); - mockSubscription.getRangeValue.andCallFake(function (o) { + mockHandle.getRangeValue.andCallFake(function (o) { return testValues[o.getId()]; }); + mockHandle.getDomainValue.andReturn(12321); mockFormatter.formatRangeValue.andCallFake(function (v) { return "Formatted " + v; }); @@ -137,7 +144,7 @@ define( mockScope, mockQ, mockDialogService, - mockSubscriber, + mockHandler, mockFormatter ); }); @@ -145,7 +152,7 @@ define( it("subscribes when a domain object is available", function () { mockScope.domainObject = mockDomainObject; findWatch("domainObject")(mockDomainObject); - expect(mockSubscriber.subscribe).toHaveBeenCalledWith( + expect(mockHandler.handle).toHaveBeenCalledWith( mockDomainObject, jasmine.any(Function) ); @@ -156,13 +163,13 @@ define( // First pass - should simply should subscribe findWatch("domainObject")(mockDomainObject); - expect(mockSubscription.unsubscribe).not.toHaveBeenCalled(); - expect(mockSubscriber.subscribe.calls.length).toEqual(1); + expect(mockHandle.unsubscribe).not.toHaveBeenCalled(); + expect(mockHandler.handle.calls.length).toEqual(1); // Object changes - should unsubscribe then resubscribe findWatch("domainObject")(mockDomainObject); - expect(mockSubscription.unsubscribe).toHaveBeenCalled(); - expect(mockSubscriber.subscribe.calls.length).toEqual(2); + expect(mockHandle.unsubscribe).toHaveBeenCalled(); + expect(mockHandler.handle.calls.length).toEqual(2); }); it("exposes visible elements based on configuration", function () { @@ -255,7 +262,7 @@ define( findWatch("model.composition")(mockScope.model.composition); // Invoke the subscription callback - mockSubscriber.subscribe.mostRecentCall.args[1](); + mockHandler.handle.mostRecentCall.args[1](); // Get elements that controller is now exposing elements = controller.getElements(); @@ -333,11 +340,11 @@ define( // Make an object available findWatch('domainObject')(mockDomainObject); // Also verify precondition - expect(mockSubscription.unsubscribe).not.toHaveBeenCalled(); + expect(mockHandle.unsubscribe).not.toHaveBeenCalled(); // Destroy the scope findOn('$destroy')(); // Should have unsubscribed - expect(mockSubscription.unsubscribe).toHaveBeenCalled(); + expect(mockHandle.unsubscribe).toHaveBeenCalled(); }); it("exposes its grid size", function () { From 2ec9956d44a43ba6dcbe2d235852d08117d9c048 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 10:16:28 -0700 Subject: [PATCH 041/226] [Time Conductor] Incorporate feedback from code review Retain reference to scope in ConductorRepresenter directly via this, instead of revealing via a closure-bound function. This approach is not necessary to avoid https://docs.angularjs.org/error/ng/cpws in this circumstance. WTD-1515 --- .../conductor/src/ConductorRepresenter.js | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 0617c771b1..f858810db1 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -53,22 +53,15 @@ define( * @param element the jqLite-wrapped representation element */ function ConductorRepresenter(conductorService, $compile, views, scope, element) { - var conductorScope; - - // Angular doesn't like objects to retain references to scopes - this.getScope = function () { - return scope; - }; - this.conductorScope = function (s) { - return (conductorScope = arguments.length > 0 ? s : conductorScope); - }; - + this.scope = scope; this.conductorService = conductorService; this.element = element; this.views = views; this.$compile = $compile; } + + // Update the time conductor from the scope function wireScope(conductor, conductorScope, repScope) { function updateConductorOuter() { @@ -102,6 +95,11 @@ define( repScope.$on('telemetry:view', updateConductorInner); } + ConductorRepresenter.prototype.conductorScope = function (s) { + return (this.cScope = arguments.length > 0 ? + s : this.cScope); + }; + // Handle a specific representation of a specific domain object ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { this.destroy(); @@ -112,11 +110,11 @@ define( this.hadAbs = this.element.hasClass('abs'); // Create a new scope for the conductor - this.conductorScope(this.getScope().$new()); + this.conductorScope(this.scope.$new()); wireScope( this.conductorService.getConductor(), this.conductorScope(), - this.getScope() + this.scope ); this.conductorElement = this.$compile(TEMPLATE)(this.conductorScope()); From 4c79c9a1b1af682c1f44890d5d3cb37b2124734c Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 10:21:21 -0700 Subject: [PATCH 042/226] [Time Conductor] Clarify start/end naming WTD-1515 --- .../features/conductor/src/TimeConductor.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js index eeb104839a..ec4200ed6e 100644 --- a/platform/features/conductor/src/TimeConductor.js +++ b/platform/features/conductor/src/TimeConductor.js @@ -50,8 +50,8 @@ define( * the wrapped capability */ function TimeConductor(start, end) { - this.inner = [ start, end ]; - this.outer = [ start, end ]; + this.inner = { start: start, end: end }; + this.outer = { start: start, end: end }; } /** @@ -61,9 +61,9 @@ define( */ TimeConductor.prototype.queryStart = function (value) { if (arguments.length > 0) { - this.outer[0] = value; + this.outer.start = value; } - return this.outer[0]; + return this.outer.start; }; /** @@ -73,9 +73,9 @@ define( */ TimeConductor.prototype.queryEnd = function (value) { if (arguments.length > 0) { - this.outer[1] = value; + this.outer.end = value; } - return this.outer[1]; + return this.outer.end; }; @@ -86,9 +86,9 @@ define( */ TimeConductor.prototype.displayStart = function (value) { if (arguments.length > 0) { - this.inner[0] = value; + this.inner.start = value; } - return this.inner[0]; + return this.inner.start; }; /** @@ -98,9 +98,9 @@ define( */ TimeConductor.prototype.displayEnd = function (value) { if (arguments.length > 0) { - this.inner[1] = value; + this.inner.end = value; } - return this.inner[1]; + return this.inner.end; }; return TimeConductor; From 78fae345da4f7c4661a10dfb8a4e5e7f2ca174bf Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 10:54:44 -0700 Subject: [PATCH 043/226] [Time Conductor] Rename TimeConductorController Rename TimeConductorController to TimeRangeController, to reflect that this is intended to serve as a more general control. Additionally, stop using arrays for inner and outer bounds and instead use explicit start/end properties, for clarity. WTD-1515 --- platform/commonUI/general/bundle.json | 4 +- .../templates/controls/time-controller.html | 2 +- ...orController.js => TimeRangeController.js} | 96 +++++++++++-------- .../conductor/src/ConductorRepresenter.js | 45 +++++---- 4 files changed, 87 insertions(+), 60 deletions(-) rename platform/commonUI/general/src/controllers/{TimeConductorController.js => TimeRangeController.js} (69%) diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 73de6ba4a2..374839e010 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -58,8 +58,8 @@ ], "controllers": [ { - "key": "TimeConductorController", - "implementation": "controllers/TimeConductorController.js", + "key": "TimeRangeController", + "implementation": "controllers/TimeRangeController.js", "depends": [ "$scope", "now" ] }, { diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 5f60741672..6b8f3e4fc8 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -22,7 +22,7 @@ properly on the range left and right bounds. --> -
+
Start: Date: Thu, 10 Sep 2015 11:20:09 -0700 Subject: [PATCH 044/226] [Time Conductor] Clean up code style Clean up code style in TelemetrySubscription, for changes associated with WTD-1515. --- .../telemetry/src/TelemetrySubscription.js | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/platform/telemetry/src/TelemetrySubscription.js b/platform/telemetry/src/TelemetrySubscription.js index 93539d1ab0..5dcab54b94 100644 --- a/platform/telemetry/src/TelemetrySubscription.js +++ b/platform/telemetry/src/TelemetrySubscription.js @@ -123,25 +123,6 @@ define( telemetryCapability.getMetadata(); } - // From a telemetry series, retrieve a single data point - // containing all fields for domains/ranges - function makeDatum(domainObject, series, index) { - var metadata = lookupMetadata(domainObject), - result = {}; - - (metadata.domains || []).forEach(function (domain) { - result[domain.key] = - series.getDomainValue(index, domain.key); - }); - - (metadata.ranges || []).forEach(function (range) { - result[range.key] = - series.getRangeValue(index, range.key); - }); - - return result; - } - // Update the latest telemetry data for a specific // domain object. This will notify listeners. function update(domainObject, series) { @@ -160,7 +141,7 @@ define( pool.put(domainObject.getId(), { domain: series.getDomainValue(count - 1), range: series.getRangeValue(count - 1), - datum: makeDatum(domainObject, series, count - 1) + datum: self.makeDatum(domainObject, series, count - 1) }); } } @@ -188,6 +169,11 @@ define( function cacheObjectReferences(objects) { self.telemetryObjects = objects; self.metadatas = objects.map(lookupMetadata); + + self.metadataById = {}; + objects.forEach(function (obj, i) { + self.metadataById[obj.getId()] = self.metadatas[i]; + }); // Fire callback, as this will be the first time that // telemetry objects are available, or these objects // will have changed. @@ -239,12 +225,36 @@ define( initialize(); this.unlistenToMutation = addMutationListener(); - - // Expose makeDatum for TelemetryHandler to use, but not - // as part of public API - this.makeDatum = makeDatum; } + + /** + * From a telemetry series, retrieve a single data point + * containing all fields for domains/ranges + * @private + */ + TelemetrySubscription.prototype.makeDatum = function (domainObject, series, index) { + var id = domainObject && domainObject.getId(), + metadata = (id && this.metadataById[id]) || {}, + result = {}; + + (metadata.domains || []).forEach(function (domain) { + result[domain.key] = + series.getDomainValue(index, domain.key); + }); + + (metadata.ranges || []).forEach(function (range) { + result[range.key] = + series.getRangeValue(index, range.key); + }); + + return result; + }; + + /** + * Terminate all underlying subscriptions. + * @private + */ TelemetrySubscription.prototype.unsubscribeAll = function () { var $q = this.$q; return this.unsubscribePromise.then(function (unsubscribes) { From 2758250833c81207c76630e5d0d998ad8354f0f2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 11:27:50 -0700 Subject: [PATCH 045/226] [Time Conductor] Fix JSDoc Fix copy-paste error. WTD-1515 --- platform/features/conductor/src/TimeConductor.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js index ec4200ed6e..fcf8dbae04 100644 --- a/platform/features/conductor/src/TimeConductor.js +++ b/platform/features/conductor/src/TimeConductor.js @@ -33,21 +33,12 @@ define( 'use strict'; /** - * Wrapper for the `telemetry` capability which adds start/end - * times to all requests based on the current state of a time - * conductor. - * - * Note that both start and end times are in units which may - * vary depending on the domains of telemetry being used. Most - * commonly, these are UNIX timestamps in milliseconds. + * Tracks the current state of the time conductor. * * @memberof platform/features/conductor * @constructor - * @augments {platform/telemetry.TelemetryCapability} - * @param {platform/features/conductor.TimeConductor} timeConductor - * the time conductor which controls these queries - * @param {platform/telemetry.TelemetryCapability} telemetryCapability - * the wrapped capability + * @param {number} start the initial start time + * @param {number} end the initial end time */ function TimeConductor(start, end) { this.inner = { start: start, end: end }; From 86bb89a162190ac0191ce20caa011a2200017f3d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 11:31:40 -0700 Subject: [PATCH 046/226] [Time Controller] Update spec Update spec for ConductorRepresenter to reflect changes to model properties expected by TimeRangeController. WTD-1515 --- .../conductor/test/ConductorRepresenterSpec.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js index 931eec506f..2b1003f3c7 100644 --- a/platform/features/conductor/test/ConductorRepresenterSpec.js +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -134,31 +134,31 @@ define( representer.represent(testViews[0], {}); expect(mockNewScope.conductor).toEqual({ - inner: [ 1977, 1984 ], - outer: [ 42, 12321 ] + inner: { start: 1977, end: 1984 }, + outer: { start: 42, end: 12321 } }); }); it("updates conductor state from scope", function () { var testState = { - inner: [ 42, 1984 ], - outer: [ -1977, 12321 ] + inner: { start: 42, end: 1984 }, + outer: { start: -1977, end: 12321 } }; representer.represent(testViews[0], {}); mockNewScope.conductor = testState; - fireWatch(mockNewScope, 'conductor.inner[0]', testState.inner[0]); + fireWatch(mockNewScope, 'conductor.inner.start', testState.inner.start); expect(mockConductor.displayStart).toHaveBeenCalledWith(42); - fireWatch(mockNewScope, 'conductor.inner[1]', testState.inner[1]); + fireWatch(mockNewScope, 'conductor.inner.end', testState.inner.end); expect(mockConductor.displayEnd).toHaveBeenCalledWith(1984); - fireWatch(mockNewScope, 'conductor.outer[0]', -1977); + fireWatch(mockNewScope, 'conductor.outer.start', testState.outer.start); expect(mockConductor.queryStart).toHaveBeenCalledWith(-1977); - fireWatch(mockNewScope, 'conductor.outer[1]', 12321); + fireWatch(mockNewScope, 'conductor.outer.end', testState.outer.end); expect(mockConductor.queryEnd).toHaveBeenCalledWith(12321); }); From 8d209f4d19fa8409656a7ef4d698f2b745f639fa Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 11:34:31 -0700 Subject: [PATCH 047/226] [Time Controller] Fix middle-drag bug Fix bug in middle-drag introduced by refactoring, WTD-1515. --- .../general/src/controllers/TimeRangeController.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index 554cac1cad..5ac03ca796 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -124,10 +124,10 @@ define( } function startMiddleDrag() { - initialDragValue = [ - $scope.ngModel.inner.start, - $scope.ngModel.inner.end - ]; + initialDragValue = { + start: $scope.ngModel.inner.start, + end: $scope.ngModel.inner.end + }; } function toMillis(pixels) { From 2229e868ce5dad9574d7568d697d1b88c7d1f413 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 13:24:50 -0700 Subject: [PATCH 048/226] [Time Conductor] Fix logic around end times Fix logic for updating end times after refactoring to clarify variable/property naming, WTD-1515 --- .../commonUI/general/src/controllers/TimeRangeController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index 5ac03ca796..f603ec2ccc 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -186,7 +186,7 @@ define( ngModel.inner.start = Math.max(ngModel.outer.start, ngModel.inner.start); ngModel.inner.end = - Math.max(ngModel.outer.end, ngModel.inner.end); + Math.max(ngModel.outer.start, ngModel.inner.end); updateViewForInnerSpanFromModel(ngModel); } From 62962e119ef254187cb0f22a66cc9de4913cdae6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 10 Sep 2015 15:18:24 -0700 Subject: [PATCH 049/226] [Time Controller] Decorate telemetry service Decorate telemetry service instead of capability service to enforce time conductor bounds. WTD-1515. --- platform/features/conductor/bundle.json | 4 +- .../src/ConductorTelemetryCapability.js | 81 -------------- ...ator.js => ConductorTelemetryDecorator.js} | 50 +++++---- .../test/ConductorCapabilityDecoratorSpec.js | 101 ----------------- .../test/ConductorTelemetryCapabilitySpec.js | 105 ------------------ platform/features/conductor/test/suite.json | 2 - 6 files changed, 31 insertions(+), 312 deletions(-) delete mode 100644 platform/features/conductor/src/ConductorTelemetryCapability.js rename platform/features/conductor/src/{ConductorCapabilityDecorator.js => ConductorTelemetryDecorator.js} (54%) delete mode 100644 platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js delete mode 100644 platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json index 39d45628bb..b230f9d370 100644 --- a/platform/features/conductor/bundle.json +++ b/platform/features/conductor/bundle.json @@ -9,8 +9,8 @@ "components": [ { "type": "decorator", - "provides": "capabilityService", - "implementation": "ConductorCapabilityDecorator.js", + "provides": "telemetryService", + "implementation": "ConductorTelemetryDecorator.js", "depends": [ "conductorService" ] } ], diff --git a/platform/features/conductor/src/ConductorTelemetryCapability.js b/platform/features/conductor/src/ConductorTelemetryCapability.js deleted file mode 100644 index ca9a18a24b..0000000000 --- a/platform/features/conductor/src/ConductorTelemetryCapability.js +++ /dev/null @@ -1,81 +0,0 @@ -/***************************************************************************** - * 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*/ - -define( - [], - function () { - 'use strict'; - - /** - * Wrapper for the `telemetry` capability which adds start/end - * times to all requests based on the current state of a time - * conductor. - * - * @constructor - * @memberof platform/features/conductor - * @augments {platform/telemetry.TelemetryCapability} - * @param {platform/features/conductor.TimeConductor} timeConductor - * the time conductor which controls these queries - * @param {platform/telemetry.TelemetryCapability} telemetryCapability - * the wrapped capability - */ - function ConductorTelemetryCapability(timeConductor, telemetryCapability) { - this.timeConductor = timeConductor; - this.wrappedCapability = telemetryCapability; - } - - ConductorTelemetryCapability.prototype.amendRequest = function (request) { - request = request || {}; - - // This isn't really the right check, but it happens to distinguish - // plots (which want to query for the full set of data for easy - // panning) from views like fixed position, which only want the - // single latest data point. - if (request.size !== undefined) { - request.start = this.timeConductor.displayStart(); - request.end = this.timeConductor.displayEnd(); - } else { - request.start = this.timeConductor.queryStart(); - request.end = this.timeConductor.queryEnd(); - } - - return request; - }; - - ConductorTelemetryCapability.prototype.getMetadata = function () { - return this.wrappedCapability.getMetadata(); - }; - - ConductorTelemetryCapability.prototype.requestData = function (request) { - request = this.amendRequest(request); - return this.wrappedCapability.requestData(request); - }; - - ConductorTelemetryCapability.prototype.subscribe = function (callback, request) { - request = this.amendRequest(request); - return this.wrappedCapability.subscribe(callback, request); - }; - - return ConductorTelemetryCapability; - } -); diff --git a/platform/features/conductor/src/ConductorCapabilityDecorator.js b/platform/features/conductor/src/ConductorTelemetryDecorator.js similarity index 54% rename from platform/features/conductor/src/ConductorCapabilityDecorator.js rename to platform/features/conductor/src/ConductorTelemetryDecorator.js index 7c6ba46133..6d75125b7a 100644 --- a/platform/features/conductor/src/ConductorCapabilityDecorator.js +++ b/platform/features/conductor/src/ConductorTelemetryDecorator.js @@ -22,43 +22,51 @@ /*global define*/ define( - ['./ConductorTelemetryCapability'], - function (ConductorTelemetryCapability) { + [], + function () { 'use strict'; /** - * Decorates the `capabilityService` such that any exposed `telemetry` - * capabilities have their requests mediated by the time conductor. + * Decorates the `telemetryService` such that requests are + * mediated by the time conductor. * * @constructor * @memberof platform/features/conductor - * @implements {CapabilityService} + * @implements {TelemetryService} * @param {platform/features/conductor.ConductorService} conductorServe * the service which exposes the global time conductor - * @param {CapabilityService} capabilityService the decorated service + * @param {TelemetryService} telemetryService the decorated service */ - function ConductorCapabilityDecorator(conductorService, capabilityService) { + function ConductorTelemetryDecorator(conductorService, telemetryService) { this.conductorService = conductorService; - this.capabilityService = capabilityService; + this.telemetryService = telemetryService; } - ConductorCapabilityDecorator.prototype.getCapabilities = function (model) { - var capabilities = this.capabilityService.getCapabilities(model), - TelemetryCapability = capabilities.telemetry, - conductorService = this.conductorService; + ConductorTelemetryDecorator.prototype.amendRequests = function (requests) { + var conductor = this.conductorService.getConductor(), + start = conductor.displayStart(), + end = conductor.displayEnd(); - if (TelemetryCapability) { - capabilities.telemetry = function (domainObject) { - return new ConductorTelemetryCapability( - conductorService.getConductor(), - new TelemetryCapability(domainObject) - ); - }; + function amendRequest(request) { + request = request || {}; + request.start = start; + request.end = end; + return request; } - return capabilities; + return (requests || []).map(amendRequest); }; - return ConductorCapabilityDecorator; + ConductorTelemetryDecorator.prototype.requestTelemetry = function (requests) { + return this.telemetryService + .requestTelemetry(this.amendRequests(requests)); + }; + + ConductorTelemetryDecorator.prototype.subscribe = function (callback, requests) { + return this.telemetryService + .subscribe(callback, this.amendRequests(requests)); + }; + + return ConductorTelemetryDecorator; } ); diff --git a/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js b/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js deleted file mode 100644 index b98270148b..0000000000 --- a/platform/features/conductor/test/ConductorCapabilityDecoratorSpec.js +++ /dev/null @@ -1,101 +0,0 @@ -/***************************************************************************** - * 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*/ - -/** - * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. - */ -define( - ["../src/ConductorCapabilityDecorator"], - function (ConductorCapabilityDecorator) { - "use strict"; - - describe("ConductorCapabilityDecorator", function () { - var mockCapabilityService, - mockConductorService, - testModel, - testCapabilities, - decorator; - - function instantiate(Constructor) { - return new Constructor(); - } - - beforeEach(function () { - testCapabilities = { - telemetry: jasmine.createSpy('Telemetry'), - other: jasmine.createSpy('Other') - }; - - mockCapabilityService = jasmine.createSpyObj( - 'capabilityService', - [ 'getCapabilities' ] - ); - mockConductorService = jasmine.createSpyObj( - 'conductorService', - [ 'getConductor' ] - ); - testModel = { someKey: "some value" }; - - mockCapabilityService.getCapabilities.andCallFake(function () { - // Wrap with object.create so we can still - // reliably expect properties of testCapabilities itself - return Object.create(testCapabilities); - }); - - decorator = new ConductorCapabilityDecorator( - mockConductorService, - mockCapabilityService - ); - }); - - it("delegates to the decorated capability service", function () { - expect(mockCapabilityService.getCapabilities).not.toHaveBeenCalled(); - decorator.getCapabilities(testModel); - expect(mockCapabilityService.getCapabilities).toHaveBeenCalled(); - }); - - it("wraps the 'telemetry' capability of objects", function () { - var capabilities = decorator.getCapabilities(testModel); - expect(capabilities.telemetry) - .not.toBe(testCapabilities.telemetry); - - // Should wrap - verify by invocation - expect(testCapabilities.telemetry).not.toHaveBeenCalled(); - instantiate(capabilities.telemetry); - expect(testCapabilities.telemetry).toHaveBeenCalled(); - }); - - it("does not wrap other capabilities", function () { - var capabilities = decorator.getCapabilities(testModel); - expect(capabilities.other) - .toBe(testCapabilities.other); - }); - - it("gets a time conductor from the conductorService", function () { - expect(mockConductorService.getConductor).not.toHaveBeenCalled(); - instantiate(decorator.getCapabilities(testModel).telemetry); - expect(mockConductorService.getConductor).toHaveBeenCalled(); - }); - }); - } -); diff --git a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js b/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js deleted file mode 100644 index 2cc30229bc..0000000000 --- a/platform/features/conductor/test/ConductorTelemetryCapabilitySpec.js +++ /dev/null @@ -1,105 +0,0 @@ -/***************************************************************************** - * 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*/ - -/** - * EventSpec. Created by vwoeltje on 11/6/14. Modified by shale on 06/23/2015. - */ -define( - ["../src/ConductorTelemetryCapability"], - function (ConductorTelemetryCapability) { - "use strict"; - - describe("ConductorTelemetryCapability", function () { - var mockConductor, - mockTelemetryCapability, - mockUnsubscribe, - testMetadata, - testStartTime, - testEndTime, - conductorTelemetryCapability; - - beforeEach(function () { - mockConductor = jasmine.createSpyObj( - 'timeConductor', - [ - 'queryStart', - 'queryEnd', - 'displayStart', - 'displayEnd' - ] - ); - mockTelemetryCapability = jasmine.createSpyObj( - 'telemetry', - [ 'getMetadata', 'requestData', 'subscribe' ] - ); - mockUnsubscribe = jasmine.createSpy('unsubscribe'); - - testStartTime = 42; - testEndTime = 12321; - testMetadata = { someKey: 'some value' }; - mockTelemetryCapability.getMetadata.andReturn(testMetadata); - mockTelemetryCapability.subscribe.andReturn(mockUnsubscribe); - mockConductor.queryStart.andReturn(testStartTime); - mockConductor.queryEnd.andReturn(testEndTime); - - conductorTelemetryCapability = new ConductorTelemetryCapability( - mockConductor, - mockTelemetryCapability - ); - }); - - it("simply delegates getMetadata calls", function () { - expect(conductorTelemetryCapability.getMetadata()) - .toBe(testMetadata); - }); - - it("adds start/end times to requests", function () { - conductorTelemetryCapability - .requestData({ someKey: "some value" }); - expect(mockTelemetryCapability.requestData).toHaveBeenCalledWith({ - someKey: "some value", - start: testStartTime, - end: testEndTime - }); - }); - - it("adds start/end times to subscribe calls", function () { - var mockCallback = jasmine.createSpy('callback'), - testRequest = { someKey: "some value" }; - expect(conductorTelemetryCapability.subscribe( - mockCallback, - testRequest - )).toBe(mockUnsubscribe); - expect(mockTelemetryCapability.subscribe).toHaveBeenCalledWith( - mockCallback, - { - someKey: "some value", - start: testStartTime, - end: testEndTime - } - ); - }); - - }); - } -); diff --git a/platform/features/conductor/test/suite.json b/platform/features/conductor/test/suite.json index 85a155c5df..d4d291e4d7 100644 --- a/platform/features/conductor/test/suite.json +++ b/platform/features/conductor/test/suite.json @@ -1,7 +1,5 @@ [ - "ConductorCapabilityDecorator", "ConductorRepresenter", "ConductorService", - "ConductorTelemetryCapability", "TimeConductor" ] From 2a14cf2dfcde1cdb9a5eb3437e0b0a419fd6a929 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 11 Sep 2015 11:31:12 -0700 Subject: [PATCH 050/226] [Time Controller] Only listen for display-bounds changes ...from plot. WTD-1515 --- platform/features/plot/src/PlotController.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index 3b846d33b8..47cf1f31c6 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -66,6 +66,7 @@ define( cachedObjects = [], updater, lastBounds, + throttledRequery, handle; // Populate the scope with axis information (specifically, options @@ -96,7 +97,7 @@ define( } // Change the displayable bounds - function setBasePanZoom(unused, bounds) { + function setBasePanZoom(bounds) { var start = bounds.start, end = bounds.end; if (updater) { @@ -121,7 +122,7 @@ define( ); // Keep any externally-provided bounds if (lastBounds) { - setBasePanZoom({}, lastBounds); + setBasePanZoom(lastBounds); } } @@ -181,14 +182,17 @@ define( } } - // Initiate a new query for data because query bounds changed - function requery() { + // Respond to a display bounds change (requery for data) + function changeDisplayBounds(event, bounds) { + setBasePanZoom(bounds); if (handle) { recreateUpdater(); - requestTelemetry(); + throttledRequery(); } } + throttledRequery = throttle(requestTelemetry, 250); + this.modeOptions = new PlotModeOptions([], subPlotFactory); this.updateValues = updateValues; @@ -202,10 +206,7 @@ define( $scope.$watch('domainObject', subscribe); // Respond to external bounds changes - $scope.$on("telemetry:display:bounds", setBasePanZoom); - - // Respond to external query range changes - $scope.$on("telemetry:query:bounds", throttle(requery, 250)); + $scope.$on("telemetry:display:bounds", changeDisplayBounds); // Unsubscribe when the plot is destroyed $scope.$on("$destroy", releaseSubscription); From 890aafc20358dfa2a5a16cc3ad8df1c9875f405c Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 10:02:59 -0700 Subject: [PATCH 051/226] [Time Controller] Filter out realtime updates Filter out realtime updates that are outside of the time controller's range. WTD-1515 --- .../src/ConductorTelemetryDecorator.js | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorTelemetryDecorator.js b/platform/features/conductor/src/ConductorTelemetryDecorator.js index 6d75125b7a..7687715f30 100644 --- a/platform/features/conductor/src/ConductorTelemetryDecorator.js +++ b/platform/features/conductor/src/ConductorTelemetryDecorator.js @@ -42,6 +42,34 @@ define( this.telemetryService = telemetryService; } + // Strip out any realtime data series that is outside of the conductor's + // bounds. + ConductorTelemetryDecorator.prototype.stripRealtime = function (packaged) { + var conductor = this.conductorService.getConductor(), + start = conductor.displayStart(), + end = conductor.displayEnd(), + repackaged = {}; + + function filterSource(packagedBySource) { + var repackagedBySource = {}; + + Object.keys(packagedBySource).filter(function (k) { + return packagedBySource[k].getPointCount() > 0 && + packagedBySource[k].getDomainValue(0) <= end; + }).forEach(function (k) { + repackagedBySource[k] = packagedBySource[k]; + }); + + return repackagedBySource; + } + + Object.keys(packaged).forEach(function (source) { + repackaged[source] = filterSource(packaged[source]); + }); + + return repackaged; + }; + ConductorTelemetryDecorator.prototype.amendRequests = function (requests) { var conductor = this.conductorService.getConductor(), start = conductor.displayStart(), @@ -63,8 +91,14 @@ define( }; ConductorTelemetryDecorator.prototype.subscribe = function (callback, requests) { + var self = this; + + function internalCallback(packagedSeries) { + return callback(self.stripRealtime(packagedSeries)); + } + return this.telemetryService - .subscribe(callback, this.amendRequests(requests)); + .subscribe(internalCallback, this.amendRequests(requests)); }; return ConductorTelemetryDecorator; From f42c5ca1e525eb3f956042fc62e068630b350767 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 11:25:42 -0700 Subject: [PATCH 052/226] [Time Conductor] Subset to display bounds WTD-1515 --- .../src/ConductorTelemetryDecorator.js | 26 ++++++----- .../conductor/src/ConductorTelemetrySeries.js | 44 +++++++++++++++++++ 2 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 platform/features/conductor/src/ConductorTelemetrySeries.js diff --git a/platform/features/conductor/src/ConductorTelemetryDecorator.js b/platform/features/conductor/src/ConductorTelemetryDecorator.js index 7687715f30..9c8126c33f 100644 --- a/platform/features/conductor/src/ConductorTelemetryDecorator.js +++ b/platform/features/conductor/src/ConductorTelemetryDecorator.js @@ -22,8 +22,8 @@ /*global define*/ define( - [], - function () { + ['./ConductorTelemetrySeries'], + function (ConductorTelemetrySeries) { 'use strict'; /** @@ -44,20 +44,18 @@ define( // Strip out any realtime data series that is outside of the conductor's // bounds. - ConductorTelemetryDecorator.prototype.stripRealtime = function (packaged) { + ConductorTelemetryDecorator.prototype.pruneNonDisplayable = function (packaged) { var conductor = this.conductorService.getConductor(), - start = conductor.displayStart(), - end = conductor.displayEnd(), repackaged = {}; function filterSource(packagedBySource) { var repackagedBySource = {}; - Object.keys(packagedBySource).filter(function (k) { - return packagedBySource[k].getPointCount() > 0 && - packagedBySource[k].getDomainValue(0) <= end; - }).forEach(function (k) { - repackagedBySource[k] = packagedBySource[k]; + Object.keys(packagedBySource).forEach(function (k) { + repackagedBySource[k] = new ConductorTelemetrySeries( + packagedBySource[k], + conductor + ); }); return repackagedBySource; @@ -86,15 +84,19 @@ define( }; ConductorTelemetryDecorator.prototype.requestTelemetry = function (requests) { + var self = this; return this.telemetryService - .requestTelemetry(this.amendRequests(requests)); + .requestTelemetry(this.amendRequests(requests)) + .then(function (packaged) { + return self.pruneNonDisplayable(packaged); + }); }; ConductorTelemetryDecorator.prototype.subscribe = function (callback, requests) { var self = this; function internalCallback(packagedSeries) { - return callback(self.stripRealtime(packagedSeries)); + return callback(self.pruneNonDisplayable(packagedSeries)); } return this.telemetryService diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js new file mode 100644 index 0000000000..044e35ca72 --- /dev/null +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -0,0 +1,44 @@ +/*global define*/ + +define( + function () { + 'use strict'; + + function ConductorTelemetrySeries(series, conductor) { + var max = series.getPointCount() - 1; + + function binSearch(min, max, value) { + var mid = Math.floor((min + max) / 2), + domainValue = series.getDomainValue(mid); + + if (min >= max) { + return min; + } + + if (domainValue < value) { + return binSearch(mid + 1, max); + } else { + return binSearch(min, mid - 1); + } + } + + this.startIndex = binSearch(0, max, conductor.displayStart()); + this.endIndex = binSearch(0, max, conductor.displayEnd()); + this.series = series; + } + + ConductorTelemetrySeries.prototype.getPointCount = function () { + return Math.max(0, this.endIndex - this.startIndex); + }; + + ConductorTelemetrySeries.prototype.getDomainValue = function (i, d) { + return this.series.getDomainValue(i + this.startIndex, d); + }; + + ConductorTelemetrySeries.prototype.getRangeValue = function (i, r) { + return this.series.getDomainValue(i + this.startIndex, r); + }; + + return ConductorTelemetrySeries; + } +); From 24449d2dccbf845543fb7ad9544868f2d68b1934 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 11:44:50 -0700 Subject: [PATCH 053/226] [Time Controller] Fix series subsetting Fix binary search implementation used to subset telemetry series for time conductor. WTD-1515 --- .../conductor/src/ConductorTelemetrySeries.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index 044e35ca72..94daeb067a 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -11,15 +11,9 @@ define( var mid = Math.floor((min + max) / 2), domainValue = series.getDomainValue(mid); - if (min >= max) { - return min; - } - - if (domainValue < value) { - return binSearch(mid + 1, max); - } else { - return binSearch(min, mid - 1); - } + return min >= max ? min : + domainValue < value ? binSearch(mid + 1, max, value) : + binSearch(min, mid - 1, value); } this.startIndex = binSearch(0, max, conductor.displayStart()); From de99969f0af5be8db408fd396addff723fb4feda Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 14:39:17 -0700 Subject: [PATCH 054/226] [Time Controller] Return range values Delegate retrieval of range values appropriately in conductor-driven telemetry series subset. WTD-1515 --- platform/features/conductor/src/ConductorTelemetrySeries.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index 94daeb067a..1925bc1c70 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -30,7 +30,7 @@ define( }; ConductorTelemetrySeries.prototype.getRangeValue = function (i, r) { - return this.series.getDomainValue(i + this.startIndex, r); + return this.series.getRangeValue(i + this.startIndex, r); }; return ConductorTelemetrySeries; From 53369ec0dcdde29dbb968308584bd1a2e3abfd5f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 16:36:41 -0700 Subject: [PATCH 055/226] [Time Conductor] Avoid searching outside of series Don't look up domain values while subsetting a telemetry series until after checking to ensure that there is some segment of the series left to search. WTD-1515 --- .../features/conductor/src/ConductorTelemetrySeries.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index 1925bc1c70..a072ac34e4 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -8,12 +8,12 @@ define( var max = series.getPointCount() - 1; function binSearch(min, max, value) { - var mid = Math.floor((min + max) / 2), - domainValue = series.getDomainValue(mid); + var mid = Math.floor((min + max) / 2); return min >= max ? min : - domainValue < value ? binSearch(mid + 1, max, value) : - binSearch(min, mid - 1, value); + series.getDomainValue(mid) < value ? + binSearch(mid + 1, max, value) : + binSearch(min, mid - 1, value); } this.startIndex = binSearch(0, max, conductor.displayStart()); From d0478c3433d8a8a3a67a38434f1f172b72ef5476 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 14 Sep 2015 16:37:29 -0700 Subject: [PATCH 056/226] [Scrolling List] Check for existence of limit Check for existence of limit capability while evaluating limits in a scrolling list view. WTD-1515 --- platform/features/scrolling/src/RangeColumn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/features/scrolling/src/RangeColumn.js b/platform/features/scrolling/src/RangeColumn.js index 637a68517d..0b76fbfda0 100644 --- a/platform/features/scrolling/src/RangeColumn.js +++ b/platform/features/scrolling/src/RangeColumn.js @@ -55,7 +55,7 @@ define( var range = this.rangeMetadata.key, limit = domainObject.getCapability('limit'), value = datum[range], - alarm = limit.evaluate(datum, range); + alarm = limit && limit.evaluate(datum, range); return { cssClass: alarm && alarm.cssClass, From cd98886a43073c1bc4f14d06e0b256687b80c875 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 08:59:57 -0700 Subject: [PATCH 057/226] [Time Conductor] Add license header WTD-1515 --- .../templates/controls/time-controller.html | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 6b8f3e4fc8..34b87d24ea 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -1,25 +1,23 @@
From d0b5bb2d21281f913316a2e91581e553687dd8e8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 10:00:41 -0700 Subject: [PATCH 058/226] [Time Conductor] Begin using date-time controls WTD-1515 --- .../templates/controls/time-controller.html | 8 +-- .../src/controllers/TimeRangeController.js | 17 ++--- .../controllers/TimeRangeControllerSpec.js | 67 +++++++++++++++++++ platform/commonUI/general/test/suite.json | 3 +- 4 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 34b87d24ea..3fb99b1862 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -22,12 +22,8 @@
- Start: - End: + Start: + End:
diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index f603ec2ccc..3e792af052 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -40,11 +40,6 @@ define( return moment.utc(ts).format(DATE_FORMAT); } - function parseTimestamp(text, fallback) { - var m = moment.utc(text, DATE_FORMAT); - return m.isValid() ? m.valueOf() : fallback; - } - // From 0.0-1.0 to "0%"-"1%" function toPercent(p) { return (100 * p) + "%"; @@ -103,8 +98,8 @@ define( ngModel.inner = ngModel.inner || copyBounds(ngModel.outer); // First, dates for the date pickers for outer bounds - $scope.startOuterDate = formatTimestamp(ngModel.outer.start); - $scope.endOuterDate = formatTimestamp(ngModel.outer.end); + $scope.startOuterDate = new Date(ngModel.outer.start); + $scope.endOuterDate = new Date(ngModel.outer.end); // Then various updates for the inner span updateViewForInnerSpanFromModel(ngModel); @@ -177,10 +172,10 @@ define( updateViewFromModel($scope.ngModel); } - function updateOuterStart(text) { + function updateOuterStart(date) { var ngModel = $scope.ngModel; ngModel.outer.start = - parseTimestamp(text, ngModel.outer.start); + date.getTime(); ngModel.outer.end = Math.max(ngModel.outer.start, ngModel.outer.end); ngModel.inner.start = @@ -190,10 +185,10 @@ define( updateViewForInnerSpanFromModel(ngModel); } - function updateOuterEnd(text) { + function updateOuterEnd(date) { var ngModel = $scope.ngModel; ngModel.outer.end = - parseTimestamp(text, ngModel.outer.end); + date.getTime(); ngModel.outer.start = Math.min(ngModel.outer.end, ngModel.outer.start); ngModel.inner.start = diff --git a/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js b/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js new file mode 100644 index 0000000000..48411756b0 --- /dev/null +++ b/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js @@ -0,0 +1,67 @@ +/***************************************************************************** + * 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,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ["../../src/controllers/TimeRangeController"], + function (TimeRangeController) { + "use strict"; + + describe("The TimeRangeController", function () { + var mockScope, + mockNow, + controller; + + function fireWatch(expr, value) { + mockScope.$watch.calls.forEach(function (call) { + if (call.args[0] === expr) { + call.args[1](value); + } + }); + } + + function fireWatchCollection(expr, value) { + mockScope.$watchCollection.calls.forEach(function (call) { + if (call.args[0] === expr) { + call.args[1](value); + } + }); + } + + beforeEach(function () { + mockScope = jasmine.createSpyObj( + "$scope", + [ "$apply", "$watch", "$watchCollection" ] + ); + mockNow = jasmine.createSpy('now'); + controller = new TimeRangeController(mockScope, mockNow); + }); + + it("watches the model that was passed in", function () { + expect(mockScope.$watchCollection) + .toHaveBeenCalledWith("ngModel", jasmine.any(Function)); + }); + + + }); + } +); diff --git a/platform/commonUI/general/test/suite.json b/platform/commonUI/general/test/suite.json index 37fc4c4b78..38f8a447ee 100644 --- a/platform/commonUI/general/test/suite.json +++ b/platform/commonUI/general/test/suite.json @@ -6,6 +6,7 @@ "controllers/GetterSetterController", "controllers/SelectorController", "controllers/SplitPaneController", + "controllers/TimeRangeController", "controllers/ToggleController", "controllers/TreeNodeController", "controllers/ViewSwitcherController", @@ -15,4 +16,4 @@ "directives/MCTScroll", "services/UrlService", "StyleSheetLoader" -] \ No newline at end of file +] From f29951140fcb6b84c3827e558fb3502fe0a0e9e3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 10:22:43 -0700 Subject: [PATCH 059/226] [Time Conductor] Add license header, JSDoc WTD-1515 --- .../conductor/src/ConductorTelemetrySeries.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index a072ac34e4..55fe120837 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -1,9 +1,42 @@ +/***************************************************************************** + * 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*/ define( function () { 'use strict'; + + /** + * Bound a series of telemetry such that it only includes + * points from within the time conductor's displayable window. + * + * @param {TelemetrySeries} series the telemetry series + * @param {platform/features/conductor.TimeConductor} the + * time conductor instance which bounds this series + * @constructor + * @implements {TelemetrySeries} + */ function ConductorTelemetrySeries(series, conductor) { var max = series.getPointCount() - 1; From 493c63be4493cc72d0b5291c0ab478bd2150d9d3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 10:58:10 -0700 Subject: [PATCH 060/226] [Time Conductor] Test series wrapping WTD-1515 --- .../conductor/src/ConductorTelemetrySeries.js | 2 +- .../test/ConductorTelemetryDecoratorSpec.js | 35 ++++++++ .../test/ConductorTelemetrySeriesSpec.js | 86 +++++++++++++++++++ platform/features/conductor/test/suite.json | 2 + 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js create mode 100644 platform/features/conductor/test/ConductorTelemetrySeriesSpec.js diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index 55fe120837..aa6ec0ec63 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -43,7 +43,7 @@ define( function binSearch(min, max, value) { var mid = Math.floor((min + max) / 2); - return min >= max ? min : + return min > max ? min : series.getDomainValue(mid) < value ? binSearch(mid + 1, max, value) : binSearch(min, mid - 1, value); diff --git a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js new file mode 100644 index 0000000000..39b6436131 --- /dev/null +++ b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js @@ -0,0 +1,35 @@ +/***************************************************************************** + * 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*/ + + +define( + ["../src/ConductorTelemetryDecorator"], + function (ConductorTelemetryDecorator) { + "use strict"; + + describe("ConductorTelemetryDecorator", function () { + + + }); + } +); diff --git a/platform/features/conductor/test/ConductorTelemetrySeriesSpec.js b/platform/features/conductor/test/ConductorTelemetrySeriesSpec.js new file mode 100644 index 0000000000..ea884f74f3 --- /dev/null +++ b/platform/features/conductor/test/ConductorTelemetrySeriesSpec.js @@ -0,0 +1,86 @@ +/***************************************************************************** + * 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*/ + +define( + ["../src/ConductorTelemetrySeries"], + function (ConductorTelemetrySeries) { + "use strict"; + + describe("ConductorTelemetrySeries", function () { + var mockSeries, + mockConductor, + testArray, + series; + + beforeEach(function () { + testArray = [ -10, 0, 42, 1977, 12321 ]; + + mockSeries = jasmine.createSpyObj( + 'series', + [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ); + mockConductor = jasmine.createSpyObj( + 'conductor', + [ 'queryStart', 'queryEnd', 'displayStart', 'displayEnd' ] + ); + + mockSeries.getPointCount.andCallFake(function () { + return testArray.length; + }); + mockSeries.getDomainValue.andCallFake(function (i) { + return testArray[i]; + }); + mockSeries.getRangeValue.andCallFake(function (i) { + return testArray[i] * 2; + }); + + mockConductor.displayStart.andReturn(0); + mockConductor.displayEnd.andReturn(2000); + + series = new ConductorTelemetrySeries( + mockSeries, + mockConductor + ); + }); + + it("reduces the apparent size of a series", function () { + expect(series.getPointCount()).toEqual(3); + }); + + it("maps domain value indexes to the displayable range", function () { + [0, 1, 2].forEach(function (i) { + expect(series.getDomainValue(i)) + .toEqual(mockSeries.getDomainValue(i + 1)); + }); + }); + + it("maps range value indexes to the displayable range", function () { + [0, 1, 2].forEach(function (i) { + expect(series.getRangeValue(i)) + .toEqual(mockSeries.getRangeValue(i + 1)); + }); + }); + + }); + } +); diff --git a/platform/features/conductor/test/suite.json b/platform/features/conductor/test/suite.json index d4d291e4d7..0c469617de 100644 --- a/platform/features/conductor/test/suite.json +++ b/platform/features/conductor/test/suite.json @@ -1,5 +1,7 @@ [ "ConductorRepresenter", "ConductorService", + "ConductorTelemetryDecorator", + "ConductorTelemetrySeries", "TimeConductor" ] From 9ebf157ec04408b1e1bd8807199e0265c0f83541 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 11:18:28 -0700 Subject: [PATCH 061/226] [Time Conductor] Test telemetry service decorator WTD-1515 --- .../test/ConductorTelemetryDecoratorSpec.js | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js index 39b6436131..84812b541a 100644 --- a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js +++ b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js @@ -28,7 +28,109 @@ define( "use strict"; describe("ConductorTelemetryDecorator", function () { + var mockTelemetryService, + mockConductorService, + mockConductor, + mockPromise, + mockSeries, + decorator; + function seriesIsInWindow(series) { + var i, v, inWindow = true; + for (i = 0; i < series.getPointCount(); i += 1) { + v = series.getDomainValue(i); + inWindow = inWindow && (v >= mockConductor.displayStart()); + inWindow = inWindow && (v <= mockConductor.displayEnd()); + } + return inWindow; + } + + beforeEach(function () { + mockTelemetryService = jasmine.createSpyObj( + 'telemetryService', + [ 'requestTelemetry', 'subscribe' ] + ); + mockConductorService = jasmine.createSpyObj( + 'conductorService', + ['getConductor'] + ); + mockConductor = jasmine.createSpyObj( + 'conductor', + [ 'queryStart', 'queryEnd', 'displayStart', 'displayEnd' ] + ); + mockPromise = jasmine.createSpyObj( + 'promise', + ['then'] + ); + mockSeries = jasmine.createSpyObj( + 'series', + [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ); + + mockTelemetryService.requestTelemetry.andReturn(mockPromise); + mockConductorService.getConductor.andReturn(mockConductor); + + // Prepare test series; make sure it has a broad range of + // domain values, with at least some in the query-able range + mockSeries.getPointCount.andReturn(1000); + mockSeries.getDomainValue.andCallFake(function (i) { + var j = i - 500; + return j * j * j; + }); + + mockConductor.queryStart.andReturn(-12321); + mockConductor.queryEnd.andReturn(-12321); + mockConductor.displayStart.andReturn(42); + mockConductor.displayEnd.andReturn(1977); + + decorator = new ConductorTelemetryDecorator( + mockConductorService, + mockTelemetryService + ); + }); + + it("adds display start/end times to historical requests", function () { + decorator.requestTelemetry([{ someKey: "some value" }]); + expect(mockTelemetryService.requestTelemetry) + .toHaveBeenCalledWith([{ + someKey: "some value", + start: mockConductor.displayStart(), + end: mockConductor.displayEnd() + }]); + }); + + it("adds display start/end times 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() + }]); + }); + + it("prunes historical values to the displayable range", function () { + var packagedTelemetry; + decorator.requestTelemetry([{ source: "abc", key: "xyz" }]); + packagedTelemetry = mockPromise.then.mostRecentCall.args[0]({ + "abc": { "xyz": mockSeries } + }); + expect(seriesIsInWindow(packagedTelemetry.abc.xyz)) + .toBeTruthy(); + }); + + it("prunes subscribed values to the displayable range", function () { + var mockCallback = jasmine.createSpy('callback'), + packagedTelemetry; + decorator.subscribe(mockCallback, [{ source: "abc", key: "xyz" }]); + mockTelemetryService.subscribe.mostRecentCall.args[0]({ + "abc": { "xyz": mockSeries } + }); + packagedTelemetry = mockCallback.mostRecentCall.args[0]; + expect(seriesIsInWindow(packagedTelemetry.abc.xyz)) + .toBeTruthy(); + }); }); } From 6f28ab01452c5c9d86f321bff8254226ac7441e0 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 13:08:05 -0700 Subject: [PATCH 062/226] [Time Conductor] Begin adding custom date picker WTD-1515 --- platform/commonUI/general/bundle.json | 4 ++ .../templates/controls/datetime-picker.html | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 platform/commonUI/general/res/templates/controls/datetime-picker.html diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 220dea7f7a..12290ef1c0 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -54,6 +54,10 @@ { "key": "time-controller", "templateUrl": "templates/controls/time-controller.html" + }, + { + "key": "datetime-picker", + "templateUrl": "templates/controls/datetime-picker.html" } ], "controllers": [ diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html new file mode 100644 index 0000000000..d73eca90bf --- /dev/null +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -0,0 +1,51 @@ + + +
+
+ < + March 2016 + > +
+
+ + + + + + + +
+ {{day}} +
+
{{wk + d}}
+
{{wk * d}}
+
+
+
+
{{name}}
+ +
+
From cf76583ed7096b7ccd57f82fd5cad58464b57e12 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 14:50:05 -0700 Subject: [PATCH 063/226] [Time Conductor] Add inline styles to datetime-picker --- .../templates/controls/datetime-picker.html | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html index d73eca90bf..39486ba7d1 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-picker.html +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -21,29 +21,33 @@ -->
-
- < - March 2016 - > +
+
+ < + March 2016 + > +
+
+ + + + + + + +
+ {{day}} +
+
{{wk + d}}
+
{{wk * d}}
+
+
-
- - - - - - - -
- {{day}} -
-
{{wk + d}}
-
{{wk * d}}
-
-
-
+
{{name}}
- From 797046aca4184233bbc24725b3e92ec2b8244273 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 15:24:54 -0700 Subject: [PATCH 064/226] [Time Conductor] Populate datetime picker WTD-1515 --- platform/commonUI/general/bundle.json | 5 + .../templates/controls/datetime-picker.html | 24 ++-- .../controllers/DateTimePickerController.js | 125 ++++++++++++++++++ 3 files changed, 143 insertions(+), 11 deletions(-) create mode 100644 platform/commonUI/general/src/controllers/DateTimePickerController.js diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 12290ef1c0..1c8c24af15 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -66,6 +66,11 @@ "implementation": "controllers/TimeRangeController.js", "depends": [ "$scope", "now" ] }, + { + "key": "DateTimePickerController", + "implementation": "controllers/DateTimePickerController.js", + "depends": [ "$scope" ] + }, { "key": "TreeNodeController", "implementation": "controllers/TreeNodeController.js", diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html index 39486ba7d1..7e51d68d2a 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-picker.html +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -20,12 +20,12 @@ at runtime from the About dialog for additional information. --> -
+
- < - March 2016 - > + < + {{month}} {{year}} + >
@@ -34,21 +34,23 @@ {{day}} - +
-
{{wk + d}}
-
{{wk * d}}
+ ng-repeat="cell in row" + ng-class='{ disabled: !isSelectable(cell) }'> +
{{cell.day}}
+
{{cell.dayOfYear}}
-
{{name}}
+ ng-repeat="key in ['hours', 'minutes', 'seconds']" + ng-if="parameters[key]"> +
{{nameFor(key)}}
diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js new file mode 100644 index 0000000000..55693b95c2 --- /dev/null +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -0,0 +1,125 @@ +/***************************************************************************** + * 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,Promise*/ + +define( + [ 'moment' ], + function (moment) { + 'use strict'; + + var TIME_NAMES = { + 'hours': "Hour", + 'minutes': "Minute", + 'seconds': "Second" + }, + MONTHS = moment.months(); + + /** + * Controller to support the date-time picker. + * + * Adds/uses the following properties in scope: + * * `year`: Year being displayed in picker + * * `month`: Month being displayed + * * `table`: Table being displayed; array of arrays of + * * `day`: Day of month + * * `dayOfYear`: Day of year + * * `month`: Month associated with the day + * * `year`: Year associated with the day. + * * `date`: Date chosen + * * `year`: Year selected + * * `month`: Month selected (0-indexed) + * * `day`: Day of month selected + * * `time`: Chosen time (hours/minutes/seconds) + * * `hours`: Hours chosen + * * `minutes`: Minutes chosen + * * `seconds`: Seconds chosen + */ + function DateTimePickerController($scope) { + var year = 2015, + month = 8; // For picker state, not model state + + function generateTableCell() { + + } + + function generateTable() { + var m = moment.utc({ year: year, month: month }).day(0), + table = [], + row, + col; + + for (row = 0; row < 6; row += 1) { + table.push([]); + for (col = 0; col < 7; col += 1) { + table[row].push({ + year: m.year(), + month: m.month(), + day: m.date(), + dayOfYear: m.dayOfYear() + }); + m.add(1, 'days'); // Next day! + } + } + + return table; + } + + function updateScopeForMonth() { + $scope.month = MONTHS[month]; + $scope.year = year; + $scope.table = generateTable(); + console.log($scope.table); + } + + $scope.isSelectable = function (cell) { + return cell.month === month; + } + + $scope.dateEquals = function (d1, d2) { + return d1.year === d2.year && + d1.month === d2.month && + d1.day === d2.day; + }; + + $scope.changeMonth = function (delta) { + month += delta; + if (month > 11) { + month = 0; + year += 1; + } + if (month < 0) { + month = 11; + year -= 1; + } + updateScopeForMonth(); + }; + + $scope.nameFor = function (key) { + return TIME_NAMES[key]; + }; + + updateScopeForMonth(); + } + + return DateTimePickerController; + } +); From d951b794e34f5c92140fd82f26b0729a91000d14 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 15:55:13 -0700 Subject: [PATCH 065/226] [Time Conductor] Support date choice ...from date-time picker. WTD-1515 --- platform/commonUI/general/bundle.json | 2 +- .../templates/controls/datetime-picker.html | 8 +- .../controllers/DateTimePickerController.js | 95 +++++++++++++++++-- 3 files changed, 93 insertions(+), 12 deletions(-) diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 1c8c24af15..23d8c52088 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -69,7 +69,7 @@ { "key": "DateTimePickerController", "implementation": "controllers/DateTimePickerController.js", - "depends": [ "$scope" ] + "depends": [ "$scope", "now" ] }, { "key": "TreeNodeController", diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html index 7e51d68d2a..0f43da1ab0 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-picker.html +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -37,7 +37,11 @@ + ng-click="select(cell)" + ng-class='{ + disabled: !isSelectable(cell), + test: isSelected(cell) + }'>
{{cell.day}}
{{cell.dayOfYear}}
@@ -51,7 +55,7 @@
{{nameFor(key)}}
diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js index 55693b95c2..9282d2db3c 100644 --- a/platform/commonUI/general/src/controllers/DateTimePickerController.js +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -31,7 +31,18 @@ define( 'minutes': "Minute", 'seconds': "Second" }, - MONTHS = moment.months(); + MONTHS = moment.months(), + TIME_OPTIONS = (function makeRanges() { + var arr = []; + while (arr.length < 60) { + arr.push(arr.length); + } + return { + hours: arr.slice(0, 24), + minutes: arr, + seconds: arr + }; + }()); /** * Controller to support the date-time picker. @@ -52,14 +63,13 @@ define( * * `hours`: Hours chosen * * `minutes`: Minutes chosen * * `seconds`: Seconds chosen + * + * Months are zero-indexed, day-of-months are one-indexed. */ - function DateTimePickerController($scope) { - var year = 2015, - month = 8; // For picker state, not model state - - function generateTableCell() { - - } + function DateTimePickerController($scope, now) { + var year, + month, // For picker state, not model state + interacted = false; function generateTable() { var m = moment.utc({ year: year, month: month }).day(0), @@ -90,9 +100,63 @@ define( console.log($scope.table); } + function updateFromModel(ngModel) { + var m; + + m = moment.utc(ngModel); + + $scope.date = { + year: m.year(), + month: m.month(), + day: m.date() + }; + $scope.time = { + hours: m.hour(), + minutes: m.minute(), + seconds: m.second() + }; + + //window.alert($scope.date.day + " " + ngModel); + + // Zoom to that date in the picker, but + // only if the user hasn't interacted with it yet. + if (!interacted) { + year = m.year(); + month = m.month(); + updateScopeForMonth(); + } + } + + function updateFromView() { + var m = moment.utc({ + year: $scope.date.year, + month: $scope.date.month, + day: $scope.date.day, + hour: $scope.time.hours, + minute: $scope.time.minutes, + second: $scope.time.seconds + }); + $scope.ngModel = m.valueOf(); + } + $scope.isSelectable = function (cell) { return cell.month === month; - } + }; + + $scope.isSelected = function (cell) { + var date = $scope.date || {}; + return cell.day === date.day && + cell.month === date.month && + cell.year === date.year; + }; + + $scope.select = function (cell) { + $scope.date = $scope.date || {}; + $scope.date.month = cell.month; + $scope.date.year = cell.year; + $scope.date.day = cell.day; + updateFromView(); + }; $scope.dateEquals = function (d1, d2) { return d1.year === d2.year && @@ -110,6 +174,7 @@ define( month = 11; year -= 1; } + interacted = true; updateScopeForMonth(); }; @@ -117,7 +182,19 @@ define( return TIME_NAMES[key]; }; + $scope.optionsFor = function (key) { + return TIME_OPTIONS[key]; + }; + updateScopeForMonth(); + + // Ensure some useful default + $scope.ngModel = $scope.ngModel === undefined ? + now() : $scope.ngModel; + + $scope.$watch('ngModel', updateFromModel); + $scope.$watchCollection('date', updateFromView); + $scope.$watchCollection('time', updateFromView); } return DateTimePickerController; From 6c497f3c367529ee95c1a97aa55373f8fe07be36 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 18:09:46 -0700 Subject: [PATCH 066/226] [Time Conductor] Start adding datetime picker WTD-1515 --- platform/commonUI/general/bundle.json | 10 +++ .../templates/controls/time-controller.html | 16 +++++ .../src/directives/MCTClickElsewhere.js | 70 +++++++++++++++++++ .../general/src/directives/MCTPopup.js | 69 ++++++++++++++++++ 4 files changed, 165 insertions(+) create mode 100644 platform/commonUI/general/src/directives/MCTClickElsewhere.js create mode 100644 platform/commonUI/general/src/directives/MCTPopup.js diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index 23d8c52088..f9fb3a6538 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -131,11 +131,21 @@ "implementation": "directives/MCTDrag.js", "depends": [ "$document" ] }, + { + "key": "mctClickElsewhere", + "implementation": "directives/MCTClickElsewhere.js", + "depends": [ "$document" ] + }, { "key": "mctResize", "implementation": "directives/MCTResize.js", "depends": [ "$timeout" ] }, + { + "key": "mctPopup", + "implementation": "directives/MCTPopup.js", + "depends": [ "$window", "$document", "$compile", "$interval" ] + }, { "key": "mctScrollX", "implementation": "directives/MCTScroll.js", diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 3fb99b1862..f762437282 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -23,7 +23,23 @@
Start: + + + + p + + +
+ + +
+
+
End: +
diff --git a/platform/commonUI/general/src/directives/MCTClickElsewhere.js b/platform/commonUI/general/src/directives/MCTClickElsewhere.js new file mode 100644 index 0000000000..a6066fc271 --- /dev/null +++ b/platform/commonUI/general/src/directives/MCTClickElsewhere.js @@ -0,0 +1,70 @@ +/***************************************************************************** + * 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*/ + +define( + [], + function () { + "use strict"; + + function MCTClickElsewhere($document) { + + // Link; install event handlers. + function link(scope, element, attrs) { + // Keep a reference to the body, to attach/detach + // mouse event handlers; mousedown and mouseup cannot + // only be attached to the element being linked, as the + // mouse may leave this element during the drag. + var body = $document.find('body'); + + function clickBody(event) { + var x = event.clientX, + y = event.clientY, + rect = element[0].getBoundingClientRect(), + xMin = rect.left, + xMax = xMin + rect.width, + yMin = rect.top, + yMax = yMin + rect.height; + + if (x < xMin || x > xMax || y < yMin || y > yMax) { + scope.$eval(attrs.mctClickElsewhere); + } + } + + body.on("mousedown", clickBody); + scope.$on("$destroy", function () { + body.off("mousedown", clickBody); + }); + } + + return { + // mct-drag only makes sense as an attribute + restrict: "A", + // Link function, to install event handlers + link: link + }; + } + + return MCTClickElsewhere; + } +); + diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js new file mode 100644 index 0000000000..0e9f6f1586 --- /dev/null +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -0,0 +1,69 @@ +/***************************************************************************** + * 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*/ + +define( + function () { + var TEMPLATE = "
"; + + function MCTPopup($window, $document, $compile, $interval) { + function link(scope, element, attrs, ctrl, transclude) { + var body = $document.find('body'), + popup = $compile(TEMPLATE)(scope), + winDim = [$window.innerWidth, $window.innerHeight], + rect = element[0].getBoundingClientRect(), + position = [ rect.left, rect.top ], + isLeft = position[0] <= (winDim[0] / 2), + isTop = position[1] <= (winDim[1] / 2); + + popup.css('position', 'absolute'); + popup.css( + isLeft ? 'left' : 'right', + (isLeft ? position[0] : (winDim[0] - position[0])) + 'px' + ); + popup.css( + isTop ? 'top' : 'bottom', + (isTop ? position[1] : (winDim[1] - position[1])) + 'px' + ); + body.append(popup); + + transclude(function (clone) { + popup.append(clone); + }); + + scope.$on('$destroy', function () { + popup.remove(); + $interval.cancel(activeInterval); + }); + } + + return { + restrict: "E", + transclude: true, + link: link, + scope: {} + } + } + + return MCTPopup; + } +); From 9a78b63065bdbed5854a3fecca6d5010be31db82 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 18:34:27 -0700 Subject: [PATCH 067/226] [Time Conductor] Try to rewrite datetime picker as control --- platform/commonUI/general/bundle.json | 8 ++++---- .../res/templates/controls/datetime-picker.html | 2 +- .../res/templates/controls/time-controller.html | 11 ++++++----- .../src/controllers/DateTimePickerController.js | 9 +++++---- .../general/src/directives/MCTClickElsewhere.js | 7 +++++++ platform/commonUI/general/src/directives/MCTPopup.js | 3 +-- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/platform/commonUI/general/bundle.json b/platform/commonUI/general/bundle.json index f9fb3a6538..2f8d036bc1 100644 --- a/platform/commonUI/general/bundle.json +++ b/platform/commonUI/general/bundle.json @@ -54,10 +54,6 @@ { "key": "time-controller", "templateUrl": "templates/controls/time-controller.html" - }, - { - "key": "datetime-picker", - "templateUrl": "templates/controls/datetime-picker.html" } ], "controllers": [ @@ -249,6 +245,10 @@ { "key": "selector", "templateUrl": "templates/controls/selector.html" + }, + { + "key": "datetime-picker", + "templateUrl": "templates/controls/datetime-picker.html" } ], "licenses": [ diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html index 0f43da1ab0..dd774588d6 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-picker.html +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -51,7 +51,7 @@
+ ng-if="options[key]">
{{nameFor(key)}}
+ Start: {{ngModel.outer.start}} @@ -31,10 +31,11 @@
- - + +
diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js index 9282d2db3c..a0821ea967 100644 --- a/platform/commonUI/general/src/controllers/DateTimePickerController.js +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -136,7 +136,7 @@ define( minute: $scope.time.minutes, second: $scope.time.seconds }); - $scope.ngModel = m.valueOf(); + $scope.ngModel[$scope.field] = m.valueOf(); } $scope.isSelectable = function (cell) { @@ -189,10 +189,11 @@ define( updateScopeForMonth(); // Ensure some useful default - $scope.ngModel = $scope.ngModel === undefined ? - now() : $scope.ngModel; + $scope.ngModel[$scope.field] = + $scope.ngModel[$scope.field] === undefined ? + now() : $scope.ngModel[$scope.field]; - $scope.$watch('ngModel', updateFromModel); + $scope.$watch('ngModel[field]', updateFromModel); $scope.$watchCollection('date', updateFromView); $scope.$watchCollection('time', updateFromView); } diff --git a/platform/commonUI/general/src/directives/MCTClickElsewhere.js b/platform/commonUI/general/src/directives/MCTClickElsewhere.js index a6066fc271..1bcdbbe6b5 100644 --- a/platform/commonUI/general/src/directives/MCTClickElsewhere.js +++ b/platform/commonUI/general/src/directives/MCTClickElsewhere.js @@ -26,6 +26,13 @@ define( function () { "use strict"; + /** + * The `mct-click-elsewhere` directive will evaluate its + * associated expression whenever a `mousedown` occurs anywhere + * outside of the element that has the `mct-click-elsewhere` + * directive attached. This is useful for dismissing popups + * and the like. + */ function MCTClickElsewhere($document) { // Link; install event handlers. diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js index 0e9f6f1586..6dbf3666fc 100644 --- a/platform/commonUI/general/src/directives/MCTPopup.js +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -25,7 +25,7 @@ define( function () { var TEMPLATE = "
"; - function MCTPopup($window, $document, $compile, $interval) { + function MCTPopup($window, $document, $compile) { function link(scope, element, attrs, ctrl, transclude) { var body = $document.find('body'), popup = $compile(TEMPLATE)(scope), @@ -52,7 +52,6 @@ define( scope.$on('$destroy', function () { popup.remove(); - $interval.cancel(activeInterval); }); } From 70d9587c9b33b2e0f021bf5969610b76856f3f45 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 18:48:00 -0700 Subject: [PATCH 068/226] [Time Conductor] Wire in datetime pickers WTD-1515 --- .../templates/controls/time-controller.html | 24 ++++++++++++++----- .../src/controllers/TimeRangeController.js | 18 +++++++------- .../general/src/directives/MCTPopup.js | 4 +++- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index c0fdae3009..df7b2c8455 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -22,12 +22,9 @@
- Start: {{ngModel.outer.start}} - + Start: {{startOuterText}} - - p - + p
@@ -39,7 +36,22 @@
- End: + + End: {{endOuterText}} + + p + +
+ + +
+
+
+
diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index 3e792af052..ac111ab1a9 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -172,29 +172,31 @@ define( updateViewFromModel($scope.ngModel); } - function updateOuterStart(date) { + function updateOuterStart(t) { var ngModel = $scope.ngModel; - ngModel.outer.start = - date.getTime(); ngModel.outer.end = Math.max(ngModel.outer.start, 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); + + $scope.startOuterText = formatTimestamp(t); + updateViewForInnerSpanFromModel(ngModel); } - function updateOuterEnd(date) { + function updateOuterEnd(t) { var ngModel = $scope.ngModel; - ngModel.outer.end = - date.getTime(); ngModel.outer.start = Math.min(ngModel.outer.end, ngModel.outer.start); ngModel.inner.start = Math.min(ngModel.outer.end, ngModel.inner.start); ngModel.inner.end = Math.min(ngModel.outer.end, ngModel.inner.end); + + $scope.endOuterText = formatTimestamp(t); + updateViewForInnerSpanFromModel(ngModel); } @@ -213,8 +215,8 @@ define( $scope.$watchCollection("ngModel", updateViewFromModel); $scope.$watch("spanWidth", updateSpanWidth); - $scope.$watch("startOuterDate", updateOuterStart); - $scope.$watch("endOuterDate", updateOuterEnd); + $scope.$watch("ngModel.outer.start", updateOuterStart); + $scope.$watch("ngModel.outer.end", updateOuterEnd); } return TimeConductorController; diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js index 6dbf3666fc..eebab5b690 100644 --- a/platform/commonUI/general/src/directives/MCTPopup.js +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -23,6 +23,8 @@ define( function () { + 'use strict'; + var TEMPLATE = "
"; function MCTPopup($window, $document, $compile) { @@ -60,7 +62,7 @@ define( transclude: true, link: link, scope: {} - } + }; } return MCTPopup; From e34fe1a2895a1cef5a5f7b20a90e3ec94b09d918 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 15 Sep 2015 18:51:44 -0700 Subject: [PATCH 069/226] [Time Conductor] Tweak position, appearance ...of datetime picker popups. WTD-1515 --- .../general/res/templates/controls/time-controller.html | 4 ++-- platform/commonUI/general/src/directives/MCTPopup.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index df7b2c8455..b223513859 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -26,7 +26,7 @@ p -
p -
Date: Wed, 16 Sep 2015 10:18:57 -0700 Subject: [PATCH 070/226] [Time Conductor] Allow arguments for throttled functions WTD-1515. Ensures that bounds passed in from the time controller get appropriately captured. --- platform/core/src/services/Throttle.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/platform/core/src/services/Throttle.js b/platform/core/src/services/Throttle.js index 3d68988d6b..eda6713dec 100644 --- a/platform/core/src/services/Throttle.js +++ b/platform/core/src/services/Throttle.js @@ -36,11 +36,16 @@ define( * * Returns a function that, when invoked, will invoke `fn` after * `delay` milliseconds, only if no other invocations are pending. - * The optional argument `apply` determines whether. + * The optional argument `apply` determines whether or not a + * digest cycle should be triggered. * * The returned function will itself return a `Promise` which will * resolve to the returned value of `fn` whenever that is invoked. * + * In cases where arguments are provided, only the most recent + * set of arguments will be passed on to the throttled function + * at the time it is executed. + * * @returns {Function} * @memberof platform/core */ @@ -56,7 +61,8 @@ define( * @memberof platform/core.Throttle# */ return function (fn, delay, apply) { - var activeTimeout; + var activeTimeout, + args = []; // Clear active timeout, so that next invocation starts // a new one. @@ -64,14 +70,21 @@ define( activeTimeout = undefined; } + // Invoke the function with the latest supplied arguments. + function invoke() { + fn.apply(null, args); + } + // Defaults delay = delay || 0; apply = apply || false; return function () { + // Store arguments from this invocation + args = Array.prototype.slice.apply(arguments, [0]); // Start a timeout if needed if (!activeTimeout) { - activeTimeout = $timeout(fn, delay, apply); + activeTimeout = $timeout(invoke, delay, apply); activeTimeout.then(clearActiveTimeout); } // Return whichever timeout is active (to get From 7a97588aa5fcbea244823a947276aef068b3c1a6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 10:30:45 -0700 Subject: [PATCH 071/226] [Time Conductor] Remove debugging statement WTD-1515 --- .../commonUI/general/src/controllers/DateTimePickerController.js | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js index a0821ea967..11214d9357 100644 --- a/platform/commonUI/general/src/controllers/DateTimePickerController.js +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -97,7 +97,6 @@ define( $scope.month = MONTHS[month]; $scope.year = year; $scope.table = generateTable(); - console.log($scope.table); } function updateFromModel(ngModel) { From 071368c3b9103b032154288ec58703cfaa733669 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 11:04:07 -0700 Subject: [PATCH 072/226] [Time Conductor] Fix throttle bug Fix a timing/ordering issue in throttle which allowed some throttled invocations to be ignored. WTD-1515 --- platform/core/src/services/Throttle.js | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/platform/core/src/services/Throttle.js b/platform/core/src/services/Throttle.js index eda6713dec..60444ad6c4 100644 --- a/platform/core/src/services/Throttle.js +++ b/platform/core/src/services/Throttle.js @@ -61,18 +61,14 @@ define( * @memberof platform/core.Throttle# */ return function (fn, delay, apply) { - var activeTimeout, + var promise, // Promise for the result of throttled function args = []; - // Clear active timeout, so that next invocation starts - // a new one. - function clearActiveTimeout() { - activeTimeout = undefined; - } - - // Invoke the function with the latest supplied arguments. function invoke() { - fn.apply(null, args); + // Clear the active timeout so a new one starts next time. + promise = undefined; + // Invoke the function with the latest supplied arguments. + return fn.apply(null, args); } // Defaults @@ -83,13 +79,10 @@ define( // Store arguments from this invocation args = Array.prototype.slice.apply(arguments, [0]); // Start a timeout if needed - if (!activeTimeout) { - activeTimeout = $timeout(invoke, delay, apply); - activeTimeout.then(clearActiveTimeout); - } + promise = promise || $timeout(invoke, delay, apply); // Return whichever timeout is active (to get // a promise for the results of fn) - return activeTimeout; + return promise; }; }; } From fcd073c0102849bc273418c05642f4618a7d215f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 11:05:41 -0700 Subject: [PATCH 073/226] [Time Conductor] Tweak plot requery Tweak approach to requerying in plot, and track pending state so there is a visual indication that plotted data may be incomplete during panning with time conductor. WTD-1515 --- platform/features/plot/src/PlotController.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index 47cf1f31c6..5555d93659 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -128,6 +128,7 @@ define( // Handle new telemetry data in this plot function updateValues() { + self.pending = false; if (handle) { setupModes(handle.getTelemetryObjects()); } @@ -143,6 +144,7 @@ define( // Display new historical data as it becomes available function addHistoricalData(domainObject, series) { + self.pending = false; updater.addHistorical(domainObject, series); self.modeOptions.getModeHandler().plotTelemetry(updater); self.update(); @@ -184,14 +186,16 @@ define( // Respond to a display bounds change (requery for data) function changeDisplayBounds(event, bounds) { + self.pending = true; + releaseSubscription(); + throttledRequery(); setBasePanZoom(bounds); - if (handle) { - recreateUpdater(); - throttledRequery(); - } } - throttledRequery = throttle(requestTelemetry, 250); + // Reestablish/reissue request for telemetry + throttledRequery = throttle(function () { + subscribe($scope.domainObject); + }, 250); this.modeOptions = new PlotModeOptions([], subPlotFactory); this.updateValues = updateValues; @@ -202,6 +206,8 @@ define( .forEach(updateSubplot); }); + self.pending = true; + // Subscribe to telemetry when a domain object becomes available $scope.$watch('domainObject', subscribe); @@ -308,7 +314,7 @@ define( PlotController.prototype.isRequestPending = function () { // Placeholder; this should reflect request state // when requesting historical telemetry - return false; + return this.pending; }; return PlotController; From ad29fb0f92e2b33cc472627c4c0069d319ea691e Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 13:38:47 -0700 Subject: [PATCH 074/226] [Time Conductor] Populate FP from historical Populate fixed position view from historical telemetry when first loaded. WTD-1515 --- platform/features/layout/src/FixedController.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index fd446bcb20..7ad856036f 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -222,6 +222,11 @@ define( domainObject, updateValues ); + // Request an initial historical telemetry value + handle.request( + { size: 1 }, // Only need a single data point + updateValueFromSeries + ); } // Handle changes in the object's composition From 190f5fd0ea64000126422cf1fd0c164a8c57d790 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 15:23:08 -0700 Subject: [PATCH 075/226] [Time Conductor] Update failing specs WTD-1515 --- platform/core/test/services/ThrottleSpec.js | 9 ++++++--- platform/features/layout/test/FixedControllerSpec.js | 3 ++- platform/features/plot/test/PlotControllerSpec.js | 7 ++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/platform/core/test/services/ThrottleSpec.js b/platform/core/test/services/ThrottleSpec.js index bcaf2af363..3b361f70bb 100644 --- a/platform/core/test/services/ThrottleSpec.js +++ b/platform/core/test/services/ThrottleSpec.js @@ -45,7 +45,9 @@ define( // Verify precondition: Not called at throttle-time expect(mockTimeout).not.toHaveBeenCalled(); expect(throttled()).toEqual(mockPromise); - expect(mockTimeout).toHaveBeenCalledWith(mockFn, 0, false); + expect(mockFn).not.toHaveBeenCalled(); + expect(mockTimeout) + .toHaveBeenCalledWith(jasmine.any(Function), 0, false); }); it("schedules only one timeout at a time", function () { @@ -59,10 +61,11 @@ define( it("schedules additional invocations after resolution", function () { var throttled = throttle(mockFn); throttled(); - mockPromise.then.mostRecentCall.args[0](); // Resolve timeout + mockTimeout.mostRecentCall.args[0](); // Resolve timeout throttled(); - mockPromise.then.mostRecentCall.args[0](); + mockTimeout.mostRecentCall.args[0](); throttled(); + mockTimeout.mostRecentCall.args[0](); expect(mockTimeout.calls.length).toEqual(3); }); }); diff --git a/platform/features/layout/test/FixedControllerSpec.js b/platform/features/layout/test/FixedControllerSpec.js index 95b9842a4c..31d5e06659 100644 --- a/platform/features/layout/test/FixedControllerSpec.js +++ b/platform/features/layout/test/FixedControllerSpec.js @@ -102,7 +102,8 @@ define( 'getDomainValue', 'getTelemetryObjects', 'getRangeValue', - 'getDatum' + 'getDatum', + 'request' ] ); mockEvent = jasmine.createSpyObj( diff --git a/platform/features/plot/test/PlotControllerSpec.js b/platform/features/plot/test/PlotControllerSpec.js index e9fec60aaf..d403346bf6 100644 --- a/platform/features/plot/test/PlotControllerSpec.js +++ b/platform/features/plot/test/PlotControllerSpec.js @@ -212,7 +212,12 @@ define( }); it("indicates if a request is pending", function () { - // Placeholder; need to support requesting telemetry + mockScope.$watch.mostRecentCall.args[1](mockDomainObject); + expect(controller.isRequestPending()).toBeTruthy(); + mockHandle.request.mostRecentCall.args[1]( + mockDomainObject, + mockSeries + ); expect(controller.isRequestPending()).toBeFalsy(); }); From 8f24e014e04d96641137786af70052196b3df0ea Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 16:51:28 -0700 Subject: [PATCH 076/226] [Time Conductor] Add skeleton specs Add skeleton specs to new classes added for date-time picker in time conductor. WTD-1515 --- .../DateTimePickerControllerSpec.js | 63 +++++++++++ .../test/directives/MCTClickElsewhereSpec.js | 84 ++++++++++++++ .../general/test/directives/MCTPopupSpec.js | 105 ++++++++++++++++++ platform/commonUI/general/test/suite.json | 3 + 4 files changed, 255 insertions(+) create mode 100644 platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js create mode 100644 platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js create mode 100644 platform/commonUI/general/test/directives/MCTPopupSpec.js diff --git a/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js b/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js new file mode 100644 index 0000000000..957df1b36d --- /dev/null +++ b/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js @@ -0,0 +1,63 @@ +/***************************************************************************** + * 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,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ["../../src/controllers/DateTimePickerController"], + function (DateTimePickerController) { + "use strict"; + + describe("The DateTimePickerController", function () { + var mockScope, + mockNow, + controller; + + function fireWatch(expr, value) { + mockScope.$watch.calls.forEach(function (call) { + if (call.args[0] === expr) { + call.args[1](value); + } + }); + } + + beforeEach(function () { + mockScope = jasmine.createSpyObj( + "$scope", + [ "$apply", "$watch", "$watchCollection" ] + ); + mockScope.ngModel = {}; + mockScope.field = "testField"; + mockNow = jasmine.createSpy('now'); + controller = new DateTimePickerController(mockScope, mockNow); + }); + + it("watches the model that was passed in", function () { + expect(mockScope.$watch).toHaveBeenCalledWith( + "ngModel[field]", + jasmine.any(Function) + ); + }); + + + }); + } +); diff --git a/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js b/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js new file mode 100644 index 0000000000..9fa17763fe --- /dev/null +++ b/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js @@ -0,0 +1,84 @@ +/***************************************************************************** + * 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,jasmine*/ + +define( + ["../../src/directives/MCTClickElsewhere"], + function (MCTClickElsewhere) { + "use strict"; + + var JQLITE_METHODS = [ "on", "off", "find", "parent" ]; + + describe("The mct-click-elsewhere directive", function () { + var mockDocument, + mockScope, + mockElement, + testAttrs, + mockBody, + mockParentEl, + testRect, + mctClickElsewhere; + + function testEvent(x, y) { + return { + pageX: x, + pageY: y, + preventDefault: jasmine.createSpy("preventDefault") + }; + } + + beforeEach(function () { + mockDocument = + jasmine.createSpyObj("$document", JQLITE_METHODS); + mockScope = + jasmine.createSpyObj("$scope", [ "$eval", "$apply", "$on" ]); + mockElement = + jasmine.createSpyObj("element", JQLITE_METHODS); + mockBody = + jasmine.createSpyObj("body", JQLITE_METHODS); + mockParentEl = + jasmine.createSpyObj("parent", ["getBoundingClientRect"]); + + testAttrs = { + mctClickElsewhere: "some Angular expression" + }; + testRect = { + left: 20, + top: 42, + width: 60, + height: 75 + }; + + mockDocument.find.andReturn(mockBody); + + mctClickElsewhere = new MCTClickElsewhere(mockDocument); + mctClickElsewhere.link(mockScope, mockElement, testAttrs); + }); + + it("is valid as an attribute", function () { + expect(mctClickElsewhere.restrict).toEqual("A"); + }); + + + }); + } +); diff --git a/platform/commonUI/general/test/directives/MCTPopupSpec.js b/platform/commonUI/general/test/directives/MCTPopupSpec.js new file mode 100644 index 0000000000..94fd3f0d0e --- /dev/null +++ b/platform/commonUI/general/test/directives/MCTPopupSpec.js @@ -0,0 +1,105 @@ +/***************************************************************************** + * 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,jasmine*/ + +define( + ["../../src/directives/MCTPopup"], + function (MCTPopup) { + "use strict"; + + var JQLITE_METHODS = [ "on", "off", "find", "parent", "css", "append" ]; + + describe("The mct-popup directive", function () { + var testWindow, + mockDocument, + mockCompile, + mockScope, + mockElement, + testAttrs, + mockBody, + mockTransclude, + mockParentEl, + testRect, + mctPopup; + + function testEvent(x, y) { + return { + pageX: x, + pageY: y, + preventDefault: jasmine.createSpy("preventDefault") + }; + } + + beforeEach(function () { + testWindow = + { innerWidth: 600, innerHeight: 300 }; + mockDocument = + jasmine.createSpyObj("$document", JQLITE_METHODS); + mockCompile = + jasmine.createSpy("$compile"); + mockScope = + jasmine.createSpyObj("$scope", [ "$eval", "$apply", "$on" ]); + mockElement = + jasmine.createSpyObj("element", JQLITE_METHODS); + mockBody = + jasmine.createSpyObj("body", JQLITE_METHODS); + mockTransclude = + jasmine.createSpy("transclude"); + mockParentEl = + jasmine.createSpyObj("parent", ["getBoundingClientRect"]); + + testAttrs = { + mctClickElsewhere: "some Angular expression" + }; + testRect = { + left: 20, + top: 42, + width: 60, + height: 75 + }; + + mockDocument.find.andReturn(mockBody); + mockCompile.andReturn(jasmine.createSpy()); + mockCompile().andCallFake(function () { + return jasmine.createSpyObj("newElement", JQLITE_METHODS); + }); + mockElement.parent.andReturn([mockParentEl]); + mockParentEl.getBoundingClientRect.andReturn(testRect); + + mctPopup = new MCTPopup(testWindow, mockDocument, mockCompile); + mctPopup.link( + mockScope, + mockElement, + testAttrs, + null, + mockTransclude + ); + }); + + it("is valid as an element", function () { + expect(mctPopup.restrict).toEqual("E"); + }); + + + }); + } +); diff --git a/platform/commonUI/general/test/suite.json b/platform/commonUI/general/test/suite.json index 38f8a447ee..1427d70f3a 100644 --- a/platform/commonUI/general/test/suite.json +++ b/platform/commonUI/general/test/suite.json @@ -3,6 +3,7 @@ "controllers/BottomBarController", "controllers/ClickAwayController", "controllers/ContextMenuController", + "controllers/DateTimePickerController", "controllers/GetterSetterController", "controllers/SelectorController", "controllers/SplitPaneController", @@ -10,8 +11,10 @@ "controllers/ToggleController", "controllers/TreeNodeController", "controllers/ViewSwitcherController", + "directives/MCTClickElsewhere", "directives/MCTContainer", "directives/MCTDrag", + "directives/MCTPopup", "directives/MCTResize", "directives/MCTScroll", "services/UrlService", From de71bde62f007a31248096f44e859fec5c5eeea2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 17:00:56 -0700 Subject: [PATCH 077/226] [Test Conductor] Add test case for requery WTD-1515 --- .../features/plot/test/PlotControllerSpec.js | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/platform/features/plot/test/PlotControllerSpec.js b/platform/features/plot/test/PlotControllerSpec.js index d403346bf6..dcae177920 100644 --- a/platform/features/plot/test/PlotControllerSpec.js +++ b/platform/features/plot/test/PlotControllerSpec.js @@ -45,6 +45,14 @@ define( }; } + function fireEvent(name, args) { + mockScope.$on.calls.forEach(function (call) { + if (call.args[0] === name) { + call.args[1].apply(null, args || []); + } + }); + } + beforeEach(function () { mockScope = jasmine.createSpyObj( @@ -87,6 +95,7 @@ define( mockHandle.getMetadata.andReturn([{}]); mockHandle.getDomainValue.andReturn(123); mockHandle.getRangeValue.andReturn(42); + mockScope.domainObject = mockDomainObject; controller = new PlotController( mockScope, @@ -238,10 +247,20 @@ define( // Also verify precondition expect(mockHandle.unsubscribe).not.toHaveBeenCalled(); // Destroy the scope - mockScope.$on.mostRecentCall.args[1](); + fireEvent("$destroy"); // Should have unsubscribed expect(mockHandle.unsubscribe).toHaveBeenCalled(); }); + + it("requeries when displayable bounds change", function () { + mockScope.$watch.mostRecentCall.args[1](mockDomainObject); + expect(mockHandle.request.calls.length).toEqual(1); + fireEvent("telemetry:display:bounds", [ + {}, + { start: 10, end: 100 } + ]); + expect(mockHandle.request.calls.length).toEqual(2); + }); }); } ); From f4e53a946d0ee39d856611e27fc783df06a21551 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 16 Sep 2015 18:14:30 -0700 Subject: [PATCH 078/226] [Time Conductor] Remove from active bundles Remove time conductor from set of active bundles pending clean up of markup/CSS. --- bundles.json | 1 - 1 file changed, 1 deletion(-) diff --git a/bundles.json b/bundles.json index 7b9929d57b..35d6f11728 100644 --- a/bundles.json +++ b/bundles.json @@ -17,7 +17,6 @@ "platform/features/plot", "platform/features/scrolling", "platform/features/events", - "platform/features/conductor", "platform/forms", "platform/identity", "platform/persistence/local", From e67a2e63cf73c709ef6dbbac05e35df0a40341b2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 13:59:05 -0700 Subject: [PATCH 079/226] [Readme] Add notes on building documentation Add notes to README about building documentation; in particular, document the need to install libcairo. --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 42cd060282..8b982a8bb0 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,18 @@ This build will: Run as `mvn clean install`. +### Building Documentation + +Open MCT Web's documentation is generated by an +[npm](https://www.npmjs.com/)-based build: + +* `npm install` _(only needs to run once)_ +* `npm run docs` + +Documentation will be generated in `target/docs`. Note that diagram +generation is dependent on having [Cairo](http://cairographics.org/download/) +installed. + # Glossary Certain terms are used throughout Open MCT Web with consistent meanings From 7dc13dab66c8bafe8ba23079b7d8ee3649894de0 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 14:37:49 -0700 Subject: [PATCH 080/226] [Readme] Add link to node-canvas --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b982a8bb0..6a412412ef 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,10 @@ Open MCT Web's documentation is generated by an Documentation will be generated in `target/docs`. Note that diagram generation is dependent on having [Cairo](http://cairographics.org/download/) -installed. +installed; see +[node-canvas](https://github.com/Automattic/node-canvas#installation)'s +documentation for help with installation. + # Glossary From 0b0cee3afb6be83327d2c53f8cc3e3f99a3b4726 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 16:43:58 -0700 Subject: [PATCH 081/226] [Example] Add domain Add a second domain to example telemetry, to support addition of a domain selector to the time conductor; nasa/openmctweb#115 --- example/generator/bundle.json | 6 +++++- example/generator/src/SinewaveTelemetrySeries.js | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/example/generator/bundle.json b/example/generator/bundle.json index a13bbdc8f8..cdb4736957 100644 --- a/example/generator/bundle.json +++ b/example/generator/bundle.json @@ -34,6 +34,10 @@ { "key": "time", "name": "Time" + }, + { + "key": "yesterday", + "name": "Yesterday" } ], "ranges": [ @@ -61,4 +65,4 @@ } ] } -} \ No newline at end of file +} diff --git a/example/generator/src/SinewaveTelemetrySeries.js b/example/generator/src/SinewaveTelemetrySeries.js index 5b7914a867..dbab6dcac5 100644 --- a/example/generator/src/SinewaveTelemetrySeries.js +++ b/example/generator/src/SinewaveTelemetrySeries.js @@ -29,7 +29,8 @@ define( function () { "use strict"; - var firstObservedTime = Math.floor(Date.now() / 1000); + var ONE_DAY = 1000 * 60 * 60 * 24, + firstObservedTime = Math.floor(Date.now() / 1000); /** * @@ -56,8 +57,8 @@ define( }; generatorData.getDomainValue = function (i, domain) { - return (i + offset) * 1000 + - (domain !== 'delta' ? (firstObservedTime * 1000) : 0); + return (i + offset) * 1000 + firstObservedTime * 1000 - + (domain === 'yesterday' ? ONE_DAY : 0); }; generatorData.getRangeValue = function (i, range) { From 5d5a7c26c585e90c8f97883119a51144b773c397 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 16:53:12 -0700 Subject: [PATCH 082/226] [Time Conductor] Maintain domain state Maintain domain state in the time conductor; add a default list of domains to choose from. --- platform/features/conductor/bundle.json | 12 +++++++- .../conductor/src/ConductorService.js | 9 ++++-- .../features/conductor/src/TimeConductor.js | 30 ++++++++++++++++++- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json index b230f9d370..0b62d74762 100644 --- a/platform/features/conductor/bundle.json +++ b/platform/features/conductor/bundle.json @@ -18,7 +18,17 @@ { "key": "conductorService", "implementation": "ConductorService.js", - "depends": [ "now" ] + "depends": [ "now", "TIME_CONDUCTOR_DOMAINS" ] + } + ], + "contants": [ + { + "key": "TIME_CONDUCTOR_DOMAINS", + "value": [ + { "key": "time", "name": "Time" }, + { "key": "yesterday", "name": "Yesterday" } + ], + "comment": "Placeholder; to be replaced by inspection of available domains." } ] } diff --git a/platform/features/conductor/src/ConductorService.js b/platform/features/conductor/src/ConductorService.js index 59cfa95e3c..3e281d2c1d 100644 --- a/platform/features/conductor/src/ConductorService.js +++ b/platform/features/conductor/src/ConductorService.js @@ -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 + ); } /** diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js index fcf8dbae04..3ce9c369ff 100644 --- a/platform/features/conductor/src/TimeConductor.js +++ b/platform/features/conductor/src/TimeConductor.js @@ -40,9 +40,11 @@ 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.inner = { start: start, end: end }; this.outer = { start: start, end: end }; + this.domains = domains; + this.domain = domains[0]; } /** @@ -94,6 +96,32 @@ define( return this.inner.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.activeDomain = function (key) { + var i; + if (arguments.length > 0) { + for (i = 0; i < this.domains.length; i += 1) { + if (this.domains[i].key === key) { + this.domain = this.domains[i]; + } + } + } + return this.domain; + }; + return TimeConductor; } ); From d238b669a5da3cffb5bca20c1c244fc5c514c490 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 17:09:38 -0700 Subject: [PATCH 083/226] [Time Conductor] Show domain options --- platform/features/conductor/bundle.json | 8 +++- .../res/templates/time-conductor.html | 8 ++++ .../conductor/src/ConductorRepresenter.js | 42 ++++++++++++++----- .../features/conductor/src/TimeConductor.js | 14 ++++--- 4 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 platform/features/conductor/res/templates/time-conductor.html diff --git a/platform/features/conductor/bundle.json b/platform/features/conductor/bundle.json index 0b62d74762..3a0cf12f92 100644 --- a/platform/features/conductor/bundle.json +++ b/platform/features/conductor/bundle.json @@ -21,7 +21,13 @@ "depends": [ "now", "TIME_CONDUCTOR_DOMAINS" ] } ], - "contants": [ + "templates": [ + { + "key": "time-conductor", + "templateUrl": "templates/time-conductor.html" + } + ], + "constants": [ { "key": "TIME_CONDUCTOR_DOMAINS", "value": [ diff --git a/platform/features/conductor/res/templates/time-conductor.html b/platform/features/conductor/res/templates/time-conductor.html new file mode 100644 index 0000000000..c597bf33c3 --- /dev/null +++ b/platform/features/conductor/res/templates/time-conductor.html @@ -0,0 +1,8 @@ + + + + diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index b1b35477b6..9ca7d4f228 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -32,7 +32,7 @@ define( '"position: absolute; bottom: 0; width: 100%; ', 'overflow: hidden; ', 'height: ' + CONDUCTOR_HEIGHT + '">', - "", + "", "", '
' ].join(''), @@ -68,8 +68,8 @@ define( // Update the time conductor from the scope function wireScope(conductor, conductorScope, repScope) { function updateConductorOuter() { - conductor.queryStart(conductorScope.conductor.outer.start); - conductor.queryEnd(conductorScope.conductor.outer.end); + conductor.queryStart(conductorScope.ngModel.conductor.outer.start); + conductor.queryEnd(conductorScope.ngModel.conductor.outer.end); repScope.$broadcast( 'telemetry:query:bounds', bounds(conductor.queryStart(), conductor.queryEnd()) @@ -77,27 +77,49 @@ define( } function updateConductorInner() { - conductor.displayStart(conductorScope.conductor.inner.start); - conductor.displayEnd(conductorScope.conductor.inner.end); + conductor.displayStart(conductorScope.ngModel.conductor.inner.start); + conductor.displayEnd(conductorScope.ngModel.conductor.inner.end); repScope.$broadcast( 'telemetry:display:bounds', bounds(conductor.displayStart(), conductor.displayEnd()) ); } - conductorScope.conductor = { + function updateDomain(value) { + conductor.activeDomain(value); + repScope.$broadcast( + 'telemetry:query:bounds', + bounds(conductor.queryStart(), conductor.queryEnd()) + ); + } + + // telemetry domain metadata -> option for a select control + function makeOption(domainOption) { + return { + name: domainOption.name, + value: domainOption.key + }; + } + + conductorScope.ngModel = {}; + conductorScope.ngModel.conductor = { outer: bounds(conductor.queryStart(), conductor.queryEnd()), inner: bounds(conductor.displayStart(), conductor.displayEnd()) }; + conductorScope.ngModel.options = + conductor.domainOptions().map(makeOption); + conductorScope.ngModel.domain = conductor.activeDomain(); conductorScope - .$watch('conductor.outer.start', updateConductorOuter); + .$watch('ngModel.conductor.outer.start', updateConductorOuter); conductorScope - .$watch('conductor.outer.end', updateConductorOuter); + .$watch('ngModel.conductor.outer.end', updateConductorOuter); 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); } diff --git a/platform/features/conductor/src/TimeConductor.js b/platform/features/conductor/src/TimeConductor.js index 3ce9c369ff..b8e07d051d 100644 --- a/platform/features/conductor/src/TimeConductor.js +++ b/platform/features/conductor/src/TimeConductor.js @@ -44,7 +44,7 @@ define( this.inner = { start: start, end: end }; this.outer = { start: start, end: end }; this.domains = domains; - this.domain = domains[0]; + this.domain = domains[0].key; } /** @@ -111,13 +111,15 @@ define( * @returns {TelemetryDomain} the active telemetry domain */ TimeConductor.prototype.activeDomain = function (key) { - var i; + function matchesKey(domain) { + return domain.key === key; + } + if (arguments.length > 0) { - for (i = 0; i < this.domains.length; i += 1) { - if (this.domains[i].key === key) { - this.domain = this.domains[i]; - } + if (!this.domains.some(matchesKey)) { + throw new Error("Unknown domain " + key); } + this.domain = key; } return this.domain; }; From f182d1f2c42810291b9dd466fdbde092a6eeedb9 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 17:14:40 -0700 Subject: [PATCH 084/226] [Time Conductor] Include domain selection in requests ...as well as use as default in a telemetry series. --- .../features/conductor/src/ConductorTelemetryDecorator.js | 4 +++- platform/features/conductor/src/ConductorTelemetrySeries.js | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/platform/features/conductor/src/ConductorTelemetryDecorator.js b/platform/features/conductor/src/ConductorTelemetryDecorator.js index 9c8126c33f..0038c7ccd9 100644 --- a/platform/features/conductor/src/ConductorTelemetryDecorator.js +++ b/platform/features/conductor/src/ConductorTelemetryDecorator.js @@ -71,12 +71,14 @@ define( ConductorTelemetryDecorator.prototype.amendRequests = function (requests) { var conductor = this.conductorService.getConductor(), start = conductor.displayStart(), - end = conductor.displayEnd(); + end = conductor.displayEnd(), + domain = conductor.activeDomain(); function amendRequest(request) { request = request || {}; request.start = start; request.end = end; + request.domain = domain; return request; } diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index aa6ec0ec63..98cebe0907 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -52,6 +52,7 @@ define( this.startIndex = binSearch(0, max, conductor.displayStart()); this.endIndex = binSearch(0, max, conductor.displayEnd()); this.series = series; + this.domain = conductor.activeDomain(); } ConductorTelemetrySeries.prototype.getPointCount = function () { @@ -59,6 +60,7 @@ define( }; ConductorTelemetrySeries.prototype.getDomainValue = function (i, d) { + d = d || this.domain; return this.series.getDomainValue(i + this.startIndex, d); }; From 928e31b5488b1aff4a87d31c48c70aab1565a36b Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 17:22:32 -0700 Subject: [PATCH 085/226] [Common UI] Avoid apply-in-a-digest Don't invoke from mct-resize when first observing an element's size during linking; observed issue in the context of adding domain selector to time conductor. --- platform/commonUI/general/src/directives/MCTResize.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/commonUI/general/src/directives/MCTResize.js b/platform/commonUI/general/src/directives/MCTResize.js index 7f2d722803..f0fd8e0a69 100644 --- a/platform/commonUI/general/src/directives/MCTResize.js +++ b/platform/commonUI/general/src/directives/MCTResize.js @@ -58,6 +58,7 @@ define( // Link; start listening for changes to an element's size function link(scope, element, attrs) { var lastBounds, + linking = true, active = true; // Determine how long to wait before the next update @@ -74,7 +75,9 @@ define( lastBounds.width !== bounds.width || lastBounds.height !== bounds.height) { scope.$eval(attrs.mctResize, { bounds: bounds }); - scope.$apply(); // Trigger a digest + if (!linking) { // Avoid apply-in-a-digest + scope.$apply(); + } lastBounds = bounds; } } @@ -101,6 +104,9 @@ define( // Handle the initial callback onInterval(); + + // Trigger scope.$apply on subsequent changes + linking = false; } return { From 3d8aec2d010bb4c27a3d954984e509b35e42d1d3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 17:26:56 -0700 Subject: [PATCH 086/226] [Time Conductor] Pass domain with events --- .../conductor/src/ConductorRepresenter.js | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 9ca7d4f228..0da32965bc 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -60,9 +60,9 @@ define( this.$compile = $compile; } - // Combine start/end times into a single object - function bounds(start, end) { - return { start: start, end: end }; + // Combine start/end times & domain into a single object + function bounds(start, end, domain) { + return { start: start, end: end, domain: domain }; } // Update the time conductor from the scope @@ -70,27 +70,30 @@ define( function updateConductorOuter() { conductor.queryStart(conductorScope.ngModel.conductor.outer.start); conductor.queryEnd(conductorScope.ngModel.conductor.outer.end); - repScope.$broadcast( - 'telemetry:query:bounds', - bounds(conductor.queryStart(), conductor.queryEnd()) - ); + repScope.$broadcast('telemetry:query:bounds', bounds( + conductor.queryStart(), + conductor.queryEnd(), + conductor.activeDomain() + )); } function updateConductorInner() { conductor.displayStart(conductorScope.ngModel.conductor.inner.start); conductor.displayEnd(conductorScope.ngModel.conductor.inner.end); - repScope.$broadcast( - 'telemetry:display:bounds', - bounds(conductor.displayStart(), conductor.displayEnd()) - ); + repScope.$broadcast('telemetry:display:bounds', bounds( + conductor.displayStart(), + conductor.displayEnd(), + conductor.activeDomain() + )); } function updateDomain(value) { conductor.activeDomain(value); - repScope.$broadcast( - 'telemetry:query:bounds', - bounds(conductor.queryStart(), conductor.queryEnd()) - ); + repScope.$broadcast('telemetry:display:bounds', bounds( + conductor.displayStart(), + conductor.displayEnd(), + conductor.activeDomain() + )); } // telemetry domain metadata -> option for a select control From 9f7dc1da9b86e97a8e554df1acc1f96d377ec8a9 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Wed, 23 Sep 2015 18:59:36 -0700 Subject: [PATCH 087/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Styling for boundary inputs and slider; --- .../commonUI/general/res/sass/_icons.scss | 3 + .../general/res/sass/controls/_controls.scss | 33 +- .../res/sass/controls/_time-controller.scss | 51 +- .../templates/controls/time-controller.html | 146 +- .../espresso/res/css/theme-espresso.css | 269 +- .../themes/espresso/res/sass/_constants.scss | 8 +- .../themes/snow/res/css/theme-snow.css | 5961 +---------------- 7 files changed, 348 insertions(+), 6123 deletions(-) diff --git a/platform/commonUI/general/res/sass/_icons.scss b/platform/commonUI/general/res/sass/_icons.scss index 1f6ec7a34e..c6881467a1 100644 --- a/platform/commonUI/general/res/sass/_icons.scss +++ b/platform/commonUI/general/res/sass/_icons.scss @@ -41,6 +41,9 @@ font-size: 1.65em; } } + &.icon-calendar:after { + content: "\e605"; + } } .bar .ui-symbol { diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index af967d6ef3..a93fc077ca 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -299,18 +299,24 @@ label.checkbox.custom { $slotH: 50%; .slot { // @include border-radius($basicCr * .75); - @include sliderTrack(); - height: $slotH; + //@include sliderTrack(); + //height: $slotH; width: auto; position: absolute; - top: ($knobH - $slotH) / 2; + //top: ($knobH - $slotH) / 2; + top: 0; right: 0; - bottom: auto; + bottom: 0; left: 0; } .knob { - @include btnSubtle(); - @include controlGrippy(rgba(black, 0.3), vertical, 1px, solid); + //@include btnSubtle(); + //@include controlGrippy(rgba(black, 0.3), vertical, 1px, solid); + @include trans-prop-nice-fade(.25s); + background-color: $sliderColorKnob; + &:hover { + background-color: $sliderColorKnobHov; + } cursor: ew-resize; position: absolute; height: $knobH; @@ -319,15 +325,16 @@ label.checkbox.custom { auto: 0; bottom: auto; left: auto; - &:before { - top: 1px; - bottom: 3px; - left: ($knobW / 2) - 1; - } + //&:before { + // top: 1px; + // bottom: 3px; + // left: ($knobW / 2) - 1; + //} } .range { - background: rgba($colorKey, 0.6); + @include trans-prop-nice-fade(.25s); + background-color: $sliderColorRange; cursor: ew-resize; position: absolute; top: 0; @@ -337,7 +344,7 @@ label.checkbox.custom { height: auto; width: auto; &:hover { - background: rgba($colorKey, 0.7); + background-color: $sliderColorRangeHov; } } } diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index 6991617ae7..1391a84e63 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -1,8 +1,8 @@ .l-time-controller { - $inputTxtW: 90px; - $knobW: 9px; + $timeRangeSliderLROffset: 125px; + //$sliderKnobW: 9px; $r1H: 20px; - $r2H: 30px; + $r2H: 20px; $r3H: 10px; position: relative; @@ -28,23 +28,33 @@ } .l-time-range-inputs-holder { + //@include test(red); height: $r1H; + .l-time-range-input { + //display: inline-block; + margin-right: $interiorMarginLg; + .ui-symbol.icon { + font-size: 11px; + width: 11px; + } + } } .l-time-range-slider, .l-time-range-ticks { - left: $inputTxtW; right: $inputTxtW; + left: $timeRangeSliderLROffset; right: $timeRangeSliderLROffset; } .l-time-range-slider-holder { + //@include test(green); height: $r2H; .range-holder { @include box-shadow(none); background: none; border: none; - height: 75%; - } + //height: 75%; + } } .l-time-range-ticks-holder { @@ -74,31 +84,42 @@ } .knob { - width: $knobW; + width: $sliderKnobW; .range-value { - $w: 75px; + //$w: 75px; //@include test(); + //@include verticalCenter(); position: absolute; - top: 50%; - margin-top: -7px; // Label is 13px high + height: $r2H; + line-height: $r2H; + //top: 50%; + //margin-top: -7px; // Label is 13px high white-space: nowrap; - width: $w; + //width: $w; } &:hover .range-value { color: $colorKey; } &.knob-l { - margin-left: $knobW / -2; + //margin-left: $sliderKnobW / -2; .range-value { text-align: right; - right: $knobW + $interiorMargin; + right: $sliderKnobW + $interiorMargin; } } &.knob-r { - margin-right: $knobW / -2; + //margin-right: $sliderKnobW / -2; .range-value { - left: $knobW + $interiorMargin; + left: $sliderKnobW + $interiorMargin; } } } +} + + +.s-time-range-val { + //@include test(); + @include border-radius($controlCr); + background-color: $colorInputBg; + padding: 1px 1px 0 $interiorMargin; } \ No newline at end of file diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index b223513859..dd70db9113 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -20,77 +20,89 @@ at runtime from the About dialog for additional information. --> + +
-
- Start: {{startOuterText}} - - p - -
- - -
-
-
+
+ + Start: + + {{startOuterText}} + + + +
+ + +
+
+
+
+
- End: {{endOuterText}} - - p - -
- - -
-
-
+ + End: + + {{endOuterText}} + + + +
+ + +
+
+
+
  +
-
+
-
-
-
-
-
-
-
-
-
{{startInnerText}}
-
-
-
{{endInnerText}}
-
-
-
-
+
+
+
+
+
+
+
+
+
{{startInnerText}}
+
+
+
{{endInnerText}}
+
+
+
+
-
-
-
- {{tick}} -
-
-
+
+
+
+ {{tick}} +
+
+
diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index 6eb39c0b0a..6c840321a8 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -20,7 +20,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/* line 5, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 5, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, @@ -41,38 +41,38 @@ time, mark, audio, video { font-size: 100%; vertical-align: baseline; } -/* line 22, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 22, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ html { line-height: 1; } -/* line 24, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 24, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ ol, ul { list-style: none; } -/* line 26, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 26, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ table { border-collapse: collapse; border-spacing: 0; } -/* line 28, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 28, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } -/* line 30, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 30, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ q, blockquote { quotes: none; } - /* line 103, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ + /* line 103, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none; } -/* line 32, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 32, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ a img { border: none; } -/* line 116, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +/* line 116, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } @@ -607,35 +607,38 @@ mct-container { /* line 40, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.major { font-size: 1.65em; } +/* line 44, ../../../../general/res/sass/_icons.scss */ +.ui-symbol.icon-calendar:after { + content: "\e605"; } -/* line 46, ../../../../general/res/sass/_icons.scss */ +/* line 49, ../../../../general/res/sass/_icons.scss */ .bar .ui-symbol { display: inline-block; } -/* line 50, ../../../../general/res/sass/_icons.scss */ +/* line 53, ../../../../general/res/sass/_icons.scss */ .invoke-menu { text-shadow: none; display: inline-block; } -/* line 55, ../../../../general/res/sass/_icons.scss */ +/* line 58, ../../../../general/res/sass/_icons.scss */ .s-menu .invoke-menu, .icon.major .invoke-menu { margin-left: 3px; } -/* line 60, ../../../../general/res/sass/_icons.scss */ +/* line 63, ../../../../general/res/sass/_icons.scss */ .menu .type-icon, .tree-item .type-icon, .super-menu.menu .type-icon { position: absolute; } -/* line 70, ../../../../general/res/sass/_icons.scss */ +/* line 73, ../../../../general/res/sass/_icons.scss */ .l-icon-link:before { content: "\f4"; } -/* line 74, ../../../../general/res/sass/_icons.scss */ +/* line 77, ../../../../general/res/sass/_icons.scss */ .l-icon-alert { display: none !important; } - /* line 76, ../../../../general/res/sass/_icons.scss */ + /* line 79, ../../../../general/res/sass/_icons.scss */ .l-icon-alert:before { color: #ff3c00; content: "!"; } @@ -1833,52 +1836,27 @@ label.checkbox.custom { /******************************************************** SLIDERS */ /* line 300, ../../../../general/res/sass/controls/_controls.scss */ .slider .slot { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - background-color: rgba(0, 0, 0, 0.4); - height: 50%; width: auto; position: absolute; - top: 25%; + top: 0; right: 0; - bottom: auto; + bottom: 0; left: 0; } -/* line 311, ../../../../general/res/sass/controls/_controls.scss */ +/* line 312, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob { - background-color: #333; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #999; - display: inline-block; - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzQwNDA0MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMzMzMzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #404040), color-stop(100%, #333333)); - background-image: -moz-linear-gradient(#404040, #333333); - background-image: -webkit-linear-gradient(#404040, #333333); - background-image: linear-gradient(#404040, #333333); - -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: rgba(0, 0, 0, 0.3) 0 1px 1px; + -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; + background-color: rgba(0, 153, 204, 0.3); cursor: ew-resize; position: absolute; height: 100%; @@ -1887,63 +1865,24 @@ label.checkbox.custom { auto: 0; bottom: auto; left: auto; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .slider .knob .icon { - color: #0099cc; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:not(.disabled):hover { - background: linear-gradient(#595959, #4d4d4d); } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:not(.disabled):hover > .icon { - color: #33ccff; } } - /* line 159, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 0.75s; - -o-transition-duration: 0.75s; - -webkit-transition-duration: 0.75s; - transition-duration: 0.75s; - -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; - content: ''; - display: block; - height: auto; - pointer-events: none; - position: absolute; - z-index: 2; - border-left: 1px solid rgba(0, 0, 0, 0.3); - left: 2px; - bottom: 5px; - top: 5px; } - /* line 181, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:not(.disabled):hover:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 25ms; - -o-transition-duration: 25ms; - -webkit-transition-duration: 25ms; - transition-duration: 25ms; - -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; - border-color: #0099cc; } - /* line 322, ../../../../general/res/sass/controls/_controls.scss */ - .slider .knob:before { - top: 1px; - bottom: 3px; - left: 5px; } -/* line 329, ../../../../general/res/sass/controls/_controls.scss */ + /* line 317, ../../../../general/res/sass/controls/_controls.scss */ + .slider .knob:hover { + background-color: rgba(0, 153, 204, 0.5); } +/* line 335, ../../../../general/res/sass/controls/_controls.scss */ .slider .range { - background: rgba(0, 153, 204, 0.6); + -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; + background-color: rgba(0, 153, 204, 0.3); cursor: ew-resize; position: absolute; top: 0; @@ -1952,13 +1891,13 @@ label.checkbox.custom { left: auto; height: auto; width: auto; } - /* line 339, ../../../../general/res/sass/controls/_controls.scss */ + /* line 346, ../../../../general/res/sass/controls/_controls.scss */ .slider .range:hover { - background: rgba(0, 153, 204, 0.7); } + background-color: rgba(0, 153, 204, 0.5); } /******************************************************** BROWSER ELEMENTS */ @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 348, ../../../../general/res/sass/controls/_controls.scss */ + /* line 355, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -1973,7 +1912,7 @@ label.checkbox.custom { height: 10px; width: 10px; } - /* line 357, ../../../../general/res/sass/controls/_controls.scss */ + /* line 364, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU5NTk1OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1987,7 +1926,7 @@ label.checkbox.custom { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - /* line 366, ../../../../general/res/sass/controls/_controls.scss */ + /* line 373, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzVlNWU1ZSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzUyNTI1MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1996,7 +1935,7 @@ label.checkbox.custom { background-image: -webkit-linear-gradient(#5e5e5e, #525252 20px); background-image: linear-gradient(#5e5e5e, #525252 20px); } - /* line 371, ../../../../general/res/sass/controls/_controls.scss */ + /* line 378, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-corner { background: rgba(0, 0, 0, 0.4); } } /***************************************************************************** @@ -2312,38 +2251,44 @@ label.checkbox.custom { /* line 30, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-inputs-holder { height: 20px; } - /* line 34, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 33, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-inputs-holder .l-time-range-input { + margin-right: 10px; } + /* line 36, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon { + font-size: 11px; + width: 11px; } + /* line 43, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-slider, .l-time-controller .l-time-range-ticks { - left: 90px; - right: 90px; } - /* line 40, ../../../../general/res/sass/controls/_time-controller.scss */ + left: 125px; + right: 125px; } + /* line 49, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-slider-holder { - height: 30px; } - /* line 42, ../../../../general/res/sass/controls/_time-controller.scss */ + height: 20px; } + /* line 52, ../../../../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; - height: 75%; } - /* line 50, ../../../../general/res/sass/controls/_time-controller.scss */ + border: none; } + /* line 60, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder { height: 10px; } - /* line 52, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 62, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder .l-time-range-ticks { border-top: 1px solid rgba(153, 153, 153, 0.1); } - /* line 54, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 64, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick { background-color: rgba(153, 153, 153, 0.1); border: none; width: 1px; margin-left: -1px; } - /* line 59, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 69, ../../../../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 62, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 72, ../../../../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 { color: rgba(204, 204, 204, 0.1); font-size: 0.7em; @@ -2353,32 +2298,33 @@ label.checkbox.custom { top: 10px; width: 50px; z-index: 2; } - /* line 76, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 86, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob { - width: 9px; } - /* line 78, ../../../../general/res/sass/controls/_time-controller.scss */ + width: 5px; } + /* line 88, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob .range-value { position: absolute; - top: 50%; - margin-top: -7px; - white-space: nowrap; - width: 75px; } - /* line 87, ../../../../general/res/sass/controls/_time-controller.scss */ + height: 20px; + line-height: 20px; + white-space: nowrap; } + /* line 100, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob:hover .range-value { color: #0099cc; } - /* line 90, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-l { - margin-left: -4.5px; } - /* line 92, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-l .range-value { - text-align: right; - right: 14px; } - /* line 97, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-r { - margin-right: -4.5px; } - /* line 99, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-r .range-value { - left: 14px; } + /* line 105, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob.knob-l .range-value { + text-align: right; + right: 10px; } + /* line 112, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob.knob-r .range-value { + left: 10px; } + +/* line 120, ../../../../general/res/sass/controls/_time-controller.scss */ +.s-time-range-val { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background-color: rgba(255, 255, 255, 0.1); + padding: 1px 1px 0 5px; } /***************************************************************************** * Open MCT Web, Copyright (c) 2014-2015, United States Government @@ -3291,30 +3237,19 @@ span.req { float: left; margin-right: 10px; } -/*.object-holder { - .s-btn { - //background: red !important; - $h: 16px; - height: $h; - line-height: $h; - > span { - font-size: 0.7rem; - } - } -}*/ -/* line 350, ../../../../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 353, ../../../../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; padding-right: 10px; } -/* line 360, ../../../../general/res/sass/user-environ/_layout.scss */ +/* line 348, ../../../../general/res/sass/user-environ/_layout.scss */ .vscroll { overflow-y: auto; } diff --git a/platform/commonUI/themes/espresso/res/sass/_constants.scss b/platform/commonUI/themes/espresso/res/sass/_constants.scss index cbc9a67e0a..32a8dc1b8f 100644 --- a/platform/commonUI/themes/espresso/res/sass/_constants.scss +++ b/platform/commonUI/themes/espresso/res/sass/_constants.scss @@ -12,7 +12,7 @@ $basicCr: 2px; $controlCr: 3px; $smallCr: 2px; -// Buttons +// Buttons and Controls $colorBtnBg: pullForward($colorBodyBg, $contrastRatioPercent); // $colorBtnFg: $colorBodyFg; $colorBtnMajorBg: $colorKey; @@ -20,6 +20,12 @@ $colorBtnMajorFg: $colorKeyFg; $colorBtnIcon: $colorKey; $colorInvokeMenu: #fff; $contrastInvokeMenuPercent: 20%; +$sliderColorBase: $colorKey; +$sliderColorRange: rgba($sliderColorBase, 0.3); +$sliderColorRangeHov: rgba($sliderColorBase, 0.5); +$sliderColorKnob: $sliderColorRange; +$sliderColorKnobHov: $sliderColorRangeHov; +$sliderKnobW: 5px; // General Colors $colorAlt1: #ffc700; diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index 3a819210eb..942a164c5d 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -1,5860 +1,101 @@ -@charset "UTF-8"; -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 5, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font: inherit; - font-size: 100%; - vertical-align: baseline; } - -/* line 22, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -html { - line-height: 1; } - -/* line 24, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -ol, ul { - list-style: none; } - -/* line 26, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -table { - border-collapse: collapse; - border-spacing: 0; } - -/* line 28, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -caption, th, td { - text-align: left; - font-weight: normal; - vertical-align: middle; } - -/* line 30, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -q, blockquote { - quotes: none; } - /* line 103, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ - q:before, q:after, blockquote:before, blockquote:after { - content: ""; - content: none; } - -/* line 32, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -a img { - border: none; } - -/* line 116, ../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ -article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { - display: block; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/*********************************************** CONTROLS, FORM ELEMENTS */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/***************************************************************************** - * 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. - *****************************************************************************/ -/************************** FEATURES */ -/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */ -/************************** RATIOS */ -/************************** LAYOUT */ -/************************** CONTROLS */ -/************************** PATHS */ -/************************** TIMINGS */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */ -/************************** MOBILE TREE MENU DIMENSIONS */ -/************************** WINDOW DIMENSIONS FOR RWD */ -/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */ -/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */ -/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/_effects.scss */ -.disabled, -a.disabled { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); - opacity: 0.3; - pointer-events: none !important; - cursor: default !important; } - -/* line 29, ../../../../general/res/sass/_effects.scss */ -.incised { - -moz-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; - box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); } - -/* line 34, ../../../../general/res/sass/_effects.scss */ -.outline { - border: 1px solid white; } - -/* line 38, ../../../../general/res/sass/_effects.scss */ -.test-stripes { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -moz-linear-gradient(135deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); - background-image: -webkit-linear-gradient(135deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); - background-image: linear-gradient(-45deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); - background-repeat: repeat; - background-size: 40px 40px; } - -/* line 42, ../../../../general/res/sass/_effects.scss */ -.test { - background-color: rgba(255, 204, 0, 0.2); } - -@-moz-keyframes pulse { - 0% { - opacity: 0.5; } - 100% { - opacity: 1; } } -@-webkit-keyframes pulse { - 0% { - opacity: 0.5; } - 100% { - opacity: 1; } } -@keyframes pulse { - 0% { - opacity: 0.5; } - 100% { - opacity: 1; } } -/* line 69, ../../../../general/res/sass/_effects.scss */ -.pulse { - -moz-animation-name: pulse; - -webkit-animation-name: pulse; - animation-name: pulse; - -moz-animation-duration: 750ms; - -webkit-animation-duration: 750ms; - animation-duration: 750ms; - -moz-animation-direction: alternate; - -webkit-animation-direction: alternate; - animation-direction: alternate; - -moz-animation-iteration-count: infinite; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -moz-animation-timing-function: ease-in-out; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/************************** FONTS */ -@font-face { - /* - * Use https://icomoon.io/app with /platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json - */ - font-family: 'symbolsfont'; - src: url("../../../../general/res/fonts/symbols/wtdsymbols.eot"); - src: url("../../../../general/res/fonts/symbols/wtdsymbols.eot?#iefix") format("embedded-opentype"), url("../../../../general/res/fonts/symbols/wtdsymbols.woff") format("woff"), url("../../../../general/res/fonts/symbols/wtdsymbols.ttf") format("truetype"), url("../../../../general/res/fonts/symbols/wtdsymbols.svg#armataregular") format("svg"); - font-weight: normal; - font-style: normal; } -/* line 37, ../../../../general/res/sass/_global.scss */ -.ui-symbol { - font-family: 'symbolsfont'; } - -/************************** HTML ENTITIES */ -/* line 42, ../../../../general/res/sass/_global.scss */ -a { - color: #ccc; - cursor: pointer; - text-decoration: none; } - /* line 46, ../../../../general/res/sass/_global.scss */ - a:hover { - color: #fff; } - -/* line 51, ../../../../general/res/sass/_global.scss */ -body, html { - -webkit-font-smoothing: subpixel-antialiased; - -moz-osx-font-smoothing: grayscale; - background-color: #fcfcfc; - color: #666; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 100%; - height: 100%; - width: 100%; - overflow: hidden; } - -/* line 64, ../../../../general/res/sass/_global.scss */ -em { - font-style: normal; } - -/* line 68, ../../../../general/res/sass/_global.scss */ -input, textarea { - font-family: Helvetica, Arial, sans-serif; } - -/* line 72, ../../../../general/res/sass/_global.scss */ -input[type="text"] { - vertical-align: baseline; - padding: 3px 5px !important; } - -/* line 77, ../../../../general/res/sass/_global.scss */ -h1, h2, h3 { - margin: 0; } - -/* line 81, ../../../../general/res/sass/_global.scss */ -h1 { - font-size: 1.7em; - font-weight: normal !important; - line-height: 120%; - margin-bottom: 20px; - margin-top: 0; } - -/* line 89, ../../../../general/res/sass/_global.scss */ -p { - margin-bottom: 10px; } - -/* line 93, ../../../../general/res/sass/_global.scss */ -mct-container { - display: block; } - -/* line 97, ../../../../general/res/sass/_global.scss */ -.abs, .s-menu span.l-click-area { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - height: auto; - width: auto; } - -/* line 107, ../../../../general/res/sass/_global.scss */ -.code, .codehilite { - font-family: "Lucida Console", monospace; - font-size: 0.7em; - line-height: 150%; - white-space: pre; } - -/* line 114, ../../../../general/res/sass/_global.scss */ -.codehilite { - background-color: rgba(102, 102, 102, 0.1); - padding: 1em; } - -/* line 120, ../../../../general/res/sass/_global.scss */ -.align-right { - text-align: right; } - -/* line 124, ../../../../general/res/sass/_global.scss */ -.centered { - text-align: center; } - -/* line 128, ../../../../general/res/sass/_global.scss */ -.no-margin { - margin: 0; } - -/* line 132, ../../../../general/res/sass/_global.scss */ -.ds { - -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; - box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; } - -/* line 136, ../../../../general/res/sass/_global.scss */ -.hide, -.hidden { - display: none !important; } - -/* line 141, ../../../../general/res/sass/_global.scss */ -.sep { - color: rgba(255, 255, 255, 0.2); } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 26, ../../../../general/res/sass/_about.scss */ -.l-about.abs, .s-menu span.l-about.l-click-area { - overflow: auto; } -/* line 31, ../../../../general/res/sass/_about.scss */ -.l-about .l-logo-holder { - position: relative; - height: 45%; } - /* line 34, ../../../../general/res/sass/_about.scss */ - .l-about .l-logo-holder .l-logo { - position: absolute; } - /* line 37, ../../../../general/res/sass/_about.scss */ - .l-about .l-logo-holder .l-logo.l-logo-app { - top: 0; - right: 15%; - bottom: 0; - left: 15%; } - /* line 41, ../../../../general/res/sass/_about.scss */ - .l-about .l-logo-holder .l-logo.s-logo-nasa { - background-image: url("../../../../general/res/images/logo-nasa.svg"); - top: 10px; - right: auto; - bottom: auto; - left: 10px; - width: 10%; - height: auto; - padding-bottom: 5%; - padding-top: 5%; } -/* line 50, ../../../../general/res/sass/_about.scss */ -.l-about .l-content { - position: relative; - margin-top: 10px; } - -/* line 57, ../../../../general/res/sass/_about.scss */ -.s-about { - line-height: 120%; } - /* line 61, ../../../../general/res/sass/_about.scss */ - .s-about a { - color: #84b3ff; } - /* line 68, ../../../../general/res/sass/_about.scss */ - .s-about .s-logo-holder { - background: url("../../../../general/res/images/bg-about-openmctweb.jpg") no-repeat center; - background-size: cover; } - /* line 72, ../../../../general/res/sass/_about.scss */ - .s-about .s-logo { - background-position: center; - background-repeat: no-repeat; - background-size: contain; } - /* line 78, ../../../../general/res/sass/_about.scss */ - .s-about .s-logo-openmctweb { - background-image: url("../../../../general/res/images/logo-openmctweb-shdw.svg"); } - /* line 81, ../../../../general/res/sass/_about.scss */ - .s-about .s-btn, .s-about .s-menu { - line-height: 2em; } - /* line 85, ../../../../general/res/sass/_about.scss */ - .s-about .l-licenses-software .l-license-software { - border-top: 1px solid rgba(102, 102, 102, 0.2); - padding: 0.5em 0; } - /* line 88, ../../../../general/res/sass/_about.scss */ - .s-about .l-licenses-software .l-license-software:first-child { - border-top: none; } - /* line 91, ../../../../general/res/sass/_about.scss */ - .s-about .l-licenses-software .l-license-software em { - color: #999999; } - /* line 98, ../../../../general/res/sass/_about.scss */ - .s-about .l-licenses-software .l-license-software h3 { - font-size: 1.25em; } - /* line 101, ../../../../general/res/sass/_about.scss */ - .s-about .l-licenses-software .l-license-software .s-license-text { - font-size: 0.9em; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 24, ../../../../general/res/sass/_text.scss */ -.abs.l-standalone, .s-menu span.l-standalone.l-click-area { - padding: 5% 20%; } - -/* line 29, ../../../../general/res/sass/_text.scss */ -.s-text { - font-size: 0.8em; } - /* line 31, ../../../../general/res/sass/_text.scss */ - .s-text ol, .s-text ul { - list-style: square; - margin-left: 1.5em; } - /* line 39, ../../../../general/res/sass/_text.scss */ - .s-text h1, .s-text h2, .s-text h3 { - color: #333333; - font-weight: normal !important; - margin-bottom: 1em; } - /* line 45, ../../../../general/res/sass/_text.scss */ - .s-text h2 { - border-top: 1px solid rgba(102, 102, 102, 0.2); - font-size: 1.5em; - margin-top: 2em; - padding-top: 1em; } - /* line 52, ../../../../general/res/sass/_text.scss */ - .s-text h3 { - margin-top: 2em; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/_icons.scss */ -.triangle { - width: 0; - height: 0; - border-top: 5px solid transparent; - border-left: 5px solid #0099cc; - border-bottom: 5px solid transparent; } - /* line 26, ../../../../general/res/sass/_icons.scss */ - .triangle.triangle-down { - width: 0; - height: 0; - border-left: 5px solid transparent; - border-top: 5px solid #0099cc; - border-right: 5px solid transparent; } - -/* line 32, ../../../../general/res/sass/_icons.scss */ -.ui-symbol.icon { - color: #0099cc; } - /* line 34, ../../../../general/res/sass/_icons.scss */ - .ui-symbol.icon.alert { - color: #ff3c00; } - /* line 36, ../../../../general/res/sass/_icons.scss */ - .ui-symbol.icon.alert:hover { - color: #ff8a66; } - /* line 40, ../../../../general/res/sass/_icons.scss */ - .ui-symbol.icon.major { - font-size: 1.65em; } - -/* line 46, ../../../../general/res/sass/_icons.scss */ -.bar .ui-symbol { - display: inline-block; } - -/* line 50, ../../../../general/res/sass/_icons.scss */ -.invoke-menu { - text-shadow: none; - display: inline-block; } - -/* line 55, ../../../../general/res/sass/_icons.scss */ -.s-menu .invoke-menu, -.icon.major .invoke-menu { - margin-left: 3px; } - -/* line 60, ../../../../general/res/sass/_icons.scss */ -.menu .type-icon, -.tree-item .type-icon, -.super-menu.menu .type-icon { - position: absolute; } - -/* line 70, ../../../../general/res/sass/_icons.scss */ -.l-icon-link:before { - content: "\f4"; } - -/* line 74, ../../../../general/res/sass/_icons.scss */ -.l-icon-alert { - display: none !important; } - /* line 76, ../../../../general/res/sass/_icons.scss */ - .l-icon-alert:before { - color: #ff3c00; - content: "!"; } - -/* line 13, ../../../../general/res/sass/_limits.scss */ -[class*="s-limit"]:before { - display: inline-block; - font-family: symbolsfont; - font-size: 0.75em; - font-style: normal !important; - margin-right: 3px; - vertical-align: middle; } - -/* line 23, ../../../../general/res/sass/_limits.scss */ -.s-limit-upr-red { - background: rgba(255, 0, 0, 0.3) !important; } - /* line 4, ../../../../general/res/sass/_limits.scss */ - .s-limit-upr-red:before { - color: red; - content: "ë"; } - -/* line 24, ../../../../general/res/sass/_limits.scss */ -.s-limit-upr-yellow { - background: rgba(255, 170, 0, 0.3) !important; } - /* line 4, ../../../../general/res/sass/_limits.scss */ - .s-limit-upr-yellow:before { - color: #ffaa00; - content: "í"; } - -/* line 25, ../../../../general/res/sass/_limits.scss */ -.s-limit-lwr-yellow { - background: rgba(255, 170, 0, 0.3) !important; } - /* line 4, ../../../../general/res/sass/_limits.scss */ - .s-limit-lwr-yellow:before { - color: #ffaa00; - content: "ì"; } - -/* line 26, ../../../../general/res/sass/_limits.scss */ -.s-limit-lwr-red { - background: rgba(255, 0, 0, 0.3) !important; } - /* line 4, ../../../../general/res/sass/_limits.scss */ - .s-limit-lwr-red:before { - color: red; - content: "î"; } - -/* line 1, ../../../../general/res/sass/_data-status.scss */ -.s-stale { - color: rgba(51, 51, 51, 0.5) !important; - font-style: italic; } - /* line 3, ../../../../general/res/sass/_data-status.scss */ - .s-stale .td { - color: rgba(51, 51, 51, 0.5) !important; - font-style: italic; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 24, ../../../../general/res/sass/helpers/_bubbles.scss */ -.bubble-container { - pointer-events: none; } - -/* line 31, ../../../../general/res/sass/helpers/_bubbles.scss */ -.l-infobubble-wrapper { - -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - position: relative; - z-index: 50; } - /* line 36, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble { - display: inline-block; - min-width: 100px; - max-width: 300px; - padding: 5px 10px; } - /* line 41, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble:before { - content: ""; - position: absolute; - width: 0; - height: 0; } - /* line 47, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble table { - width: 100%; } - /* line 50, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble table tr td { - padding: 2px 0; - vertical-align: top; } - /* line 53, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble table tr td.label { - padding-right: 10px; - white-space: nowrap; } - /* line 57, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble table tr td.value { - word-break: break-all; } - /* line 61, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble table tr td.align-wrap { - white-space: normal; } - /* line 67, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .l-infobubble .title { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin-bottom: 5px; } - /* line 74, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-left { - margin-left: 20px; } - /* line 76, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-left .l-infobubble::before { - right: 100%; } - @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 76, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-left .l-infobubble::before { - width: 0; - height: 0; - border-top: 6.66667px solid transparent; - border-bottom: 6.66667px solid transparent; - border-right: 10px solid white; } } - @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 88, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-right { - margin-right: 20px; } } - /* line 95, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-right .l-infobubble::before { - left: 100%; } - @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 95, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-right .l-infobubble::before { - width: 0; - height: 0; - border-top: 6.66667px solid transparent; - border-bottom: 6.66667px solid transparent; - border-left: 10px solid white; } } - /* line 108, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-top .l-infobubble::before { - top: 20px; } - /* line 114, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-btm .l-infobubble::before { - bottom: 20px; } - /* line 119, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-down { - margin-bottom: 10px; } - /* line 121, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-down .l-infobubble::before { - left: 50%; - top: 100%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 7.5px solid white; } - /* line 130, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper .arw { - z-index: 2; } - /* line 133, ../../../../general/res/sass/helpers/_bubbles.scss */ - .l-infobubble-wrapper.arw-up .arw.arw-down, .l-infobubble-wrapper.arw-down .arw.arw-up { - display: none; } - -/* line 142, ../../../../general/res/sass/helpers/_bubbles.scss */ -.l-thumbsbubble-wrapper .arw-up { - width: 0; - height: 0; - border-left: 6.66667px solid transparent; - border-right: 6.66667px solid transparent; - border-bottom: 10px solid #e3e3e3; } -/* line 145, ../../../../general/res/sass/helpers/_bubbles.scss */ -.l-thumbsbubble-wrapper .arw-down { - width: 0; - height: 0; - border-left: 6.66667px solid transparent; - border-right: 6.66667px solid transparent; - border-top: 10px solid #e3e3e3; } - -/* line 150, ../../../../general/res/sass/helpers/_bubbles.scss */ -.s-infobubble { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; - background: white; - color: #666; - font-size: 0.8rem; } - /* line 157, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble .title { - color: #333333; - font-weight: bold; } - /* line 163, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble table tr td { - border: none; - border-top: 1px solid #e6e6e6 !important; - font-size: 0.9em; } - /* line 169, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble table tr:first-child td { - border-top: none !important; } - /* line 174, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble:first-child td { - border-top: none; } - /* line 178, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble .label { - color: gray; } - /* line 182, ../../../../general/res/sass/helpers/_bubbles.scss */ - .s-infobubble .value { - color: #333333; } - -/* line 188, ../../../../general/res/sass/helpers/_bubbles.scss */ -.s-thumbsbubble { - background: #e3e3e3; - color: #4d4d4d; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 25, ../../../../general/res/sass/helpers/_splitter.scss */ -.split-layout .splitter { - background-color: #969696; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - overflow: hidden; - position: absolute; - z-index: 1; } - /* line 33, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout .splitter:hover { - background-color: #0099cc; } -/* line 38, ../../../../general/res/sass/helpers/_splitter.scss */ -.split-layout.horizontal { - overflow: hidden; } - /* line 41, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.horizontal .pane { - left: 0; - right: 0; } - /* line 44, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.horizontal .pane.top { - bottom: auto; } - /* line 47, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.horizontal .pane.bottom { - top: auto; } - /* line 51, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.horizontal > .splitter { - cursor: row-resize; - left: 0; - right: 0; - width: auto; - height: 5px; } - /* line 159, ../../../../general/res/sass/_mixins.scss */ - .split-layout.horizontal > .splitter:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 0.75s; - -o-transition-duration: 0.75s; - -webkit-transition-duration: 0.75s; - transition-duration: 0.75s; - -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; - content: ''; - display: block; - height: auto; - pointer-events: none; - position: absolute; - z-index: 2; - border-top: 1px dotted #d6d6d6; - top: 2px; - left: 5px; - right: 5px; } - /* line 181, ../../../../general/res/sass/_mixins.scss */ - .split-layout.horizontal > .splitter:not(.disabled):hover:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 25ms; - -o-transition-duration: 25ms; - -webkit-transition-duration: 25ms; - transition-duration: 25ms; - -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; - border-color: #fcfcfc; } -/* line 61, ../../../../general/res/sass/helpers/_splitter.scss */ -.split-layout.vertical .pane { - top: 0; - bottom: 0; } - /* line 64, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.vertical .pane.left { - right: auto; } - /* line 67, ../../../../general/res/sass/helpers/_splitter.scss */ - .split-layout.vertical .pane.right { - left: auto; } -/* line 71, ../../../../general/res/sass/helpers/_splitter.scss */ -.split-layout.vertical > .splitter { - bottom: 0; - cursor: col-resize; - width: 5px; } - /* line 159, ../../../../general/res/sass/_mixins.scss */ - .split-layout.vertical > .splitter:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 0.75s; - -o-transition-duration: 0.75s; - -webkit-transition-duration: 0.75s; - transition-duration: 0.75s; - -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; - content: ''; - display: block; - height: auto; - pointer-events: none; - position: absolute; - z-index: 2; - border-left: 1px dotted #d6d6d6; - left: 2px; - bottom: 5px; - top: 5px; } - /* line 181, ../../../../general/res/sass/_mixins.scss */ - .split-layout.vertical > .splitter:not(.disabled):hover:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 25ms; - -o-transition-duration: 25ms; - -webkit-transition-duration: 25ms; - transition-duration: 25ms; - -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; - border-color: #fcfcfc; } - -/* line 80, ../../../../general/res/sass/helpers/_splitter.scss */ -.browse-area .splitter { - top: 34px; } - -/* line 84, ../../../../general/res/sass/helpers/_splitter.scss */ -.edit-area .splitter { - top: 0; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -@-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 { - transform: rotate(0deg); } - to { - transform: rotate(359deg); } } -/* line 42, ../../../../general/res/sass/helpers/_wait-spinner.scss */ -.t-wait-spinner, -.wait-spinner { - 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(0, 153, 204, 0.25); - border-top-color: #0099cc; - border-style: solid; - border-width: 0.5em; - border-radius: 100%; - top: 50%; - left: 50%; - height: auto; - width: auto; - padding: 5%; - pointer-events: none; - margin-top: -5%; - margin-left: -5%; - z-index: 2; } - /* line 53, ../../../../general/res/sass/helpers/_wait-spinner.scss */ - .t-wait-spinner.inline, - .wait-spinner.inline { - display: inline-block !important; - margin-right: 5px; - position: relative !important; - vertical-align: middle; } - -/* line 61, ../../../../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 */ - .l-wait-spinner-holder.align-left .t-wait-spinner { - left: 0; - margin-left: 0; } - /* line 70, ../../../../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 */ - .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 */ -.treeview .wait-spinner { - 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(0, 153, 204, 0.25); - border-top-color: #0099cc; - border-style: solid; - border-width: 0.25em; - border-radius: 100%; - height: 10px; - width: 10px; - margin: 0 !important; - padding: 0 !important; - top: 2px; - left: 0; } - -/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */ -.wait-spinner.sm { - 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(0, 153, 204, 0.25); - border-top-color: #0099cc; - border-style: solid; - border-width: 0.25em; - border-radius: 100%; - height: 13px; - width: 13px; - margin-left: 0 !important; - margin-top: 0 !important; - padding: 0 !important; - top: 0; - left: 0; } - -/* Styles for messages */ -/* line 4, ../../../../general/res/sass/_messages.scss */ -.message.block { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - padding: 10px; } -/* line 8, ../../../../general/res/sass/_messages.scss */ -.message.error { - background-color: rgba(255, 60, 0, 0.3); - color: #ff8a66; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* Classes to be used for lists of properties and values */ -/* line 25, ../../../../general/res/sass/_properties.scss */ -.properties .s-row { - border-top: 1px solid rgba(102, 102, 102, 0.2); - font-size: 0.8em; } - /* line 28, ../../../../general/res/sass/_properties.scss */ - .properties .s-row:first-child { - border: none; } - /* line 31, ../../../../general/res/sass/_properties.scss */ - .properties .s-row .s-value { - color: #fff; } - -/********************************* CONTROLS */ -/* line 1, ../../../../general/res/sass/controls/_breadcrumb.scss */ -.l-breadcrumb { - font-size: 0.7rem; - line-height: 1em; - margin-bottom: 5px; - margin-left: -4px; } - /* line 10, ../../../../general/res/sass/controls/_breadcrumb.scss */ - .l-breadcrumb .l-breadcrumb-item a { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-transition: background-color 0.25s; - -o-transition: background-color 0.25s; - -webkit-transition: background-color 0.25s; - transition: background-color 0.25s; - color: #404040; - display: inline-block; - padding: 2px 4px; } - /* line 18, ../../../../general/res/sass/controls/_breadcrumb.scss */ - .l-breadcrumb .l-breadcrumb-item a .icon { - color: #0099cc; - margin-right: 5px; } - /* line 22, ../../../../general/res/sass/controls/_breadcrumb.scss */ - .l-breadcrumb .l-breadcrumb-item a:hover { - background: white; - color: gray; } - /* line 25, ../../../../general/res/sass/controls/_breadcrumb.scss */ - .l-breadcrumb .l-breadcrumb-item a:hover .icon { - color: #0099cc; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 25, ../../../../general/res/sass/controls/_buttons.scss */ -.s-btn, .s-menu { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - cursor: pointer; - text-decoration: none; - height: 25px; - line-height: 25px; - padding: 0 7.5px; - font-size: 0.7rem; } - /* line 35, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn .icon, .s-menu .icon { - font-size: 0.8rem; - color: #0099cc; } - /* line 40, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn .title-label, .s-menu .title-label { - vertical-align: top; } - /* line 44, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.lg, .lg.s-menu { - font-size: 1rem; } - /* line 48, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.sm, .sm.s-menu { - padding: 0 5px; } - /* line 52, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.vsm, .vsm.s-menu { - padding: 0 2.5px; } - /* line 56, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.major, .major.s-menu { - background-color: #0099cc; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .s-btn.major .icon, .major.s-menu .icon { - color: #fff; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .s-btn.major:not(.disabled):hover, .major.s-menu:not(.disabled):hover { - background: deepskyblue; } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .s-btn.major:not(.disabled):hover > .icon, .major.s-menu:not(.disabled):hover > .icon { - color: white; } } - /* line 62, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn:not(.major), .s-menu:not(.major) { - background-color: #969696; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .s-btn:not(.major) .icon, .s-menu:not(.major) .icon { - color: #eee; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .s-btn:not(.major):not(.disabled):hover, .s-menu:not(.major):not(.disabled):hover { - background: #0099cc; } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .s-btn:not(.major):not(.disabled):hover > .icon, .s-menu:not(.major):not(.disabled):hover > .icon { - color: white; } } - /* line 71, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.pause-play .icon:before, .pause-play.s-menu .icon:before { - content: "\0000F1"; } - /* line 74, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.pause-play.paused, .pause-play.paused.s-menu { - background-color: #ff9900; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .s-btn.pause-play.paused .icon, .pause-play.paused.s-menu .icon { - color: #fff; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .s-btn.pause-play.paused:not(.disabled):hover, .pause-play.paused.s-menu:not(.disabled):hover { - background: #ffad33; } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .s-btn.pause-play.paused:not(.disabled):hover > .icon, .pause-play.paused.s-menu:not(.disabled):hover > .icon { - color: white; } } - /* line 76, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.pause-play.paused .icon, .pause-play.paused.s-menu .icon { - -moz-animation-name: pulse; - -webkit-animation-name: pulse; - animation-name: pulse; - -moz-animation-duration: 1000ms; - -webkit-animation-duration: 1000ms; - animation-duration: 1000ms; - -moz-animation-direction: alternate; - -webkit-animation-direction: alternate; - animation-direction: alternate; - -moz-animation-iteration-count: infinite; - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; - -moz-animation-timing-function: ease-in-out; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; } - /* line 78, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.pause-play.paused .icon :before, .pause-play.paused.s-menu .icon :before { - content: "\0000EF"; } - /* line 86, ../../../../general/res/sass/controls/_buttons.scss */ - .s-btn.show-thumbs .icon:before, .show-thumbs.s-menu .icon:before { - content: "\000039"; } - -/* line 92, ../../../../general/res/sass/controls/_buttons.scss */ -.l-btn-set { - font-size: 0; } - /* line 98, ../../../../general/res/sass/controls/_buttons.scss */ - .l-btn-set .s-btn, .l-btn-set .s-menu { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - margin-left: 1px; } - /* line 104, ../../../../general/res/sass/controls/_buttons.scss */ - .l-btn-set .first .s-btn, .l-btn-set .first .s-menu { - -moz-border-radius-topleft: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - margin-left: 0; } - /* line 111, ../../../../general/res/sass/controls/_buttons.scss */ - .l-btn-set .last .s-btn, .l-btn-set .last .s-menu { - -moz-border-radius-topright: 4px; - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; } - -/* line 118, ../../../../general/res/sass/controls/_buttons.scss */ -.paused:not(.s-btn):not(.s-menu) { - border-color: #ff9900 !important; - color: #ff9900 !important; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/controls/_color-palette.scss */ -.l-color-palette { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 5px !important; } - /* line 31, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row { - overflow: hidden; - *zoom: 1; - line-height: 16px; - width: 170px; } - /* line 36, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row .l-palette-item { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - text-shadow: rgba(0, 0, 0, 0.8) 0 1px 2px; - -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; - border: 1px solid transparent; - color: #fff; - display: block; - font-family: 'symbolsfont'; - float: left; - height: 16px; - width: 16px; - line-height: 16px; - margin: 0 1px 1px 0; - text-align: center; - vertical-align: middle; } - /* line 53, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row .s-palette-item:hover { - -moz-transition-property: none; - -o-transition-property: none; - -webkit-transition-property: none; - transition-property: none; - border-color: #fff !important; } - /* line 59, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row .l-palette-item-label { - margin-left: 5px; } - /* line 63, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row.l-option-row { - margin-bottom: 5px; } - /* line 65, ../../../../general/res/sass/controls/_color-palette.scss */ - .l-color-palette .l-palette-row.l-option-row .s-palette-item { - border-color: #666; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/*.control { - // UNUSED? - &.view-control { - .icon { - display: inline-block; - margin: -1px 5px 1px 2px; - vertical-align: middle; - &.triangle-down { - margin: 2px 2px -2px 0px; - } - } - - .label { - display: inline-block; - font-size: 11px; - vertical-align: middle; - } - - .toggle { - @include border-radius(3px); - display: inline-block; - padding: 1px 6px 4px 4px; - &:hover { - background: rgba(white, 0.1); - } - } - } -}*/ -/* line 51, ../../../../general/res/sass/controls/_controls.scss */ -.accordion { - margin-top: 5px; } - /* line 54, ../../../../general/res/sass/controls/_controls.scss */ - .accordion:first-child { - margin-top: 0; } - /* line 57, ../../../../general/res/sass/controls/_controls.scss */ - .accordion .accordion-head { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - background: rgba(102, 102, 102, 0.2); - cursor: pointer; - font-size: 0.75em; - line-height: 18px; - margin-bottom: 5px; - padding: 0 5px; - position: absolute; - top: 0; - right: 0; - bottom: auto; - left: 0; - width: auto; - height: 18px; - text-transform: uppercase; } - /* line 75, ../../../../general/res/sass/controls/_controls.scss */ - .accordion .accordion-head:hover { - background: rgba(102, 102, 102, 0.4); } - /* line 78, ../../../../general/res/sass/controls/_controls.scss */ - .accordion .accordion-head:after { - content: "^"; - display: block; - font-family: 'symbolsfont'; - font-size: 0.9em; - position: absolute; - right: 5px; - text-transform: none; - top: 0; } - /* line 88, ../../../../general/res/sass/controls/_controls.scss */ - .accordion .accordion-head:not(.expanded):after { - content: "v"; } - /* line 92, ../../../../general/res/sass/controls/_controls.scss */ - .accordion .accordion-contents { - position: absolute; - top: 23px; - right: 0; - bottom: 0; - left: 0; - overflow-y: auto; - overflow-x: hidden; } - -/* line 103, ../../../../general/res/sass/controls/_controls.scss */ -.l-composite-control { - vertical-align: middle; } - /* line 106, ../../../../general/res/sass/controls/_controls.scss */ - .l-composite-control.l-checkbox .composite-control-label { - line-height: 18px; } - -/* line 112, ../../../../general/res/sass/controls/_controls.scss */ -.l-control-group { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-left: 1px solid rgba(102, 102, 102, 0.2); - display: inline-block; - padding: 0 5px; - position: relative; } - /* line 120, ../../../../general/res/sass/controls/_controls.scss */ - .l-control-group:first-child { - border-left: none; - padding-left: 0; } - -/* line 126, ../../../../general/res/sass/controls/_controls.scss */ -.l-local-controls { - position: absolute; - top: 5px; - right: 5px; - z-index: 5; } - -/* line 136, ../../../../general/res/sass/controls/_controls.scss */ -.s-local-controls { - font-size: 0.7rem; } - -/* line 140, ../../../../general/res/sass/controls/_controls.scss */ -label.checkbox.custom { - cursor: pointer; - display: inline-block; - line-height: 14px; - margin-right: 20px; - padding-left: 19px; - position: relative; - vertical-align: middle; } - /* line 150, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em { - color: #666; - display: inline-block; - height: 14px; - min-width: 14px; } - /* line 155, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em:before { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: #e3e3e3; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; - box-sizing: border-box; - content: " "; - font-family: 'symbolsfont'; - font-size: 0.8em; - display: inline-block; - margin-right: 5px; - height: 14px; - width: 14px; - left: 0; - top: 0; - position: absolute; - text-align: center; } - /* line 174, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text { - overflow: hidden; - margin-right: 0; - padding-left: 0; - height: 14px; - width: 14px; } - /* line 180, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text em { - overflow: hidden; } - /* line 184, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input { - display: none; } - /* line 186, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input:checked ~ em:before { - background: #0099cc; - color: #ccf2ff; - content: "2"; } - -/* line 194, ../../../../general/res/sass/controls/_controls.scss */ -.input-labeled { - margin-left: 5px; } - /* line 196, ../../../../general/res/sass/controls/_controls.scss */ - .input-labeled label { - display: inline-block; - margin-right: 3px; } - /* line 200, ../../../../general/res/sass/controls/_controls.scss */ - .input-labeled.inline { - display: inline-block; } - /* line 203, ../../../../general/res/sass/controls/_controls.scss */ - .input-labeled:first-child { - margin-left: 0; } - -/* line 208, ../../../../general/res/sass/controls/_controls.scss */ -.s-menu label.checkbox.custom { - margin-left: 5px; } - -/* line 213, ../../../../general/res/sass/controls/_controls.scss */ -.item .checkbox.checked label { - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - border-bottom: none; } - -/* line 219, ../../../../general/res/sass/controls/_controls.scss */ -.context-available { - color: #0099cc; } - /* line 222, ../../../../general/res/sass/controls/_controls.scss */ - .context-available:hover { - color: deepskyblue; } - -/* line 227, ../../../../general/res/sass/controls/_controls.scss */ -.view-switcher { - -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: 100ms; - -o-transition-duration: 100ms; - -webkit-transition-duration: 100ms; - transition-duration: 100ms; - -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; } - -/******************************************************** OBJECT-HEADER */ -/* line 232, ../../../../general/res/sass/controls/_controls.scss */ -.object-header { - font-size: 1em; } - /* line 243, ../../../../general/res/sass/controls/_controls.scss */ - .object-header > .type-icon { - color: #b3b3b3; - font-size: 120%; - float: left; - margin-right: 5px; } - /* line 250, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .l-elem-wrapper { - justify-content: flex-start; - -webkit-justify-content: flex-start; } - /* line 253, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .l-elem-wrapper mct-representation { - min-width: 0.7em; } - /* line 261, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .action { - margin-right: 5px; } - /* line 265, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .title-label { - color: #666; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - flex: 0 1 auto; - -webkit-flex: 0 1 auto; - padding-right: 0.35em; } - /* line 275, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .context-available { - font-size: 0.7em; - flex: 0 0 1; - -webkit-flex: 0 0 1; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 282, ../../../../general/res/sass/controls/_controls.scss */ - .object-header .context-available { - -moz-transition-property: opacity; - -o-transition-property: opacity; - -webkit-transition-property: opacity; - transition-property: opacity; - -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; - opacity: 0; } - /* line 287, ../../../../general/res/sass/controls/_controls.scss */ - .object-header:hover .context-available { - opacity: 1; } } - -/******************************************************** SLIDERS */ -/* line 300, ../../../../general/res/sass/controls/_controls.scss */ -.slider .slot { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - box-shadow: inset rgba(0, 0, 0, 0.7) 0 1px 5px; - background-color: rgba(0, 0, 0, 0.1); - height: 50%; - width: auto; - position: absolute; - top: 25%; - right: 0; - bottom: auto; - left: 0; } -/* line 311, ../../../../general/res/sass/controls/_controls.scss */ -.slider .knob { - background-color: #969696; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; - cursor: ew-resize; - position: absolute; - height: 100%; - width: 12px; - top: 0; - auto: 0; - bottom: auto; - left: auto; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .slider .knob .icon { - color: #eee; } - /* line 159, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 0.75s; - -o-transition-duration: 0.75s; - -webkit-transition-duration: 0.75s; - transition-duration: 0.75s; - -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; - content: ''; - display: block; - height: auto; - pointer-events: none; - position: absolute; - z-index: 2; - border-left: 1px solid rgba(0, 0, 0, 0.3); - left: 2px; - bottom: 5px; - top: 5px; } - /* line 181, ../../../../general/res/sass/_mixins.scss */ - .slider .knob:not(.disabled):hover:before { - -moz-transition-property: "border-color"; - -o-transition-property: "border-color"; - -webkit-transition-property: "border-color"; - transition-property: "border-color"; - -moz-transition-duration: 25ms; - -o-transition-duration: 25ms; - -webkit-transition-duration: 25ms; - transition-duration: 25ms; - -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; - border-color: #fcfcfc; } - /* line 322, ../../../../general/res/sass/controls/_controls.scss */ - .slider .knob:before { - top: 1px; - bottom: 3px; - left: 5px; } -/* line 329, ../../../../general/res/sass/controls/_controls.scss */ -.slider .range { - background: rgba(0, 153, 204, 0.6); - cursor: ew-resize; - position: absolute; - top: 0; - right: auto; - bottom: 0; - left: auto; - height: auto; - width: auto; } - /* line 339, ../../../../general/res/sass/controls/_controls.scss */ - .slider .range:hover { - background: rgba(0, 153, 204, 0.7); } - -/******************************************************** BROWSER ELEMENTS */ -@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 348, ../../../../general/res/sass/controls/_controls.scss */ - ::-webkit-scrollbar { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; - box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; - background-color: rgba(0, 0, 0, 0.1); - height: 10px; - width: 10px; } - - /* line 357, ../../../../general/res/sass/controls/_controls.scss */ - ::-webkit-scrollbar-thumb { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg5ODk4OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzdkN2Q3ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #898989), color-stop(100%, #7d7d7d)); - background-image: -moz-linear-gradient(#898989, #7d7d7d 20px); - background-image: -webkit-linear-gradient(#898989, #7d7d7d 20px); - background-image: linear-gradient(#898989, #7d7d7d 20px); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; } - /* line 366, ../../../../general/res/sass/controls/_controls.scss */ - ::-webkit-scrollbar-thumb:hover { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYWNlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwOTljYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #00ace6), color-stop(100%, #0099cc)); - background-image: -moz-linear-gradient(#00ace6, #0099cc 20px); - background-image: -webkit-linear-gradient(#00ace6, #0099cc 20px); - background-image: linear-gradient(#00ace6, #0099cc 20px); } - - /* line 371, ../../../../general/res/sass/controls/_controls.scss */ - ::-webkit-scrollbar-corner { - background: rgba(0, 0, 0, 0.1); } } -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/controls/_lists.scss */ -.checkbox-list label.checkbox.custom { - display: block; - margin-bottom: 5px; } -/* line 27, ../../../../general/res/sass/controls/_lists.scss */ -.checkbox-list li { - margin-bottom: 5px; } - -/* line 35, ../../../../general/res/sass/controls/_lists.scss */ -.l-tree-item-flat-list .tree-item .label { - left: 5px !important; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/******************************************************** MENU BUTTONS */ -/* line 31, ../../../../general/res/sass/controls/_menus.scss */ -.s-menu .icon { - font-size: 120%; } -/* line 35, ../../../../general/res/sass/controls/_menus.scss */ -.s-menu .title-label { - margin-left: 3px; } -/* line 39, ../../../../general/res/sass/controls/_menus.scss */ -.s-menu:after { - text-shadow: none; - content: '\76'; - display: inline-block; - font-family: 'symbolsfont'; - margin-left: 3px; - vertical-align: top; - color: rgba(255, 255, 255, 0.4); } -/* line 46, ../../../../general/res/sass/controls/_menus.scss */ -.s-menu.create-btn .title-label { - font-size: 1rem; } -/* line 54, ../../../../general/res/sass/controls/_menus.scss */ -.s-menu .menu { - left: 0; - text-align: left; } - /* line 57, ../../../../general/res/sass/controls/_menus.scss */ - .s-menu .menu .ui-symbol.icon { - width: 12px; } - -/******************************************************** MENUS THEMSELVES */ -/* line 64, ../../../../general/res/sass/controls/_menus.scss */ -.menu-element { - cursor: pointer; - position: relative; } - /* line 70, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - background-color: white; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #4d4d4d; - display: inline-block; - -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - text-shadow: none; - display: block; - padding: 3px 0; - position: absolute; - z-index: 10; } - /* line 79, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul { - margin: 0; - padding: 0; } - /* line 329, ../../../../general/res/sass/_mixins.scss */ - .menu-element .menu ul li { - list-style-type: none; - margin: 0; - padding: 0; } - /* line 81, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-top: 1px solid white; - color: #666666; - line-height: 1.5rem; - padding: 3px 10px 3px 30px; - position: relative; - white-space: nowrap; } - /* line 89, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:first-child { - border: none; } - /* line 92, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover { - background: #e6e6e6; - color: #4d4d4d; } - /* line 95, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover .icon { - color: #0099cc; } - /* line 99, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon { - left: 10px; } - /* line 106, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu, - .menu-element .context-menu, - .menu-element .checkbox-menu, - .menu-element .super-menu { - pointer-events: auto; } - /* line 112, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li a, - .menu-element .context-menu ul li a, - .menu-element .checkbox-menu ul li a, - .menu-element .super-menu ul li a { - color: #4d4d4d; } - /* line 115, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .icon, - .menu-element .context-menu ul li .icon, - .menu-element .checkbox-menu ul li .icon, - .menu-element .super-menu ul li .icon { - color: #0099cc; } - /* line 118, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon, - .menu-element .context-menu ul li .type-icon, - .menu-element .checkbox-menu ul li .type-icon, - .menu-element .super-menu ul li .type-icon { - left: 5px; } - /* line 130, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li { - padding-left: 50px; } - /* line 132, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox { - position: absolute; - left: 5px; - top: 0.53333rem; } - /* line 137, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em { - height: 0.7rem; - width: 0.7rem; } - /* line 140, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em:before { - font-size: 7px !important; - height: 0.7rem; - width: 0.7rem; - line-height: 0.7rem; } - /* line 148, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .type-icon { - left: 25px; } - /* line 154, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu { - display: block; - width: 500px; - height: 480px; } - /* line 162, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .contents { - overflow: hidden; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - width: auto; - height: auto; } - /* line 165, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; } - /* line 167, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left { - border-right: 1px solid #e6e6e6; - left: 0; - padding-right: 5px; - right: auto; - width: 50%; - overflow-x: hidden; - overflow-y: auto; } - /* line 177, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left ul li { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - padding-left: 30px; - border-top: none; } - /* line 184, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.right { - left: auto; - right: 0; - padding: 25px; - width: 50%; } - /* line 194, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.icon { - color: #0099cc; - position: relative; - font-size: 8em; - left: 0; - height: 150px; - line-height: 150px; - margin-bottom: 25px; - text-align: center; } - /* line 205, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.title { - color: #666; - font-size: 1.2em; - margin-bottom: 0.5em; } - /* line 210, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.description { - color: #666; - font-size: 0.8em; - line-height: 1.5em; } - /* line 219, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .context-menu, .menu-element .checkbox-menu { - font-size: 0.80rem; } - -/* line 224, ../../../../general/res/sass/controls/_menus.scss */ -.context-menu-holder { - pointer-events: none; - position: absolute; - height: 200px; - width: 170px; - z-index: 70; } - /* line 230, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder .context-menu-wrapper { - position: absolute; - height: 100%; - width: 100%; } - /* line 237, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-left .checkbox-menu { - right: 0; } - /* line 240, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-up .checkbox-menu { - bottom: 0; } - -/* line 245, ../../../../general/res/sass/controls/_menus.scss */ -.btn-bar.right .menu, -.menus-to-left .menu { - left: auto; - right: 0; - width: auto; } - -/* line 1, ../../../../general/res/sass/controls/_time-controller.scss */ -.l-time-controller { - position: relative; - margin: 10px 0; - min-width: 400px; } - /* line 12, ../../../../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 17, ../../../../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 { - margin-bottom: 5px; - position: relative; } - /* line 24, ../../../../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; } - /* line 30, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-inputs-holder { - height: 20px; } - /* line 34, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-slider, - .l-time-controller .l-time-range-ticks { - left: 90px; - right: 90px; } - /* line 40, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-slider-holder { - height: 30px; } - /* line 42, ../../../../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; - height: 75%; } - /* line 50, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-ticks-holder { - height: 10px; } - /* line 52, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-ticks-holder .l-time-range-ticks { - 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-ticks-holder .l-time-range-ticks .tick { - background-color: rgba(102, 102, 102, 0.2); - border: none; - width: 1px; - margin-left: -1px; } - /* line 59, ../../../../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 62, ../../../../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 { - color: rgba(153, 153, 153, 0.2); - font-size: 0.7em; - position: absolute; - margin-left: -25px; - text-align: center; - top: 10px; - width: 50px; - z-index: 2; } - /* line 76, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob { - width: 9px; } - /* line 78, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob .range-value { - position: absolute; - top: 50%; - margin-top: -7px; - white-space: nowrap; - width: 75px; } - /* line 87, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob:hover .range-value { - color: #0099cc; } - /* line 90, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-l { - margin-left: -4.5px; } - /* line 92, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-l .range-value { - text-align: right; - right: 14px; } - /* line 97, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-r { - margin-right: -4.5px; } - /* line 99, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .knob.knob-r .range-value { - left: 14px; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 26, ../../../../general/res/sass/mobile/controls/_menus.scss */ - .menu-element .super-menu { - width: 250px; - height: 250px; } - /* line 32, ../../../../general/res/sass/mobile/controls/_menus.scss */ - .menu-element .super-menu .pane.left { - border-right: none; - padding-right: 0; - width: 100%; } - /* line 37, ../../../../general/res/sass/mobile/controls/_menus.scss */ - .menu-element .super-menu .pane.right { - display: none; } } -/********************************* FORMS */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/forms/_elems.scss */ -.section-header { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - background: rgba(0, 0, 0, 0.05); - color: #999999; - font-size: 0.8em; - padding: 5px 5px; - text-transform: uppercase; } - -/* line 33, ../../../../general/res/sass/forms/_elems.scss */ -.form { - color: gray; } - /* line 36, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-section { - position: relative; - margin-bottom: 20px; } - /* line 41, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - *zoom: 1; - border-top: 1px solid rgba(0, 0, 0, 0.1); - margin-top: 5px; - padding: 5px 0; - position: relative; } - /* line 49, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row.first { - border-top: none; } - /* line 53, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row > .label, - .form .form-row > .controls { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - *zoom: 1; - font-size: 0.8rem; - line-height: 22px; - min-height: 22px; } - /* line 62, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row > .label { - float: left; - min-width: 120px; - position: relative; - white-space: nowrap; - width: 30%; } - /* line 72, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .value { - color: #666; } - /* line 76, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls { - float: left; - position: relative; - width: 69.9%; } - /* line 83, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls .l-composite-control.l-checkbox { - display: inline-block; - line-height: 14px; - margin-right: 5px; } - /* line 92, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls .l-med input[type="text"] { - width: 200px; } - /* line 96, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls .l-small input[type="text"] { - width: 50px; } - /* line 100, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls .l-numeric input[type="text"] { - text-align: right; } - /* line 104, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .controls .select { - margin-right: 5px; } - /* line 109, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .field-hints { - color: #333333; } - /* line 113, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .selector-list { - -moz-appearance: none; - -webkit-appearance: none; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - background: #fff; - border: none; - color: #666; - outline: none; - padding: 0 3px; - position: relative; - height: 150px; } - /* line 296, ../../../../general/res/sass/_mixins.scss */ - .form .form-row .selector-list.error { - background: rgba(255, 0, 0, 0.5); } - /* line 124, ../../../../general/res/sass/forms/_elems.scss */ - .form .form-row .selector-list > .wrapper { - overflow: auto; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; } - -/* line 138, ../../../../general/res/sass/forms/_elems.scss */ -label.form-control.checkbox input { - margin-right: 5px; - vertical-align: top; } - -/* line 144, ../../../../general/res/sass/forms/_elems.scss */ -.hint, -.s-hint { - font-size: 0.9em; } - -/* line 149, ../../../../general/res/sass/forms/_elems.scss */ -.l-result { - display: inline-block; - min-width: 32px; - min-height: 32px; - position: relative; - vertical-align: top; } - /* line 156, ../../../../general/res/sass/forms/_elems.scss */ - .l-result div.s-hint { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - background: rgba(255, 34, 0, 0.8); - display: block; - color: #ffa799; - padding: 5px; } - -/* line 165, ../../../../general/res/sass/forms/_elems.scss */ -input[type="text"] { - -moz-appearance: none; - -webkit-appearance: none; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - background: #fff; - border: none; - color: #666; - outline: none; - padding: 0 3px; } - /* line 296, ../../../../general/res/sass/_mixins.scss */ - input[type="text"].error { - background: rgba(255, 0, 0, 0.5); } - /* line 172, ../../../../general/res/sass/forms/_elems.scss */ - input[type="text"].numeric { - text-align: right; } - -/* line 177, ../../../../general/res/sass/forms/_elems.scss */ -textarea { - -moz-appearance: none; - -webkit-appearance: none; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - background: #fff; - border: none; - color: #666; - outline: none; - padding: 5px; - position: absolute; - height: 100%; - width: 100%; } - /* line 296, ../../../../general/res/sass/_mixins.scss */ - textarea.error { - background: rgba(255, 0, 0, 0.5); } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/forms/_selects.scss */ -.select { - background-color: #ddd; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; - margin: 0 0 2px 2px; - padding: 0 5px; - overflow: hidden; - position: relative; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .select .icon { - color: #eee; } - /* line 28, ../../../../general/res/sass/forms/_selects.scss */ - .select select { - -moz-appearance: none; - -webkit-appearance: none; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - background: none; - color: #666; - cursor: pointer; - border: none !important; - padding: 4px 25px 2px 0px; - width: 120%; } - /* line 37, ../../../../general/res/sass/forms/_selects.scss */ - .select select option { - margin: 5px 0; } - /* line 41, ../../../../general/res/sass/forms/_selects.scss */ - .select:after { - text-shadow: none; - content: '\76'; - display: inline-block; - font-family: 'symbolsfont'; - margin-left: 3px; - vertical-align: top; - color: rgba(102, 102, 102, 0.4); - position: absolute; - right: 5px; - top: 0; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/forms/_channel-selector.scss */ -.channel-selector .line { - margin-bottom: 5px; - min-height: 22px; } -/* line 27, ../../../../general/res/sass/forms/_channel-selector.scss */ -.channel-selector .treeview { - -moz-appearance: none; - -webkit-appearance: none; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - background: #fcfcfc; - border: none; - color: #666; - outline: none; - padding: 0 3px; - background: white; - border-bottom: 1px solid white; - min-height: 300px; - max-height: 400px; - overflow: auto; - padding: 5px; } - /* line 296, ../../../../general/res/sass/_mixins.scss */ - .channel-selector .treeview.error { - background: rgba(255, 0, 0, 0.5); } -/* line 36, ../../../../general/res/sass/forms/_channel-selector.scss */ -.channel-selector .btns-add-remove { - margin-top: 150px; } - /* line 39, ../../../../general/res/sass/forms/_channel-selector.scss */ - .channel-selector .btns-add-remove .s-btn, .channel-selector .btns-add-remove .s-menu { - display: block; - margin-bottom: 5px; - text-align: center; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/forms/_datetime.scss */ -.complex.datetime span { - display: inline-block; - margin-right: 5px; } -/* line 36, ../../../../general/res/sass/forms/_datetime.scss */ -.complex.datetime .fields { - margin-top: 3px 0; - padding: 3px 0; } -/* line 41, ../../../../general/res/sass/forms/_datetime.scss */ -.complex.datetime .date { - width: 85px; } - /* line 44, ../../../../general/res/sass/forms/_datetime.scss */ - .complex.datetime .date input { - width: 80px; } -/* line 50, ../../../../general/res/sass/forms/_datetime.scss */ -.complex.datetime .time.sm { - width: 45px; } - /* line 53, ../../../../general/res/sass/forms/_datetime.scss */ - .complex.datetime .time.sm input { - width: 40px; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/forms/_validation.scss */ -.validates > .label { - padding-right: 10px; } - /* line 25, ../../../../general/res/sass/forms/_validation.scss */ - .validates > .label::after { - float: right; - font-family: symbolsfont; - font-size: 0.7em; } -/* line 33, ../../../../general/res/sass/forms/_validation.scss */ -.validates.invalid > .label::after, .validates.invalid.req > .label::after { - color: #ff2200; - content: "x"; } -/* line 40, ../../../../general/res/sass/forms/_validation.scss */ -.validates.valid > .label::after, .validates.valid.req > .label::after { - color: #33cc33; - content: "2"; } -/* line 46, ../../../../general/res/sass/forms/_validation.scss */ -.validates.req > .label::after { - color: #0099cc; - content: "*"; } - -/* line 52, ../../../../general/res/sass/forms/_validation.scss */ -.req { - font-size: 0.7em; } - -/* line 55, ../../../../general/res/sass/forms/_validation.scss */ -span.req { - color: #0099cc; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 24, ../../../../general/res/sass/forms/_filter.scss */ -.filter input.filter, -.filter input.t-filter-input, -.t-filter input.filter, -.t-filter input.t-filter-input { - -moz-appearance: none; - -webkit-appearance: none; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; - background: #fcfcfc; - border: none; - color: #666; - outline: none; - padding: 0 3px; - background: white; - border-bottom: 1px solid white; } - /* line 296, ../../../../general/res/sass/_mixins.scss */ - .filter input.filter.error, - .filter input.t-filter-input.error, - .t-filter input.filter.error, - .t-filter input.t-filter-input.error { - background: rgba(255, 0, 0, 0.5); } -/* line 28, ../../../../general/res/sass/forms/_filter.scss */ -.filter input.t-filter-input, -.t-filter input.t-filter-input { - height: 22px; - width: 200px; } - /* line 38, ../../../../general/res/sass/forms/_filter.scss */ - .filter input.t-filter-input:not(.ng-dirty) + .t-a-clear, - .t-filter input.t-filter-input:not(.ng-dirty) + .t-a-clear { - display: none; } -/* line 42, ../../../../general/res/sass/forms/_filter.scss */ -.filter .icon.ui-symbol, -.t-filter .icon.ui-symbol { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - display: inline-block; - font-size: 1.3em; - height: 22px; - line-height: 22px; - padding: 0px 5px; - vertical-align: middle; } - /* line 50, ../../../../general/res/sass/forms/_filter.scss */ - .filter .icon.ui-symbol:hover, - .t-filter .icon.ui-symbol:hover { - background: rgba(255, 255, 255, 0.1); } -/* line 54, ../../../../general/res/sass/forms/_filter.scss */ -.filter .s-a-clear.ui-symbol, -.t-filter .s-a-clear.ui-symbol { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20); - opacity: 0.2; - background: #fff; - color: #333; - display: block; - position: absolute; - height: 13px; - width: 13px; - line-height: 13px; - margin-top: -6.5px; - overflow: hidden; - padding-top: 1px; - right: 4.5px; - top: 50%; - text-align: center; - z-index: 5; } - /* line 74, ../../../../general/res/sass/forms/_filter.scss */ - .filter .s-a-clear.ui-symbol:hover, - .t-filter .s-a-clear.ui-symbol:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); - opacity: 0.6; - background-color: #0099cc; } - -/* line 82, ../../../../general/res/sass/forms/_filter.scss */ -.l-filter { - display: inline-block; - position: relative; } - -/* line 89, ../../../../general/res/sass/forms/_filter.scss */ -.top-bar input.filter { - font-size: .9em; - height: 24px; - line-height: 24px; - margin-right: 5px; - padding-left: 10px; - padding-right: 10px; - vertical-align: top; } -/* line 100, ../../../../general/res/sass/forms/_filter.scss */ -.top-bar .icon-filter { - font-size: 1.4em; } - -/********************************* USER ENVIRON */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 32, ../../../../general/res/sass/user-environ/_layout.scss */ -.holder-all { - top: 0; - right: 0; - bottom: 0; - left: 0; } - -/* line 40, ../../../../general/res/sass/user-environ/_layout.scss */ -.browse-area, -.edit-area, -.editor { - position: absolute; } - -/* line 46, ../../../../general/res/sass/user-environ/_layout.scss */ -.editor { - -moz-border-radius: 6px; - -webkit-border-radius: 6px; - border-radius: 6px; } - -/* line 50, ../../../../general/res/sass/user-environ/_layout.scss */ -.contents { - box-sizing: border-box; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; } - /* line 58, ../../../../general/res/sass/user-environ/_layout.scss */ - .contents.nomargin { - right: 0px; - bottom: 0px; - left: 0px; } - -/* line 67, ../../../../general/res/sass/user-environ/_layout.scss */ -.bar .icon.major { - margin-right: 5px; } -/* line 70, ../../../../general/res/sass/user-environ/_layout.scss */ -.bar.abs, .s-menu span.bar.l-click-area { - text-wrap: none; - white-space: nowrap; } - /* line 73, ../../../../general/res/sass/user-environ/_layout.scss */ - .bar.abs.left, .s-menu span.bar.left.l-click-area, - .bar.abs .left, - .s-menu span.bar.l-click-area .left { - width: 45%; - right: auto; } - /* line 78, ../../../../general/res/sass/user-environ/_layout.scss */ - .bar.abs.right, .s-menu span.bar.right.l-click-area, - .bar.abs .right, - .s-menu span.bar.l-click-area .right { - width: 45%; - left: auto; - text-align: right; } - /* line 83, ../../../../general/res/sass/user-environ/_layout.scss */ - .bar.abs.right .icon.major, .s-menu span.bar.right.l-click-area .icon.major, - .bar.abs .right .icon.major, - .s-menu span.bar.l-click-area .right .icon.major { - margin-left: 15px; } - /* line 89, ../../../../general/res/sass/user-environ/_layout.scss */ - .bar.abs .l-flex .left, .s-menu span.bar.l-click-area .l-flex .left, - .bar.abs .l-flex .right, - .s-menu span.bar.l-click-area .l-flex .right, .bar.abs.l-flex .left, .s-menu span.bar.l-flex.l-click-area .left, - .bar.abs.l-flex .right, - .s-menu span.bar.l-flex.l-click-area .right { - width: auto; } - -/* line 98, ../../../../general/res/sass/user-environ/_layout.scss */ -.user-environ .browse-area, -.user-environ .edit-area, -.user-environ .editor { - top: 39px; - right: 10px; - bottom: 35px; - left: 10px; } -/* line 109, ../../../../general/res/sass/user-environ/_layout.scss */ -.user-environ .browse-area > .contents, -.user-environ .edit-area > .contents { - left: 0; - right: 0; } -/* line 115, ../../../../general/res/sass/user-environ/_layout.scss */ -.user-environ .edit-area { - top: 45px; } - /* line 118, ../../../../general/res/sass/user-environ/_layout.scss */ - .user-environ .edit-area .tool-bar { - bottom: auto; - height: 30px; - line-height: 25px; } - /* line 123, ../../../../general/res/sass/user-environ/_layout.scss */ - .user-environ .edit-area .work-area { - top: 40px; } -/* line 128, ../../../../general/res/sass/user-environ/_layout.scss */ -.user-environ .ue-bottom-bar { - overflow: hidden; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - width: auto; - height: auto; - top: auto; - height: 25px; } - /* line 133, ../../../../general/res/sass/user-environ/_layout.scss */ - .user-environ .ue-bottom-bar .status-holder { - z-index: 1; } - /* line 137, ../../../../general/res/sass/user-environ/_layout.scss */ - .user-environ .ue-bottom-bar .app-logo { - left: auto; - width: 105px; - z-index: 2; } - -/* line 145, ../../../../general/res/sass/user-environ/_layout.scss */ -.cols { - overflow: hidden; - *zoom: 1; } - /* line 147, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols .col { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - *zoom: 1; - float: left; - margin-left: 1.5%; - padding-left: 5px; - position: relative; } - /* line 155, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols .col:first-child { - margin-left: 0; - padding-left: 0; } - /* line 162, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-2 .col-1 { - min-width: 250px; - width: 48.5%; } - /* line 168, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-2-ff .col-100px { - width: 100px; } - /* line 175, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-6 .col-1 { - min-width: 83.33333px; - width: 15.16667%; } - /* line 181, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-16 .col-1 { - min-width: 31.25px; - width: 4.75%; } - /* line 184, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-16 .col-2 { - min-width: 62.5px; - width: 11%; } - /* line 187, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-16 .col-7 { - min-width: 218.75px; - width: 42.25%; } - /* line 193, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-32 .col-2 { - min-width: 31.25px; - width: 4.75%; } - /* line 196, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols.cols-32 .col-15 { - min-width: 234.375px; - width: 45.375%; } - /* line 200, ../../../../general/res/sass/user-environ/_layout.scss */ - .cols .l-row { - overflow: hidden; - *zoom: 1; - padding: 5px 0; } - -/* line 208, ../../../../general/res/sass/user-environ/_layout.scss */ -.browse-mode .split-layout .split-pane-component.pane.left { - min-width: 150px; - max-width: 800px; - width: 25%; } - -/* line 218, ../../../../general/res/sass/user-environ/_layout.scss */ -.edit-mode .split-layout .split-pane-component.pane.right { - width: 15%; } - /* line 220, ../../../../general/res/sass/user-environ/_layout.scss */ - .edit-mode .split-layout .split-pane-component.pane.right .pane.bottom { - min-height: 50px; - height: 30%; } - -/* line 230, ../../../../general/res/sass/user-environ/_layout.scss */ -.pane { - position: absolute; } - /* line 233, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.treeview.left .create-btn-holder { - bottom: auto; - top: 0; - height: 24px; } - /* line 236, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.treeview.left .create-btn-holder .wrapper.menu-element { - position: absolute; - bottom: 5px; } - /* line 241, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.treeview.left .search-holder { - top: 34px; } - /* line 244, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.treeview.left .tree-holder { - overflow: auto; - top: 64px; } - /* line 251, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.items .object-browse-bar .left.abs, .pane.items .object-browse-bar .s-menu span.left.l-click-area, .s-menu .pane.items .object-browse-bar span.left.l-click-area, - .pane.items .object-browse-bar .right.abs, - .pane.items .object-browse-bar .s-menu span.right.l-click-area, - .s-menu .pane.items .object-browse-bar span.right.l-click-area { - top: auto; } - /* line 262, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane.items .object-holder { - top: 34px; } - /* line 266, ../../../../general/res/sass/user-environ/_layout.scss */ - .pane .object-holder { - overflow: auto; } - -/* line 274, ../../../../general/res/sass/user-environ/_layout.scss */ -.split-layout.horizontal > .pane { - margin-top: 5px; } - /* line 277, ../../../../general/res/sass/user-environ/_layout.scss */ - .split-layout.horizontal > .pane:first-child { - margin-top: 0; } -/* line 284, ../../../../general/res/sass/user-environ/_layout.scss */ -.split-layout.vertical > .pane { - margin-left: 5px; } - /* line 287, ../../../../general/res/sass/user-environ/_layout.scss */ - .split-layout.vertical > .pane > .holder { - left: 0; - right: 0; } - /* line 291, ../../../../general/res/sass/user-environ/_layout.scss */ - .split-layout.vertical > .pane:first-child { - margin-left: 0; } - /* line 293, ../../../../general/res/sass/user-environ/_layout.scss */ - .split-layout.vertical > .pane:first-child .holder { - right: 3px; } - -/* line 302, ../../../../general/res/sass/user-environ/_layout.scss */ -.object-browse-bar .s-btn, .object-browse-bar .s-menu, -.top-bar .buttons-main .s-btn, -.top-bar .buttons-main .s-menu, -.top-bar .s-menu, -.tool-bar .s-btn, -.tool-bar .s-menu, -.tool-bar .s-menu { - height: 25px; - line-height: 25px; - vertical-align: top; } - -/* line 315, ../../../../general/res/sass/user-environ/_layout.scss */ -.object-browse-bar .view-switcher, -.top-bar .view-switcher { - margin-right: 20px; } - -/* line 320, ../../../../general/res/sass/user-environ/_layout.scss */ -.object-browse-bar { - 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; - height: 24px; - line-height: 24px; - white-space: nowrap; } - /* line 328, ../../../../general/res/sass/user-environ/_layout.scss */ - .object-browse-bar .left { - padding-right: 20px; } - /* line 330, ../../../../general/res/sass/user-environ/_layout.scss */ - .object-browse-bar .left .l-back { - display: inline-block; - float: left; - margin-right: 10px; } - -/*.object-holder { - .s-btn { - //background: red !important; - $h: 16px; - height: $h; - line-height: $h; - > span { - font-size: 0.7rem; - } - } -}*/ -/* line 350, ../../../../general/res/sass/user-environ/_layout.scss */ -.l-flex { - display: flex; - display: -webkit-flex; - flex-flow: row nowrap; - -webkit-flex-flow: row nowrap; } - /* line 353, ../../../../general/res/sass/user-environ/_layout.scss */ - .l-flex .left { - flex: 1 1 0; - -webkit-flex: 1 1 0; - padding-right: 10px; } - -/* line 360, ../../../../general/res/sass/user-environ/_layout.scss */ -.vscroll { - overflow-y: auto; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 26, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-wrapper, - .pane { - top: 0 !important; - right: 0; - bottom: 0; - left: 0; } - - /* line 31, ../../../../general/res/sass/mobile/_layout.scss */ - .pane.left.treeview { - background-color: #f7f7f7; } - - /* line 35, ../../../../general/res/sass/mobile/_layout.scss */ - .pane.right-repr { - -moz-transition-duration: 0.35s; - -o-transition-duration: 0.35s; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - transition-timing-function: ease; - backface-visibility: hidden; - margin-left: 0 !important; } - /* line 39, ../../../../general/res/sass/mobile/_layout.scss */ - .pane.right-repr #content-area { - -moz-transition-duration: 0.35s; - -o-transition-duration: 0.35s; - -webkit-transition-duration: 0.35s; - transition-duration: 0.35s; - transition-timing-function: ease; - backface-visibility: hidden; - opacity: 1; } - - /* line 45, ../../../../general/res/sass/mobile/_layout.scss */ - .user-environ .browse-area, - .user-environ .edit-area, - .user-environ .editor { - top: 0; - left: 0; - right: 0; - bottom: 25px; } - - /* line 51, ../../../../general/res/sass/mobile/_layout.scss */ - .holder.l-mobile { - top: 10px !important; - right: 10px !important; - bottom: 10px !important; - left: 10px !important; } - - /* line 61, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-hidetree { - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; } - /* line 65, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-hidetree .pane.left.treeview { - opacity: 0; - right: 100% !important; - width: auto !important; - overflow-y: hidden; - overflow-x: hidden; } - /* line 74, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-hidetree .pane.right-repr { - left: 0 !important; } - - /* line 79, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree { - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; } - /* line 88, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree .pane.left.treeview { - -moz-transition-property: opacity; - -o-transition-property: opacity; - -webkit-transition-property: opacity; - transition-property: opacity; - -moz-transition-duration: 0.4s; - -o-transition-duration: 0.4s; - -webkit-transition-duration: 0.4s; - transition-duration: 0.4s; - -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; - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSI5OCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -moz-linear-gradient(0deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); - background-image: -webkit-linear-gradient(0deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); - background-image: linear-gradient(90deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); - opacity: 1; - display: block !important; - right: auto !important; - width: 40% !important; } - /* line 98, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree .pane.right-repr { - left: 40% !important; } - - /* line 107, ../../../../general/res/sass/mobile/_layout.scss */ - .mobile-menu-icon { - font-size: 110%; - position: absolute; - top: 12px; - left: 10px; } - - /* line 114, ../../../../general/res/sass/mobile/_layout.scss */ - .object-browse-bar { - left: 30px !important; } - /* line 117, ../../../../general/res/sass/mobile/_layout.scss */ - .object-browse-bar .context-available { - opacity: 1 !important; } - /* line 120, ../../../../general/res/sass/mobile/_layout.scss */ - .object-browse-bar .view-switcher { - margin-right: 0 !important; } - /* line 122, ../../../../general/res/sass/mobile/_layout.scss */ - .object-browse-bar .view-switcher .title-label { - display: none; } - - /* line 129, ../../../../general/res/sass/mobile/_layout.scss */ - .tree-holder { - overflow-x: hidden !important; } - - /* line 133, ../../../../general/res/sass/mobile/_layout.scss */ - .mobile-disable-select { - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; } - - /* line 138, ../../../../general/res/sass/mobile/_layout.scss */ - .mobile-hide, - .mobile-hide-important { - display: none !important; } - - /* line 143, ../../../../general/res/sass/mobile/_layout.scss */ - .mobile-back-hide { - pointer-events: none; - -moz-transition-property: opacity; - -o-transition-property: opacity; - -webkit-transition-property: opacity; - transition-property: opacity; - -moz-transition-duration: 0.4s; - -o-transition-duration: 0.4s; - -webkit-transition-duration: 0.4s; - transition-duration: 0.4s; - -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; - opacity: 0; } - - /* line 148, ../../../../general/res/sass/mobile/_layout.scss */ - .mobile-back-unhide { - pointer-events: all; - -moz-transition-property: opacity; - -o-transition-property: opacity; - -webkit-transition-property: opacity; - transition-property: opacity; - -moz-transition-duration: 0.4s; - -o-transition-duration: 0.4s; - -webkit-transition-duration: 0.4s; - transition-duration: 0.4s; - -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; - opacity: 1; } } -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px) { - /* line 157, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree .pane.left.treeview { - width: 90% !important; } - /* line 160, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree .pane.right-repr { - left: 0 !important; - transform: translateX(90%); - -webkit-transform: translateX(90%); } - /* line 163, ../../../../general/res/sass/mobile/_layout.scss */ - .browse-showtree .pane.right-repr #content-area { - opacity: 0; } } -@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 171, ../../../../general/res/sass/mobile/_layout.scss */ - .desktop-hide { - display: none; } } -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 26, ../../../../general/res/sass/edit/_editor.scss */ -.edit-main .edit-corner, -.edit-main .edit-handle { - position: absolute; - z-index: 2; } -/* line 32, ../../../../general/res/sass/edit/_editor.scss */ -.edit-main .edit-corner { - width: 15px; - height: 15px; } - /* line 35, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-corner:hover { - z-index: 11; } - /* line 38, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-corner.edit-resize-nw { - -moz-border-radius-bottomright: 5px; - -webkit-border-bottom-right-radius: 5px; - border-bottom-right-radius: 5px; - cursor: nw-resize; - top: 0; - left: 0; } - /* line 43, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-corner.edit-resize-ne { - -moz-border-radius-bottomleft: 5px; - -webkit-border-bottom-left-radius: 5px; - border-bottom-left-radius: 5px; - cursor: ne-resize; - top: 0; - right: 0; } - /* line 48, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-corner.edit-resize-se { - -moz-border-radius-topleft: 5px; - -webkit-border-top-left-radius: 5px; - border-top-left-radius: 5px; - cursor: se-resize; - bottom: 0; - right: 0; } - /* line 53, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-corner.edit-resize-sw { - -moz-border-radius-topright: 5px; - -webkit-border-top-right-radius: 5px; - border-top-right-radius: 5px; - cursor: sw-resize; - bottom: 0; - left: 0; } -/* line 61, ../../../../general/res/sass/edit/_editor.scss */ -.edit-main .edit-handle { - top: 15px; - right: 15px; - bottom: 15px; - left: 15px; } - /* line 63, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-handle.edit-move { - cursor: move; - left: 0; - right: 0; - top: 0; - bottom: 0; - z-index: 1; } - /* line 73, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-handle.edit-resize-n { - top: 0px; - bottom: auto; - height: 15px; - cursor: n-resize; } - /* line 78, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-handle.edit-resize-e { - right: 0px; - left: auto; - width: 15px; - cursor: e-resize; } - /* line 83, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-handle.edit-resize-s { - bottom: 0px; - top: auto; - height: 15px; - cursor: s-resize; } - /* line 88, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .edit-handle.edit-resize-w { - left: 0px; - right: auto; - width: 15px; - cursor: w-resize; } -/* line 97, ../../../../general/res/sass/edit/_editor.scss */ -.edit-main .frame.child-frame.panel:hover { - -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - border-color: #0099cc; } - /* line 101, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .frame.child-frame.panel:hover .view-switcher { - opacity: 1; } - /* line 104, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .frame.child-frame.panel:hover .edit-corner { - background-color: rgba(0, 153, 204, 0.8); } - /* line 106, ../../../../general/res/sass/edit/_editor.scss */ - .edit-main .frame.child-frame.panel:hover .edit-corner:hover { - background-color: #0099cc; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/search/_search.scss */ -.abs.search-holder, .s-menu span.search-holder.l-click-area { - height: 25px; - bottom: 0; - top: 23px; - z-index: 5; } - /* line 27, ../../../../general/res/sass/search/_search.scss */ - .abs.search-holder.active, .s-menu span.search-holder.active.l-click-area { - height: auto; - bottom: 0; } - -/* line 38, ../../../../general/res/sass/search/_search.scss */ -.search { - display: flex; - display: -webkit-flex; - flex-direction: column; - -webkit-flex-direction: column; - height: 100%; } - /* line 48, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar { - font-size: 0.8em; - max-width: 250px; - position: relative; - width: 100%; } - /* line 60, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-input { - height: 25px; - line-height: 25px; - padding-top: 0; - padding-bottom: 0; } - /* line 67, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-icon, - .search .search-bar .clear-icon, - .search .search-bar .menu-icon { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #a6a6a6; - height: 17px; - width: 17px; - line-height: 17px; - position: absolute; - text-align: center; - top: 4px; } - /* line 80, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .clear-icon, - .search .search-bar .menu-icon { - cursor: pointer; - -moz-transition: color, 0.25s; - -o-transition: color, 0.25s; - -webkit-transition: color, 0.25s; - transition: color, 0.25s; } - /* line 87, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-input { - position: relative; - width: 100%; - padding-left: 22px !important; - padding-right: 44px !important; } - /* line 94, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-input input { - width: 100%; } - /* line 99, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-icon { - left: 3px; - transition: visibility .15s, opacity .15s, color .2s; - pointer-events: none; } - /* line 119, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-input:hover + div.search-icon { - color: #8c8c8c; } - /* line 123, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .clear-icon { - right: 22px; - visibility: hidden; - opacity: 0; - transition: visibility .15s, opacity .15s, color .2s; } - /* line 132, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .clear-icon.content { - visibility: visible; - opacity: 1; } - /* line 137, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .clear-icon:hover { - color: #8c8c8c; } - /* line 142, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .menu-icon { - font-size: 0.8em; - padding-right: 4px; - right: 4px; - text-align: right; } - /* line 148, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .menu-icon:hover { - color: #8c8c8c; } - /* line 153, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-menu-holder { - float: right; - left: -20px; - z-index: 1; - transition: visibility .05s, opacity .05s; } - /* line 163, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .search-menu-holder.off { - visibility: hidden; - opacity: 0; } - /* line 170, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar .menu-icon:hover + div.search-menu-holder { - visibility: visible; } - /* line 173, ../../../../general/res/sass/search/_search.scss */ - .search .search-bar div.search-menu-holder:hover { - visibility: visible; } - /* line 178, ../../../../general/res/sass/search/_search.scss */ - .search .active-filter-display { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - line-height: 130%; - padding: 5px 0; - padding-left: 1.4625em; - font-size: 0.65em; - margin-top: 3px; } - /* line 193, ../../../../general/res/sass/search/_search.scss */ - .search .active-filter-display .clear-filters-icon { - color: #a6a6a6; - opacity: 1; - font-size: 0.8em; - position: absolute; - left: 1px; - cursor: pointer; } - /* line 205, ../../../../general/res/sass/search/_search.scss */ - .search .active-filter-display.off { - visibility: hidden; - opacity: 0; - height: 0; - margin: 0; - padding: 0; - border: 0; } - /* line 215, ../../../../general/res/sass/search/_search.scss */ - .search .search-scroll { - order: 3; - margin-top: 4px; - overflow-y: auto; - top: auto; - height: auto; - max-height: 100%; - 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 */ - .search .search-scroll .load-more-button { - margin-top: 5px 0; - font-size: 0.8em; - position: relative; - left: 50%; - margin-left: -45px; - text-align: center; - width: 90px; - white-space: nowrap; } - -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 5, ../../../../general/res/sass/mobile/search/_search.scss */ - .search .search-bar .menu-icon { - display: none; } - /* line 8, ../../../../general/res/sass/mobile/search/_search.scss */ - .search .search-bar .clear-icon { - right: 5px; } } -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .blocker { - background: rgba(0, 0, 0, 0.7); - z-index: 100; } -/* line 27, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .clk-icon.close { - font-size: 0.8rem; - position: absolute; - top: 10px; - right: 10px; - bottom: auto; - left: auto; - z-index: 100; } -/* line 33, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay > .holder { - background-color: #fcfcfc; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #666; - display: inline-block; - -moz-border-radius: 12px; - -webkit-border-radius: 12px; - border-radius: 12px; - color: #666; - top: 15%; - right: 15%; - bottom: 15%; - left: 15%; - z-index: 101; } - /* line 40, ../../../../general/res/sass/overlay/_overlay.scss */ - .overlay > .holder > .contents { - top: 25px; - right: 25px; - bottom: 25px; - left: 25px; } -/* line 45, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .title { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - font-size: 1.2em; - margin-bottom: 5px; } -/* line 51, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .top-bar { - height: 60px; } -/* line 55, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .editor { - top: 70px; - bottom: 40px; - left: 0; - right: 0; } -/* line 61, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .bottom-bar { - top: auto; - right: 0; - bottom: 0; - left: 0; - overflow: visible; - height: 30px; - text-align: right; } - /* line 67, ../../../../general/res/sass/overlay/_overlay.scss */ - .overlay .bottom-bar .s-btn, .overlay .bottom-bar .s-menu { - font-size: 95%; - height: 30px; - line-height: 30px; - margin-left: 5px; - padding: 0 15px; } - /* line 69, ../../../../general/res/sass/overlay/_overlay.scss */ - .overlay .bottom-bar .s-btn:not(.major), .overlay .bottom-bar .s-menu:not(.major) { - background-color: #969696; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .overlay .bottom-bar .s-btn:not(.major) .icon, .overlay .bottom-bar .s-menu:not(.major) .icon { - color: #fff; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .overlay .bottom-bar .s-btn:not(.major):not(.disabled):hover, .overlay .bottom-bar .s-menu:not(.major):not(.disabled):hover { - background: #7d7d7d; } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .overlay .bottom-bar .s-btn:not(.major):not(.disabled):hover > .icon, .overlay .bottom-bar .s-menu:not(.major):not(.disabled):hover > .icon { - color: white; } } -/* line 85, ../../../../general/res/sass/overlay/_overlay.scss */ -.overlay .contents.l-dialog { - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - overflow: auto; } - /* line 93, ../../../../general/res/sass/overlay/_overlay.scss */ - .overlay .contents.l-dialog .field.l-med input[type='text'] { - width: 100%; } - -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 4, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay .clk-icon.close { - top: 10px; - right: 10px; } - /* line 8, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - top: 0; - right: 0; - bottom: 0; - left: 0; } - /* line 14, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents { - top: 10px; - right: 10px; - bottom: 10px; - left: 10px; } - /* line 21, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents .top-bar > .title { - margin-right: 1.2em; } - /* line 26, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents .form.editor { - border: none; } - /* line 29, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents .form.editor .contents { - top: 0; - right: 0; - bottom: 0; - left: 0; } } -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 43, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents .form.editor .contents .form-row > .label, - .overlay > .holder > .contents .form.editor .contents .form-row > .controls { - display: block; - float: none; - width: 100%; } - /* line 51, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ - .overlay > .holder > .contents .form.editor .contents .form-row > .label:after { - float: none; } } -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 23, ../../../../general/res/sass/tree/_tree.scss */ -ul.tree { - margin: 0; - padding: 0; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; } - /* line 329, ../../../../general/res/sass/_mixins.scss */ - ul.tree li { - list-style-type: none; - margin: 0; - padding: 0; } - /* line 26, ../../../../general/res/sass/tree/_tree.scss */ - ul.tree li { - display: block; - position: relative; } - /* line 30, ../../../../general/res/sass/tree/_tree.scss */ - ul.tree ul.tree { - margin-left: 15px; } - -/* line 35, ../../../../general/res/sass/tree/_tree.scss */ -.tree-item, -.search-result-item { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-transition: background-color 0.25s; - -o-transition: background-color 0.25s; - -webkit-transition: background-color 0.25s; - transition: background-color 0.25s; - display: block; - font-size: 0.8rem; - height: 1.5rem; - line-height: 1.5rem; - margin-bottom: 3px; - position: relative; } - /* line 48, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .view-control, - .search-result-item .view-control { - color: #666; - display: inline-block; - margin-left: 5px; - font-size: 0.75em; - width: 10px; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 57, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .view-control:hover, - .search-result-item .view-control:hover { - color: #0099cc !important; } } - /* line 63, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label, - .search-result-item .label { - display: block; - overflow: hidden; - position: absolute; - top: 0px; - right: 0px; - bottom: 0px; - left: 0px; - width: auto; - height: auto; - line-height: 1.5rem; } - /* line 71, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label .type-icon, - .search-result-item .label .type-icon { - font-size: 16px; - color: #0099cc; - left: 5px; - position: absolute; - top: 4px; - bottom: auto; - height: 16px; - line-height: 100%; - right: auto; - width: 16px; } - /* line 84, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label .type-icon .icon.l-icon-link, .tree-item .label .type-icon .icon.l-icon-alert, - .search-result-item .label .type-icon .icon.l-icon-link, - .search-result-item .label .type-icon .icon.l-icon-alert { - position: absolute; - z-index: 2; } - /* line 90, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label .type-icon .icon.l-icon-alert, - .search-result-item .label .type-icon .icon.l-icon-alert { - color: #ff3c00; - font-size: 8px; - line-height: 8px; - height: 8px; - width: 8px; - top: 1px; - right: -2px; } - /* line 96, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label .type-icon .icon.l-icon-link, - .search-result-item .label .type-icon .icon.l-icon-link { - color: #49dedb; - font-size: 8px; - line-height: 8px; - height: 8px; - width: 8px; - left: -3px; - bottom: 0px; } - /* line 104, ../../../../general/res/sass/tree/_tree.scss */ - .tree-item .label .title-label, - .search-result-item .label .title-label { - overflow: hidden; - position: absolute; - top: 0px; - right: 0px; - bottom: 0px; - left: 0px; - width: auto; - height: auto; - display: block; - left: 30px; - 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 */ - .tree-item.selected, - .search-result-item.selected { - background: #1ac6ff; - color: #fcfcfc; } - /* line 131, ../../../../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 */ - .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 */ - .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 */ - .tree-item:not(.selected):hover .icon, - .search-result-item:not(.selected):hover .icon { - color: #0099cc; } } - /* line 155, ../../../../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 */ - .tree-item .context-trigger, - .search-result-item .context-trigger { - top: -1px; - position: absolute; - right: 3px; } - /* line 165, ../../../../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 */ -.tree-item .label { - left: 15px; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 27, ../../../../general/res/sass/mobile/_tree.scss */ - ul.tree ul.tree { - margin-left: 20px; } - - /* line 31, ../../../../general/res/sass/mobile/_tree.scss */ - .tree-item, - .search-result-item { - height: 35px; - line-height: 35px; - margin-bottom: 0px; } - /* line 36, ../../../../general/res/sass/mobile/_tree.scss */ - .tree-item .view-control, - .search-result-item .view-control { - position: absolute; - font-size: 1.1em; - right: 0px; - width: 30px; - text-align: center; } - /* line 45, ../../../../general/res/sass/mobile/_tree.scss */ - .tree-item .label, - .search-result-item .label { - left: 0; - right: 35px; - line-height: 35px; } - /* line 50, ../../../../general/res/sass/mobile/_tree.scss */ - .tree-item .label .type-icon, - .search-result-item .label .type-icon { - top: 9px; - bottom: auto; - height: 16px; } } -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 25, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame.child-frame.panel { - background: #fcfcfc; - border: 1px solid rgba(102, 102, 102, 0.2); } - /* line 28, ../../../../general/res/sass/user-environ/_frame.scss */ - .frame.child-frame.panel:hover { - border-color: rgba(128, 128, 128, 0.2); } -/* line 32, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame > .object-header.abs, .s-menu .frame > span.object-header.l-click-area { - font-size: 0.75em; - height: 16px; - line-height: 16px; } -/* line 38, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame > .object-holder.abs, .s-menu .frame > span.object-holder.l-click-area { - top: 21px; } -/* line 41, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame .contents { - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; } -/* line 49, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame.frame-template .s-btn, .frame.frame-template .s-menu, -.frame.frame-template .s-menu { - height: 16px; - line-height: 16px; - padding: 0 5px; } - /* line 54, ../../../../general/res/sass/user-environ/_frame.scss */ - .frame.frame-template .s-btn > span, .frame.frame-template .s-menu > span, - .frame.frame-template .s-menu > span { - font-size: 0.65rem; } -/* line 59, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame.frame-template .s-menu:after { - font-size: 8px; } -/* line 63, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame.frame-template .view-switcher { - z-index: 10; } -@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 69, ../../../../general/res/sass/user-environ/_frame.scss */ - .frame.frame-template .view-switcher { - opacity: 0; } - /* line 72, ../../../../general/res/sass/user-environ/_frame.scss */ - .frame.frame-template:hover .view-switcher { - opacity: 1; } } -/* line 80, ../../../../general/res/sass/user-environ/_frame.scss */ -.frame .view-switcher .title-label { - display: none; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/user-environ/_top-bar.scss */ -.top-bar { - /* .title { - color: #fff; - }*/ } - /* line 23, ../../../../general/res/sass/user-environ/_top-bar.scss */ - .top-bar.browse, .top-bar.edit { - border-bottom: 1px solid rgba(102, 102, 102, 0.2); - top: 10px; - right: 10px; - bottom: auto; - left: 10px; - height: 30px; - line-height: 24px; } - /* line 35, ../../../../general/res/sass/user-environ/_top-bar.scss */ - .top-bar .buttons-main { - font-size: 0.8em; - left: auto; - text-align: right; } - -/* line 48, ../../../../general/res/sass/user-environ/_top-bar.scss */ -.edit-mode .top-bar .buttons-main { - white-space: nowrap; } - /* line 52, ../../../../general/res/sass/user-environ/_top-bar.scss */ - .edit-mode .top-bar .buttons-main.abs, .edit-mode .top-bar .s-menu span.buttons-main.l-click-area, .s-menu .edit-mode .top-bar span.buttons-main.l-click-area { - bottom: auto; - left: auto; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ -.ue-bottom-bar { - background: #000; - color: white; - font-size: .7rem; } - /* line 28, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .ue-bottom-bar .status-holder { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - width: auto; - height: auto; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - line-height: 15px; - right: 120px; - text-transform: uppercase; } - /* line 39, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .ue-bottom-bar .app-logo { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - width: auto; - height: auto; - left: auto; - cursor: pointer; } - /* line 48, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .ue-bottom-bar .app-logo.logo-openmctweb { - background: url("../../../../general/res/images/logo-openmctweb.svg") no-repeat center center; } - -/* line 54, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ -.status.block { - display: inline; - margin-right: 10px; } - /* line 58, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .status.block .status-indicator { - display: inline-block; - margin-right: 3px; - color: #0099cc; } - /* line 65, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .status.block .status-indicator.ok { - color: #009900; } - /* line 68, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ - .status.block .status-indicator.caution { - color: #ffaa00; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/user-environ/_tool-bar.scss */ -.tool-bar { - border-bottom: 1px solid rgba(102, 102, 102, 0.2); } - /* line 24, ../../../../general/res/sass/user-environ/_tool-bar.scss */ - .tool-bar .l-control-group { - height: 25px; } - /* line 27, ../../../../general/res/sass/user-environ/_tool-bar.scss */ - .tool-bar input[type="text"] { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-size: .9em; - height: 25px; - margin-bottom: 1px; - position: relative; } - /* line 33, ../../../../general/res/sass/user-environ/_tool-bar.scss */ - .tool-bar input[type="text"].sm { - width: 25px; } - /* line 37, ../../../../general/res/sass/user-environ/_tool-bar.scss */ - .tool-bar .input-labeled label { - font-size: 11.25px; } - -/********************************* VIEWS */ -/***************************************************************************** -* 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. -*****************************************************************************/ -/* line 23, ../../../../general/res/sass/_fixed-position.scss */ -.t-fixed-position.l-fixed-position { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - width: auto; - height: auto; } - /* line 33, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position.l-fixed-position .l-grid-holder { - position: relative; - height: 100%; - width: 100%; } - /* line 37, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position.l-fixed-position .l-grid-holder .l-grid { - position: absolute; - height: 100%; - width: 100%; - pointer-events: none; - z-index: 0; } -/* line 48, ../../../../general/res/sass/_fixed-position.scss */ -.t-fixed-position .l-fixed-position-item { - position: absolute; - border: 1px solid transparent; } - /* line 52, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item.s-selected { - -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; - border-color: #0099cc; - cursor: move; } - /* line 57, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item.s-not-selected { - opacity: 0.8; } - /* line 61, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-box, - .t-fixed-position .l-fixed-position-item .l-fixed-position-image, - .t-fixed-position .l-fixed-position-item .l-fixed-position-text { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - height: 100%; - width: 100%; } - /* line 72, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-image { - background-size: cover; - background-repeat: no-repeat; - background-position: center; } - /* line 78, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text { - border: 1px solid transparent; - font-size: 0.8rem; - line-height: 100%; } - /* line 84, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-static-text { - padding: 1px; } - /* line 89, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - display: block; - padding: 2px; } - /* line 96, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-title { - float: none; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: auto; } - /* line 105, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-value { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - float: right; - margin-left: 5px; - padding-left: 5px; - padding-right: 5px; - text-align: right; } - /* line 116, ../../../../general/res/sass/_fixed-position.scss */ - .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-value.telem-only { - margin-left: 0; - width: 100%; } -/* line 126, ../../../../general/res/sass/_fixed-position.scss */ -.t-fixed-position .l-fixed-position-item-handle { - background: rgba(0, 153, 204, 0.5); - cursor: crosshair; - border: 1px solid #0099cc; - position: absolute; } - -/* line 140, ../../../../general/res/sass/_fixed-position.scss */ -.edit-mode .t-fixed-position.l-fixed-position .l-grid-holder .l-grid.l-grid-x { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxcHgiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wNSIvPjxzdG9wIG9mZnNldD0iMXB4IiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); - background-size: 100%; - background-image: -moz-linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-image: -webkit-linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-repeat: repeat-x; } -/* line 144, ../../../../general/res/sass/_fixed-position.scss */ -.edit-mode .t-fixed-position.l-fixed-position .l-grid-holder .l-grid.l-grid-y { - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIxcHgiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wNSIvPjxzdG9wIG9mZnNldD0iMXB4IiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); - background-size: 100%; - background-image: -moz-linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-image: -webkit-linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); - background-repeat: repeat-y; } -/* line 152, ../../../../general/res/sass/_fixed-position.scss */ -.edit-mode .t-fixed-position .l-fixed-position-item:not(.s-selected) { - border: 1px dotted rgba(0, 153, 204, 0.75); } - /* line 154, ../../../../general/res/sass/_fixed-position.scss */ - .edit-mode .t-fixed-position .l-fixed-position-item:not(.s-selected):hover { - border: 1px dotted #0099cc; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/lists/_tabular.scss */ -.w1, .w2 { - position: relative; - height: 100%; } - -/* line 27, ../../../../general/res/sass/lists/_tabular.scss */ -.tabular, -table { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-spacing: 0; - border-collapse: collapse; - display: table; - font-size: 0.75rem; - position: relative; - width: 100%; } - /* line 36, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular thead, .tabular .thead, - .tabular tbody tr, .tabular .tbody .tr, - table thead, - table .thead, - table tbody tr, - table .tbody .tr { - width: 100%; } - /* line 40, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular thead, .tabular .thead, - table thead, - table .thead { - border-bottom: 1px solid #fcfcfc; } - /* line 43, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tbody, .tabular .tbody, - table tbody, - table .tbody { - display: table-row-group; } - /* line 46, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tbody tr:hover, .tabular tbody .tr:hover, .tabular .tbody tr:hover, .tabular .tbody .tr:hover, - table tbody tr:hover, - table tbody .tr:hover, - table .tbody tr:hover, - table .tbody .tr:hover { - background: rgba(51, 51, 51, 0.1); } - /* line 51, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr, .tabular .tr, - table tr, - table .tr { - display: table-row; } - /* line 53, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr:first-child .td, .tabular .tr:first-child .td, - table tr:first-child .td, - table .tr:first-child .td { - border-top: none; } - /* line 57, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr.group-header td, .tabular tr.group-header .td, .tabular .tr.group-header td, .tabular .tr.group-header .td, - table tr.group-header td, - table tr.group-header .td, - table .tr.group-header td, - table .tr.group-header .td { - background-color: #efefef; - color: #404040; } - /* line 63, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th, .tabular tr .th, .tabular tr td, .tabular tr .td, .tabular .tr th, .tabular .tr .th, .tabular .tr td, .tabular .tr .td, - table tr th, - table tr .th, - table tr td, - table tr .td, - table .tr th, - table .tr .th, - table .tr td, - table .tr .td { - display: table-cell; } - /* line 66, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th, .tabular tr .th, .tabular .tr th, .tabular .tr .th, - table tr th, - table tr .th, - table .tr th, - table .tr .th { - background-color: #e3e3e3; - border-left: 1px solid #fcfcfc; - color: #333333; - padding: 5px 5px; - white-space: nowrap; - vertical-align: middle; } - /* line 73, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th:first-child, .tabular tr .th:first-child, .tabular .tr th:first-child, .tabular .tr .th:first-child, - table tr th:first-child, - table tr .th:first-child, - table .tr th:first-child, - table .tr .th:first-child { - border-left: none; } - /* line 77, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th.sort.sort:after, .tabular tr .th.sort.sort:after, .tabular .tr th.sort.sort:after, .tabular .tr .th.sort.sort:after, - table tr th.sort.sort:after, - table tr .th.sort.sort:after, - table .tr th.sort.sort:after, - table .tr .th.sort.sort:after { - color: #49dedb; - font-family: symbolsfont; - font-size: 8px; - content: "\ed"; - display: inline-block; - margin-left: 3px; } - /* line 85, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th.sort.sort.desc:after, .tabular tr .th.sort.sort.desc:after, .tabular .tr th.sort.sort.desc:after, .tabular .tr .th.sort.sort.desc:after, - table tr th.sort.sort.desc:after, - table tr .th.sort.sort.desc:after, - table .tr th.sort.sort.desc:after, - table .tr .th.sort.sort.desc:after { - content: "\ec"; } - /* line 89, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr th.sortable, .tabular tr .th.sortable, .tabular .tr th.sortable, .tabular .tr .th.sortable, - table tr th.sortable, - table tr .th.sortable, - table .tr th.sortable, - table .tr .th.sortable { - cursor: pointer; } - /* line 93, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr td, .tabular tr .td, .tabular .tr td, .tabular .tr .td, - table tr td, - table tr .td, - table .tr td, - table .tr .td { - border-bottom: 1px solid #e3e3e3; - min-width: 20px; - color: #333333; - padding: 3px 5px; - word-wrap: break-word; - vertical-align: top; } - /* line 100, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr td.numeric, .tabular tr .td.numeric, .tabular .tr td.numeric, .tabular .tr .td.numeric, - table tr td.numeric, - table tr .td.numeric, - table .tr td.numeric, - table .tr .td.numeric { - text-align: right; } - /* line 103, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr td.s-cell-type-value, .tabular tr .td.s-cell-type-value, .tabular .tr td.s-cell-type-value, .tabular .tr .td.s-cell-type-value, - table tr td.s-cell-type-value, - table tr .td.s-cell-type-value, - table .tr td.s-cell-type-value, - table .tr .td.s-cell-type-value { - text-align: right; } - /* line 105, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular tr td.s-cell-type-value .l-cell-contents, .tabular tr .td.s-cell-type-value .l-cell-contents, .tabular .tr td.s-cell-type-value .l-cell-contents, .tabular .tr .td.s-cell-type-value .l-cell-contents, - table tr td.s-cell-type-value .l-cell-contents, - table tr .td.s-cell-type-value .l-cell-contents, - table .tr td.s-cell-type-value .l-cell-contents, - table .tr .td.s-cell-type-value .l-cell-contents { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - padding-left: 5px; - padding-right: 5px; } - /* line 121, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.filterable tbody, .tabular.filterable .tbody, - table.filterable tbody, - table.filterable .tbody { - top: 44px; } - /* line 124, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.filterable input[type="text"], - table.filterable input[type="text"] { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - width: 100%; } - /* line 130, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.fixed-header, - table.fixed-header { - height: 100%; } - /* line 132, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.fixed-header thead, .tabular.fixed-header .thead, - .tabular.fixed-header tbody tr, .tabular.fixed-header .tbody .tr, - table.fixed-header thead, - table.fixed-header .thead, - table.fixed-header tbody tr, - table.fixed-header .tbody .tr { - display: table; - table-layout: fixed; } - /* line 137, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.fixed-header thead, .tabular.fixed-header .thead, - table.fixed-header thead, - table.fixed-header .thead { - width: calc(100% - 10px); } - /* line 139, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.fixed-header thead:before, .tabular.fixed-header .thead:before, - table.fixed-header thead:before, - table.fixed-header .thead:before { - content: ""; - display: block; - z-index: 0; - position: absolute; - width: 100%; - height: 22px; - background: rgba(255, 255, 255, 0.15); } - /* line 149, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.fixed-header tbody, .tabular.fixed-header .tbody, - table.fixed-header tbody, - table.fixed-header .tbody { - overflow: hidden; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - width: auto; - height: auto; - top: 22px; - display: block; - overflow-y: scroll; } - /* line 157, ../../../../general/res/sass/lists/_tabular.scss */ - .tabular.t-event-messages td, .tabular.t-event-messages .td, - table.t-event-messages td, - table.t-event-messages .td { - min-width: 150px; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 31, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot { - color: #666; - font-size: 0.7rem; - position: relative; - width: 100%; - height: 100%; - /****************************** Limits and Out-of-Bounds data */ } - /* line 38, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-axis-area { - position: absolute; } - /* line 41, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-axis-area.gl-plot-x { - top: auto; - right: 0; - bottom: 5px; - left: 60px; - height: 32px; - width: auto; - overflow: hidden; } - /* line 50, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-axis-area.gl-plot-y { - top: 25px; - right: auto; - bottom: 37px; - left: 0; - width: 60px; } - /* line 59, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-coords { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - background: black; - color: #b3b3b3; - padding: 2px 5px; - position: absolute; - top: 35px; - right: auto; - bottom: auto; - left: 70px; - z-index: 10; } - /* line 71, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-coords:empty { - display: none; } - /* line 76, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-display-area { - background-color: rgba(0, 0, 0, 0.05); - position: absolute; - top: 25px; - right: 0; - bottom: 37px; - left: 60px; - cursor: crosshair; - border: 1px solid rgba(102, 102, 102, 0.2); } - /* line 89, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-label, - .gl-plot .l-plot-label { - color: #999999; - position: absolute; - text-align: center; } - /* line 97, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-label.gl-plot-x-label, .gl-plot .gl-plot-label.l-plot-x-label, - .gl-plot .l-plot-label.gl-plot-x-label, - .gl-plot .l-plot-label.l-plot-x-label { - top: auto; - right: 0; - bottom: 0; - left: 0; - height: auto; } - /* line 106, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-label.gl-plot-y-label, .gl-plot .gl-plot-label.l-plot-y-label, - .gl-plot .l-plot-label.gl-plot-y-label, - .gl-plot .l-plot-label.l-plot-y-label { - -moz-transform-origin: 50% 0; - -ms-transform-origin: 50% 0; - -webkit-transform-origin: 50% 0; - transform-origin: 50% 0; - -moz-transform: translateX(-50%) rotate(-90deg); - -ms-transform: translateX(-50%) rotate(-90deg); - -webkit-transform: translateX(-50%) rotate(-90deg); - transform: translateX(-50%) rotate(-90deg); - display: inline-block; - margin-left: 5px; - left: 0; - top: 50%; - white-space: nowrap; } - /* line 120, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-y-options { - position: absolute; - top: 50%; - right: auto; - bottom: auto; - left: auto5px; - margin-top: -16px; - height: auto; - min-height: 32px; - width: 32px; } - /* line 134, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-hash { - position: absolute; - border: 0 rgba(0, 0, 0, 0.2) dashed; } - /* line 137, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-hash.hash-v { - border-right-width: 1px; - height: 100%; } - /* line 141, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-hash.hash-h { - border-bottom-width: 1px; - width: 100%; } - /* line 147, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .gl-plot-legend { - position: absolute; - top: 0; - right: 0; - bottom: auto; - left: 0; - height: 20px; - overflow-x: hidden; - overflow-y: auto; } - /* line 160, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-limit-bar, - .gl-plot .l-oob-data { - position: absolute; - left: 0; - right: 0; - width: auto; } - /* line 168, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-limit-bar { - height: auto; - z-index: 0; } - /* line 176, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-limit-bar.s-limit-yellow { - background: rgba(255, 170, 0, 0.2); } - /* line 177, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-limit-bar.s-limit-red { - background: rgba(255, 0, 0, 0.2); } - /* line 180, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-oob-data { - overflow: hidden; - position: absolute; - top: 0px; - right: 0px; - bottom: 0px; - left: 0px; - width: auto; - height: auto; - pointer-events: none; - height: 10px; - z-index: 1; } - /* line 188, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-oob-data.l-oob-data-up { - top: 0; - bottom: auto; - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); - background-size: 100%; - background-image: -moz-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); - background-image: -webkit-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); - background-image: linear-gradient(0deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); } - /* line 193, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot .l-oob-data.l-oob-data-dwn { - bottom: 0; - top: auto; - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); - background-size: 100%; - background-image: -moz-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); - background-image: -webkit-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); - background-image: linear-gradient(180deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); } - -/* line 203, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot-legend .plot-legend-item, -.gl-plot-legend .legend-item, -.legend .plot-legend-item, -.legend .legend-item { - display: inline-block; - margin-right: 10px; - margin-bottom: 3px; } - /* line 208, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot-legend .plot-legend-item span, - .gl-plot-legend .legend-item span, - .legend .plot-legend-item span, - .legend .legend-item span { - vertical-align: middle; } - /* line 211, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot-legend .plot-legend-item .plot-color-swatch, - .gl-plot-legend .plot-legend-item .color-swatch, - .gl-plot-legend .legend-item .plot-color-swatch, - .gl-plot-legend .legend-item .color-swatch, - .legend .plot-legend-item .plot-color-swatch, - .legend .plot-legend-item .color-swatch, - .legend .legend-item .plot-color-swatch, - .legend .legend-item .color-swatch { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - display: inline-block; - height: 8px; - width: 8px; } - -/* line 228, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot-legend .plot-legend-item { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - line-height: 1.5em; - padding: 0px 5px; } - /* line 234, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot-legend .plot-legend-item .plot-color-swatch { - border: 1px solid #fcfcfc; - height: 9px; - width: 9px; } - -/* line 242, ../../../../general/res/sass/plots/_plots-main.scss */ -.tick { - position: absolute; - border: 0 rgba(0, 0, 0, 0.2) solid; } - /* line 245, ../../../../general/res/sass/plots/_plots-main.scss */ - .tick.tick-x { - border-right-width: 1px; - height: 100%; } - -/* line 251, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot-tick, -.tick-label { - font-size: 0.7rem; - position: absolute; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; } - /* line 259, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot-tick.gl-plot-x-tick-label, .gl-plot-tick.tick-label-x, - .tick-label.gl-plot-x-tick-label, - .tick-label.tick-label-x { - right: auto; - bottom: auto; - left: auto; - height: auto; - width: 20%; - margin-left: -10%; - text-align: center; } - /* line 269, ../../../../general/res/sass/plots/_plots-main.scss */ - .gl-plot-tick.gl-plot-y-tick-label, .gl-plot-tick.tick-label-y, - .tick-label.gl-plot-y-tick-label, - .tick-label.tick-label-y { - top: auto; - height: 1em; - width: auto; - margin-bottom: -0.5em; - text-align: right; } - -/* line 281, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot-tick.gl-plot-x-tick-label { - top: 5px; } -/* line 284, ../../../../general/res/sass/plots/_plots-main.scss */ -.gl-plot-tick.gl-plot-y-tick-label { - right: 5px; - left: 5px; } - -/* line 291, ../../../../general/res/sass/plots/_plots-main.scss */ -.tick-label.tick-label-x { - top: 0; } -/* line 294, ../../../../general/res/sass/plots/_plots-main.scss */ -.tick-label.tick-label-y { - right: 0; - left: 0; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* Styles for the iframe EmbeddedPageController element */ -/* line 25, ../../../../general/res/sass/_iframe.scss */ -.l-iframe iframe { - display: block; - height: 100%; - width: 100%; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/******************************** BROWSE */ -/* line 27, ../../../../general/res/sass/_hide-non-functional.scss */ -.browse-mode .browse.top-bar { - display: none; } -/* line 32, ../../../../general/res/sass/_hide-non-functional.scss */ -.browse-mode .browse-area.holder { - top: 10px; } - -/* Styles for sub-dividing views generically */ -/* line 3, ../../../../general/res/sass/_views.scss */ -.l-view-section { - overflow: hidden; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - width: auto; - height: auto; - font-size: 0.8rem; } - /* line 6, ../../../../general/res/sass/_views.scss */ - .l-view-section h2 { - color: #fff; - margin-bottom: 5px; } - /* line 10, ../../../../general/res/sass/_views.scss */ - .l-view-section.fixed { - font-size: 0.8em; } - /* line 13, ../../../../general/res/sass/_views.scss */ - .l-view-section.scrolling { - overflow: auto; } - /* line 16, ../../../../general/res/sass/_views.scss */ - .l-view-section .controls, - .l-view-section label, - .l-view-section .inline-block { - display: inline-block; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/items/_item.scss */ -.items-holder { - overflow: hidden; - *zoom: 1; - overflow-y: auto; } - /* line 25, ../../../../general/res/sass/items/_item.scss */ - .items-holder .contents { - top: 0; } - /* line 29, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item { - background-color: #ddd; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #666; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; - box-sizing: border-box; - cursor: pointer; - float: left; - height: 200px; - width: 200px; - margin-bottom: 3px; - margin-right: 3px; - position: relative; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .items-holder .item.grid-item .icon { - color: #0099cc; } - @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 277, ../../../../general/res/sass/_mixins.scss */ - .items-holder .item.grid-item:not(.disabled):hover { - background: #d0d0d0; } - /* line 279, ../../../../general/res/sass/_mixins.scss */ - .items-holder .item.grid-item:not(.disabled):hover > .icon { - color: #33ccff; } } - /* line 45, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item:hover .item-main .item-type { - color: deepskyblue; } - /* line 47, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item:hover .item-main .item-type .l-icon-link { - color: #49dedb; } - /* line 51, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item:hover .item-main .item-open { - opacity: 1; } - /* line 55, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .contents { - top: 10px; - right: 10px; - bottom: 10px; - left: 10px; } - /* line 61, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .bar.top-bar { - bottom: auto; - color: #8c8c8c; - height: 20px; - line-height: 20px; - text-align: right; - z-index: 5; } - /* line 68, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .bar.top-bar .left, .items-holder .item.grid-item .bar.top-bar .right { - width: auto; } - /* line 70, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .bar.top-bar .left .icon, .items-holder .item.grid-item .bar.top-bar .right .icon { - margin-left: 3px; } - /* line 72, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .bar.top-bar .left .icon.l-icon-link, .items-holder .item.grid-item .bar.top-bar .right .icon.l-icon-link { - color: #49dedb; } - /* line 78, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .bar.bottom-bar { - top: auto; - line-height: 110%; } - /* line 83, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .item-main { - line-height: 160px; - z-index: 1; } - /* line 89, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .item-main .item-type { - overflow: false; - position: absolute; - top: 40px; - right: 40px; - bottom: 40px; - left: 40px; - width: auto; - height: auto; - text-align: center; - font-size: 96.9px; - line-height: 102px; - bottom: auto; - height: 102px; - top: 30px; } - /* line 100, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .item-main .item-type .l-icon-link { - color: #49dedb; - height: auto; - line-height: 100%; - position: absolute; - font-size: 0.3em; - left: 0px; - bottom: 10px; - z-index: 2; } - /* line 111, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .item-main .item-open { - -moz-transition-property: "opacity"; - -o-transition-property: "opacity"; - -webkit-transition-property: "opacity"; - transition-property: "opacity"; - -moz-transition-duration: 200ms; - -o-transition-duration: 200ms; - -webkit-transition-duration: 200ms; - transition-duration: 200ms; - -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; - opacity: 0; - color: #8c8c8c; - font-size: 3em; - left: auto; - width: 50px; - pointer-events: none; - text-align: right; } - /* line 121, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .title { - text-shadow: none; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - color: #666; } - /* line 126, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item .details { - text-shadow: none; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - color: #8c8c8c; - font-size: 0.8em; } - /* line 132, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item.selected { - background-color: #0099cc; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #fff; - display: inline-block; - -moz-user-select: -moz-none; - -ms-user-select: none; - -webkit-user-select: none; - user-select: none; - -moz-transition: background, 0.25s; - -o-transition: background, 0.25s; - -webkit-transition: background, 0.25s; - transition: background, 0.25s; - text-shadow: none; - color: #80dfff; } - /* line 272, ../../../../general/res/sass/_mixins.scss */ - .items-holder .item.grid-item.selected .icon { - color: #eee; } - /* line 137, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item.selected .item-type, .items-holder .item.grid-item.selected .top-bar .icon:not(.alert) { - color: #80dfff; } - /* line 138, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item.selected .item-main .item-open { - color: #80dfff; } - /* line 139, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item.selected .title { - color: white; } - /* line 141, ../../../../general/res/sass/items/_item.scss */ - .items-holder .item.grid-item.selected:hover .item-main .item-type { - color: white !important; } - -/***************************************************************************** - * 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. - *****************************************************************************/ -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 29, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item { - width: 100%; } - /* line 33, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item > .contents { - top: 0px; - right: 10px; - bottom: 0px; - left: 10px; } - /* line 37, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.top-bar { - bottom: 0 !important; - left: auto !important; - right: 20px !important; - width: 40px !important; - height: auto !important; - text-align: right; } - /* line 44, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.bottom-bar { - left: 40px; - right: 60px; } - /* line 52, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-type { - font-size: 30px; - right: auto; - bottom: auto; - left: 0; - line-height: 100%; - text-align: left; - width: 30px; } - /* line 61, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-type .l-icon-link { - bottom: 0; } - /* line 65, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-open { - display: block; - opacity: 1; - font-size: 1em; - width: auto; } } -@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 29, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item { - height: 50px; } - /* line 78, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.top-bar { - line-height: 50px !important; } - /* line 82, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.bottom-bar { - top: 7px; - bottom: auto; - height: 35px; } - /* line 87, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-type { - top: 10px; - bottom: auto; - height: 30px; } - /* line 90, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-open { - line-height: 50px; } } -@media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { - /* line 29, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item { - height: 66px; } - /* line 100, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.top-bar { - line-height: 66px !important; } - /* line 104, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .bar.bottom-bar { - top: 15px; - bottom: auto; - height: 35px; } - /* line 109, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-type { - top: 18px; - bottom: auto; - height: 30px; } - /* line 112, ../../../../general/res/sass/mobile/_item.scss */ - .items-holder .item.grid-item .item-main .item-open { - line-height: 66px; } } - -/********************************* TO BE MOVED */ -/***************************************************************************** - * 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. - *****************************************************************************/ -/* line 22, ../../../../general/res/sass/_autoflow.scss */ -.autoflow { - font-size: 0.75rem; } - /* line 32, ../../../../general/res/sass/_autoflow.scss */ - .autoflow:hover .l-autoflow-header .s-btn.change-column-width, .autoflow:hover .l-autoflow-header .change-column-width.s-menu { - -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: 50ms; - -o-transition-duration: 50ms; - -webkit-transition-duration: 50ms; - transition-duration: 50ms; - -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; - opacity: 1; } - /* line 40, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-header { - bottom: auto; - height: 22px; - line-height: 22px; - min-width: 225px; } - /* line 45, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-header span { - vertical-align: middle; } - /* line 48, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-header .s-btn.change-column-width, .autoflow .l-autoflow-header .change-column-width.s-menu { - -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: 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; - opacity: 0; } - /* line 52, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-header .l-filter { - margin-left: 5px; } - /* line 54, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-header .l-filter input.t-filter-input { - width: 100px; } - /* line 60, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items { - overflow-x: scroll; - overflow-y: hidden; - top: 32px; - white-space: nowrap; } - /* line 66, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-left: 1px solid rgba(102, 102, 102, 0.2); - display: inline-block; - padding-left: 5px; - padding-right: 5px; - vertical-align: top; - width: 225px; } - /* line 76, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-bottom: 1px solid rgba(255, 255, 255, 0.05); - display: block; - height: 15px; - line-height: 15px; - margin-bottom: 1px; - margin-top: 1px; - position: relative; } - /* line 85, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:first-child { - border-top: none; } - /* line 88, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:hover { - background: rgba(255, 255, 255, 0.1); } - /* line 93, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.s-stale .l-autoflow-item.l { - color: rgba(51, 51, 51, 0.3) !important; - font-style: italic; } - /* line 94, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.s-stale .l-autoflow-item.r { - color: rgba(51, 51, 51, 0.5) !important; - font-style: italic; } - /* line 97, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:not(.s-stale) .l-autoflow-item.r { - color: gray; } - /* line 101, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.first-in-group { - border-top: 1px solid rgba(153, 153, 153, 0.2); } - /* line 104, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item { - display: block; } - /* line 106, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item.l { - float: none; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: auto; } - /* line 113, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item.r { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - float: right; - margin-left: 5px; - padding-left: 5px; - padding-right: 5px; - text-align: right; } - /* line 124, ../../../../general/res/sass/_autoflow.scss */ - .autoflow .l-autoflow-items .l-autoflow-col:first-child { - border-left: none; - padding-left: 0; } - -/* line 1, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-main-wrapper, -.l-image-main, -.l-image-main-controlbar, -.l-image-thumbs-wrapper { - overflow: false; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - width: auto; - height: auto; } - -/*************************************** MAIN LAYOUT */ -/* line 9, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-main-wrapper { - min-height: 100px; - min-width: 150px; } - /* line 16, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-wrapper .l-image-main { - background-color: rgba(0, 0, 0, 0.05); - bottom: 30px; } - /* line 20, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-wrapper .l-image-main-controlbar { - top: auto; - height: 25px; } - -/* line 26, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-thumbs-wrapper { - top: auto; - height: 168px; } - -/* line 32, ../../../../general/res/sass/features/_imagery.scss */ -.l-date, -.l-time, -.l-timezone { - display: inline-block; } - -/*************************************** MAIN IMAGE */ -/* line 40, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-main, -.l-image-thumb-item .l-thumb { - background-size: contain; - background-position: center; - background-repeat: no-repeat; } - -/* line 51, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-main-controlbar { - font-size: 0.8em; - line-height: 25px; } - /* line 55, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .left, .l-image-main-controlbar .right { - direction: rtl; - overflow: hidden; } - /* line 59, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .left { - text-align: left; } - /* line 63, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .right { - z-index: 2; } - /* line 67, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .l-date, - .l-image-main-controlbar .l-time { - color: #333333; } - /* line 71, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .l-mag { - direction: ltr; - display: inline-block; } - /* line 75, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .l-mag:before { - content: "\000049"; } - /* line 79, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .s-mag { - color: #999999; } - /* line 82, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-main-controlbar .l-btn.show-thumbs { - display: none; } - -/* line 87, ../../../../general/res/sass/features/_imagery.scss */ -.s-image-main { - border: 1px solid transparent; } - /* line 89, ../../../../general/res/sass/features/_imagery.scss */ - .s-image-main.paused { - border-color: #ff9900; } - -/*************************************** THUMBS */ -/* line 96, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-thumbs-wrapper { - direction: rtl; - overflow-x: auto; - overflow-y: hidden; - padding-bottom: 5px; - white-space: nowrap; - z-index: 70; } - -/* line 106, ../../../../general/res/sass/features/_imagery.scss */ -.l-image-thumb-item { - -moz-transition: background-color 0.25s; - -o-transition: background-color 0.25s; - -webkit-transition: background-color 0.25s; - transition: background-color 0.25s; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 1px; - position: relative; - cursor: pointer; - direction: ltr; - display: inline-block; - font-size: 0.8em; - margin-left: 3px; - text-align: left; - width: 122px; - white-space: normal; } - /* line 111, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item .l-thumb, - .l-image-thumb-item .l-date, - .l-image-thumb-item .l-time { - display: inline-block; } - /* line 116, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item .l-date, - .l-image-thumb-item .l-time { - padding: 2px 3px; } - /* line 128, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item:hover { - background: rgba(255, 255, 255, 0.2); } - /* line 130, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item:hover .l-date, - .l-image-thumb-item:hover .l-time { - color: #fff; } - /* line 135, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item.selected { - background: #0099cc; } - /* line 137, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item.selected .l-date, - .l-image-thumb-item.selected .l-time { - color: #fff; } - /* line 142, ../../../../general/res/sass/features/_imagery.scss */ - .l-image-thumb-item .l-thumb { - background-color: rgba(255, 255, 255, 0.1); - height: 120px; - width: 120px; - margin-top: 0; } - -/*************************************** WHEN IN FRAME */ -/* line 152, ../../../../general/res/sass/features/_imagery.scss */ -.frame .t-imagery .l-image-main-wrapper { - bottom: 0; } - /* line 154, ../../../../general/res/sass/features/_imagery.scss */ - .frame .t-imagery .l-image-main-wrapper .l-image-main-controlbar { - font-size: 0.7em; } -/* line 163, ../../../../general/res/sass/features/_imagery.scss */ -.frame .t-imagery .l-image-thumbs-wrapper { - display: none; } - -/* line 5, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display:hover .l-btn.control { - opacity: 1; } -/* line 9, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display .l-elem-wrapper { - position: relative; } -/* line 12, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display .l-elem { - display: inline-block; } -/* line 17, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display.l-timer .l-elem.l-value { - -moz-transition-property: left; - -o-transition-property: left; - -webkit-transition-property: left; - transition-property: left; - -moz-transition-duration: 200ms; - -o-transition-duration: 200ms; - -webkit-transition-duration: 200ms; - transition-duration: 200ms; - -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; - position: absolute; - left: 0; - z-index: 1; } - /* line 22, ../../../../general/res/sass/features/_time-display.scss */ - .l-time-display.l-timer .l-elem.l-value .ui-symbol.direction { - font-size: 0.8em; } -/* line 26, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display.l-timer:hover .l-elem.l-value { - left: 20px; } -/* line 33, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display .l-elem .value.active, .l-time-display .l-elem.value.active { - color: #fff; } -/* line 38, ../../../../general/res/sass/features/_time-display.scss */ -.l-time-display .l-btn.control { - -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: 200ms; - -o-transition-duration: 200ms; - -webkit-transition-duration: 200ms; - transition-duration: 200ms; - -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; - opacity: 0; - font-size: 0.65em; - vertical-align: top; } - -/* line 3, ../sass/_controls.scss */ -.s-btn.major .title-label, .major.s-menu .title-label { - text-transform: uppercase; } +/* +Error: Undefined variable: "$sliderColorKnob". + on line 316 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss + from line 39 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss + from line 36 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss + +Backtrace: +/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss:316 +/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss:39 +/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss:36 +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb:49:in `_perform' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb:50:in `perform' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:394:in `visit_prop' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block (2 levels) in visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `map' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block in visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:428:in `visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block (2 levels) in visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `map' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block in visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:428:in `visit_rule' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block (2 levels) in visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `map' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block in visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `block in with_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `with_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:322:in `visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block (2 levels) in visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `map' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block in visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `block in with_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `with_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:322:in `visit_import' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `block in visit_children' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `map' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `visit_children' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:167:in `block in visit_children' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:166:in `visit_children' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `block in visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:186:in `visit_root' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:157:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:8:in `visit' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb:36:in `css_tree' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb:20:in `render' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/engine.rb:268:in `render' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:492:in `update_stylesheet' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:215:in `block in update_stylesheets' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:209:in `each' +/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:209:in `update_stylesheets' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/sass_compiler.rb:40:in `compile!' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/update_project.rb:49:in `perform' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/base.rb:18:in `execute' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/project_base.rb:19:in `execute' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:43:in `perform!' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:15:in `run!' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:30:in `block in ' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:44:in `call' +/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:44:in `' +/usr/bin/compass:23:in `load' +/usr/bin/compass:23:in `
' +*/ +body:before { + white-space: pre; + font-family: monospace; + content: "Error: Undefined variable: \"$sliderColorKnob\".\A on line 316 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss\A from line 39 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss\A from line 36 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss"; } From 73e959f95a8257ca6eb4569f4b5b3311543d5269 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Thu, 24 Sep 2015 09:44:24 -0700 Subject: [PATCH 088/226] Incremental commit of developer's guide --- docs/src/guide/index.md | 2288 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 2286 insertions(+), 2 deletions(-) diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index c575439d48..5c30ddb8e9 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -1,3 +1,2287 @@ -# Developer Guide +# Open MCT Web Developer Guide +Victor Woeltjen + +[victor.woeltjen@nasa.gov](mailto:victor.woeltjen@nasa.gov) + +September 23, 2015 +Document Version 1.1 + +Date | Version | Summary of Changes | Author +------------------- | --------- | ----------------------- | --------------- +April 29, 2015 | 0 | Initial Draft | Victor Woeltjen +May 12, 2015 | 0.1 | | Victor Woeltjen +June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen +September 23, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry + +# Contents +1. [Introduction](#Introduction) + 1. [What is Open MCT Web?](#What-is-Open-MCT-Web-) + 2. [Client-Server Relationship](#Client-Server-Relationship) + +# Introduction +The purpose of this guide is to familiarize software developers with the Open +MCT Web platform. + +## What is Open MCT Web? +Open MCT Web is a platform for building user interface and display tools, +developed at the NASA Ames Research Center in collaboration with teams at the +Jet Propulsion Laboratory. It is written in HTML5, CSS3, and JavaScript, using +[AngularJS](h​ttp://www.angularjs.org) as a framework. Its intended use is to +create single­page web applications which integrate data and behavior from a +variety of sources and domains. + +Open MCT Web has been developed to support the remote operation of space +vehicles, so some of its features are specific to that task; however, it is +flexible enough to be adapted to a variety of other application domains where a +display tool oriented toward browsing, composing, and visualizing would be +useful. + +Open MCT Web provides: + +* A common user interface paradigm which can be applied to a variety of domains +and tasks. Open MCT Web is more than a widget toolkit - it provides a standard +tree­on­the­left, view­on­the­right browsing environment which you customize by +adding new browsable object types, visualizations, and back­end adapters. +* A plugin framework and an extensible API for introducing new application +features of a variety of types. +* A set of general-purpose object types and visualizations, as well as some +visualizations and infrastructure specific to telemetry display. + +## Client-Server Relationship +Open MCT Web is client software - it runs entirely in the user’s web browser. As +such, it is largely “server agnostic”; any web server capable of serving files +from paths is capable of providing Open MCT Web. + +While Open MCT Web can be configured to run as a standalone client, this is +rarely very useful. Instead, it is intended to be used as a display and +interaction layer for information obtained from a variety of back­end services. +Doing so requires authoring or utilizing adapter plugins which allow Open MCT +Web to interact with these services. + +Typically, the pattern here is to provide a known interface that Open MCT Web +can utilize, and implement it such that it interacts with whatever back­end +provides the relevant information. Examples of back­ends that can be utilized in +this fashion include databases for the persistence of user­created objects, or +sources of telemetry data. + +See the [Architecture Guide](../architecture/index.md#Overview) for more details +on the client-server relationship. + +## Developing with Open MCT Web +Building applications with Open MCT Web typically means authoring and utilizing +a set of plugins which provide application­specific details about how Open MCT +Web should behave. + +### Technologies + +Open MCT Web sources are written in JavaScript, with a number of configuration +files written in JSON. Displayable components are written in HTML5 and CSS3. +Open MCT Web is built using [AngularJS](h​ttp://www.angularjs.org) ​from Google. A +good understanding of Angular is recommended for developers working with Open +MCT Web. + +### Forking +Open MCT Web does not currently have a single stand­alone artifact that can be +used as a library. Instead, the recommended approach for creating a new +application is to start by forking/branching Open MCT Web, and then adding new +features from there. Put another way, Open MCT Web’s source structure is built +to serve as a template for specific applications. + +Forking in this manner should not require that you edit Open MCT Web’s sources. +The preferred approach is to create a new directory (peer to ​`index.html`)​for +the new application, then add new bundles (as described in the Framework +chapter) within that directory. + +To initially clone the Open MCT Web repository: +`git clone ­b open­master` + +To create a fork to begin working on a new application using Open MCT Web: + + cd + git checkout open­master + git checkout ­b + +As a convention used internally, applications built using Open MCT Web have +master branch names with an identifying prefix. For instance, if building an +application called “Foo”, the last statement above would look like: + + git checkout ­b foo­master + +This convention is not enforced or understood by Open MCT Web in any way; it is +mentioned here as a more general recommendation. + +# Overview + +Open MCT Web is implemented as a framework component which manages a set of +other components. These components, called “bundles”, act as containers to group +sets of related functionality; individual units of functionality are expressed +within these bundles as "extensions." + +Extensions declare dependencies on other extensions (either individually or +categorically), and the framework provides actual extension instances at +run­time to satisfy these declared dependency. This dependency injection +approach allows software components which have been authored separately (e.g. as +plugins) but to collaborate at run­time. + +Open MCT Web’s framework layer is implemented on top of AngularJS’s [dependency +injection mechanism](https://docs.angularjs.org/guide/di)​ and is modelled after +[OSGi](hhttp://www.osgi.org/)​ and its [Declarative Services component model] +(h​ttp://wiki.osgi.org/wiki/Declarative_Services)​. In particular, this is where +the term "bundle" comes from. + +## Framework Overview + +The framework’s role in the application is to manage connections between +bundles. All application­specific behavior is provided by individual bundles, or +as the result of their collaboration. + +ADD LINK TO DIAGRAM HERE + +### Tiers +While all bundles in a running Open MCT Web instance are effectively peers, it +is useful to think of them as a tiered architecture, where each tier adds more +specificity to the application. + +ADD LINK TO DIAGRAM HERE + +* __Framework__ : This tier is responsible for wiring together the set of +configured components (called bundles) together to instantiate the running +application. It is responsible for mediating between AngularJS (in particular, +its dependency injection mechanism) and RequireJS (to load scripts at run­time.) +It additionally interprets bundle definitions (see explanation below, as well as +further detail in the Framework chapter.) At this tier, we are at our most +general: We know only that we are a plugin­based application.
 +* __Platform__: Components in the Platform tier describe both the general user +interface and corresponding developer­facing interfaces of Open MCT Web. This +tier provides the general infrastructure for applications. It is less general +than the framework tier, insofar as this tier introduces a specific user +interface paradigm, but it is still non-specific as to what useful features +will be provided. Although they can be removed or replaced easily, bundles +provided by the Platform tier generally should not be thought of as optional.
 +* __Application__: The application tier consists of components which utilize the +infrastructure provided by the Platform to provide functionality which will (or +could) be useful to specific applications built using Open MCT Web. These +include adapters to specific persistence back­ends (such as ElasticSearch or +CouchDB) as well as bundles which describe more user­facing features (such as +Plot views for visualizing time series data, or Layout objects for +display­building.) Bundles from this tier can be added or removed without +compromising basic application functionality, with the caveat that at least one +persistence adapter needs to be present. +* __Plugins__: Conceptually, this tier is not so different from the application +tier; it consists of bundles describing new features, back­end adapters, that +are specific to the application being built on Open MCT Web. It is described as +a separate tier here because it has one important distinction from the +application tier: It consists of bundles that are not included with the platform +(either authored anew for the specific application, or obtained from elsewhere.) + +Note that bundles in any tier can go off and consult back­end services. In +practice, this responsibility is handled at the Application and/or Plugin tiers; +Open MCT Web is built to be server­agnostic, so any back­end is considered an +application­specific detail. + +## Platform Overview + +The "tiered" architecture described in the preceding text describes a way of +thinking of and categorizing software components of a Open MCT Web application, +as well as the framework layer’s role in mediating between these components. +Once the framework layer has wired these software components together, however, +the application’s logical architecture emerges. + +### Logical Architecture +INSERT DIAGRAM HERE + +* __Templates__​: HTML templates written in Angular’s template syntax; see  +the [Angular documentation on templates](https://docs.angularjs.org/guide/templates)​.  +These describe the page as actually seen by the user. Conceptually, stylesheets  +(controlling the look­and­feel of the rendered templates) belong in this  +grouping as well.  +* __Presentation__: ​Responsible for providing information to be displayed in  +templates, and managing interactions with the information model. Provides the  +logic and behavior of the user interface itself.  +* __Information model__: ​Provides a common (within Open MCT Web) set of interfaces  +for dealing with “things” ­ domain objects ­ within the system. User­facing  +concerns in a Open MCT Web application are expressed as domain objects; examples  +include folders (used to organize other domain objects), layouts (used to build  +displays), or telemetry points (used as handles for streams of remote  +measurements.) These domain objects expose a common set of interfaces to allow  +reusable user interfaces to be built in the presentation and template tiers; the  +specifics of these behaviors are then mapped to interactions with underlying  +services.  +* __Services__: ​A set of interfaces for dealing with back­end services. +* __Back­end__​: External to the Open MCT Web client; the underlying persistence  +stores, telemetry streams, and so forth which the Open MCT Web client is being  +used to interact with. + +### Web Services + +As mentioned in the Introduction, Open MCT Web is a platform single­page  +applications which runs entirely in the browser. Most applications will want to  +additionally interact with server­side resources, to (for example) read  +telemetry data or store user­created objects. This interaction is handled by  +individual bundles using APIs which are supported in browser (such as  +`XMLHttpRequest`​, typically wrapped by Angular’s '`$http​`.) + +INSERT DIAGRAM HERE + +This architectural approach ensures a loose coupling between applications built  +using Open MCT Web and the backends which support them.  +  +### Glossary +  +Certain terms are used throughout Open MCT Web with consistent meanings or  +conventions. Other developer documentation, particularly in­line documentation,  +may presume an understanding of these terms. + +* __bundle__​: A bundle is a removable, reusable grouping of software elements.  +The application is composed of bundles. Plug­ins are bundles. +* __capability__​: A JavaScript object which exposes dynamic behavior or  +non­persistent state associated with a domain object. +* __category__​: A machine­readable identifier for a group that something may  +belong to. +* __composition​__: In the context of a domain object, this refers to the set of +other domain objects that compose or are contained by that object. A domain  +object's composition is the set of domain objects that should appear immediately + beneath it in a tree hierarchy. A domain object's composition is described in  +its model as an array of identifiers; its composition capability provides a  +means to retrieve the actual domain object instances associated with these  +identifiers asynchronously.  +* __description__​: When used as an object property, this refers to the human­ +readable description of a thing; usually a single sentence or short paragraph.  +(Most often used in the context of extensions, domain object models, or other  +similar application­specific objects.)  +* __domain object​__: A meaningful object to the user; a distinct thing in the  +work support by Open MCT Web. Anything that appears in the left­hand tree is a  +domain object.  +* __extension​__: An extension is a unit of functionality exposed to the platform  +in a declarative fashion by a bundle. The term “extension category” is used to  +distinguish types of extensions from specific extension instances.  +* __id__​: A string which uniquely identifies a domain object.  +* __key__​: When used as an object property, this refers to the machine­readable  +identifier for a specific thing in a set of things. (Most often used in the  +context of extensions or other similar application­specific object sets.) This  +term is chosen to avoid attaching ambiguous meanings to “id”.  +* __model__​: The persistent state associated with a domain object. A domain object's  +model is a JavaScript object which can be converted to JSON without losing  +information (that is, it contains no methods.)  +* __name__​: When used as an object property, this refers to the human­readable name  +for a thing. (Most often used in the context of extensions, domain object  +models, or other similar application­specific objects.)  +* __navigation__​: Refers to the current state of the application with respect to the  +user's expressed interest in a specific domain object; e.g. when a user clicks  +on a domain object in the tree, they are ​navigating​ to it, and it is thereafter  +considered the ​navigated object (until the user makes another such choice.) This  +term is used to distinguish navigation from selection, which occurs in an  +editing context.  +* __space__​: A machine­readable name used to identify a persistence store.  +Interactions with persistence with generally involve a space parameter in some  +form, to distinguish multiple persistence stores from one another (for cases  +where there are multiple valid persistence locations available.)  +* __source__​: A machine­readable name used to identify a source of telemetry data.  +Similar to "space", this allows multiple telemetry sources to operate  +side­by­side without conflicting.  + +# Framework +   +Open MCT Web is built on the [AngularJS framework](​http://www.angularjs.org​). A  +good understanding of that framework is recommended.  + +Open MCT Web adds an extra layer on top of AngularJS to (a) generalize its  +dependency injection mechanism slightly, particularly to handle many­to­one  +relationships; and (b) handle script loading. Combined, these features become a  +plugin mechanism.  +   +This framework layer operates on two key concepts: + +* __Bundle:__ ​A bundle is a collection of related functionality that can be added to  +the application as a group. More concretely, a bundle is a directory containing  +a JSON file declaring its contents, as well as JavaScript sources, HTML  +templates, and other resources used to support that functionality. (The term  +bundle is borrowed from [OSGi](http://www.osgi.org/)​ ­ which has also inspired  +many of the concepts used in the framework layer. A familiarity with OSGi,  +particularly Declarative Services, may be useful when working with Open MCT  +Web.) +* __Extension:__ ​An extension is an individual unit of functionality. Extensions are  +collected together in bundles, and may interact with other extensions.  + +The framework layer, loaded and initiated from ​`index.html`​, is the main point of  +entry for an application built on Open MCT Web. It is responsible for wiring  +together the application at run time (much of this responsibility is actually  +delegated to Angular); at a high­level, the framework does this by proceeding  +through four stages: + +1. __Loading definitions:__​ JSON declarations are loaded for all bundles which will  +constitute the application, and wrapped in a useful API for subsequent stages.  +2. __Resolving extensions:__​ Any scripts which provide implementations for  +extensions exposed by bundles are loaded, using Require.  +3. __Registering extensions__​ Resolved extensions are registered with Angular, such  +that they can be used by the application at run­time. This stage includes both  +registration of Angular built­ins (directives, controllers, routes, constants,  +and services) as well as registration of non­Angular extensions.  +4. __Bootstrapping__​ The Angular application is bootstrapped; at that point,  +Angular takes over and populates the body of the page using the extensions that  +have been registered.  + +UP TO HERE + +## Bundles + +The basic configurable unit of Open MCT Web is the bundle. This term has been used a  +bit already; now we’ll get to a more formal definition.  + +A bundle is a directory which contains:  +  + ● A bundle definition; a file named ​bundle.json​.  + ● Subdirectories for sources, resources, and tests.  + ● Optionally, a ​README.md​ Markdown file describing its contents (this is not used by  + Open MCT Web in any way, but it’s a helpful convention to follow.)  +  + The bundle definition is the main point of entry for the bundle. The framework looks at  +this to determine which components need to be loaded and how they interact.  + A plugin in Open MCT Web is a bundle. The platform itself is also decomposed into  +bundles, each of which provides some category of functionality. The difference between a  +“bundle” and a “plugin” is purely a matter of the intended use; a plugin is just a bundle that is  +meant to be easily added or removed. When developing, it is typically more useful to think in  +terms of bundles.  +  +   +Configuring Active Bundles +  + To decide ​which​ bundles should be loaded, the framework loads a file named  +bundles.json​ (peer to the index.html file which serves the application) to determine which  +bundles should be loaded. This file should contain a single JSON array of strings, where each is  +the path to a bundle. These paths should not include ​bundle.json​ (this is implicit) or a trailing  +slash.  + For instance, if bundles.json contained:  +   + [  + "example/builtins",  + "example/extensions"  + ]  +   + ...then the Open MCT Web framework would look for bundle definitions at  +example/builtins/bundle.json​ and ​example/extensions/bundle.json​, relative  +to the path of ​index.html​. No other bundles would be loaded.  +  + + + 14  +Bundle Definition +  + A bundle definition (the ​bundle.json​ file located within a bundle) contains a  +description of the bundle itself, as well as the information exposed by the bundle.  +  + This definition is expressed as a single JSON object with the following properties (all of  +which are optional, falling back to reasonable defaults):  +  + ● key​: A machine­readable name for the bundle. (Currently used only in logging.)  + ● name​: A human­readable name for the bundle. (Also only used in logging.)  + ● sources​: Names a directory in which source scripts (which will implement extensions)  + are located. Defaults to “src”  + ● resources​: Names a directory in which resource files (such as HTML templates,  + images, CS files, and other non­JavaScript files needed by this bundle) are located.  + Defaults to “res”   + ● libraries​: Names a directory in which third­party libraries are located. Defaults to “lib”  + ● configuration​: A bundle’s configuration object, which should be formatted as would  + be passed to require.config (see RequireJS documentation at  + http://requirejs.org/docs/api.html​); note that only paths and shim have been tested.  + ● extensions​: An object containing key­value pairs, where keys are extension  + categories, and values are extension definitions. See the section on Extensions for more  + information.   +  + For example, the bundle definition for ​example/policy​ looks like:  +  +{  +    "name": "Example Policy",  +    "description": "Provides an example of using policies.",  +    "sources": "src",  +    "extensions": {  +        "policies": [  +            {  +                "implementation": "ExamplePolicy.js",  +                "category": "action"  +            }  +        ]  +    }  +}  +  + + + 15  +Bundle Directory Structure +  + In addition to the directories defined in the bundle definition, a bundle will typically  +contain other directories not used at run­time. Additionally, some useful development scripts  +(such as the command line build and the test suite) expect this directory structure to be in use,  +and may ignore options chosen by b​ undle.json​. It is recommended that the directory  +structure described below be used for new bundles.  +  + ● src​: Contains JavaScript sources for this bundle. May contain additional subdirectories  + to organize these sources; typically, these subdirectories are named to correspond to the  + extension categories they contain and/or support, but this is only a convention.  + ● res​: Contains other files needed by this bundle, such as HTML templates. May contain  + additional subdirectories to organize these sources.  + ● lib​: Contains JavaScript sources from third­party libraries. These are separated from  + bundle sources in order to ignore them during code style checking from the command  + line build.  + ● test​: Contains JavaScript sources implementing Jasmine (http://jasmine.github.io/)  + tests, as well as a file named ​suite.json​ describing which files to test. Should have  + the same folder structure as the src directory; see the section on automated testing for  + more information.  +  + For example, the directory structure for bundle ​platform/commonUI/about ​looks  +like:  +   +  +  + + + 16  +Extensions +  + While bundles provide groupings of related behaviors, the individual units of behavior  +are called extensions.  + Extensions belong to categories; an extension category is the machine­readable  +identifier used to identify groups of extensions. In the ​extensions​ property of a bundle  +definition, the keys are extension categories and the values are arrays of extension definitions.  +  +General Extensions +  + Extensions are intended as a general­purpose mechanism for adding new types of  +functionality to Open MCT Web.  + An extension category is registered with Angular under the name of the extension, plus a  +suffix of two square brackets; so, an Angular service (or, generally, any other extension) can  +access the full set of registered extensions, from all bundles, by including this string (e.g.  +types[]​ to get all type definitions) in a dependency declaration.  + As a convention, extension categories are given single­word, plural nouns for names  +within Open MCT Web (e.g. ​types​.) This convention is not enforced by the platform in any  +way. For extension categories introduced by external plugins, it is recommended to prefix the  +extension category with a vendor identifier (or similar) followed by a dot, to avoid collisions.  +  +Extension Definitions +  + The properties used in extension definitions are typically unique to each category of  +extension; a few properties have standard interpretations by the platform.  +  + ● implementation​: Identifies a JavaScript source file (in the sources folder) which  + implements this extension. This JavaScript file is expected to contain an AMD module  + (see ​http://requirejs.org/docs/whyamd.html#amd​) which gives as its result a single  + constructor function.  + ● depends​: An array of dependencies needed by this extension; these will be passed on  + to Angular’s dependency injector, ​https://docs.angularjs.org/guide/di​. By default, this is  + treated as an empty array. Note that ​depends​ does not make sense without  + implementation​ (since these dependencies will be passed to the implementation  + when it is instantiated.)  + ● priority​: A number or string indicating the priority order (see below) of this extension  + instance. Before an extension category is registered with AngularJS, the extensions of  + this category from all bundles will be concatenated into a single array, and then sorted  + by priority.  +  + 17  + Extensions do not need to have an implementation. If no implementation is provided,  +consumers of the extension category will receive the extension definition as a plain JavaScript  +object. Otherwise, they will receive the partialized (see below) constructor for that  +implementation, which will additionally have all properties from the extension definition attached.  + +Partial Construction +  + In general, extensions are intended to be implemented as constructor functions, which  +will be used elsewhere to instantiate new objects of that type. However, the Angular­supported  +method for dependency injection is (effectively) constructor­style injection; so, both declared  +dependencies and run­time arguments are competing for space in a constructor’s arguments.  + To resolve this, the Open MCT Web framework registers extension instances in a  +partially constructed​ form. That is, the constructor exposed by the extension’s implementation is  +effectively decomposed into two calls; the first takes the dependencies, and returns the  +constructor in its second form, which takes the remaining arguments.  + This means that, when writing implementations, the constructor function should be  +written to include all declared dependencies, followed by all run­time arguments. When using  +extensions, only the run­time arguments need to be provided.  +  +Priority +  + Within each extension category, registration occurs in priority order. An extension's  +priority may be specified as a ​priority​ property in its extension definition; this may be a  +number, or a symbolic string. Extensions are registered in reverse order (highest­priority first),  +and symbolic strings are mapped to the numeric values as follows:  +  + ● fallback​: Negative infinity. Used for extensions that are not intended for use (that is,  + they are meant to be overridden) but are present as an option of last resort.  + ● default​: ­100. Used for extensions that are expected to be overridden, but need a  + useful default.  + ● none​: 0. Also used if no priority is specified, or if an unknown or malformed priority is  + specified.  + ● optional​: 100. Used for extensions that are meant to be used, but may be overridden.  + ● preferred​: 1000. Used for extensions that are specifically intended to be used, but still  + may be overridden in principle.  + ● mandatory​: Positive infinity. Used when an extension should definitely not be  + overridden.  +  + These symbolic names are chosen to support usage where many extensions may satisfy  +a given need, but only one may be used; in this case, as a convention it should be the  +lowest­ordered (highest­priority) extensions available. In other cases, a full set (or multi­element  + 18  +subset) of extensions may be desired, with a specific ordering; in these cases, it is preferable to  +specify priority numerically when declaring extensions, and to understand that extensions will be  +sorted according to these conventions when using them.  +   +Angular Built-ins +  + Several entities supported Angular are expressed and managed as extensions in Open  +MCT Web. Specifically, these extension categories are ​directives​, ​controllers​,  +services​, ​constants​, ​runs​, and ​routes​.  +  +Directives +  + New directives (see ​https://docs.angularjs.org/guide/directive​) may be registered as  +extensions of the ​directives​ category. Implementations of directives in this category should  +take only dependencies as arguments, and should return a directive definition object.   + The directive’s name should be provided as a ​key​ property of its extension definition, in  +camel­case format.  +  +Controllers +  + New controllers (see ​https://docs.angularjs.org/guide/controller​) may be registered as  +extensions of the ​controllers​ category. The implementation is registered directly as the  +controller; its only constructor arguments are its declared dependencies.  + The directive’s identifier should be provided as a ​key​ property of its extension definition.  +   +  +Services +  + New services (see ​https://docs.angularjs.org/guide/services​) may be registered as  +extensions of the ​services​ category. The implementation is registered via a service call  +(​https://docs.angularjs.org/api/auto/service/$provide#service​), so it will be instantiated with the  +new​ operator.  +  +  + +Constants +  + Constant values may be registered as extensions of the ​constants​ category; see  +https://docs.angularjs.org/api/ng/type/angular.Module#constant​. These extensions have no  + 19  +implementation; instead, they should contain a property ​key​, which is the name under which the  +constant will be registered, and a property ​value​, which is the constant value that will be  +registered.  +  +  +Runs +  + In some cases, you want to register code to run as soon as the application starts; these  +can be registered as extensions of the ​runs​ category; see  +https://docs.angularjs.org/api/ng/type/angular.Module#run​. Implementations registered in this  +category will be invoked (with their declared dependencies) when the Open MCT Web  +application first starts. (Note that, in this case, the implementation is better thought of as just a  +function, as opposed to a constructor function.)  +  +  +Routes +  + Extensions of category ​routes​ will be registered with Angular’s route provider,  +https://docs.angularjs.org/api/ngRoute/provider/$routeProvider​. Extensions of this category have  +no implementations, and need only two properties in their definition:  +  + ● when​: The value that will be passed as the path argument to ​$routeProvider.when​;  + specifically, the string that will appear in the trailing part of the URL corresponding to this  + route. This property may be omitted, in which case this extension instance will be treated  + as the default route.  + ● templateUrl​: A path to the template to render for this route. Specified as a path  + relative to the bundle’s resource directory (​res​ by default.)  +  +  + + + 20  +Composite Services +  + A special category of extensions recognized by the framework are ​components​; these  +are parts of services intended to be fit together in a common pattern.  +  +   +  + Components all implement the same interface, which is the interface expected for  +services of the type that they create. Components fall into three types:  +  + ● provider​: Provides an actual implementation of the service in question.  + ● aggregator​: Makes many implementations of the service in question appear as one.  + ● decorator​: Modifies the inputs or outputs of another implementation of the service.  +  + When the framework layer encounters components, it assembles them into single  +service instances that can be referred to elsewhere as single dependencies. All providers are  +instantiated, and passed to the first available aggregator; decorators are then layered on in  +priority order to create the final form of the service.  + A component should include the following properties in its extension definition:  +  + ● provides​: The symbolic identifier for the service that will be composed. The  + fully­composed service will be registered with Angular under this name.  + ● type​: One of ​provider​, ​aggregator​, or ​decorator​ (as above)  +  + In addition to any declared dependencies, aggregators and decorators both receive one  +more argument (immediately following declared dependencies) that is provided by the  +framework. For an aggregator, this will be an array of all providers of the same service (that is,  +with matching ​provides​ properties); for a decorator, this will be whichever provider, decorator,  +or aggregator is next in the sequence of decorators.  + Services exposed by the Open MCT Web platform are often declared as composite  +services, as this form is open for a variety of common modifications.  + + 21  +Core API +  + Most of Open MCT Web’s relevant API is provided and/or mediated by the framework;  +that is, much of developing for Open MCT Web is a matter of adding extensions which access  +other parts of the platform by means of dependency injection.  + The core bundle (​platform/core​) introduces a few additional object types meant to  +be passed along by other services.  +  +Domain Objects +  + Domain objects are the most fundamental component of Open MCT Web’s information  +model. A domain object is some distinct thing relevant to a user’s work flow, such as a telemetry  +channel, display, or similar. Open MCT Web is a tool for viewing, browsing, manipulating, and  +otherwise interacting with a graph of domain objects.  + A domain object should be conceived of as the union of the following:  +   + ● Identifier: A machine­readable string that uniquely identifies the domain object within this  + application instance.  + ● Model: The persistent state of the domain object. A domain object’s model is a  + JavaScript object that can be losslessly converted to JSON.  + ● Capabilities: Dynamic behavior associated with the domain object. Capabilities are  + JavaScript objects which provide additional methods for interacting with the domain  + objects which expose those capabilities. Not all domain objects expose all capabilities.  +  + At run­time, a domain object has the following interface:  +  + ● getId()​: Get the identifier for this domain object.  + ● getModel()​: Get the plain state associated with this domain object. This will return a  + JavaScript object that can be losslessly converted to JSON. Note that the model  + returned here can be modified directly but should not be; instead, use the ​mutation  + capability.  + ● getCapability(key)​: Get the specified capability associated with this domain object.  + This will return a JavaScript object whose interface is specific to the type of capability  + being requested. If the requested capability is not exposed by this domain object, this  + will return ​undefined​.  + 22  + ● hasCapability(key)​: Shorthand for checking if a domain object exposes the  + requested capability.  + ● useCapability(key, arguments…)​: Shorthand for  + getCapability(key).invoke(arguments)​, with additional checking between  + calls. If the provided capability has no invoke method, the return value here functions as  + getCapability​, including returning ​undefined​ if the capability is not exposed.  +  +Actions +  + An ​Action​ is behavior that can be performed upon/using a ​DomainObject​. An Action  +has the following interface:  +  + ● perform()​: Do this action. For example, if one had an instance of a ​RemoveAction​,  + invoking its ​perform​ method would cause the domain object which exposed it to be  + removed from its container.  + ● getMetadata()​: Get metadata associated with this action. Returns an object  + containing:  + ○ name​: Human­readable name.  + ○ description​: Human­readable summary of this action.  + ○ glyph​: Single character to be displayed in Open MCT Web’s icon font set.  + ○ context​: The context in which this action is being performed (see below)  +  + Action instances are typically obtained via a domain object’s ​action​ capability.  +  +Action Contexts +  + An action context is a JavaScript object with the following properties:  +  + ● domainObject​: The domain object being acted upon.  + ● selectedObject​: Optional; the selection at the time of action (e.g. the dragged object  + in a drag­and­drop operation.)  + + + + 23  +Telemetry +  + Telemetry series data in Open MCT Web is represented by a common interface, and  +packaged in a consistent manner to facilitate passing telemetry updates around multiple  +visualizations.  +  +Telemetry Requests +  + A telemetry request is a JavaScript object containing the following properties:  +  + ● source​: A machine­readable identifier for the source of this telemetry. This is useful  + when multiple distinct data sources are in use side­by­side.  + ● key​: A machine­readable identifier for a unique series of telemetry within that source.  + ● Note: This API is still under development; additional properties, such as start and end  + time, should be present in future versions of Open MCT Web.  +  + Additional properties may be included in telemetry requests which have specific  +interpretations for specific sources.  +  +Telemetry Responses +  + When returned from the ​telemetryService​ (see Services section), telemetry series  +data will be packaged in a ​source ­> key ­> TelemetrySeries​ fashion. That is,  +telemetry is passed in an object containing key­value pairs. Keys identify telemetry sources;  +values are objects containing additional key­value pairs. In this object, keys identify individual  +telemetry series (and match they ​key​ property from corresponding requests) and values are  +TelemetrySeries​ objects (see below.)  +  + + + 24  +Telemetry Series +  + A telemetry series is a specific sequence of data, typically associated with a specific  +instrument. Telemetry is modeled as an ordered sequence of domain and range values, where  +domain values must be non­decreasing but range values do not. (Typically, domain values are  +interpreted as UTC timestamps in milliseconds relative to the UNIX epoch.) A series must have  +at least one domain and one range, and may have more than one.  + Telemetry series data in Open MCT Web is expressed via the following  +TelemetrySeries​ interface:  +  + ● getPointCount()​: Returns the number of unique points/samples in this series.  + ● getDomainValue(index, [domain]):​ Get the domain value at the specified  + index​. If a second ​domain​ argument is provided, this is taken as a string identifier  + indicating which domain option (of, presumably, multiple) should be returned.  + ● getRangeValue(index, [range]):​ Get the domain value at the specified ​index​.  + If a second ​range​ argument is provided, this is taken as a string identifier indicating  + which range option (of, presumably, multiple) should be returned.  +  +Telemetry Metadata +  + Domain objects which have associated telemetry also expose metadata about that  +telemetry; this is retrievable via the ​getMetadata()​ of the telemetry capability. This will return  +a single JavaScript object containing the following properties:  +  + ● source​: The machine­readable identifier for the source of telemetry data for this object.  + ● key​: The machine­readable identifier for the individual telemetry series.  + ● domains​: An array of supported domains (see ​TelemetrySeries​ above.) Each  + domain should be expressed as an object which includes:  + ○ key​: Machine­readable identifier for this domain, as will be passed into a  + getDomainValue(index, domain)​ call.  + ○ name​: Human­readable name for this domain.  + ● ranges​: An array of supported ranges; same format as ​domains​.  +  + Note that this metadata is also used as the prototype for telemetry requests made using  +this capability.  +  +  +Types +  + A domain object’s type is represented as a ​Type​ object, which has the following  +interface:  + 25  +  + ● getKey()​: Get the machine­readable identifier for this type.  + ● getName()​: Get the human­readable name for this type.  + ● getDescription()​: Get a human­readable summary of this type.  + ● getGlyph()​: Get the single character to be rendered as an icon for this type in Open  + MCT Web’s custom font set.  + ● getInitialModel()​: Get a domain object model that represents the initial state  + (before user specification of properties) for domain objects of this type.  + ● getDefinition()​: Get the extension definition for this type, as a JavaScript object.  + ● instanceOf(type)​: Check if this type is (or inherits from) a specified ​type​. This type  + can be either a string, in which case it is taken to be that type’s ​key​, or it may be a ​Type  + instance.  + ● hasFeature(feature)​: Returns a boolean value indicating whether or not this type  + supports the specified ​feature​, which is a symbolic string.  + ● getProperties()​: Get all properties associated with this type, expressed as an array  + of ​TypeProperty​ instances.  +  +Type Features +  + Features of a domain object type are expressed as symbolic string identifiers. They are  +defined in practice by usage; currently, the Open MCT Web platform only uses the ​creation  +feature to determine which domain object types should appear in the Create menu.  +  +Type Properties +  + Types declare the user­editable properties of their domain object instances in order to  +allow the forms which appear in the Create and Edit Properties dialogs to be generated by the  +platform. A ​TypeProperty​ has the following interface:  +  + ● getValue(model)​: Get the current value for this property, as it appears in the  + provided domain object ​model​.  + ● setValue(model, value)​: Set a new ​value​ for this property in the provided  + domain object ​model​.  + ● getDefinition()​: Get the raw definition for this property as a JavaScript object (as it  + was declared in this type’s extension definition.)  +Extension Categories +  + The information in this section is focused on registering new extensions of specific types;  +it does not contain a catalog of the extension instances of these categories provided by the  +platform. Relevant summaries there are provided in subsequent sections.  + 26  +  +Actions +  + An action is a thing that can be done to or using a domain object, typically as initiated by  +the user.  +  + An action’s implementation:  + ● Should take a single ​context​ argument in its constructor. (See Action Contexts, under  + Core API.)  + ● Should provide a method ​perform​, which causes the behavior associated with the  + action to occur.  + ● May provide a method ​getMetadata​, which provides metadata associated with the  + action. If omitted, one will be provided by the platform which includes metadata from the  + action’s extension definition.  + ● May provide a static method ​appliesTo(context)​ (that is, a function available as a  + property of the implementation’s constructor itself), which will be used by the platform to  + filter out actions from contexts in which they are inherently inapplicable.  +  + An action’s bundle definition (and/or ​getMetadata()​ return value) may include:  + ● category​: A string or dearray of strings identifying which category or categories an  + action falls into; used to determine when an action is displayed. Categories supported by  + the platform include:  + ○ contextual​: Actions in a context menu.  + ○ view­control​: Actions triggered by buttons in the top­right of Browse view.  + ● key​: A machine­readable identifier for this action.  + ● name​: A human­readable name for this action (e.g. to show in a menu)  + ● description​: A human­readable summary of the behavior of this action.  + ● glyph​: A single character which will be rendered in Open MCT Web’s custom font set  + as an icon for this action.  +  +  + + + 27  +Capabilities +  + Capabilities are exposed by domain objects (e.g. via the g​ etCapability​ method) but  +most commonly originate as extensions of this category.  +  + Extension definitions for capabilities should include both an implementation, and a  +property named ​key​ whose value should be a string used as a machine­readable identifier for  +that capability, e.g. when passed as the argument to a domain object’s ​getCapability(key)  +call.   +  + A capability’s implementation should have methods specific to that capability; that is,  +there is no common format for capability implementations, aside from support for ​invoke​ via  +the ​useCapability​ shorthand.  + A capability’s implementation will take a single argument (in addition to any declared  +dependencies), which is the domain object that will expose that capability.  + A capability’s implementation may also expose a static method ​appliesTo(model)  +which should return a boolean value, and will be used by the platform to filter down capabilities  +to those which should be exposed by specific domain objects, based on their domain object  +models.  +  +Controls +  + Controls provide options for the ​mct­control​ directive.  +  + Four standard control types are included in the forms bundle:  +   + ● textfield​: An area to enter plain text.  + ● select​: A drop­down list of options.  + ● checkbox​: A box which may be checked/unchecked.  + ● color​: A color picker.  + ● button​: A button.  + ● datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  + milliseconds since start of 1970, UTC.  +  + New controls may be added as extensions of the controls category. Extensions of this  +category have two properties:  +  + ● key​: The symbolic name for this control (matched against the control field in rows of the  + form structure).  + ● templateUrl​: The URL to the control's Angular template, relative to the resources  + directory of the bundle which exposes the extension.  + 28  +  +Within the template for a control, the following variables will be included in scope:  +  + ● ngModel​: The model where form input will be stored. Notably we also need to look at  + field​ (see below) to determine which field in the model should be modified.  + ● ngRequired​: True if input is required.  + ● ngPattern​: The pattern to match against (for text entry.)  + ● options​: The options for this control, as passed from the ​options​ property of an  + individual row definition.  + ● field​: Name of the field in ​ngModel​ which will hold the value for this control.  +  +Gestures +  + A gesture is a user action which can be taken upon a representation of a domain object.  +Examples of gestures included in the platform are:  +   + ● drag​: For representations that can be used to initiate drag­and­drop composition.  + ● drop​: For representations that can be drop targets for drag­and­drop composition.  + ● menu​: For representations that can be used to pop up a context menu.  +  + Gesture definitions have a property ​key​ which is used as a machine­readable identifier  +for the gesture (e.g. ​drag​, ​drop​, ​menu​ above.)  +  + A gesture’s implementation is instantiated once per representation that uses the gesture.  +This class will receive the jqLite­wrapped ​mct­representation​ element and the domain  +object being represented as arguments, and should do any necessary "wiring" (e.g. listening for  +events) during its constructor call. The gesture’s implementation may also expose an optional  +destroy()​ method which will be called when the gesture should be removed, to avoid  +memory leaks by way of unremoved listeners.  +  +Indicators +  + An indicator is an element that should appear in the status area at the bottom of a  +running Open MCT Web client instance.  +  + + + 29  +Standard Indicators +  + Indicators which wish to appear in the common form of an icon­text pair should provide  +implementations with the following methods:  +  + ● getText()​: Provides the human­readable text that will be displayed for this indicator.  + ● getGlyph()​: Provides a single­character string that will be displayed as an icon in  + Open MCT Web’s custom font set.  + ● getDescription()​: Provides a human­readable summary of the current state of this  + indicator; will be displayed in a tooltip on hover.  + ● getClass()​: Get a CSS class that will be applied to this indicator.  + ● getTextClass()​: Get a CSS class that will be applied to this indicator’s text portion.  + ● getGlyphClass()​: Get a CSS class that will be applied to this indicator’s icon portion.  + ● configure()​: If present, a configuration icon will appear to the right of this indicator,  + and clicking it will invoke this method.  +  + Note that all methods are optional, and are called directly from an Angular template, so  +they should be appropriate to run during digest cycles.  +  +Custom Indicators +  + Indicators which wish to have an arbitrary appearance (instead of following the icon­text  +convention commonly used) may specify a ​template​ property in their extension definition. The  +value of this property will be used as the ​key​ for an ​mct­include​ directive (so should refer to  +an extension of category ​templates​.) This template will be rendered to the status area.  +Indicators of this variety do not need to provide an implementation.  +  +  +Licenses +  + The extension category ​licenses​ can be used to add entries into the “Licensing  +information” page, reachable from Open MCT Web’s About dialog.  + Licenses may have the following properties, all of which are strings:  +  + ● name​: Human­readable name of the licensed component. (e.g. “AngularJS”.)  + ● version​: Human­readable version of the licensed component. (e.g. “1.2.26”.)  + ● description​: Human­readable summary of the component.  + ● author​: Name or names of entities to which authorship should be attributed.  + ● copyright​: Copyright text to display for this component.  + ● link​: URL to full license text.  +  + 30  +  +Policies +  + Policies are used to handle decisions made using Open MCT Web’s ​policyService​;  +examples of these decisions are determining the applicability of certain actions, or checking  +whether or not a domain object of one type can contain a domain object of a different type. See  +the section on the Policies for an overview of Open MCT Web’s policy model.  + A policy’s extension definition should include:  +  + ● category​: The machine­readable identifier for the type of policy decision being  + supported here. For a list of categories supported by the platform, see the section on  + Policies. Plugins may introduce and utilize additional policy categories not in that list.  + ● message​: Optional; a human­readable message describing the policy, intended for  + display in situations where this specific policy has disallowed something.  +  + A policy’s implementation should include a single method, ​allow(candidate,  +context)​. The specific types used for ​candidate​ and ​context​ vary by policy category; in  +general, what is being asked is “is this candidate allowed in this context?” This method should  +return a boolean value.  + Open MCT Web’s policy model requires consensus; a policy decision is allowed when  +and only when all policies choose to allow it. As such, policies should generally be written to  +reject a certain case, and allow (by returning true) anything else.  +  +Representations +  + A representation is an Angular template used to display a domain object. The  +representations​ extension category is used to add options for the ​mct­representation  +directive.  +  + A representation definition should include the following properties:  +   + ● key​: The machine­readable name which identifies the representation.  + ● templateUrl​: The path to the representation's Angular template. This path is relative  + to the bundle's resources directory.  + ● uses​: Optional; an array of capability names. Indicates that this representation intends  + to use those capabilities of a domain object (via a ​useCapability​ call), and expects to  + find the latest results of that ​useCapability​ call in the scope of the presented  + template (under the same name as the capability itself.) Note that, if ​useCapability  + returns a promise, this will be resolved before being placed in the representation’s  + scope.  + 31  + ● gestures​: An array of keys identifying gestures (see the ​gestures​ extension  + category) which should be available upon this representation. Examples of gestures  + include ​drag​ (for representations that should act as draggable sources for drag­drop  + operations) and ​menu​ (for representations which should show a domain­object­specific  + context menu on right­click.)  +  +Representation Scope +  + While ​representations​ do not have implementations, per se, they do refer to  +Angular templates which need to interact with information (e.g. the domain object being  +represented) provided by the platform. This information is passed in through the template’s  +scope, such that simple representations may be created by providing only templates. (More  +complex representations will need controllers which are referenced from templates. See  +https://docs.angularjs.org/guide/controller​ for more information on controllers in Angular.)  +  + A representation’s scope will contain:  +  + ● domainObject​: The represented domain object.  + ● model​: The domain object’s model.  + ● configuration​: An object containing configuration information for this representation  + (an empty object if there is no saved configuration.) The contents of this object are  + managed entirely by the view/representation which receives it.  + ● representation​: An empty object, useful as a “scratch pad” for representation state.  + ● ngModel​: An object passed through the ​ng­model​ attribute of the  + mct­representation​, if any.  + ● parameters​: An object passed through the ​parameters​ attribute of the  + mct­representation​, if any.  + ● Any capabilities requested by the ​uses​ property of the representation definition.  +  +Representers +  + The ​representers​ extension category is used to add additional behavior to the  +mct­representation​ directive. This extension category is intended primarily for use internal  +to the platform.  + Unlike represent​ations​, which describe specific ways to represent domain objects,  +represent​ers ​are used to modify or augment the process of representing domain objects in  +general. For example, support for the ​gestures​ extension category is added by a representer.  + A representer needs only provide an implementation. When an ​mct­representation  +is linked (see ​https://docs.angularjs.org/guide/directive​) or when the domain object being  +represented changes, a new representer of each declared type is instantiated. The constructor  +arguments for a representer are the same as the arguments to the link function in an Angular  + 32  +directive: ​scope​, the Angular scope for this representation; ​element​, the jqLite­wrapped  +mct­representation​ element, and ​attrs​, a set of key­value pairs of that element’s  +attributes. Representers may wish to populate the scope, attach event listeners to the element,  +etc.  + This implementation must provide a single method, ​destroy()​, which will be invoked  +when the representer is no longer needed.  +  +Roots +  + The extension category ​roots​ is used to provide root­level domain object models.  +Root­level domain objects appear at the top­level of the tree hierarchy. For example, the “My  +Items” folder is added as an extension of this category.  + Extensions of this category should have the following properties:  +  + ● id​: The machine­readable identifier for the domain object being exposed.  + ● model​: The model, as a JSON object, for the domain object being exposed.  +  +Stylesheets +  + The ​stylesheets​ extension category is used to add CSS files to style the application.  +Extension definitions for this category should include one property:  +   + ● stylesheetUrl​: Path and filename, including extension, for the stylesheet to include.  + This path is relative to the bundle’s resources folder (by default, ​res​)  +  + To control the order of CSS files, use ​priority​ (see the section on Extension  +Definitions above.)  +   +  + + + 33  +Templates +  + The ​templates​ extension category is used to expose Angular templates under  +symbolic identifiers. These can then be utilized using the ​mct­include​ directive, which  +behaves similarly to ​ng­include​, except that it uses these symbolic identifiers instead of  +paths.  + A template’s extension definition should include the following properties:  +   + ● key​: The machine­readable name which identifies this template, matched against the  + value given to the key attribute of the mct­include directive.  + ● templateUrl​: The path to the relevant Angular template. This path is relative to the  + bundle's resources directory.  +  + Note that, when multiple templates are present with the same ​key​, the one with the  +highest priority will be used from mct­include. This behavior can be used to override templates  +exposed by the platform (to change the logo which appears in the bottom right, for instance.)  +  + Templates do not have implementations.  +  +Types +  + The ​types​ extension category describes types of domain objects which may appear  +within Open MCT Web.  + A type’s extension definition should have the following properties:  +  + ● key​: The machine­readable identifier for this domain object type. Will be stored to and  + matched against the ​type​ property of domain object models.  + ● name​: The human­readable name for this domain object type.  + ● description​: A human­readable summary of this domain object type.  + ● glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  + set.  + ● model​: A domain object model, used as the initial state for created domain objects of  + this type (before any properties are specified.)  + ● features​: Optional; an array of strings describing features of this domain object type.  + Currently, only ​creation​ is recognized by the platform; this is used to determine that  + this type should appear in the Create menu. More generally, this is used to support the  + hasFeature(...)​ method of the ​type​ capability.  + ● properties​: An array describing individual properties of this domain object (as should  + appear in the Create or the Edit Properties dialog.) Each property is described by an  + object containing the following properties:  + 34  + ○ control​: The key of the control (see mct­control and the controls extension  + category) to use for editing this property.  + ○ property​: A string which will be used as the name of the property in the domain  + object’s model that the value for this property should be stored under. If this value  + should be stored in an object nested within the domain object model, then  + property should be specified as an array of strings identifying these nested  + objects and, finally, the property itself.  + ○ ...other properties as appropriate for a control of this type (each property’s  + definition will also be passed in as the structure for its control.) See  + documentation of ​mct­form​ for more detail on these properties.  +  + Types do not have implementations.  +  +Versions +  + The ​versions​ extension category is used to introduce line items in Open MCT Web’s  +About dialog. These should have the following properties:  +  + ● name​: The name of this line item, as should appear in the left­hand side of the list of  + version information in the About dialog.  + ● value​: The value which should appear to the right of the name in the About dialog.  +  + To control the ordering of line items within the About dialog, use ​priority​. (See  +section on Extension Definitions above.)  +   + This extension category does not have implementations.  +  +Views +  + The ​views​ extension category is used to determine which options appear to the user as  +available views of domain objects of specific types. A view’s extension definition has the same  +properties as a representation (and views can be utilized via ​mct­representation​);  +additionally:  +  + ● name​: The human­readable name for this view type.  + ● description​: A human­readable summary of this view type.  + ● glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  + set.  + ● type​: Optional; if present, this representation is only applicable for domain object’s of  + this type.  + 35  + ● needs​: Optional array of strings; if present, this representation is only applicable for  + domain objects which have the capabilities identified by these strings.  + ● delegation​: Optional boolean, intended to be used in conjunction with ​needs​;  if  + present, allow required capabilities to be satisfied by means of capability delegation.  + (See the ​delegation​ capability, in the Capabilities section.)  + ● toolbar​: Optional; a definition for the toolbar which may appear in a toolbar when  + using this view in Edit mode. This should be specified as a structure for ​mct­toolbar​,  + with additional properties available for each item in that toolbar:  + ○ property​: A property name. This will refer to a property in the view’s current  + selection; that property on the selected object will be modifiable as the  + ng­model​ of the displayed control in the toolbar. If the value of the property is a  + function, it will be used as a getter­setter (called with no arguments to use as a  + getter, called with a value to use as a setter.)  + ○ method​: A method to invoke (again, on the selected object) from the toolbar  + control. Useful particularly for buttons (which don’t edit a single property,  + necessarily.)  +  +View Scope +  + Views do not have implementations, but do get the same properties in scope that are  +provided for ​representations​.  +  + When a view is in Edit mode, this scope will additionally contain:  +  + ● commit()​: A function which can be invoked to mark any changes to the view’s  + configuration​ as ready to persist.  + ● selection​: An object representing the current selection state.  +  +Selection State +  + A view’s selection state is, conceptually, a set of JavaScript objects. The presence of  +methods/properties on these objects determine which toolbar controls are visible, and what  +state they manage and/or behavior they invoke.  + This set may contain up to two different objects: The ​view proxy​, which is used to make  +changes to the view as a whole, and the ​selected object​, which is used to represent some state  +within the view. (Future versions of Open MCT Web may support multiple selected objects.)  +  +   +    + 36  + The ​selection​ object made available during Edit mode has the following methods:  +  + ● proxy([object])​: Get (or set, if called with an argument) the current view proxy.   + ● select(object)​: Make this object the selected object.  + ● deselect()​: Clear the currently selected object.  + ● get()​: Get the currently selected object. Returns ​undefined​ if there is no currently  + selected object.  + ● selected(object)​: Check if the JavaScript object is currently in the selection set.  + Returns ​true​ if the object is either the currently selected object, or the current view  + proxy.  + ● all()​: Get an array of all objects in the selection state. Will include either or both of the  + view proxy and selected object.  +  + + + 37  +Directives +  + Open MCT Web defines several Angular directives that are intended for use both  +internally within the platform, and by plugins.  +  +Before Unload +  + The ​mct­before­unload​ directive is used to listen for (and prompt for user  +confirmation) of navigation changes in the browser. This includes reloading, following links out  +of Open MCT Web, or changing routes. It is used to hook into both ​onbeforeunload​ event  +handling as well as route changes from within Angular.  + This directive is useable as an attribute. Its value should be an Angular expression.  +When an action that would trigger an unload and/or route change occurs, this Angular  +expression is evaluated. Its result should be a message to display to the user to confirm their  +navigation change; if this expression evaluates to a falsy value, no message will be displayed.  +  +Chart +  + The ​mct­chart​ directive is used to support drawing of simple charts. It is present to  +support the Plot view, and its functionality is limited to the functionality that is relevant for that  +view.  + This directive is used at the element level and takes one attribute, ​draw​, which is an  +Angular expression which will should evaluate to a drawing object. This drawing object should  +contain the following properties:  + ● dimensions​: The size, in logical coordinates, of the chart area. A two­element  + array or numbers.  + ● origin​: The position, in logical coordinates, of the lower­left corner of the chart  + area. A two­element array or numbers.  + ● lines​: An array of lines (e.g. as a plot line) to draw, where each line is  + expressed as an object containing:  + ○ buffer​: A Float32Array containing points in the line, in logical  + coordinates, in sequential x,y pairs.  + ○ color​: The color of the line, as a four­element RGBA array, where each  + element is a number in the range of 0.0­1.0.  + ○ points​: The number of points in the line.  + ● boxes​: An array of rectangles to draw in the chart area. Each is an object  + containing:  + ○ start​: The first corner of the rectangle, as a two­element array of  + numbers, in logical coordinates.  + 38  + ○ end​: The opposite corner of the rectangle, as a two­element array of  + numbers, in logical coordinates.  + ○ color​: The color of the line, as a four­element RGBA array, where each  + element is a number in the range of 0.0­1.0.  +  + While ​mct­chart​ is intended to support plots specifically, it does perform some useful  +management of canvas objects (e.g. choosing between WebGL and Canvas 2D APIs for  +drawing based on browser support) so its usage is recommended when its supported drawing  +primitives are sufficient for other charting tasks.  +  +Container +  + The ​mct­container​ is similar to the ​mct­include​ directive insofar as it allows  +templates to be referenced by symbolic keys instead of by URL. Unlike ​mct­include​, it  +supports transclusion.  + Unlike ​mct­include​, ​mct­container​ accepts a ​key​ as a plain string attribute,  +instead of as an Angular expression.  +   +Control +  + The ​mct­control​ directive is used to display user input elements. Several controls are  +included with the platform to wrap default input types. This directive is primarily intended for  +internal use by the ​mct­form​ and ​mct­toolbar​ directives.  + When using ​mct­control​, the attributes ​ng­model​, ​ng­disabled​, ​ng­required​,  +and ​ng­pattern​ may also be used. These have the usual meaning (as they would for an input  +element) except for ​ng­model​; when used, it will actually be ​ngModel[field]​ (see below)  +that is two­way bound by this control. This allows ​mct­control​ elements to more easily  +delegate to other ​mct­control​ instances, and also facilitates usage for generated forms.  + This directive supports the following additional attributes, all specified as Angular  +expressions:  +  + ● key​: A machine­readable identifier for the specific type of control to display.  + ● options​: A set of options to display in this control.  + ● structure​: In practice, contains the definition object which describes this form row or  + toolbar item. Used to pass additional control­specific parameters.  + ● field​: The field in the ​ngModel​ under which to read/store the property associated with  + this control.  +  +Drag +  + 39  + The ​mct­drag​ directive is used to support drag­based gestures on HTML elements.  +Note that this is not “drag” in the “drag­and­drop” sense, but “drag” in the more general “mouse  +down, mouse move, mouse up” sense.  + This takes the form of three attributes:  +  + ● mct­drag​: An Angular expression to evaluate during drag movement.  + ● mct­drag­down​: An Angular expression to evaluate when the drag starts.  + ● mct­drag­up​: An Angular expression to evaluate when the drag ends.  +  + In each case, a variable ​delta​ will be provided to the expression; this is a two­element  +array or the horizontal and vertical pixel offset of the current mouse position relative to the  +mouse position where dragging began.  +   +Form +  + The ​mct­form​ directive is used to generate forms using a declarative structure, and to  +gather back user input. It is applicable at the element level and supports the following attributes:  +  + ● ng­model​: The object which should contain the full form input. Individual fields in this  + model are bound to individual controls; the names used for these fields are provided in  + the form structure (see below).  + ● structure​: The structure of the form; e.g. sections, rows, their names, and so forth.  + The value of this attribute should be an Angular expression.  + ● name​: The name in the containing scope under which to publish form "meta­state", e.g.  + $valid​, ​$dirty​, etc. This is as the behavior of ​ng­form​. Passed as plain text in the  + attribute.  +  + + + 40  +Form Structure +  + Forms in Open MCT Web have a common structure to permit consistent display. A form  +is broken down into sections, which will be displayed in groups; each section is broken down  +into rows, each of which provides a control for a single property. Input from this form is two­way  +bound to the object passed via ​ng­model​.  + A form’s structure is represented by a JavaScript object in the following form:  +{  +    "name": ... title to display for the form, as a string ...,  +    "sections": [  +        {  +            "name": ... title to display for the section ...,  +            "rows": [  +                {  +                    "name": ... title to display for this row ...,  +                    "control": ... symbolic key for the control ...,  +                    "key": ... field name in ng­model ...  +                    "pattern": ... optional, reg exp to match against ...  +                    "required": ... optional boolean ...  +                    "options": [  +                        "name": ... name to display (e.g. in a select) ...,  +                        "value": ... value to store in the model ...  +                    ]  +                },  +                ... and other rows ...  +            ]  +        },  +        ... and other sections ...  +    ]  +}  +  +Note that ​pattern​ may be specified as a string, to simplify storing for structures as JSON  +when necessary. The string should be given in a form appropriate to pass to a ​RegExp  +constructor.  +  + + + 41  +Form Controls +  + A few standard control types are included in the ​platform/forms​ bundle:  +  + ● textfield​: An area to enter plain text.  + ● select​: A drop­down list of options.  + ● checkbox​: A box which may be checked/unchecked.  + ● color​: A color picker.  + ● button​: A button.  + ● datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  + milliseconds since start of 1970, UTC.  +  +Include +  + The ​mct­include​ directive is similar to ​ng­include​, except that it takes a symbolic  +identifier for a template instead of a URL. Additionally, templates included via ​mct­include  +will have an isolated scope.  + The directive should be used at the element level and supports the following attributes,  +all of which are specified as Angular expressions:  +  + ● key​: Machine­readable identifier for the template (of extension category ​templates​) to  + be displayed.  + ● ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  + usage is for two­way bound user input.  + ● parameters​: Optional; will be passed into the template’s scope as ​parameters​.  + Intended usage is for template­specific display parameters.  +  + + + 42  +Representation +  + The ​mct­representation​ directive is used to include templates which specifically  +represent domain objects. Usage is similar to ​mct­include​.  + The directive should be used at the element level and supports the following attributes,  +all of which are specified as Angular expressions:  +  + ● key​: Machine­readable identifier for the representation (of extension category  + representations​ or ​views​) to be displayed.  + ● mct­object​: The domain object being represented.  + ● ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  + usage is for two­way bound user input.  + ● parameters​: Optional; will be passed into the template’s scope as ​parameters​.  + Intended usage is for template­specific display parameters.  +  +Resize +  + The ​mct­resize​ directive is used to monitor the size of an HTML element. It is  +specified as an attribute whose value is an Angular expression that will be evaluated when the  +size of the HTML element changes. This expression will be provided a single variable, ​bounds​,  +which is an object containing two properties, ​width​ and ​height​, describing the size in pixels  +of the element.  + When using this directive, an attribute ​mct­resize­interval​ may optionally be  +provided. Its value is an Angular expression describing the number of milliseconds to wait  +before next checking the size of the HTML element; this expression is evaluated when the  +directive is linked and reevaluated whenever the size is checked.  +  +Scroll +  + The ​mct­scroll­x​ and ​mct­scroll­y​ directives are used to both monitor and  +control the horizontal and vertical scroll bar state of an element, respectively. They are intended  +to be used as attributes whose values are assignable Angular expressions which two­way bind  +to the scroll bar state.  +  + + + 43  +Toolbar +  + The ​mct­toolbar​ directive is used to generate toolbars using a declarative structure,  +and to gather back user input. It is applicable at the element level and supports the following  +attributes:  +  + ● ng­model​: The object which should contain the full toolbar input. Individual fields in this  + model are bound to individual controls; the names used for these fields are provided in  + the form structure (see below).  + ● structure​: The structure of the toolbar; e.g. sections, rows, their names, and so forth.  + The value of this attribute should be an Angular expression.  + ● name​: The name in the containing scope under which to publish form "meta­state", e.g.  + $valid​, ​$dirty​, etc. This is as the behavior of ​ng­form​. Passed as plain text in the  + attribute.  +  + Toolbars support the same ​control​ options as forms.   +  +Toolbar Structure +  + A toolbar’s structure is defined similarly to forms, except instead of ​rows​ there are  +items​.  +  +{  +    "name": ... title to display for the form, as a string ...,  +    "sections": [  +        {  +            "name": ... title to display for the section ...,  +            "items": [  +                {  +                    "name": ... title to display for this row ...,  +                    "control": ... symbolic key for the control ...,  +                    "key": ... field name in ng­model ...  +                    "pattern": ... optional, reg exp to match against ...  +                    "required": ... optional boolean ...  +                    "options": [  +                        "name": ... name to display (e.g. in a select) ...,  +                        "value": ... value to store in the model ...  +                    ],  +                    "disabled": ... true if control should be disabled ...  +                    "size": ... size of the control (for textfields) ...  +                    "click": ... function to invoke (for buttons) ...  +                    "glyph": ... glyph to display (for buttons) ...  +                    "text": ... text within control (for buttons) ...  + 44  +                },  +                ... and other rows ...  +            ]  +        },  +        ... and other sections ...  +    ]  +}  +  +Services +  + The Open MCT Web platform provides a variety of services which can be retrieved and  +utilized via dependency injection. These services fall into two categories:  +  + ● Composite Services are defined by a set of ​components​ extensions; plugins may  + introduce additional components with matching interfaces to extend or augment the  + functionality of the composed service. (See the Framework section on Composite  + Services.)  + ● Other services which are defined as standalone service objects; these can be utilized by  + plugins but are not intended to be modified or augmented.  +  +Composite Services +  + This section describes the composite services exposed by Open MCT Web, specifically  +focusing on their interface and contract.  +   + In many cases, the platform will include a provider for a service which consumes a  +specific extension category; for instance, the ​actionService​ depends on ​actions[]​ and  +will expose available actions based on the rules defined for that extension category.   + In these cases, it will usually be simpler to add a new extension of a given category (e.g.  +of category ​actions​) even when the same behavior could be introduced by a service  +component (e.g. an extension of category ​components​ where ​provides​ is ​actionService​,  +and ​type​ is  ​provider​.)   + Occasionally, the extension category does not provide enough expressive power to  +achieve a desired result. For instance, the Create menu is populated with ​create​ actions,  +where one such action exists for each creatable type. Since the framework does not provide a  +declarative means to introduce a new action per type declaratively, the platform implements this  +explicitly in an ​actionService​ component of type ​provider​. Plugins may use a similar  +approach when the normal extension mechanism is insufficient to achieve a desired result.  +  +Action Service +  + 45  + The ​actionService​ provides ​Action​ instances which are applicable in specific  +contexts. See Core API for additional notes on the interface for actions.  + The ​actionService​ has the following interface:  +   + ● getActions(context)​: Returns an array of ​Action​ objects which are applicable in  + the specified action context.    +  +  +Capability Service +  + The ​capabilityService​ provides constructors for capabilities which will be exposed  +for a given domain object.  + The ​capabilityService​ has the following interface:  +  + ● getCapabilities(model)​: Returns a an object containing key­value pairs,  + representing capabilities which should be exposed by the domain object with this model.  + Keys in this object are the capability keys (as used in a ​getCapability(...)​ call)  + and values are either:  + ○ Functions, in which case they will be used as constructors, which will receive the  + domain object instance to which the capability applies as their sole argument.  + The resulting object will be provided as the result of a domain object’s  + getCapability(...)​call. Note that these instances are cached by each  + object, but may be recreated when an object is mutated.  + ○ Other objects, which will be used directly as the result of a domain object’s  + getCapability(...)​ call.  +  +  +Dialog Service +  + The ​dialogService​ provides a means for requesting user input via a modal dialog. It  +has the following interface:  +  + ● getUserInput(formStructure, formState)​: Prompt the user to fill out a form.  + The first argument describes the form’s structure (as will be passed to ​mct­form​) while  + the second argument contains the initial state of that form. This returns a ​Promise​ for  + the state of the form after the user has filled it in; this promise will be rejected if the user  + cancels input.  + ● getUserChoice(dialogStructure)​: Prompt the user to make a single choice from  + a set of options, which (in the platform implementation) will be expressed as buttons in  + the displayed dialog. Returns a ​Promise​ for the user’s choice, which will be rejected if  + the user cancels input.  + 46  +  +Dialog Structure +  + The object passed as the ​dialogStructure​ to ​getUserChoice​ should have the  +following properties:  +  + ● title​: The title to display at the top of the dialog.  + ● hint​: Short message to display below the title.  + ● template​: Identifying ​key​ (as will be passed to ​mct­include​) for the template which  + will be used to populate the inner area of the dialog.  + ● model​: Model to pass in the ​ng­model​ attribute of ​mct­include​.  + ● parameters​: Parameters to pass in the ​parameters​ attribute of ​mct­include​.  + ● options​: An array of options describing each button at the bottom. Each option may  + have the following properties:  + ○ name​: Human­readable name to display in the button.  + ○ key​: Machine­readable key, to pass as the result of the resolved promise when  + clicked.  + ○ description​: Description to show in tooltip on hover.  +  +  +Domain Object Service +  + The ​objectService​ provides domain object instances. It has the following interface:  +  + ● getObjects(ids)​: For the provided array of domain object identifiers, returns a  + Promise​ for an object containing key­value pairs, where keys are domain object  + identifiers and values are corresponding ​DomainObject​ instances. Note that the result  + may contain a superset or subset of the objects requested.  +   +  +Gesture Service +  + The ​gestureService​ is used to attach gestures (see extension category ​gestures​)  +to representations. It has the following interface:  +  + ● attachGestures(element, domainObject, keys)​: Attach gestures specified  + by the provided gesture ​keys​ (an array of strings) to this jqLite­wrapped HTML  + element​, which represents the specified ​domainObject​. Returns an object with a  + single method ​destroy()​, to be invoked when it is time to detach these gestures.  +  +  + 47  +Model Service +  + The ​modelService​ provides domain object models. It has the following interface:  +  + ● getModels(ids)​: For the provided array of domain object identifiers, returns a  + Promise​ for an object containing key­value pairs, where keys are domain object  + identifiers and values are corresponding domain object models. Note that the result may  + contain a superset or subset of the models requested.  +   +  +Persistence Service +  + The ​persistenceService​ provides the ability to load/store JavaScript objects  +(presumably serializing/deserializing to JSON in the process.) This is used primarily to store  +domain object models. It has the following interface:  +  + ● listSpaces()​: Returns a ​Promise​ for an array of strings identifying the different  + persistence spaces this service supports. Spaces are intended to be used to distinguish  + between different underlying persistence stores, to allow these to live side by side.  + ● listObjects()​: Returns a Promise for an array of strings identifying all documents  + stored in this persistence service.  + ● createObject(space, key, value)​: Create a new document in the specified  + persistence ​space​, identified by the specified ​key​, the contents of which shall match  + the specified ​value​. Returns a promise that will be rejected if creation fails.  + ● readObject(space, key)​: Read an existing document in the specified persistence  + space​, identified by the specified ​key​. Returns a promise for the specified document;  + this promise will resolve to ​undefined​ if the document does not exist.  + ● updateObject(space, key, value)​: Update an existing document in the  + specified persistence ​space​, identified by the specified ​key​, such that its contents  + match the specified ​value​. Returns a promise that will be rejected if the update fails.  + ● deleteObject(space, key)​: Delete an existing document from the specified  + persistence ​space​, identified by the specified ​key​. Returns a promise which will be  + rejected if deletion fails.  +  +  + + + 48  +Policy Service +  + The ​policyService​ may be used to determine whether or not certain behaviors are  +allowed within the application. It has the following interface:  +  + ● allow(category, candidate, context, [callback])​: Check if this decision  + should be allowed. Returns a boolean. Its arguments are interpreted as:  + ○ category​: A string identifying which kind of decision is being made. See the  + section on Policies for categories supported by the platform; plugins may define  + and utilize policies of additional categories, as well.  + ○ candidate​: An object representing the thing which shall or shall not be allowed.  + Usually, this will be an instance of an extension of the category defined above.  + This does need to be the case; additional policies which are not specific to any  + extension may also be defined and consulted using unique category identifiers. In  + this case, the type of the object delivered for the candidate may be unique to the  + policy type.  + ○ context​: An object representing the context in which the decision is occurring.  + Its contents are specific to each policy category.  + ○ callback​: Optional; a function to call if the policy decision is rejected. This  + function will be called with the message string (which may be undefined) of  + whichever individual policy caused the operation to fail.  +  +  +Telemetry Service +  + The ​telemetryService​ is used to acquire telemetry data. See the section on  +Telemetry in Core API for more information on how both the arguments and responses of this  +service are structured.  + When acquiring telemetry for display, it is recommended that the ​telemetryHandler  +service be used instead of this service. The ​telemetryHandler​ has additional support for  +subscribing to and requesting telemetry data associated with domain objects or groups of  +domain objects. See the Other Services section for more information.  + The ​telemetryService​ has the following interface:  +  + ● requestTelemetry(requests)​: Issue a request for telemetry, matching the  + specified telemetry ​requests​. Returns a ​Promise​ for a telemetry response object.   + ● subscribe(callback, requests)​: Subscribe to real­time updates for telemetry,  + matching the specified ​requests​. The specified ​callback​ will be invoked with  + telemetry response objects as they become available. This method returns a function  + which can be invoked to terminate the subscription.  +  + 49  +Type Service +  + The ​typeService​ exposes domain object types. It has the following interface:  +  + ● listTypes()​: Returns all domain object types supported in the application, as an  + array of ​Type​ instances.  + ● getType(key)​: Returns the ​Type​ instance identified by the provided key, or  + undefined​ if no such type exists.  +  +View Service +  + The ​viewService​ exposes definitions for views of domain objects. It has the following  +interface:  +  + ● getViews(domainObject):​ Get an array of extension definitions of category ​views  + which are valid and applicable to the specified ​domainObject​.  +  +Other Services +  +Drag and Drop +  + The ​dndService​ provides information about the content of an active drag­and­drop  +gesture within the application. It is intended to complement the ​DataTransfer​ API of HTML5  +drag­and­drop, by providing access to non­serialized JavaScript objects being dragged, as well  +as by permitting inspection during drag (which is normally prohibited by browsers for security  +reasons.)  + The ​dndService​ has the following methods:  +  + ● setData(key, value)​: Set drag data associated with a given type, specified by the  + key​ argument.  + ● getData(key)​: Get drag data associated with a given type, specified by the ​key  + argument.  + ● removeData(key)​: Clear drag data associated with a given type, specified by the ​key  + argument.  +  + + + 50  +Navigation +  + The ​navigationService​ provides information about the current navigation state of  +the application; that is, which object is the user currently viewing? This service merely tracks this  +state and notifies listeners; it does not take immediate action when navigation changes,  +although its listeners might.  + The ​navigationService​ has the following methods:  +  + ● getNavigation()​: Get the current navigation state. Returns a ​DomainObject​.  + ● setNavigation(domainObject)​: Set the current navigation state. Returns a  + DomainObject​.  + ● addListener(callback)​: Listen for changes in navigation state. The provided  + callback​ should be a ​Function​ which takes a single ​DomainObject​ as an  + argument.  + ● removeListener(callback)​: Stop listening for changes in navigation state. The  + provided ​callback​ should be a ​Function​ which has previously been passed to  + addListener​.  +  +Now +  + The service ​now​ is a function which acts as a simple wrapper for ​Date.now()​. It is  +present mainly so that this functionality may be more easily mocked in tests for scripts which  +use the current time.  +  +Telemetry Formatter +  + The ​telemetryFormatter​ is a utility for formatting domain and range values read  +from a telemetry series.  + The ​telemetryFormatter​ has the following methods:  +  + ● formatDomainValue(value)​: Format the provided domain value (which will be  + assumed to be a timestamp) for display; returns a string.  + ● formatRangeValue(value)​: Format the provided range value (a number) for  + display; returns a string.  +  + + + 51  +Telemetry Handler +  + The ​telemetryHandler​ is a utility for retrieving telemetry data associated with  +domain objects; it is particularly useful for dealing with cases where the ​telemetry​ capability  +is delegated to contained objects (as occurs in Telemetry Panels.)  + The ​telemetryHandler​ has the following methods:  +  + ● handle(domainObject, callback, [lossless])​: Subscribe to and issue  + future requests for telemetry associated with the provided ​domainObject​, invoking the  + provided ​callback​ function when streaming data becomes available. Returns a  + TelemetryHandle​ (see below.)  +  +Telemetry Handle +  + A ​TelemetryHandle​ has the following methods:  +  + ● getTelemetryObjects()​: Get the domain objects (as a ​DomainObject[]​) that  + have a ​telemetry​ capability and are being handled here. Note that these are looked  + up asynchronously, so this method may return an empty array if the initial lookup is not  + yet completed.  + ● promiseTelemetryObjects()​: As ​getTelemetryObjects()​, but returns a  + Promise​ that will be fulfilled when the lookup is complete.  + ● unsubscribe()​: Unsubscribe to streaming telemetry updates associated with this  + handle.  + ● getDomainValue(domainObject)​: Get the most recent domain value received via a  + streaming update for the specified ​domainObject​.  + ● getRangeValue(domainObject)​: Get the most recent range value received via a  + streaming update for the specified ​domainObject​.  + ● getMetadata()​: Get metadata (as reported by the ​getMetadata()​ method of a  + telemetry​ capability) associated with telemetry­providing domain objects. Returns an  + array, which is in the same order as ​getTelemetryObjects()​.  + ● request(request, callback)​: Issue a new ​request​ for historical telemetry data.  + The provided ​callback​ will be invoked when new data becomes available, which may  + occur multiple times (e.g. if there are multiple domain objects.) It will be invoked with the  + DomainObject​ for which a new series is available, and the ​TelemetrySeries​ itself,  + in that order.  + ● getSeries(domainObject)​: Get the latest ​TelemetrySeries​ (as resulted from a  + previous ​request(...)​ call) available for this domain object.  +  + 52  +Models +  + Domain object models in Open MCT Web are JavaScript objects describing the  +persistent state of the domain objects they describe. Their contents include a mix of commonly  +understood metadata attributes; attributes which are recognized by and/or determine the  +applicability of specific extensions; and properties specific to given types.  +  +General Metadata +  + Some properties of domain object models have a ubiquitous meaning through Open  +MCT Web and can be utilized directly:  +  + ● name​: The human­readable name of the domain object.  +  +Extension-specific Properties +  + Other properties of domain object models have specific meaning imposed by other  +extensions within the Open MCT Web platform.  +  +Capability-specific Properties +  + Some properties either trigger the presence/absence of certain capabilities, or are  +managed by specific capabilities:  +  + ● composition​: An array of domain object identifiers that represents the contents of this  + domain object (e.g. as will appear in the tree hierarchy.) Understood by the  + composition​ capability; the presence or absence of this property determines the  + presence or absence of that capability.  + ● modified​: The timestamp (in milliseconds since the UNIX epoch) of the last  + modification made to this domain object. Managed by the ​mutation​ capability.  + ● persisted​: The timestamp (in milliseconds since the UNIX epoch) of the last time  + when changes to this domain object were persisted. Managed by the ​persistence  + capability.  + ● relationships​: An object containing key­value pairs, where keys are symbolic  + identifiers for relationship types, and values are arrays of domain object identifiers. Used  + by the ​relationship​ capability; the presence or absence of this property determines  + the presence or absence of that capability.  + ● telemetry​: An object which serves as a template for telemetry requests associated  + with this domain object (e.g. specifying ​source​ and ​key​; see Telemetry Requests  + 53  + under Core API.) Used by the ​telemetry​ capability; the presence or absence of this  + property determines the presence or absence of that capability.  + ● type​: A string identifying the type of this domain object. Used by the ​type​ capability.  +  +View Configurations +  + Persistent configurations for specific views of domain objects are stored in the domain  +object model under the property ​configurations​. This is an object containing key­value  +pairs, where keys identify the view, and values are objects containing view­specific (and  +view­managed) configuration properties.  +  +Modifying Models +  + When interacting with a domain object’s model, it is possible to make modifications to it  +directly. ​Don’t! ​These changes may not be properly detected by the platform, meaning that  +other representations of the domain object may not be updated, changes may not be saved at  +the expected times, and generally, that unexpected behavior may occur.  + Instead, use the ​mutation​ capability.  +  + + + 54  +Capabilities +  + Dynamic behavior associated with a domain object is expressed as capabilities. A  +capability is a JavaScript object with an interface that is specific to the type of capability in use.  + Often, there is a relationship between capabilities and services. For instance, there is an  +action​ capability and an ​actionService​, and there is a ​telemetry​ capability as well as a  +telemetryService​. Typically, the pattern here is that the capability will utilize the service ​for  +the specific domain object​.   + When interacting with domain objects, it is generally preferable to use a capability  +instead of a service when the option is available. Capability interfaces are typically easier to use  +and/or more powerful in these situations. Additionally, this usage provides a more robust  +substitutability mechanism; for instance, one could configure a plugin such that it provided a  +totally new implementation of a given capability which might not invoke the underlying service,  +while user code which interacts with capabilities remains indifferent to this detail.  +  +Action +   + The ​action​ capability is present for all domain objects. It allows applicable ​Action  +instances to be retrieved and performed for specific domain objects.  + For example:  + domainObject.getCapability("action").perform("navigate");  + ...will initiate a navigate action upon the domain object, if an action with key "navigate" is  +defined.  +   + This capability has the following interface:  +   + ● getActions(context)​: Get the actions that are applicable in the specified action  + context​; the capability will fill in the ​domainObject​ field of this context if necessary. If  + context​ is specified as a string, they will instead be used as the ​key​ of the action  + context. Returns an array of ​Action​ instances.  + ● perform(context)​: Perform an action. This will find and perform the first matching  + action available for the specified action ​context​, filling in the ​domainObject​ field as  + necessary. If ​context​ is specified as a string, they will instead be used as the ​key​ of  + the action context. Returns a ​Promise​ for the result of the action that was performed, or  + undefined if no matching action was found.  +  + 55  +Composition +  + The ​composition​ capability provides access to domain objects that are contained by  +this domain object. While the ​composition​ property of a domain object’s model describes  +these contents (by their identifiers), the ​composition​ capability provides a means to load the  +corresponding ​DomainObject​ instances in the same order. The absence of this property in the  +model will result in the absence of this capability in the domain object.  + This capability has the following interface:  +  + ● invoke()​: Returns a ​Promise​ for an array of ​DomainObject​ instances.  + +Delegation +   + The ​delegation​ capability is used to communicate the intent of a domain object to  +delegate responsibilities, which would normally handled by other capabilities, to the domain  +objects in its composition.  + This capability has the following interface:  +  + ● getDelegates(key)​: Returns a ​Promise​ for an array of ​DomainObject​ instances,  + to which this domain object wishes to delegate the capability with the specified ​key​.  + ● invoke(key)​: Alias of ​getDelegates(key)​.  + ● doesDelegate(key)​: Returns ​true​ if the domain object does delegate the capability  + with the specified ​key​.   +  + The platform implementation of the ​delegation​ capability inspects the domain object’s  +type definition for a property ​delegates​, whose value is an array of strings describing which  +capabilities domain objects of that type wish to delegate. If this property is not present, the  +delegation​ capability will not be present in domain objects of that type.   +  +  + + + 56  +Editor +  + The ​editor​ capability is meant primarily for internal use by Edit mode, and helps to  +manage the behavior associated with exiting Edit mode via Save or Cancel. Its interface is not  +intended for general use. However, ​domainObject.hasCapability(‘editor’)​ is a  +useful way of determining whether or not we are looking at an object in Edit mode.  +   +  +Mutation +  + The ​mutation​ capability provides a means by which the contents of a domain object’s  +model can be modified. This capability is provided by the platform for all domain objects, and  +has the following interface:  +  + ● mutate(mutator, [timestamp])​: Modify the domain object’s model using the  + specified ​mutator​ function. After changes are made, the ​modified​ property of the  + model will be updated with the specified ​timestamp​, if one was provided, or with the  + current system time.  + ● invoke(...)​: Alias of ​mutate​.  +  + Changes to domain object models should only be made via the ​mutation​ capability;  +other platform behavior is likely to break (either by exhibiting undesired behavior, or failing to  +exhibit desired behavior) if models are modified by other means.  +  +Mutator Function +  + The ​mutator​ argument above is a function which will receive a cloned copy of the  +domain object’s model as a single argument. It may return:  +  + ● A ​Promise​, in which case the resolved value of the promise will be used to determine  + which of the following forms is used.  + ● Boolean ​false​, in which case the mutation is cancelled.  + ● A JavaScript object, in which case this object will be used as the new model for this  + domain object.  + 57  + ● No value (or, equivalently, ​undefined​), in which case the cloned copy (including any  + changes made in place by the mutator function) will be used as the new domain object  + model.  +  +Persistence +  + The ​persistence​ capability provides a mean for interacting with the underlying  +persistence service which stores this domain object’s model. It has the following interface:  +  + ● persist()​: Store the local version of this domain object, including any changes, to the  + persistence store. Returns a ​Promise​ for a boolean value, which will be true when the  + object was successfully persisted.  + ● refresh()​: Replace this domain object’s model with the most recent version from  + persistence. Returns a ​Promise​ which will resolve when the change has completed.  + ● getSpace()​: Return the string which identifies the persistence space which stores this  + domain object.  +  +Relationship +  + The ​relationship​ capability provides a means for accessing other domain objects  +with which this domain object has some typed relationship. It has the following interface:  +  + ● listRelationships()​: List all types of relationships exposed by this object. Returns  + an array of strings identifying the types of relationships.  + ● getRelatedObjects(relationship)​: Get all domain objects to which this domain  + object has the specified type of ​relationship​, which is a string identifier (as above.)  + Returns a ​Promise​ for an array of ​DomainObject​ instances.  +  + The platform implementation of the ​relationship​ capability is present for domain  +objects which has a ​relationships​ property in their model, whose value is an object  +containing key­value pairs, where keys are strings identifying relationship types, and values are  +arrays of domain object identifiers.  +  + 58  +Telemetry +  + The ​telemetry​ capability provides a means for accessing telemetry data associated  +with a domain object. It has the following interface:  +  + ● requestData([request])​: Request telemetry data for this specific domain object,  + using telemetry request parameters from the specified ​request​ if provided. This  + capability will fill in telemetry request properties as­needed for this domain object.  + Returns a ​Promise​ for a ​TelemetrySeries​.  + ● subscribe(callback, [request])​:  Subscribe to telemetry data updates for this  + specific domain object, using telemetry request parameters from the specified ​request  + if provided. This capability will fill in telemetry request properties as­needed for this  + domain object. The specified ​callback​ will be invoked with ​TelemetrySeries  + instances as they arrive. Returns a function which can be invoked to terminate the  + subscription, or ​undefined​ if no subscription could be obtained.  + ● getMetadata()​: Get metadata associated with this domain object’s telemetry.  +   + The platform implementation of the ​telemetry​ capability is present for domain objects  +which has a ​telemetry​ property in their model and/or type definition; this object will serve as a  +template for telemetry requests made using this object, and will also be returned by  +getMetadata() ​above.  +  +Type +   + The ​type​ capability exposes information about the domain object’s type. It has the  +same interface as ​Type​; see Core API.  +   +View +  + The ​view​ capability exposes views which are applicable to a given domain object. It has  +the following interface:  +   + ● invoke()​: Returns an array of extension definitions for views which are applicable for  + this domain object.  + 59  +Actions +  + Actions are reusable processes/behaviors performed by users within the system,  +typically upon domain objects.  +Action Categories +  + The platform understands the following action categories (specifiable as the ​category  +parameter of an action’s extension definition.)  +  + ● contextual​: Appears in context menus.  + ● view­control​: Appears in top­right area of view (as buttons) in Browse mode  +  +Platform Actions +  + The platform defines certain actions which can be utilized by way of a domain object’s  +action​ capability. Unless otherwise specified, these act upon (and modify) the object  +described by the ​domainObject​ property of the action’s context.  +  + ● cancel​: Cancel the current editing action (invoked from Edit mode.)  + ● compose​: Place an object in another object’s composition. The object to be added  + should be provided as the ​selectedObject​ of the action context.  + ● edit​: Start editing an object (enter Edit mode.)  + ● fullscreen​: Enter full screen mode.  + ● navigate​: Make this object the focus of navigation (e.g. highlight it within the tree,  + display a view of it to the right.)  + ● properties​: Show the “Edit Properties” dialog.  + ● remove​: Remove this domain object from its parent’s composition. (The parent, in this  + case, is whichever other domain object exposed this object by way of its ​composition  + capability.)  + ● save​: Save changes (invoked from Edit mode.)  + ● window​: Open this object in a new window.  +  + + + 60  +Policies +  + Policies are consulted to determine when certain behavior in Open MCT Web is allowed.  +Policy questions are assigned to certain categories, which broadly describe the type of decision  +being made; within each category, policies have a candidate (the thing which may or may not be  +allowed) and, optionally, a context (describing, generally, the context in which the decision is  +occurring.)   + The types of objects passed for “candidate” and “context” vary by category; these types  +are documented below.  +Policy Categories +  + The platform understands the following policy categories (specifiable as the ​category  +parameter of an policy’s extension definition.)  +  + ● action​: Determines whether or not a given action is allowable. The candidate  + argument here is an ​Action​; the context is its action context object.  + ● composition​: Determines whether or not domain objects of a given type are allowed  + to contain domain objects of another type. The candidate argument here is the  + container’s ​Type​; the context argument is the ​Type​ of the object to be contained.  + ● view​: Determines whether or not a view is applicable for a domain object. The  + candidate argument is the view’s extension definition; the context argument is the  + DomainObject​ to be viewed.  +  +  +  + + + 61  +Build, Test, Deploy +  + Open MCT Web is designed to support a broad variety of build and deployment options.  +The sources can be deployed in the same directory structure used during development. A few  +utilities are included to support development processes.  +  +Command-line Build +  + Open MCT Web includes a script for building via command line using Maven 3.0.4  +(​https://maven.apache.org/​).  +   + Invoking ​mvn clean install​ will:  +  + ● Check code style using JSLint. The build will fail if JSLint raises any warnings.  + ● Run the test suite (see below.) The build will fail if any tests fail.  + ● Populate version info (e.g. commit hash, build time.)  + ● Produce a web archive (​.war​) artifact in the ​target​ directory.  +  + The produced artifact contains a subset of the repository’s own folder hierarchy, omitting  +tests and example bundles.   + Note that an internet connection is required to run this build, in order to download build  +dependencies.  +  +Test Suite +  + Open MCT Web uses Jasmine (​http://jasmine.github.io/​) for automated testing. The file  +test.html​, included at the top level of the source repository, can be run from the browser to  +perform tests for all active bundles, as defined in ​bundle.json​.  + To define tests for a bundle:  +   + ● Include a directory named ​test​ within that bundle.  + ● In the ​test​ directory, include a file named ​suite.json​. This will identify which scripts  + will be tested.  + ● The file ​suite.json​ must contain a JSON array of strings, where each string is the  + name of a script to be tested. These names should include any directory paths to the  + script after (but not including) the ​src​ folder, and should not include the file’s ​.js  + extension. (Note that while Open MCT Web’s framework allows a different name to be  + chosen for the ​src​ directory, the test runner does not: This directory must be named  + src​ for the test runner to find it.)  + 62  + ● For each script to be tested, a corresponding test script should be located in the bundle’s  + test​ directory. This should include the suffix ​Spec​ at the end of the filename (but  + before the ​.js​ extension.) This test script should be an AMD module which uses the  + Jasmine API to declare its test behavior. It should declare an AMD dependency on the  + script to be tested, using a relative path.  +   + For example, if writing tests for a bundle at ​example/foo​ with two scripts:  + ● example/foo/src/controllers/FooController.js  + ● example/foo/src/directives/FooDirective.js  +  + First, these scripts should be identified in ​example/foo/test/suite.json​, e.g. with  +contents:  + [ "controllers/FooController", "directives/FooDirective" ]  +  + Then, scripts which describe these tests should be written. For example, test  +example/foo/test/controllers/FooControllerSpec.js​ could look like:  +  +/*global define,Promise,describe,it,expect,beforeEach*/  +  +define(  +    ["../../src/controllers/FooController"],  +    function (FooController) {  +        "use strict";  +  +        describe("The foo controller", function () {  +            it("does something", function () {  +                var controller = new FooController();  +                expect(controller.foo()).toEqual("foo");  +            });  +        });  +    }  +);  +  +Code Coverage +  + In addition to running tests, the test runner will also capture code coverage information  +using Blanket.JS (​http://blanketjs.org/​) and display this at the bottom of the screen. Currently,  +only statement coverage is displayed.  + + 63  +Deployment +  + Open MCT Web is built to be flexible in terms of the deployment strategies it supports. In  +order to run in the browser, Open MCT Web needs:  +  + 1. HTTP access to sources/resources for the framework, platform, and all active bundles.  + 2. Access to any external services utilized by active bundles. (This means that external  + services need to support HTTP or some other web­accessible interface, like  + WebSockets.)  +  + Any HTTP server capable of serving flat files is sufficient for the first point. The  +command­line build also packages Open MCT Web into a ​.war​ file for easier deployment on  +containers such as Apache Tomcat.  + The second point may be less flexible, as it depends upon the specific services to be  +utilized by Open MCT Web. Because of this, it is often the set of external services (and the  +manner in which they are exposed) that determine how to deploy Open MCT Web.  +  + One important constraint to consider in this context is the browser’s same origin policy. If  +external services are not on the same apparent host and port as the client (from the perspective  +of the browser) then access may be disallowed. There are two workarounds if this occurs:  + ● Make the external service appear to be on the same host/port, either by actually  + deploying it there, or by proxying requests to it.  + ● Enable CORS (cross­origin resource sharing) on the external service. This is only  + possible if the external service can be configured to support CORS. Care should be  + exercised if choosing this option to ensure that the chosen configuration does not create  + a security vulnerability.  +  + Examples of deployment strategies (and the conditions under which they make the most  +sense) include:  +  + ● If the external services that Open MCT Web will utilize are all running on Apache Tomcat  + (​https://tomcat.apache.org/​), then it makes sense to run Open MCT Web from the same  + Tomcat instance as a separate web application. The ​.war​ artifact produced by the  + command line build facilitates this deployment option. (See  + https://tomcat.apache.org/tomcat­8.0­doc/deployer­howto.html ​ for general information on  + deploying in Tomcat.)  + ● If a variety of external services will be running from a variety of hosts/ports, then it may  + make sense to use a web server that supports proxying, such as the Apache HTTP  + Server (​http://httpd.apache.org/​). In this configuration, the HTTP server would be  + configured to proxy (or reverse proxy) requests at specific paths to the various external  + services, while providing Open MCT Web as flat files from a different path.  + 64  + ● If a single server component is being developed to handle all server­side needs of an  + Open MCT Web instance, it can make sense to serve Open MCT Web (as flat files) from  + the same component using an embedded HTTP server such as Nancy  + (​http://nancyfx.org/​).  + ● If no external services are needed (or if the “external services” will just be generating flat  + files to read) it makes sense to utilize a lightweight flat file HTTP server such as Lighttpd  + (​http://www.lighttpd.net/​). In this configuration, Open MCT Web sources/resources would  + be placed at one path, while the files generated by the external service are placed at  + another path.  + ● If all external services support CORS, it may make sense to have an HTTP server that is  + solely responsible for making Open MCT Web sources/resources available, and to have  + Open MCT Web contact these external services directly. Again, lightweight HTTP  + servers such as Lighttpd (​http://www.lighttpd.net/​) are useful in this circumstance. The  + downside of this option is that additional configuration effort is required, both to enable  + CORS on the external services, and to ensure that Open MCT Web can correctly locate  + these services.  +  + Another important consideration is authentication. By design, Open MCT Web does not  +handle user authentication. Instead, this should typically be treated as a deployment­time  +concern, where authentication is handled by the HTTP server which provides Open MCT Web,  +or an external access management system.  +  +Configuration +  + In most of the deployment options above, some level of configuration is likely to be  +needed or desirable to make sure that bundles can reach the external services they need to  +reach. Most commonly this means providing the path or URL to an external service.  + Configurable parameters within Open MCT Web are specified via constants (literally, as  +extensions of the ​constants​ category) and accessed via dependency injection by the scripts  +which need them. Reasonable defaults for these constants are provided in the bundle where  +they are used. Plugins are encouraged to follow the same pattern.  + Constants may be specified in any bundle; if multiple constants are specified with the  +same ​key​, the highest­priority one will be used. This allows default values to be overridden by  +specifying constants with higher priority.  +   + This permits at least three configuration approaches:  +  + ● Modify the constants defined in their original bundles when deploying. This is generally  + undesirable due to the amount of manual work required and potential for error, but is  + viable if there are a small number of constants to change.  + ● Add a separate configuration bundle which overrides the values of these constants. This  + is particularly appropriate when multiple configurations (e.g. development, test,  + 65  + production) need to be managed easily; these can be swapped quickly by changing the  + set of active bundles in ​bundles.json​.  + ● Deploy Open MCT Web and its external services in such a fashion that the default paths  + to reach external services are all correct.  +  +Configuration Constants +  + The following configuration constants are recognized by Open MCT Web bundles:  +  + ● CouchDB adapter, ​platform/persistence/coucb  + ○ COUCHDB_PATH​: URL or path to the CouchDB database to be used for domain  + object persistence. Should not include a trailing slash.  + ● ElasticSearch adapter, ​platform/persistence/elastic  + ○ ELASTIC_ROOT​: URL or path to the ElasticSearch instance to be used for  + domain object persistence. Should not include a trailing slash.  + ○ ELASTIC_PATH​: Path relative to the ElasticSearch instance where domain  +  object models should be persisted. Should take the form ​/​.  + 66  + + -This is a placeholder for the developer guide. From 825d93cee3f949faf733a916e31aefe08c380d4f Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Thu, 24 Sep 2015 10:34:32 -0700 Subject: [PATCH 089/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Changed slider elements layout from relative to absolute positioning; Refined layout in input-holder; Tweaks to hover classes; --- .../commonUI/general/res/sass/_icons.scss | 3 + .../commonUI/general/res/sass/_mixins.scss | 7 +- .../res/sass/controls/_time-controller.scss | 62 +- .../general/res/sass/plots/_plots-main.scss | 2 +- .../templates/controls/time-controller.html | 23 +- .../espresso/res/css/theme-espresso.css | 130 +- .../themes/espresso/res/sass/_constants.scss | 7 +- .../themes/snow/res/css/theme-snow.css | 5938 ++++++++++++++++- .../themes/snow/res/sass/_constants.scss | 13 +- 9 files changed, 5988 insertions(+), 197 deletions(-) diff --git a/platform/commonUI/general/res/sass/_icons.scss b/platform/commonUI/general/res/sass/_icons.scss index c6881467a1..cc710340e4 100644 --- a/platform/commonUI/general/res/sass/_icons.scss +++ b/platform/commonUI/general/res/sass/_icons.scss @@ -29,6 +29,9 @@ } .ui-symbol { + &.type-icon { + color: $colorObjHdrIc; + } &.icon { color: $colorKey; &.alert { diff --git a/platform/commonUI/general/res/sass/_mixins.scss b/platform/commonUI/general/res/sass/_mixins.scss index d0b08491b7..9b128dca6a 100644 --- a/platform/commonUI/general/res/sass/_mixins.scss +++ b/platform/commonUI/general/res/sass/_mixins.scss @@ -347,9 +347,10 @@ /* This doesn't work on an element inside an element with absolute positioning that has height: auto */ //position: relative; top: 50%; - -webkit-transform: translateY(-50%); - -ms-transform: translateY(-50%); - transform: translateY(-50%); + @include webkitProp(transform, translateY(-50%)); + //-webkit-transform: translateY(-50%); + //-ms-transform: translateY(-50%); + //transform: translateY(-50%); } @mixin verticalCenterBlock($holderH, $itemH) { diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index 1391a84e63..d3e03cb7d1 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -1,12 +1,9 @@ .l-time-controller { $timeRangeSliderLROffset: 125px; - //$sliderKnobW: 9px; - $r1H: 20px; + $r1H: 33px; $r2H: 20px; - $r3H: 10px; + $r3H: 20px; - position: relative; - margin: $interiorMarginLg 0; min-width: 400px; .l-time-range-inputs-holder, @@ -18,8 +15,10 @@ .l-time-range-slider-holder, .l-time-range-ticks-holder { - margin-bottom: $interiorMargin; - position: relative; + //@include test(); + @include absPosDefault(0, visible); + @include box-sizing(border-box); + top: auto; } .l-time-range-slider, .l-time-range-ticks { @@ -29,10 +28,19 @@ .l-time-range-inputs-holder { //@include test(red); - height: $r1H; - .l-time-range-input { - //display: inline-block; - margin-right: $interiorMarginLg; + height: $r1H; bottom: $r2H + $r3H + ($interiorMarginSm * 2); + padding-top: $interiorMargin; + border-top: 1px solid $colorInteriorBorder; + .type-icon { + font-size: 120%; + vertical-align: middle; + } + .l-time-range-input, + .l-time-range-inputs-elem { + margin-right: $interiorMargin; + .lbl { + color: $colorPlotLabelFg; + } .ui-symbol.icon { font-size: 11px; width: 11px; @@ -48,35 +56,36 @@ .l-time-range-slider-holder { //@include test(green); - height: $r2H; + height: $r2H; bottom: $r3H + ($interiorMarginSm * 1); .range-holder { @include box-shadow(none); background: none; border: none; - //height: 75%; - } + } } .l-time-range-ticks-holder { height: $r3H; .l-time-range-ticks { - border-top: 1px solid $colorInteriorBorder; + border-top: 1px solid $colorTick; .tick { - background-color: $colorInteriorBorder; + background-color: $colorTick; border:none; + height: 5px; width: 1px; margin-left: -1px; + position: absolute; &:first-child { margin-left: 0; } .l-time-range-tick-label { - color: lighten($colorInteriorBorder, 20%); + @include webkitProp(transform, translateX(-50%)); + color: $colorPlotLabelFg; + display: inline-block; font-size: 0.7em; position: absolute; - margin-left: -0.5 * $tickLblW; - text-align: center; - top: $r3H; - width: $tickLblW; + top: 8px; + white-space: nowrap; z-index: 2; } } @@ -86,19 +95,13 @@ .knob { width: $sliderKnobW; .range-value { - //$w: 75px; - //@include test(); - //@include verticalCenter(); position: absolute; height: $r2H; line-height: $r2H; - //top: 50%; - //margin-top: -7px; // Label is 13px high white-space: nowrap; - //width: $w; } &:hover .range-value { - color: $colorKey; + color: $sliderColorKnobHov; } &.knob-l { //margin-left: $sliderKnobW / -2; @@ -116,6 +119,9 @@ } } +//.slot.range-holder { +// background-color: $sliderColorRangeHolder; +//} .s-time-range-val { //@include test(); diff --git a/platform/commonUI/general/res/sass/plots/_plots-main.scss b/platform/commonUI/general/res/sass/plots/_plots-main.scss index 67acb46e28..c1ce9fa920 100644 --- a/platform/commonUI/general/res/sass/plots/_plots-main.scss +++ b/platform/commonUI/general/res/sass/plots/_plots-main.scss @@ -89,7 +89,7 @@ $plotDisplayArea: ($legendH + $interiorMargin, 0, $xBarH + $interiorMargin, $yBa .gl-plot-label, .l-plot-label { // @include test(yellow); - color: lighten($colorBodyFg, 20%); + color: $colorPlotLabelFg; position: absolute; text-align: center; // text-transform: uppercase; diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index dd70db9113..f2bfb01cbf 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -24,12 +24,13 @@
- - Start: - + C + + + {{startOuterText}} - - + +
@@ -44,12 +45,14 @@ - - End: - + to + + + + {{endOuterText}} - - + +
diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index 6c840321a8..3a90c66458 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -596,49 +596,52 @@ mct-container { border-right: 5px solid transparent; } /* line 32, ../../../../general/res/sass/_icons.scss */ +.ui-symbol.type-icon { + color: #cccccc; } +/* line 35, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon { color: #0099cc; } - /* line 34, ../../../../general/res/sass/_icons.scss */ + /* line 37, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert { color: #ff3c00; } - /* line 36, ../../../../general/res/sass/_icons.scss */ + /* line 39, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert:hover { color: #ff8a66; } - /* line 40, ../../../../general/res/sass/_icons.scss */ + /* line 43, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.major { font-size: 1.65em; } -/* line 44, ../../../../general/res/sass/_icons.scss */ +/* line 47, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon-calendar:after { content: "\e605"; } -/* line 49, ../../../../general/res/sass/_icons.scss */ +/* line 52, ../../../../general/res/sass/_icons.scss */ .bar .ui-symbol { display: inline-block; } -/* line 53, ../../../../general/res/sass/_icons.scss */ +/* line 56, ../../../../general/res/sass/_icons.scss */ .invoke-menu { text-shadow: none; display: inline-block; } -/* line 58, ../../../../general/res/sass/_icons.scss */ +/* line 61, ../../../../general/res/sass/_icons.scss */ .s-menu .invoke-menu, .icon.major .invoke-menu { margin-left: 3px; } -/* line 63, ../../../../general/res/sass/_icons.scss */ +/* line 66, ../../../../general/res/sass/_icons.scss */ .menu .type-icon, .tree-item .type-icon, .super-menu.menu .type-icon { position: absolute; } -/* line 73, ../../../../general/res/sass/_icons.scss */ +/* line 76, ../../../../general/res/sass/_icons.scss */ .l-icon-link:before { content: "\f4"; } -/* line 77, ../../../../general/res/sass/_icons.scss */ +/* line 80, ../../../../general/res/sass/_icons.scss */ .l-icon-alert { display: none !important; } - /* line 79, ../../../../general/res/sass/_icons.scss */ + /* line 82, ../../../../general/res/sass/_icons.scss */ .l-icon-alert:before { color: #ff3c00; content: "!"; } @@ -1867,7 +1870,7 @@ label.checkbox.custom { left: auto; } /* line 317, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob:hover { - background-color: rgba(0, 153, 204, 0.5); } + background-color: #0099cc; } /* line 335, ../../../../general/res/sass/controls/_controls.scss */ .slider .range { -moz-transition-property: visibility, opacity, background-color, border-color; @@ -2224,20 +2227,28 @@ label.checkbox.custom { /* line 1, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller { - position: relative; - margin: 10px 0; min-width: 400px; } - /* line 12, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 9, ../../../../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 17, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 14, ../../../../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 { - margin-bottom: 5px; - position: relative; } - /* line 24, ../../../../general/res/sass/controls/_time-controller.scss */ + 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 23, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-slider, .l-time-controller .l-time-range-ticks { overflow: visible; @@ -2248,77 +2259,94 @@ label.checkbox.custom { left: 0; width: auto; height: auto; } - /* line 30, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 29, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-inputs-holder { - height: 20px; } - /* line 33, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-inputs-holder .l-time-range-input { - margin-right: 10px; } - /* line 36, ../../../../general/res/sass/controls/_time-controller.scss */ - .l-time-controller .l-time-range-inputs-holder .l-time-range-input .ui-symbol.icon { + height: 33px; + bottom: 46px; + padding-top: 5px; + border-top: 1px solid rgba(153, 153, 153, 0.1); } + /* line 34, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-inputs-holder .type-icon { + font-size: 120%; + vertical-align: middle; } + /* line 38, ../../../../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 41, ../../../../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 44, ../../../../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-inputs-elem .ui-symbol.icon { font-size: 11px; width: 11px; } - /* line 43, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 51, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-slider, .l-time-controller .l-time-range-ticks { left: 125px; right: 125px; } - /* line 49, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 57, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-slider-holder { - height: 20px; } - /* line 52, ../../../../general/res/sass/controls/_time-controller.scss */ + height: 20px; + bottom: 23px; } + /* line 60, ../../../../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 60, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 67, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder { - height: 10px; } - /* line 62, ../../../../general/res/sass/controls/_time-controller.scss */ + height: 20px; } + /* line 69, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder .l-time-range-ticks { - border-top: 1px solid rgba(153, 153, 153, 0.1); } - /* line 64, ../../../../general/res/sass/controls/_time-controller.scss */ + border-top: 1px solid rgba(255, 255, 255, 0.2); } + /* line 71, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .l-time-range-ticks-holder .l-time-range-ticks .tick { - background-color: rgba(153, 153, 153, 0.1); + background-color: rgba(255, 255, 255, 0.2); border: none; + height: 5px; width: 1px; - margin-left: -1px; } - /* line 69, ../../../../general/res/sass/controls/_time-controller.scss */ + margin-left: -1px; + position: absolute; } + /* line 78, ../../../../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 72, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 81, ../../../../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 { - color: rgba(204, 204, 204, 0.1); + transform: translateX(-50%); + -webkit-transform: translateX(-50%); + color: #666666; + display: inline-block; font-size: 0.7em; position: absolute; - margin-left: -25px; - text-align: center; - top: 10px; - width: 50px; + top: 8px; + white-space: nowrap; z-index: 2; } - /* line 86, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 95, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob { width: 5px; } - /* line 88, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 97, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob .range-value { position: absolute; height: 20px; line-height: 20px; white-space: nowrap; } - /* line 100, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 103, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob:hover .range-value { color: #0099cc; } - /* line 105, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 108, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob.knob-l .range-value { text-align: right; right: 10px; } - /* line 112, ../../../../general/res/sass/controls/_time-controller.scss */ + /* line 115, ../../../../general/res/sass/controls/_time-controller.scss */ .l-time-controller .knob.knob-r .range-value { left: 10px; } -/* line 120, ../../../../general/res/sass/controls/_time-controller.scss */ +/* line 126, ../../../../general/res/sass/controls/_time-controller.scss */ .s-time-range-val { -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -4923,7 +4951,7 @@ table { /* line 89, ../../../../general/res/sass/plots/_plots-main.scss */ .gl-plot .gl-plot-label, .gl-plot .l-plot-label { - color: #cccccc; + color: #666666; position: absolute; text-align: center; } /* line 97, ../../../../general/res/sass/plots/_plots-main.scss */ diff --git a/platform/commonUI/themes/espresso/res/sass/_constants.scss b/platform/commonUI/themes/espresso/res/sass/_constants.scss index 32a8dc1b8f..38585a13d9 100644 --- a/platform/commonUI/themes/espresso/res/sass/_constants.scss +++ b/platform/commonUI/themes/espresso/res/sass/_constants.scss @@ -21,10 +21,11 @@ $colorBtnIcon: $colorKey; $colorInvokeMenu: #fff; $contrastInvokeMenuPercent: 20%; $sliderColorBase: $colorKey; +$sliderColorRangeHolder: rgba(black, 0.1); $sliderColorRange: rgba($sliderColorBase, 0.3); $sliderColorRangeHov: rgba($sliderColorBase, 0.5); $sliderColorKnob: $sliderColorRange; -$sliderColorKnobHov: $sliderColorRangeHov; +$sliderColorKnobHov: $sliderColorBase; $sliderKnobW: 5px; // General Colors @@ -40,6 +41,7 @@ $colorFormSectionHeader: rgba(#000, 0.2); $colorInvokeMenu: #fff; $colorObjHdrTxt: $colorBodyFg; $colorObjHdrIc: pullForward($colorObjHdrTxt, 20%); +$colorTick: rgba(white, 0.2); // Menu colors $colorMenuBg: pullForward($colorBodyBg, 23%); @@ -112,9 +114,10 @@ $colorTabHeaderBorder: $colorBodyBg; // Plot $colorPlotBg: rgba(black, 0.1); $colorPlotFg: $colorBodyFg; -$colorPlotHash: rgba(white, 0.2); +$colorPlotHash: $colorTick; $stylePlotHash: dashed; $colorPlotAreaBorder: $colorInteriorBorder; +$colorPlotLabelFg: pushBack($colorPlotFg, 20%); // Tree $colorItemTreeIcon: $colorKey; diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index 942a164c5d..4d43df559d 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -1,101 +1,5839 @@ -/* -Error: Undefined variable: "$sliderColorKnob". - on line 316 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss - from line 39 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss - from line 36 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss +@charset "UTF-8"; +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 5, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; } -Backtrace: -/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss:316 -/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss:39 -/Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss:36 -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/script/tree/variable.rb:49:in `_perform' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/script/tree/node.rb:50:in `perform' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:394:in `visit_prop' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block (2 levels) in visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `map' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block in visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:428:in `visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block (2 levels) in visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `map' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:430:in `block in visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:428:in `visit_rule' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block (2 levels) in visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `map' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block in visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `block in with_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `with_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:322:in `visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block (2 levels) in visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `map' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:325:in `block in visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `block in with_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:88:in `with_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:322:in `visit_import' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `block in with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:115:in `with_frame' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/stack.rb:79:in `with_base' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:158:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `block in visit_children' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `map' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:52:in `visit_children' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:167:in `block in visit_children' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:179:in `with_environment' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:166:in `visit_children' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `block in visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:186:in `visit_root' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/base.rb:36:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:157:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/visitors/perform.rb:8:in `visit' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb:36:in `css_tree' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/tree/root_node.rb:20:in `render' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/engine.rb:268:in `render' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:492:in `update_stylesheet' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:215:in `block in update_stylesheets' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:209:in `each' -/Library/Ruby/Gems/2.0.0/gems/sass-3.4.13/lib/sass/plugin/compiler.rb:209:in `update_stylesheets' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/sass_compiler.rb:40:in `compile!' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/update_project.rb:49:in `perform' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/base.rb:18:in `execute' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/commands/project_base.rb:19:in `execute' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:43:in `perform!' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/lib/compass/exec/sub_command_ui.rb:15:in `run!' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:30:in `block in ' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:44:in `call' -/Library/Ruby/Gems/2.0.0/gems/compass-1.0.3/bin/compass:44:in `' -/usr/bin/compass:23:in `load' -/usr/bin/compass:23:in `
' -*/ -body:before { - white-space: pre; - font-family: monospace; - content: "Error: Undefined variable: \"$sliderColorKnob\".\A on line 316 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/controls/_controls.scss\A from line 39 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/general/res/sass/_main.scss\A from line 36 of /Users/iMac/dev/nasa/wtd-dev/platform/commonUI/themes/snow/res/sass/theme-snow.scss"; } +/* line 22, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; } + +/* line 24, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; } + +/* line 26, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; } + +/* line 28, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; } + +/* line 30, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; } + /* line 103, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ + q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; } + +/* line 32, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; } + +/* line 116, ../../../../../../../../../../../Library/Ruby/Gems/2.0.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/*********************************************** CONTROLS, FORM ELEMENTS */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/***************************************************************************** + * 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. + *****************************************************************************/ +/************************** FEATURES */ +/************************** VERY INFLUENTIAL GLOBAL DIMENSIONS */ +/************************** RATIOS */ +/************************** LAYOUT */ +/************************** CONTROLS */ +/************************** PATHS */ +/************************** TIMINGS */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */ +/************************** MOBILE TREE MENU DIMENSIONS */ +/************************** WINDOW DIMENSIONS FOR RWD */ +/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */ +/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */ +/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/_effects.scss */ +.disabled, +a.disabled { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30); + opacity: 0.3; + pointer-events: none !important; + cursor: default !important; } + +/* line 29, ../../../../general/res/sass/_effects.scss */ +.incised { + -moz-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; + box-shadow: inset rgba(0, 0, 0, 0.8) 0 1px 5px; + border-bottom: 1px solid rgba(255, 255, 255, 0.3); } + +/* line 34, ../../../../general/res/sass/_effects.scss */ +.outline { + border: 1px solid white; } + +/* line 38, ../../../../general/res/sass/_effects.scss */ +.test-stripes { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiNmZmZmMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); + background-size: 100%; + background-image: -moz-linear-gradient(135deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); + background-image: -webkit-linear-gradient(135deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); + background-image: linear-gradient(-45deg, rgba(255, 255, 0, 0.1) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 0, 0.1) 50%, rgba(255, 255, 0, 0.1) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); + background-repeat: repeat; + background-size: 40px 40px; } + +/* line 42, ../../../../general/res/sass/_effects.scss */ +.test { + background-color: rgba(255, 204, 0, 0.2); } + +@-moz-keyframes pulse { + 0% { + opacity: 0.5; } + 100% { + opacity: 1; } } +@-webkit-keyframes pulse { + 0% { + opacity: 0.5; } + 100% { + opacity: 1; } } +@keyframes pulse { + 0% { + opacity: 0.5; } + 100% { + opacity: 1; } } +/* line 69, ../../../../general/res/sass/_effects.scss */ +.pulse { + -moz-animation-name: pulse; + -webkit-animation-name: pulse; + animation-name: pulse; + -moz-animation-duration: 750ms; + -webkit-animation-duration: 750ms; + animation-duration: 750ms; + -moz-animation-direction: alternate; + -webkit-animation-direction: alternate; + animation-direction: alternate; + -moz-animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -moz-animation-timing-function: ease-in-out; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/************************** FONTS */ +@font-face { + /* + * Use https://icomoon.io/app with /platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json + */ + font-family: 'symbolsfont'; + src: url("../../../../general/res/fonts/symbols/wtdsymbols.eot"); + src: url("../../../../general/res/fonts/symbols/wtdsymbols.eot?#iefix") format("embedded-opentype"), url("../../../../general/res/fonts/symbols/wtdsymbols.woff") format("woff"), url("../../../../general/res/fonts/symbols/wtdsymbols.ttf") format("truetype"), url("../../../../general/res/fonts/symbols/wtdsymbols.svg#armataregular") format("svg"); + font-weight: normal; + font-style: normal; } +/* line 37, ../../../../general/res/sass/_global.scss */ +.ui-symbol { + font-family: 'symbolsfont'; } + +/************************** HTML ENTITIES */ +/* line 42, ../../../../general/res/sass/_global.scss */ +a { + color: #ccc; + cursor: pointer; + text-decoration: none; } + /* line 46, ../../../../general/res/sass/_global.scss */ + a:hover { + color: #fff; } + +/* line 51, ../../../../general/res/sass/_global.scss */ +body, html { + -webkit-font-smoothing: subpixel-antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: #fcfcfc; + color: #666; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 100%; + height: 100%; + width: 100%; + overflow: hidden; } + +/* line 64, ../../../../general/res/sass/_global.scss */ +em { + font-style: normal; } + +/* line 68, ../../../../general/res/sass/_global.scss */ +input, textarea { + font-family: Helvetica, Arial, sans-serif; } + +/* line 72, ../../../../general/res/sass/_global.scss */ +input[type="text"] { + vertical-align: baseline; + padding: 3px 5px !important; } + +/* line 77, ../../../../general/res/sass/_global.scss */ +h1, h2, h3 { + margin: 0; } + +/* line 81, ../../../../general/res/sass/_global.scss */ +h1 { + font-size: 1.7em; + font-weight: normal !important; + line-height: 120%; + margin-bottom: 20px; + margin-top: 0; } + +/* line 89, ../../../../general/res/sass/_global.scss */ +p { + margin-bottom: 10px; } + +/* line 93, ../../../../general/res/sass/_global.scss */ +mct-container { + display: block; } + +/* line 97, ../../../../general/res/sass/_global.scss */ +.abs, .s-menu span.l-click-area { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: auto; + width: auto; } + +/* line 107, ../../../../general/res/sass/_global.scss */ +.code, .codehilite { + font-family: "Lucida Console", monospace; + font-size: 0.7em; + line-height: 150%; + white-space: pre; } + +/* line 114, ../../../../general/res/sass/_global.scss */ +.codehilite { + background-color: rgba(102, 102, 102, 0.1); + padding: 1em; } + +/* line 120, ../../../../general/res/sass/_global.scss */ +.align-right { + text-align: right; } + +/* line 124, ../../../../general/res/sass/_global.scss */ +.centered { + text-align: center; } + +/* line 128, ../../../../general/res/sass/_global.scss */ +.no-margin { + margin: 0; } + +/* line 132, ../../../../general/res/sass/_global.scss */ +.ds { + -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; + box-shadow: rgba(0, 0, 0, 0.7) 0 4px 10px 2px; } + +/* line 136, ../../../../general/res/sass/_global.scss */ +.hide, +.hidden { + display: none !important; } + +/* line 141, ../../../../general/res/sass/_global.scss */ +.sep { + color: rgba(255, 255, 255, 0.2); } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 26, ../../../../general/res/sass/_about.scss */ +.l-about.abs, .s-menu span.l-about.l-click-area { + overflow: auto; } +/* line 31, ../../../../general/res/sass/_about.scss */ +.l-about .l-logo-holder { + position: relative; + height: 45%; } + /* line 34, ../../../../general/res/sass/_about.scss */ + .l-about .l-logo-holder .l-logo { + position: absolute; } + /* line 37, ../../../../general/res/sass/_about.scss */ + .l-about .l-logo-holder .l-logo.l-logo-app { + top: 0; + right: 15%; + bottom: 0; + left: 15%; } + /* line 41, ../../../../general/res/sass/_about.scss */ + .l-about .l-logo-holder .l-logo.s-logo-nasa { + background-image: url("../../../../general/res/images/logo-nasa.svg"); + top: 10px; + right: auto; + bottom: auto; + left: 10px; + width: 10%; + height: auto; + padding-bottom: 5%; + padding-top: 5%; } +/* line 50, ../../../../general/res/sass/_about.scss */ +.l-about .l-content { + position: relative; + margin-top: 10px; } + +/* line 57, ../../../../general/res/sass/_about.scss */ +.s-about { + line-height: 120%; } + /* line 61, ../../../../general/res/sass/_about.scss */ + .s-about a { + color: #84b3ff; } + /* line 68, ../../../../general/res/sass/_about.scss */ + .s-about .s-logo-holder { + background: url("../../../../general/res/images/bg-about-openmctweb.jpg") no-repeat center; + background-size: cover; } + /* line 72, ../../../../general/res/sass/_about.scss */ + .s-about .s-logo { + background-position: center; + background-repeat: no-repeat; + background-size: contain; } + /* line 78, ../../../../general/res/sass/_about.scss */ + .s-about .s-logo-openmctweb { + background-image: url("../../../../general/res/images/logo-openmctweb-shdw.svg"); } + /* line 81, ../../../../general/res/sass/_about.scss */ + .s-about .s-btn, .s-about .s-menu { + line-height: 2em; } + /* line 85, ../../../../general/res/sass/_about.scss */ + .s-about .l-licenses-software .l-license-software { + border-top: 1px solid rgba(102, 102, 102, 0.2); + padding: 0.5em 0; } + /* line 88, ../../../../general/res/sass/_about.scss */ + .s-about .l-licenses-software .l-license-software:first-child { + border-top: none; } + /* line 91, ../../../../general/res/sass/_about.scss */ + .s-about .l-licenses-software .l-license-software em { + color: #999999; } + /* line 98, ../../../../general/res/sass/_about.scss */ + .s-about .l-licenses-software .l-license-software h3 { + font-size: 1.25em; } + /* line 101, ../../../../general/res/sass/_about.scss */ + .s-about .l-licenses-software .l-license-software .s-license-text { + font-size: 0.9em; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 24, ../../../../general/res/sass/_text.scss */ +.abs.l-standalone, .s-menu span.l-standalone.l-click-area { + padding: 5% 20%; } + +/* line 29, ../../../../general/res/sass/_text.scss */ +.s-text { + font-size: 0.8em; } + /* line 31, ../../../../general/res/sass/_text.scss */ + .s-text ol, .s-text ul { + list-style: square; + margin-left: 1.5em; } + /* line 39, ../../../../general/res/sass/_text.scss */ + .s-text h1, .s-text h2, .s-text h3 { + color: #333333; + font-weight: normal !important; + margin-bottom: 1em; } + /* line 45, ../../../../general/res/sass/_text.scss */ + .s-text h2 { + border-top: 1px solid rgba(102, 102, 102, 0.2); + font-size: 1.5em; + margin-top: 2em; + padding-top: 1em; } + /* line 52, ../../../../general/res/sass/_text.scss */ + .s-text h3 { + margin-top: 2em; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/_icons.scss */ +.triangle { + width: 0; + height: 0; + border-top: 5px solid transparent; + border-left: 5px solid #0099cc; + border-bottom: 5px solid transparent; } + /* line 26, ../../../../general/res/sass/_icons.scss */ + .triangle.triangle-down { + width: 0; + height: 0; + border-left: 5px solid transparent; + border-top: 5px solid #0099cc; + border-right: 5px solid transparent; } + +/* line 32, ../../../../general/res/sass/_icons.scss */ +.ui-symbol.type-icon { + color: #b3b3b3; } +/* line 35, ../../../../general/res/sass/_icons.scss */ +.ui-symbol.icon { + color: #0099cc; } + /* line 37, ../../../../general/res/sass/_icons.scss */ + .ui-symbol.icon.alert { + color: #ff3c00; } + /* line 39, ../../../../general/res/sass/_icons.scss */ + .ui-symbol.icon.alert:hover { + color: #ff8a66; } + /* line 43, ../../../../general/res/sass/_icons.scss */ + .ui-symbol.icon.major { + font-size: 1.65em; } +/* line 47, ../../../../general/res/sass/_icons.scss */ +.ui-symbol.icon-calendar:after { + content: "\e605"; } + +/* line 52, ../../../../general/res/sass/_icons.scss */ +.bar .ui-symbol { + display: inline-block; } + +/* line 56, ../../../../general/res/sass/_icons.scss */ +.invoke-menu { + text-shadow: none; + display: inline-block; } + +/* line 61, ../../../../general/res/sass/_icons.scss */ +.s-menu .invoke-menu, +.icon.major .invoke-menu { + margin-left: 3px; } + +/* line 66, ../../../../general/res/sass/_icons.scss */ +.menu .type-icon, +.tree-item .type-icon, +.super-menu.menu .type-icon { + position: absolute; } + +/* line 76, ../../../../general/res/sass/_icons.scss */ +.l-icon-link:before { + content: "\f4"; } + +/* line 80, ../../../../general/res/sass/_icons.scss */ +.l-icon-alert { + display: none !important; } + /* line 82, ../../../../general/res/sass/_icons.scss */ + .l-icon-alert:before { + color: #ff3c00; + content: "!"; } + +/* line 13, ../../../../general/res/sass/_limits.scss */ +[class*="s-limit"]:before { + display: inline-block; + font-family: symbolsfont; + font-size: 0.75em; + font-style: normal !important; + margin-right: 3px; + vertical-align: middle; } + +/* line 23, ../../../../general/res/sass/_limits.scss */ +.s-limit-upr-red { + background: rgba(255, 0, 0, 0.3) !important; } + /* line 4, ../../../../general/res/sass/_limits.scss */ + .s-limit-upr-red:before { + color: red; + content: "ë"; } + +/* line 24, ../../../../general/res/sass/_limits.scss */ +.s-limit-upr-yellow { + background: rgba(255, 170, 0, 0.3) !important; } + /* line 4, ../../../../general/res/sass/_limits.scss */ + .s-limit-upr-yellow:before { + color: #ffaa00; + content: "í"; } + +/* line 25, ../../../../general/res/sass/_limits.scss */ +.s-limit-lwr-yellow { + background: rgba(255, 170, 0, 0.3) !important; } + /* line 4, ../../../../general/res/sass/_limits.scss */ + .s-limit-lwr-yellow:before { + color: #ffaa00; + content: "ì"; } + +/* line 26, ../../../../general/res/sass/_limits.scss */ +.s-limit-lwr-red { + background: rgba(255, 0, 0, 0.3) !important; } + /* line 4, ../../../../general/res/sass/_limits.scss */ + .s-limit-lwr-red:before { + color: red; + content: "î"; } + +/* line 1, ../../../../general/res/sass/_data-status.scss */ +.s-stale { + color: rgba(51, 51, 51, 0.5) !important; + font-style: italic; } + /* line 3, ../../../../general/res/sass/_data-status.scss */ + .s-stale .td { + color: rgba(51, 51, 51, 0.5) !important; + font-style: italic; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 24, ../../../../general/res/sass/helpers/_bubbles.scss */ +.bubble-container { + pointer-events: none; } + +/* line 31, ../../../../general/res/sass/helpers/_bubbles.scss */ +.l-infobubble-wrapper { + -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + position: relative; + z-index: 50; } + /* line 36, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble { + display: inline-block; + min-width: 100px; + max-width: 300px; + padding: 5px 10px; } + /* line 41, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble:before { + content: ""; + position: absolute; + width: 0; + height: 0; } + /* line 47, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble table { + width: 100%; } + /* line 50, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble table tr td { + padding: 2px 0; + vertical-align: top; } + /* line 53, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble table tr td.label { + padding-right: 10px; + white-space: nowrap; } + /* line 57, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble table tr td.value { + word-break: break-all; } + /* line 61, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble table tr td.align-wrap { + white-space: normal; } + /* line 67, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .l-infobubble .title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-bottom: 5px; } + /* line 74, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-left { + margin-left: 20px; } + /* line 76, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-left .l-infobubble::before { + right: 100%; } + @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 76, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-left .l-infobubble::before { + width: 0; + height: 0; + border-top: 6.66667px solid transparent; + border-bottom: 6.66667px solid transparent; + border-right: 10px solid white; } } + @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 88, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-right { + margin-right: 20px; } } + /* line 95, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-right .l-infobubble::before { + left: 100%; } + @media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 95, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-right .l-infobubble::before { + width: 0; + height: 0; + border-top: 6.66667px solid transparent; + border-bottom: 6.66667px solid transparent; + border-left: 10px solid white; } } + /* line 108, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-top .l-infobubble::before { + top: 20px; } + /* line 114, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-btm .l-infobubble::before { + bottom: 20px; } + /* line 119, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-down { + margin-bottom: 10px; } + /* line 121, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-down .l-infobubble::before { + left: 50%; + top: 100%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 7.5px solid white; } + /* line 130, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper .arw { + z-index: 2; } + /* line 133, ../../../../general/res/sass/helpers/_bubbles.scss */ + .l-infobubble-wrapper.arw-up .arw.arw-down, .l-infobubble-wrapper.arw-down .arw.arw-up { + display: none; } + +/* line 142, ../../../../general/res/sass/helpers/_bubbles.scss */ +.l-thumbsbubble-wrapper .arw-up { + width: 0; + height: 0; + border-left: 6.66667px solid transparent; + border-right: 6.66667px solid transparent; + border-bottom: 10px solid #e3e3e3; } +/* line 145, ../../../../general/res/sass/helpers/_bubbles.scss */ +.l-thumbsbubble-wrapper .arw-down { + width: 0; + height: 0; + border-left: 6.66667px solid transparent; + border-right: 6.66667px solid transparent; + border-top: 10px solid #e3e3e3; } + +/* line 150, ../../../../general/res/sass/helpers/_bubbles.scss */ +.s-infobubble { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + box-shadow: rgba(0, 0, 0, 0.4) 0 1px 5px; + background: white; + color: #666; + font-size: 0.8rem; } + /* line 157, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble .title { + color: #333333; + font-weight: bold; } + /* line 163, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble table tr td { + border: none; + border-top: 1px solid #e6e6e6 !important; + font-size: 0.9em; } + /* line 169, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble table tr:first-child td { + border-top: none !important; } + /* line 174, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble:first-child td { + border-top: none; } + /* line 178, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble .label { + color: gray; } + /* line 182, ../../../../general/res/sass/helpers/_bubbles.scss */ + .s-infobubble .value { + color: #333333; } + +/* line 188, ../../../../general/res/sass/helpers/_bubbles.scss */ +.s-thumbsbubble { + background: #e3e3e3; + color: #4d4d4d; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 25, ../../../../general/res/sass/helpers/_splitter.scss */ +.split-layout .splitter { + background-color: #969696; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + overflow: hidden; + position: absolute; + z-index: 1; } + /* line 33, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout .splitter:hover { + background-color: #0099cc; } +/* line 38, ../../../../general/res/sass/helpers/_splitter.scss */ +.split-layout.horizontal { + overflow: hidden; } + /* line 41, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.horizontal .pane { + left: 0; + right: 0; } + /* line 44, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.horizontal .pane.top { + bottom: auto; } + /* line 47, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.horizontal .pane.bottom { + top: auto; } + /* line 51, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.horizontal > .splitter { + cursor: row-resize; + left: 0; + right: 0; + width: auto; + height: 5px; } + /* line 159, ../../../../general/res/sass/_mixins.scss */ + .split-layout.horizontal > .splitter:before { + -moz-transition-property: "border-color"; + -o-transition-property: "border-color"; + -webkit-transition-property: "border-color"; + transition-property: "border-color"; + -moz-transition-duration: 0.75s; + -o-transition-duration: 0.75s; + -webkit-transition-duration: 0.75s; + transition-duration: 0.75s; + -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; + content: ''; + display: block; + height: auto; + pointer-events: none; + position: absolute; + z-index: 2; + border-top: 1px dotted #d6d6d6; + top: 2px; + left: 5px; + right: 5px; } + /* line 181, ../../../../general/res/sass/_mixins.scss */ + .split-layout.horizontal > .splitter:not(.disabled):hover:before { + -moz-transition-property: "border-color"; + -o-transition-property: "border-color"; + -webkit-transition-property: "border-color"; + transition-property: "border-color"; + -moz-transition-duration: 25ms; + -o-transition-duration: 25ms; + -webkit-transition-duration: 25ms; + transition-duration: 25ms; + -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; + border-color: #fcfcfc; } +/* line 61, ../../../../general/res/sass/helpers/_splitter.scss */ +.split-layout.vertical .pane { + top: 0; + bottom: 0; } + /* line 64, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.vertical .pane.left { + right: auto; } + /* line 67, ../../../../general/res/sass/helpers/_splitter.scss */ + .split-layout.vertical .pane.right { + left: auto; } +/* line 71, ../../../../general/res/sass/helpers/_splitter.scss */ +.split-layout.vertical > .splitter { + bottom: 0; + cursor: col-resize; + width: 5px; } + /* line 159, ../../../../general/res/sass/_mixins.scss */ + .split-layout.vertical > .splitter:before { + -moz-transition-property: "border-color"; + -o-transition-property: "border-color"; + -webkit-transition-property: "border-color"; + transition-property: "border-color"; + -moz-transition-duration: 0.75s; + -o-transition-duration: 0.75s; + -webkit-transition-duration: 0.75s; + transition-duration: 0.75s; + -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; + content: ''; + display: block; + height: auto; + pointer-events: none; + position: absolute; + z-index: 2; + border-left: 1px dotted #d6d6d6; + left: 2px; + bottom: 5px; + top: 5px; } + /* line 181, ../../../../general/res/sass/_mixins.scss */ + .split-layout.vertical > .splitter:not(.disabled):hover:before { + -moz-transition-property: "border-color"; + -o-transition-property: "border-color"; + -webkit-transition-property: "border-color"; + transition-property: "border-color"; + -moz-transition-duration: 25ms; + -o-transition-duration: 25ms; + -webkit-transition-duration: 25ms; + transition-duration: 25ms; + -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; + border-color: #fcfcfc; } + +/* line 80, ../../../../general/res/sass/helpers/_splitter.scss */ +.browse-area .splitter { + top: 34px; } + +/* line 84, ../../../../general/res/sass/helpers/_splitter.scss */ +.edit-area .splitter { + top: 0; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +@-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 { + transform: rotate(0deg); } + to { + transform: rotate(359deg); } } +/* line 42, ../../../../general/res/sass/helpers/_wait-spinner.scss */ +.t-wait-spinner, +.wait-spinner { + 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(0, 153, 204, 0.25); + border-top-color: #0099cc; + border-style: solid; + border-width: 0.5em; + border-radius: 100%; + top: 50%; + left: 50%; + height: auto; + width: auto; + padding: 5%; + pointer-events: none; + margin-top: -5%; + margin-left: -5%; + z-index: 2; } + /* line 53, ../../../../general/res/sass/helpers/_wait-spinner.scss */ + .t-wait-spinner.inline, + .wait-spinner.inline { + display: inline-block !important; + margin-right: 5px; + position: relative !important; + vertical-align: middle; } + +/* line 61, ../../../../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 */ + .l-wait-spinner-holder.align-left .t-wait-spinner { + left: 0; + margin-left: 0; } + /* line 70, ../../../../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 */ + .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 */ +.treeview .wait-spinner { + 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(0, 153, 204, 0.25); + border-top-color: #0099cc; + border-style: solid; + border-width: 0.25em; + border-radius: 100%; + height: 10px; + width: 10px; + margin: 0 !important; + padding: 0 !important; + top: 2px; + left: 0; } + +/* line 91, ../../../../general/res/sass/helpers/_wait-spinner.scss */ +.wait-spinner.sm { + 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(0, 153, 204, 0.25); + border-top-color: #0099cc; + border-style: solid; + border-width: 0.25em; + border-radius: 100%; + height: 13px; + width: 13px; + margin-left: 0 !important; + margin-top: 0 !important; + padding: 0 !important; + top: 0; + left: 0; } + +/* Styles for messages */ +/* line 4, ../../../../general/res/sass/_messages.scss */ +.message.block { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + padding: 10px; } +/* line 8, ../../../../general/res/sass/_messages.scss */ +.message.error { + background-color: rgba(255, 60, 0, 0.3); + color: #ff8a66; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* Classes to be used for lists of properties and values */ +/* line 25, ../../../../general/res/sass/_properties.scss */ +.properties .s-row { + border-top: 1px solid rgba(102, 102, 102, 0.2); + font-size: 0.8em; } + /* line 28, ../../../../general/res/sass/_properties.scss */ + .properties .s-row:first-child { + border: none; } + /* line 31, ../../../../general/res/sass/_properties.scss */ + .properties .s-row .s-value { + color: #fff; } + +/********************************* CONTROLS */ +/* line 1, ../../../../general/res/sass/controls/_breadcrumb.scss */ +.l-breadcrumb { + font-size: 0.7rem; + line-height: 1em; + margin-bottom: 5px; + margin-left: -4px; } + /* line 10, ../../../../general/res/sass/controls/_breadcrumb.scss */ + .l-breadcrumb .l-breadcrumb-item a { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-transition: background-color 0.25s; + -o-transition: background-color 0.25s; + -webkit-transition: background-color 0.25s; + transition: background-color 0.25s; + color: #404040; + display: inline-block; + padding: 2px 4px; } + /* line 18, ../../../../general/res/sass/controls/_breadcrumb.scss */ + .l-breadcrumb .l-breadcrumb-item a .icon { + color: #0099cc; + margin-right: 5px; } + /* line 22, ../../../../general/res/sass/controls/_breadcrumb.scss */ + .l-breadcrumb .l-breadcrumb-item a:hover { + background: white; + color: gray; } + /* line 25, ../../../../general/res/sass/controls/_breadcrumb.scss */ + .l-breadcrumb .l-breadcrumb-item a:hover .icon { + color: #0099cc; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 25, ../../../../general/res/sass/controls/_buttons.scss */ +.s-btn, .s-menu { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + cursor: pointer; + text-decoration: none; + height: 25px; + line-height: 25px; + padding: 0 7.5px; + font-size: 0.7rem; } + /* line 35, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn .icon, .s-menu .icon { + font-size: 0.8rem; + color: #0099cc; } + /* line 40, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn .title-label, .s-menu .title-label { + vertical-align: top; } + /* line 44, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.lg, .lg.s-menu { + font-size: 1rem; } + /* line 48, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.sm, .sm.s-menu { + padding: 0 5px; } + /* line 52, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.vsm, .vsm.s-menu { + padding: 0 2.5px; } + /* line 56, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.major, .major.s-menu { + background-color: #0099cc; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .s-btn.major .icon, .major.s-menu .icon { + color: #fff; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 277, ../../../../general/res/sass/_mixins.scss */ + .s-btn.major:not(.disabled):hover, .major.s-menu:not(.disabled):hover { + background: deepskyblue; } + /* line 279, ../../../../general/res/sass/_mixins.scss */ + .s-btn.major:not(.disabled):hover > .icon, .major.s-menu:not(.disabled):hover > .icon { + color: white; } } + /* line 62, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn:not(.major), .s-menu:not(.major) { + background-color: #969696; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .s-btn:not(.major) .icon, .s-menu:not(.major) .icon { + color: #eee; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 277, ../../../../general/res/sass/_mixins.scss */ + .s-btn:not(.major):not(.disabled):hover, .s-menu:not(.major):not(.disabled):hover { + background: #0099cc; } + /* line 279, ../../../../general/res/sass/_mixins.scss */ + .s-btn:not(.major):not(.disabled):hover > .icon, .s-menu:not(.major):not(.disabled):hover > .icon { + color: white; } } + /* line 71, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.pause-play .icon:before, .pause-play.s-menu .icon:before { + content: "\0000F1"; } + /* line 74, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.pause-play.paused, .pause-play.paused.s-menu { + background-color: #ff9900; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .s-btn.pause-play.paused .icon, .pause-play.paused.s-menu .icon { + color: #fff; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 277, ../../../../general/res/sass/_mixins.scss */ + .s-btn.pause-play.paused:not(.disabled):hover, .pause-play.paused.s-menu:not(.disabled):hover { + background: #ffad33; } + /* line 279, ../../../../general/res/sass/_mixins.scss */ + .s-btn.pause-play.paused:not(.disabled):hover > .icon, .pause-play.paused.s-menu:not(.disabled):hover > .icon { + color: white; } } + /* line 76, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.pause-play.paused .icon, .pause-play.paused.s-menu .icon { + -moz-animation-name: pulse; + -webkit-animation-name: pulse; + animation-name: pulse; + -moz-animation-duration: 1000ms; + -webkit-animation-duration: 1000ms; + animation-duration: 1000ms; + -moz-animation-direction: alternate; + -webkit-animation-direction: alternate; + animation-direction: alternate; + -moz-animation-iteration-count: infinite; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -moz-animation-timing-function: ease-in-out; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; } + /* line 78, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.pause-play.paused .icon :before, .pause-play.paused.s-menu .icon :before { + content: "\0000EF"; } + /* line 86, ../../../../general/res/sass/controls/_buttons.scss */ + .s-btn.show-thumbs .icon:before, .show-thumbs.s-menu .icon:before { + content: "\000039"; } + +/* line 92, ../../../../general/res/sass/controls/_buttons.scss */ +.l-btn-set { + font-size: 0; } + /* line 98, ../../../../general/res/sass/controls/_buttons.scss */ + .l-btn-set .s-btn, .l-btn-set .s-menu { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + margin-left: 1px; } + /* line 104, ../../../../general/res/sass/controls/_buttons.scss */ + .l-btn-set .first .s-btn, .l-btn-set .first .s-menu { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + margin-left: 0; } + /* line 111, ../../../../general/res/sass/controls/_buttons.scss */ + .l-btn-set .last .s-btn, .l-btn-set .last .s-menu { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; } + +/* line 118, ../../../../general/res/sass/controls/_buttons.scss */ +.paused:not(.s-btn):not(.s-menu) { + border-color: #ff9900 !important; + color: #ff9900 !important; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/controls/_color-palette.scss */ +.l-color-palette { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 5px !important; } + /* line 31, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row { + overflow: hidden; + *zoom: 1; + line-height: 16px; + width: 170px; } + /* line 36, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row .l-palette-item { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + text-shadow: rgba(0, 0, 0, 0.8) 0 1px 2px; + -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; + border: 1px solid transparent; + color: #fff; + display: block; + font-family: 'symbolsfont'; + float: left; + height: 16px; + width: 16px; + line-height: 16px; + margin: 0 1px 1px 0; + text-align: center; + vertical-align: middle; } + /* line 53, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row .s-palette-item:hover { + -moz-transition-property: none; + -o-transition-property: none; + -webkit-transition-property: none; + transition-property: none; + border-color: #fff !important; } + /* line 59, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row .l-palette-item-label { + margin-left: 5px; } + /* line 63, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row.l-option-row { + margin-bottom: 5px; } + /* line 65, ../../../../general/res/sass/controls/_color-palette.scss */ + .l-color-palette .l-palette-row.l-option-row .s-palette-item { + border-color: #666; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/*.control { + // UNUSED? + &.view-control { + .icon { + display: inline-block; + margin: -1px 5px 1px 2px; + vertical-align: middle; + &.triangle-down { + margin: 2px 2px -2px 0px; + } + } + + .label { + display: inline-block; + font-size: 11px; + vertical-align: middle; + } + + .toggle { + @include border-radius(3px); + display: inline-block; + padding: 1px 6px 4px 4px; + &:hover { + background: rgba(white, 0.1); + } + } + } +}*/ +/* line 51, ../../../../general/res/sass/controls/_controls.scss */ +.accordion { + margin-top: 5px; } + /* line 54, ../../../../general/res/sass/controls/_controls.scss */ + .accordion:first-child { + margin-top: 0; } + /* line 57, ../../../../general/res/sass/controls/_controls.scss */ + .accordion .accordion-head { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: rgba(102, 102, 102, 0.2); + cursor: pointer; + font-size: 0.75em; + line-height: 18px; + margin-bottom: 5px; + padding: 0 5px; + position: absolute; + top: 0; + right: 0; + bottom: auto; + left: 0; + width: auto; + height: 18px; + text-transform: uppercase; } + /* line 75, ../../../../general/res/sass/controls/_controls.scss */ + .accordion .accordion-head:hover { + background: rgba(102, 102, 102, 0.4); } + /* line 78, ../../../../general/res/sass/controls/_controls.scss */ + .accordion .accordion-head:after { + content: "^"; + display: block; + font-family: 'symbolsfont'; + font-size: 0.9em; + position: absolute; + right: 5px; + text-transform: none; + top: 0; } + /* line 88, ../../../../general/res/sass/controls/_controls.scss */ + .accordion .accordion-head:not(.expanded):after { + content: "v"; } + /* line 92, ../../../../general/res/sass/controls/_controls.scss */ + .accordion .accordion-contents { + position: absolute; + top: 23px; + right: 0; + bottom: 0; + left: 0; + overflow-y: auto; + overflow-x: hidden; } + +/* line 103, ../../../../general/res/sass/controls/_controls.scss */ +.l-composite-control { + vertical-align: middle; } + /* line 106, ../../../../general/res/sass/controls/_controls.scss */ + .l-composite-control.l-checkbox .composite-control-label { + line-height: 18px; } + +/* line 112, ../../../../general/res/sass/controls/_controls.scss */ +.l-control-group { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-left: 1px solid rgba(102, 102, 102, 0.2); + display: inline-block; + padding: 0 5px; + position: relative; } + /* line 120, ../../../../general/res/sass/controls/_controls.scss */ + .l-control-group:first-child { + border-left: none; + padding-left: 0; } + +/* line 126, ../../../../general/res/sass/controls/_controls.scss */ +.l-local-controls { + position: absolute; + top: 5px; + right: 5px; + z-index: 5; } + +/* line 136, ../../../../general/res/sass/controls/_controls.scss */ +.s-local-controls { + font-size: 0.7rem; } + +/* line 140, ../../../../general/res/sass/controls/_controls.scss */ +label.checkbox.custom { + cursor: pointer; + display: inline-block; + line-height: 14px; + margin-right: 20px; + padding-left: 19px; + position: relative; + vertical-align: middle; } + /* line 150, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em { + color: #666; + display: inline-block; + height: 14px; + min-width: 14px; } + /* line 155, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em:before { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #e3e3e3; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 2px; + box-sizing: border-box; + content: " "; + font-family: 'symbolsfont'; + font-size: 0.8em; + display: inline-block; + margin-right: 5px; + height: 14px; + width: 14px; + left: 0; + top: 0; + position: absolute; + text-align: center; } + /* line 174, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text { + overflow: hidden; + margin-right: 0; + padding-left: 0; + height: 14px; + width: 14px; } + /* line 180, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text em { + overflow: hidden; } + /* line 184, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input { + display: none; } + /* line 186, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input:checked ~ em:before { + background: #0099cc; + color: #ccf2ff; + content: "2"; } + +/* line 194, ../../../../general/res/sass/controls/_controls.scss */ +.input-labeled { + margin-left: 5px; } + /* line 196, ../../../../general/res/sass/controls/_controls.scss */ + .input-labeled label { + display: inline-block; + margin-right: 3px; } + /* line 200, ../../../../general/res/sass/controls/_controls.scss */ + .input-labeled.inline { + display: inline-block; } + /* line 203, ../../../../general/res/sass/controls/_controls.scss */ + .input-labeled:first-child { + margin-left: 0; } + +/* line 208, ../../../../general/res/sass/controls/_controls.scss */ +.s-menu label.checkbox.custom { + margin-left: 5px; } + +/* line 213, ../../../../general/res/sass/controls/_controls.scss */ +.item .checkbox.checked label { + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + border-bottom: none; } + +/* line 219, ../../../../general/res/sass/controls/_controls.scss */ +.context-available { + color: #0099cc; } + /* line 222, ../../../../general/res/sass/controls/_controls.scss */ + .context-available:hover { + color: deepskyblue; } + +/* line 227, ../../../../general/res/sass/controls/_controls.scss */ +.view-switcher { + -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: 100ms; + -o-transition-duration: 100ms; + -webkit-transition-duration: 100ms; + transition-duration: 100ms; + -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; } + +/******************************************************** OBJECT-HEADER */ +/* line 232, ../../../../general/res/sass/controls/_controls.scss */ +.object-header { + font-size: 1em; } + /* line 243, ../../../../general/res/sass/controls/_controls.scss */ + .object-header > .type-icon { + color: #b3b3b3; + font-size: 120%; + float: left; + margin-right: 5px; } + /* line 250, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .l-elem-wrapper { + justify-content: flex-start; + -webkit-justify-content: flex-start; } + /* line 253, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .l-elem-wrapper mct-representation { + min-width: 0.7em; } + /* line 261, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .action { + margin-right: 5px; } + /* line 265, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .title-label { + color: #666; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 0 1 auto; + -webkit-flex: 0 1 auto; + padding-right: 0.35em; } + /* line 275, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .context-available { + font-size: 0.7em; + flex: 0 0 1; + -webkit-flex: 0 0 1; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 282, ../../../../general/res/sass/controls/_controls.scss */ + .object-header .context-available { + -moz-transition-property: opacity; + -o-transition-property: opacity; + -webkit-transition-property: opacity; + transition-property: opacity; + -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; + opacity: 0; } + /* line 287, ../../../../general/res/sass/controls/_controls.scss */ + .object-header:hover .context-available { + opacity: 1; } } + +/******************************************************** SLIDERS */ +/* line 300, ../../../../general/res/sass/controls/_controls.scss */ +.slider .slot { + width: auto; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } +/* line 312, ../../../../general/res/sass/controls/_controls.scss */ +.slider .knob { + -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; + background-color: rgba(0, 153, 204, 0.3); + cursor: ew-resize; + position: absolute; + height: 100%; + width: 12px; + top: 0; + auto: 0; + bottom: auto; + left: auto; } + /* line 317, ../../../../general/res/sass/controls/_controls.scss */ + .slider .knob:hover { + background-color: #0099cc; } +/* line 335, ../../../../general/res/sass/controls/_controls.scss */ +.slider .range { + -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; + background-color: rgba(0, 153, 204, 0.3); + cursor: ew-resize; + position: absolute; + top: 0; + right: auto; + bottom: 0; + left: auto; + height: auto; + width: auto; } + /* line 346, ../../../../general/res/sass/controls/_controls.scss */ + .slider .range:hover { + background-color: rgba(0, 153, 204, 0.5); } + +/******************************************************** BROWSER ELEMENTS */ +@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 355, ../../../../general/res/sass/controls/_controls.scss */ + ::-webkit-scrollbar { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; + box-shadow: inset rgba(0, 0, 0, 0.2) 0 1px 2px; + background-color: rgba(0, 0, 0, 0.1); + height: 10px; + width: 10px; } + + /* line 364, ../../../../general/res/sass/controls/_controls.scss */ + ::-webkit-scrollbar-thumb { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg5ODk4OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzdkN2Q3ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); + background-size: 100%; + background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #898989), color-stop(100%, #7d7d7d)); + background-image: -moz-linear-gradient(#898989, #7d7d7d 20px); + background-image: -webkit-linear-gradient(#898989, #7d7d7d 20px); + background-image: linear-gradient(#898989, #7d7d7d 20px); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + /* line 373, ../../../../general/res/sass/controls/_controls.scss */ + ::-webkit-scrollbar-thumb:hover { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYWNlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwOTljYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); + background-size: 100%; + background-image: -webkit-gradient(linear, 50% 0%, 50% 20, color-stop(0%, #00ace6), color-stop(100%, #0099cc)); + background-image: -moz-linear-gradient(#00ace6, #0099cc 20px); + background-image: -webkit-linear-gradient(#00ace6, #0099cc 20px); + background-image: linear-gradient(#00ace6, #0099cc 20px); } + + /* line 378, ../../../../general/res/sass/controls/_controls.scss */ + ::-webkit-scrollbar-corner { + background: rgba(0, 0, 0, 0.1); } } +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/controls/_lists.scss */ +.checkbox-list label.checkbox.custom { + display: block; + margin-bottom: 5px; } +/* line 27, ../../../../general/res/sass/controls/_lists.scss */ +.checkbox-list li { + margin-bottom: 5px; } + +/* line 35, ../../../../general/res/sass/controls/_lists.scss */ +.l-tree-item-flat-list .tree-item .label { + left: 5px !important; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/******************************************************** MENU BUTTONS */ +/* line 31, ../../../../general/res/sass/controls/_menus.scss */ +.s-menu .icon { + font-size: 120%; } +/* line 35, ../../../../general/res/sass/controls/_menus.scss */ +.s-menu .title-label { + margin-left: 3px; } +/* line 39, ../../../../general/res/sass/controls/_menus.scss */ +.s-menu:after { + text-shadow: none; + content: '\76'; + display: inline-block; + font-family: 'symbolsfont'; + margin-left: 3px; + vertical-align: top; + color: rgba(255, 255, 255, 0.4); } +/* line 46, ../../../../general/res/sass/controls/_menus.scss */ +.s-menu.create-btn .title-label { + font-size: 1rem; } +/* line 54, ../../../../general/res/sass/controls/_menus.scss */ +.s-menu .menu { + left: 0; + text-align: left; } + /* line 57, ../../../../general/res/sass/controls/_menus.scss */ + .s-menu .menu .ui-symbol.icon { + width: 12px; } + +/******************************************************** MENUS THEMSELVES */ +/* line 64, ../../../../general/res/sass/controls/_menus.scss */ +.menu-element { + cursor: pointer; + position: relative; } + /* line 70, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background-color: white; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #4d4d4d; + display: inline-block; + -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + text-shadow: none; + display: block; + padding: 3px 0; + position: absolute; + z-index: 10; } + /* line 79, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul { + margin: 0; + padding: 0; } + /* line 329, ../../../../general/res/sass/_mixins.scss */ + .menu-element .menu ul li { + list-style-type: none; + margin: 0; + padding: 0; } + /* line 81, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-top: 1px solid white; + color: #666666; + line-height: 1.5rem; + padding: 3px 10px 3px 30px; + position: relative; + white-space: nowrap; } + /* line 89, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li:first-child { + border: none; } + /* line 92, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li:hover { + background: #e6e6e6; + color: #4d4d4d; } + /* line 95, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li:hover .icon { + color: #0099cc; } + /* line 99, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li .type-icon { + left: 10px; } + /* line 106, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu, + .menu-element .context-menu, + .menu-element .checkbox-menu, + .menu-element .super-menu { + pointer-events: auto; } + /* line 112, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li a, + .menu-element .context-menu ul li a, + .menu-element .checkbox-menu ul li a, + .menu-element .super-menu ul li a { + color: #4d4d4d; } + /* line 115, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li .icon, + .menu-element .context-menu ul li .icon, + .menu-element .checkbox-menu ul li .icon, + .menu-element .super-menu ul li .icon { + color: #0099cc; } + /* line 118, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .menu ul li .type-icon, + .menu-element .context-menu ul li .type-icon, + .menu-element .checkbox-menu ul li .type-icon, + .menu-element .super-menu ul li .type-icon { + left: 5px; } + /* line 130, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .checkbox-menu ul li { + padding-left: 50px; } + /* line 132, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .checkbox-menu ul li .checkbox { + position: absolute; + left: 5px; + top: 0.53333rem; } + /* line 137, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .checkbox-menu ul li .checkbox em { + height: 0.7rem; + width: 0.7rem; } + /* line 140, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .checkbox-menu ul li .checkbox em:before { + font-size: 7px !important; + height: 0.7rem; + width: 0.7rem; + line-height: 0.7rem; } + /* line 148, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .checkbox-menu ul li .type-icon { + left: 25px; } + /* line 154, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu { + display: block; + width: 500px; + height: 480px; } + /* line 162, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .contents { + overflow: hidden; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + width: auto; + height: auto; } + /* line 165, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .pane { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + /* line 167, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .pane.left { + border-right: 1px solid #e6e6e6; + left: 0; + padding-right: 5px; + right: auto; + width: 50%; + overflow-x: hidden; + overflow-y: auto; } + /* line 177, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .pane.left ul li { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + padding-left: 30px; + border-top: none; } + /* line 184, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .pane.right { + left: auto; + right: 0; + padding: 25px; + width: 50%; } + /* line 194, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .menu-item-description .desc-area.icon { + color: #0099cc; + position: relative; + font-size: 8em; + left: 0; + height: 150px; + line-height: 150px; + margin-bottom: 25px; + text-align: center; } + /* line 205, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .menu-item-description .desc-area.title { + color: #666; + font-size: 1.2em; + margin-bottom: 0.5em; } + /* line 210, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .super-menu .menu-item-description .desc-area.description { + color: #666; + font-size: 0.8em; + line-height: 1.5em; } + /* line 219, ../../../../general/res/sass/controls/_menus.scss */ + .menu-element .context-menu, .menu-element .checkbox-menu { + font-size: 0.80rem; } + +/* line 224, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu-holder { + pointer-events: none; + position: absolute; + height: 200px; + width: 170px; + z-index: 70; } + /* line 230, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder .context-menu-wrapper { + position: absolute; + height: 100%; + width: 100%; } + /* line 237, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-left .checkbox-menu { + right: 0; } + /* line 240, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-up .checkbox-menu { + bottom: 0; } + +/* line 245, ../../../../general/res/sass/controls/_menus.scss */ +.btn-bar.right .menu, +.menus-to-left .menu { + left: auto; + right: 0; + width: auto; } + +/* line 1, ../../../../general/res/sass/controls/_time-controller.scss */ +.l-time-controller { + min-width: 400px; } + /* line 9, ../../../../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 14, ../../../../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; + 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 23, ../../../../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; } + /* line 29, ../../../../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 34, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-inputs-holder .type-icon { + font-size: 120%; + vertical-align: middle; } + /* line 38, ../../../../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 41, ../../../../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 44, ../../../../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-inputs-elem .ui-symbol.icon { + font-size: 11px; + width: 11px; } + /* line 51, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-slider, + .l-time-controller .l-time-range-ticks { + left: 125px; + right: 125px; } + /* line 57, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-slider-holder { + height: 20px; + bottom: 23px; } + /* line 60, ../../../../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 67, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .l-time-range-ticks-holder { + height: 20px; } + /* line 69, ../../../../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 71, ../../../../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 78, ../../../../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 81, ../../../../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 95, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob { + width: 5px; } + /* line 97, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob .range-value { + position: absolute; + height: 20px; + line-height: 20px; + white-space: nowrap; } + /* line 103, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob:hover .range-value { + color: #0099cc; } + /* line 108, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob.knob-l .range-value { + text-align: right; + right: 10px; } + /* line 115, ../../../../general/res/sass/controls/_time-controller.scss */ + .l-time-controller .knob.knob-r .range-value { + left: 10px; } + +/* line 126, ../../../../general/res/sass/controls/_time-controller.scss */ +.s-time-range-val { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background-color: #fff; + padding: 1px 1px 0 5px; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 26, ../../../../general/res/sass/mobile/controls/_menus.scss */ + .menu-element .super-menu { + width: 250px; + height: 250px; } + /* line 32, ../../../../general/res/sass/mobile/controls/_menus.scss */ + .menu-element .super-menu .pane.left { + border-right: none; + padding-right: 0; + width: 100%; } + /* line 37, ../../../../general/res/sass/mobile/controls/_menus.scss */ + .menu-element .super-menu .pane.right { + display: none; } } +/********************************* FORMS */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/forms/_elems.scss */ +.section-header { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background: rgba(0, 0, 0, 0.05); + color: #999999; + font-size: 0.8em; + padding: 5px 5px; + text-transform: uppercase; } + +/* line 33, ../../../../general/res/sass/forms/_elems.scss */ +.form { + color: gray; } + /* line 36, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-section { + position: relative; + margin-bottom: 20px; } + /* line 41, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + *zoom: 1; + border-top: 1px solid rgba(0, 0, 0, 0.1); + margin-top: 5px; + padding: 5px 0; + position: relative; } + /* line 49, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row.first { + border-top: none; } + /* line 53, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row > .label, + .form .form-row > .controls { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + *zoom: 1; + font-size: 0.8rem; + line-height: 22px; + min-height: 22px; } + /* line 62, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row > .label { + float: left; + min-width: 120px; + position: relative; + white-space: nowrap; + width: 30%; } + /* line 72, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .value { + color: #666; } + /* line 76, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls { + float: left; + position: relative; + width: 69.9%; } + /* line 83, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls .l-composite-control.l-checkbox { + display: inline-block; + line-height: 14px; + margin-right: 5px; } + /* line 92, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls .l-med input[type="text"] { + width: 200px; } + /* line 96, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls .l-small input[type="text"] { + width: 50px; } + /* line 100, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls .l-numeric input[type="text"] { + text-align: right; } + /* line 104, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .controls .select { + margin-right: 5px; } + /* line 109, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .field-hints { + color: #333333; } + /* line 113, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .selector-list { + -moz-appearance: none; + -webkit-appearance: none; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + background: #fff; + border: none; + color: #666; + outline: none; + padding: 0 3px; + position: relative; + height: 150px; } + /* line 296, ../../../../general/res/sass/_mixins.scss */ + .form .form-row .selector-list.error { + background: rgba(255, 0, 0, 0.5); } + /* line 124, ../../../../general/res/sass/forms/_elems.scss */ + .form .form-row .selector-list > .wrapper { + overflow: auto; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; } + +/* line 138, ../../../../general/res/sass/forms/_elems.scss */ +label.form-control.checkbox input { + margin-right: 5px; + vertical-align: top; } + +/* line 144, ../../../../general/res/sass/forms/_elems.scss */ +.hint, +.s-hint { + font-size: 0.9em; } + +/* line 149, ../../../../general/res/sass/forms/_elems.scss */ +.l-result { + display: inline-block; + min-width: 32px; + min-height: 32px; + position: relative; + vertical-align: top; } + /* line 156, ../../../../general/res/sass/forms/_elems.scss */ + .l-result div.s-hint { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background: rgba(255, 34, 0, 0.8); + display: block; + color: #ffa799; + padding: 5px; } + +/* line 165, ../../../../general/res/sass/forms/_elems.scss */ +input[type="text"] { + -moz-appearance: none; + -webkit-appearance: none; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + background: #fff; + border: none; + color: #666; + outline: none; + padding: 0 3px; } + /* line 296, ../../../../general/res/sass/_mixins.scss */ + input[type="text"].error { + background: rgba(255, 0, 0, 0.5); } + /* line 172, ../../../../general/res/sass/forms/_elems.scss */ + input[type="text"].numeric { + text-align: right; } + +/* line 177, ../../../../general/res/sass/forms/_elems.scss */ +textarea { + -moz-appearance: none; + -webkit-appearance: none; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + background: #fff; + border: none; + color: #666; + outline: none; + padding: 5px; + position: absolute; + height: 100%; + width: 100%; } + /* line 296, ../../../../general/res/sass/_mixins.scss */ + textarea.error { + background: rgba(255, 0, 0, 0.5); } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/forms/_selects.scss */ +.select { + background-color: #ddd; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; + margin: 0 0 2px 2px; + padding: 0 5px; + overflow: hidden; + position: relative; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .select .icon { + color: #eee; } + /* line 28, ../../../../general/res/sass/forms/_selects.scss */ + .select select { + -moz-appearance: none; + -webkit-appearance: none; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: none; + color: #666; + cursor: pointer; + border: none !important; + padding: 4px 25px 2px 0px; + width: 120%; } + /* line 37, ../../../../general/res/sass/forms/_selects.scss */ + .select select option { + margin: 5px 0; } + /* line 41, ../../../../general/res/sass/forms/_selects.scss */ + .select:after { + text-shadow: none; + content: '\76'; + display: inline-block; + font-family: 'symbolsfont'; + margin-left: 3px; + vertical-align: top; + color: rgba(102, 102, 102, 0.4); + position: absolute; + right: 5px; + top: 0; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/forms/_channel-selector.scss */ +.channel-selector .line { + margin-bottom: 5px; + min-height: 22px; } +/* line 27, ../../../../general/res/sass/forms/_channel-selector.scss */ +.channel-selector .treeview { + -moz-appearance: none; + -webkit-appearance: none; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + background: #fcfcfc; + border: none; + color: #666; + outline: none; + padding: 0 3px; + background: white; + border-bottom: 1px solid white; + min-height: 300px; + max-height: 400px; + overflow: auto; + padding: 5px; } + /* line 296, ../../../../general/res/sass/_mixins.scss */ + .channel-selector .treeview.error { + background: rgba(255, 0, 0, 0.5); } +/* line 36, ../../../../general/res/sass/forms/_channel-selector.scss */ +.channel-selector .btns-add-remove { + margin-top: 150px; } + /* line 39, ../../../../general/res/sass/forms/_channel-selector.scss */ + .channel-selector .btns-add-remove .s-btn, .channel-selector .btns-add-remove .s-menu { + display: block; + margin-bottom: 5px; + text-align: center; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/forms/_datetime.scss */ +.complex.datetime span { + display: inline-block; + margin-right: 5px; } +/* line 36, ../../../../general/res/sass/forms/_datetime.scss */ +.complex.datetime .fields { + margin-top: 3px 0; + padding: 3px 0; } +/* line 41, ../../../../general/res/sass/forms/_datetime.scss */ +.complex.datetime .date { + width: 85px; } + /* line 44, ../../../../general/res/sass/forms/_datetime.scss */ + .complex.datetime .date input { + width: 80px; } +/* line 50, ../../../../general/res/sass/forms/_datetime.scss */ +.complex.datetime .time.sm { + width: 45px; } + /* line 53, ../../../../general/res/sass/forms/_datetime.scss */ + .complex.datetime .time.sm input { + width: 40px; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/forms/_validation.scss */ +.validates > .label { + padding-right: 10px; } + /* line 25, ../../../../general/res/sass/forms/_validation.scss */ + .validates > .label::after { + float: right; + font-family: symbolsfont; + font-size: 0.7em; } +/* line 33, ../../../../general/res/sass/forms/_validation.scss */ +.validates.invalid > .label::after, .validates.invalid.req > .label::after { + color: #ff2200; + content: "x"; } +/* line 40, ../../../../general/res/sass/forms/_validation.scss */ +.validates.valid > .label::after, .validates.valid.req > .label::after { + color: #33cc33; + content: "2"; } +/* line 46, ../../../../general/res/sass/forms/_validation.scss */ +.validates.req > .label::after { + color: #0099cc; + content: "*"; } + +/* line 52, ../../../../general/res/sass/forms/_validation.scss */ +.req { + font-size: 0.7em; } + +/* line 55, ../../../../general/res/sass/forms/_validation.scss */ +span.req { + color: #0099cc; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 24, ../../../../general/res/sass/forms/_filter.scss */ +.filter input.filter, +.filter input.t-filter-input, +.t-filter input.filter, +.t-filter input.t-filter-input { + -moz-appearance: none; + -webkit-appearance: none; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + -webkit-box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + box-shadow: inset rgba(0, 0, 0, 0.4) 0 1px 3px; + background: #fcfcfc; + border: none; + color: #666; + outline: none; + padding: 0 3px; + background: white; + border-bottom: 1px solid white; } + /* line 296, ../../../../general/res/sass/_mixins.scss */ + .filter input.filter.error, + .filter input.t-filter-input.error, + .t-filter input.filter.error, + .t-filter input.t-filter-input.error { + background: rgba(255, 0, 0, 0.5); } +/* line 28, ../../../../general/res/sass/forms/_filter.scss */ +.filter input.t-filter-input, +.t-filter input.t-filter-input { + height: 22px; + width: 200px; } + /* line 38, ../../../../general/res/sass/forms/_filter.scss */ + .filter input.t-filter-input:not(.ng-dirty) + .t-a-clear, + .t-filter input.t-filter-input:not(.ng-dirty) + .t-a-clear { + display: none; } +/* line 42, ../../../../general/res/sass/forms/_filter.scss */ +.filter .icon.ui-symbol, +.t-filter .icon.ui-symbol { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + display: inline-block; + font-size: 1.3em; + height: 22px; + line-height: 22px; + padding: 0px 5px; + vertical-align: middle; } + /* line 50, ../../../../general/res/sass/forms/_filter.scss */ + .filter .icon.ui-symbol:hover, + .t-filter .icon.ui-symbol:hover { + background: rgba(255, 255, 255, 0.1); } +/* line 54, ../../../../general/res/sass/forms/_filter.scss */ +.filter .s-a-clear.ui-symbol, +.t-filter .s-a-clear.ui-symbol { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20); + opacity: 0.2; + background: #fff; + color: #333; + display: block; + position: absolute; + height: 13px; + width: 13px; + line-height: 13px; + margin-top: -6.5px; + overflow: hidden; + padding-top: 1px; + right: 4.5px; + top: 50%; + text-align: center; + z-index: 5; } + /* line 74, ../../../../general/res/sass/forms/_filter.scss */ + .filter .s-a-clear.ui-symbol:hover, + .t-filter .s-a-clear.ui-symbol:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60); + opacity: 0.6; + background-color: #0099cc; } + +/* line 82, ../../../../general/res/sass/forms/_filter.scss */ +.l-filter { + display: inline-block; + position: relative; } + +/* line 89, ../../../../general/res/sass/forms/_filter.scss */ +.top-bar input.filter { + font-size: .9em; + height: 24px; + line-height: 24px; + margin-right: 5px; + padding-left: 10px; + padding-right: 10px; + vertical-align: top; } +/* line 100, ../../../../general/res/sass/forms/_filter.scss */ +.top-bar .icon-filter { + font-size: 1.4em; } + +/********************************* USER ENVIRON */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 32, ../../../../general/res/sass/user-environ/_layout.scss */ +.holder-all { + top: 0; + right: 0; + bottom: 0; + left: 0; } + +/* line 40, ../../../../general/res/sass/user-environ/_layout.scss */ +.browse-area, +.edit-area, +.editor { + position: absolute; } + +/* line 46, ../../../../general/res/sass/user-environ/_layout.scss */ +.editor { + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + border-radius: 6px; } + +/* line 50, ../../../../general/res/sass/user-environ/_layout.scss */ +.contents { + box-sizing: border-box; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + /* line 58, ../../../../general/res/sass/user-environ/_layout.scss */ + .contents.nomargin { + right: 0px; + bottom: 0px; + left: 0px; } + +/* line 67, ../../../../general/res/sass/user-environ/_layout.scss */ +.bar .icon.major { + margin-right: 5px; } +/* line 70, ../../../../general/res/sass/user-environ/_layout.scss */ +.bar.abs, .s-menu span.bar.l-click-area { + text-wrap: none; + white-space: nowrap; } + /* line 73, ../../../../general/res/sass/user-environ/_layout.scss */ + .bar.abs.left, .s-menu span.bar.left.l-click-area, + .bar.abs .left, + .s-menu span.bar.l-click-area .left { + width: 45%; + right: auto; } + /* line 78, ../../../../general/res/sass/user-environ/_layout.scss */ + .bar.abs.right, .s-menu span.bar.right.l-click-area, + .bar.abs .right, + .s-menu span.bar.l-click-area .right { + width: 45%; + left: auto; + text-align: right; } + /* line 83, ../../../../general/res/sass/user-environ/_layout.scss */ + .bar.abs.right .icon.major, .s-menu span.bar.right.l-click-area .icon.major, + .bar.abs .right .icon.major, + .s-menu span.bar.l-click-area .right .icon.major { + margin-left: 15px; } + /* line 89, ../../../../general/res/sass/user-environ/_layout.scss */ + .bar.abs .l-flex .left, .s-menu span.bar.l-click-area .l-flex .left, + .bar.abs .l-flex .right, + .s-menu span.bar.l-click-area .l-flex .right, .bar.abs.l-flex .left, .s-menu span.bar.l-flex.l-click-area .left, + .bar.abs.l-flex .right, + .s-menu span.bar.l-flex.l-click-area .right { + width: auto; } + +/* line 98, ../../../../general/res/sass/user-environ/_layout.scss */ +.user-environ .browse-area, +.user-environ .edit-area, +.user-environ .editor { + top: 39px; + right: 10px; + bottom: 35px; + left: 10px; } +/* line 109, ../../../../general/res/sass/user-environ/_layout.scss */ +.user-environ .browse-area > .contents, +.user-environ .edit-area > .contents { + left: 0; + right: 0; } +/* line 115, ../../../../general/res/sass/user-environ/_layout.scss */ +.user-environ .edit-area { + top: 45px; } + /* line 118, ../../../../general/res/sass/user-environ/_layout.scss */ + .user-environ .edit-area .tool-bar { + bottom: auto; + height: 30px; + line-height: 25px; } + /* line 123, ../../../../general/res/sass/user-environ/_layout.scss */ + .user-environ .edit-area .work-area { + top: 40px; } +/* line 128, ../../../../general/res/sass/user-environ/_layout.scss */ +.user-environ .ue-bottom-bar { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; + top: auto; + height: 25px; } + /* line 133, ../../../../general/res/sass/user-environ/_layout.scss */ + .user-environ .ue-bottom-bar .status-holder { + z-index: 1; } + /* line 137, ../../../../general/res/sass/user-environ/_layout.scss */ + .user-environ .ue-bottom-bar .app-logo { + left: auto; + width: 105px; + z-index: 2; } + +/* line 145, ../../../../general/res/sass/user-environ/_layout.scss */ +.cols { + overflow: hidden; + *zoom: 1; } + /* line 147, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols .col { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + *zoom: 1; + float: left; + margin-left: 1.5%; + padding-left: 5px; + position: relative; } + /* line 155, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols .col:first-child { + margin-left: 0; + padding-left: 0; } + /* line 162, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-2 .col-1 { + min-width: 250px; + width: 48.5%; } + /* line 168, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-2-ff .col-100px { + width: 100px; } + /* line 175, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-6 .col-1 { + min-width: 83.33333px; + width: 15.16667%; } + /* line 181, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-16 .col-1 { + min-width: 31.25px; + width: 4.75%; } + /* line 184, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-16 .col-2 { + min-width: 62.5px; + width: 11%; } + /* line 187, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-16 .col-7 { + min-width: 218.75px; + width: 42.25%; } + /* line 193, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-32 .col-2 { + min-width: 31.25px; + width: 4.75%; } + /* line 196, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols.cols-32 .col-15 { + min-width: 234.375px; + width: 45.375%; } + /* line 200, ../../../../general/res/sass/user-environ/_layout.scss */ + .cols .l-row { + overflow: hidden; + *zoom: 1; + padding: 5px 0; } + +/* line 208, ../../../../general/res/sass/user-environ/_layout.scss */ +.browse-mode .split-layout .split-pane-component.pane.left { + min-width: 150px; + max-width: 800px; + width: 25%; } + +/* line 218, ../../../../general/res/sass/user-environ/_layout.scss */ +.edit-mode .split-layout .split-pane-component.pane.right { + width: 15%; } + /* line 220, ../../../../general/res/sass/user-environ/_layout.scss */ + .edit-mode .split-layout .split-pane-component.pane.right .pane.bottom { + min-height: 50px; + height: 30%; } + +/* line 230, ../../../../general/res/sass/user-environ/_layout.scss */ +.pane { + position: absolute; } + /* line 233, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.treeview.left .create-btn-holder { + bottom: auto; + top: 0; + height: 24px; } + /* line 236, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.treeview.left .create-btn-holder .wrapper.menu-element { + position: absolute; + bottom: 5px; } + /* line 241, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.treeview.left .search-holder { + top: 34px; } + /* line 244, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.treeview.left .tree-holder { + overflow: auto; + top: 64px; } + /* line 251, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.items .object-browse-bar .left.abs, .pane.items .object-browse-bar .s-menu span.left.l-click-area, .s-menu .pane.items .object-browse-bar span.left.l-click-area, + .pane.items .object-browse-bar .right.abs, + .pane.items .object-browse-bar .s-menu span.right.l-click-area, + .s-menu .pane.items .object-browse-bar span.right.l-click-area { + top: auto; } + /* line 262, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane.items .object-holder { + top: 34px; } + /* line 266, ../../../../general/res/sass/user-environ/_layout.scss */ + .pane .object-holder { + overflow: auto; } + +/* line 274, ../../../../general/res/sass/user-environ/_layout.scss */ +.split-layout.horizontal > .pane { + margin-top: 5px; } + /* line 277, ../../../../general/res/sass/user-environ/_layout.scss */ + .split-layout.horizontal > .pane:first-child { + margin-top: 0; } +/* line 284, ../../../../general/res/sass/user-environ/_layout.scss */ +.split-layout.vertical > .pane { + margin-left: 5px; } + /* line 287, ../../../../general/res/sass/user-environ/_layout.scss */ + .split-layout.vertical > .pane > .holder { + left: 0; + right: 0; } + /* line 291, ../../../../general/res/sass/user-environ/_layout.scss */ + .split-layout.vertical > .pane:first-child { + margin-left: 0; } + /* line 293, ../../../../general/res/sass/user-environ/_layout.scss */ + .split-layout.vertical > .pane:first-child .holder { + right: 3px; } + +/* line 302, ../../../../general/res/sass/user-environ/_layout.scss */ +.object-browse-bar .s-btn, .object-browse-bar .s-menu, +.top-bar .buttons-main .s-btn, +.top-bar .buttons-main .s-menu, +.top-bar .s-menu, +.tool-bar .s-btn, +.tool-bar .s-menu, +.tool-bar .s-menu { + height: 25px; + line-height: 25px; + vertical-align: top; } + +/* line 315, ../../../../general/res/sass/user-environ/_layout.scss */ +.object-browse-bar .view-switcher, +.top-bar .view-switcher { + margin-right: 20px; } + +/* line 320, ../../../../general/res/sass/user-environ/_layout.scss */ +.object-browse-bar { + 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; + height: 24px; + line-height: 24px; + white-space: nowrap; } + /* line 328, ../../../../general/res/sass/user-environ/_layout.scss */ + .object-browse-bar .left { + padding-right: 20px; } + /* line 330, ../../../../general/res/sass/user-environ/_layout.scss */ + .object-browse-bar .left .l-back { + display: inline-block; + float: left; + margin-right: 10px; } + +/* 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 341, ../../../../general/res/sass/user-environ/_layout.scss */ + .l-flex .left { + flex: 1 1 0; + -webkit-flex: 1 1 0; + padding-right: 10px; } + +/* line 348, ../../../../general/res/sass/user-environ/_layout.scss */ +.vscroll { + overflow-y: auto; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 26, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-wrapper, + .pane { + top: 0 !important; + right: 0; + bottom: 0; + left: 0; } + + /* line 31, ../../../../general/res/sass/mobile/_layout.scss */ + .pane.left.treeview { + background-color: #f7f7f7; } + + /* line 35, ../../../../general/res/sass/mobile/_layout.scss */ + .pane.right-repr { + -moz-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + transition-timing-function: ease; + backface-visibility: hidden; + margin-left: 0 !important; } + /* line 39, ../../../../general/res/sass/mobile/_layout.scss */ + .pane.right-repr #content-area { + -moz-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + -webkit-transition-duration: 0.35s; + transition-duration: 0.35s; + transition-timing-function: ease; + backface-visibility: hidden; + opacity: 1; } + + /* line 45, ../../../../general/res/sass/mobile/_layout.scss */ + .user-environ .browse-area, + .user-environ .edit-area, + .user-environ .editor { + top: 0; + left: 0; + right: 0; + bottom: 25px; } + + /* line 51, ../../../../general/res/sass/mobile/_layout.scss */ + .holder.l-mobile { + top: 10px !important; + right: 10px !important; + bottom: 10px !important; + left: 10px !important; } + + /* line 61, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-hidetree { + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + /* line 65, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-hidetree .pane.left.treeview { + opacity: 0; + right: 100% !important; + width: auto !important; + overflow-y: hidden; + overflow-x: hidden; } + /* line 74, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-hidetree .pane.right-repr { + left: 0 !important; } + + /* line 79, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree { + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + /* line 88, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree .pane.left.treeview { + -moz-transition-property: opacity; + -o-transition-property: opacity; + -webkit-transition-property: opacity; + transition-property: opacity; + -moz-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + -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; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSI5OCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); + background-size: 100%; + background-image: -moz-linear-gradient(0deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); + background-image: -webkit-linear-gradient(0deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0) 98%, rgba(0, 0, 0, 0.3) 100%); + opacity: 1; + display: block !important; + right: auto !important; + width: 40% !important; } + /* line 98, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree .pane.right-repr { + left: 40% !important; } + + /* line 107, ../../../../general/res/sass/mobile/_layout.scss */ + .mobile-menu-icon { + font-size: 110%; + position: absolute; + top: 12px; + left: 10px; } + + /* line 114, ../../../../general/res/sass/mobile/_layout.scss */ + .object-browse-bar { + left: 30px !important; } + /* line 117, ../../../../general/res/sass/mobile/_layout.scss */ + .object-browse-bar .context-available { + opacity: 1 !important; } + /* line 120, ../../../../general/res/sass/mobile/_layout.scss */ + .object-browse-bar .view-switcher { + margin-right: 0 !important; } + /* line 122, ../../../../general/res/sass/mobile/_layout.scss */ + .object-browse-bar .view-switcher .title-label { + display: none; } + + /* line 129, ../../../../general/res/sass/mobile/_layout.scss */ + .tree-holder { + overflow-x: hidden !important; } + + /* line 133, ../../../../general/res/sass/mobile/_layout.scss */ + .mobile-disable-select { + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + + /* line 138, ../../../../general/res/sass/mobile/_layout.scss */ + .mobile-hide, + .mobile-hide-important { + display: none !important; } + + /* line 143, ../../../../general/res/sass/mobile/_layout.scss */ + .mobile-back-hide { + pointer-events: none; + -moz-transition-property: opacity; + -o-transition-property: opacity; + -webkit-transition-property: opacity; + transition-property: opacity; + -moz-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + -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; + opacity: 0; } + + /* line 148, ../../../../general/res/sass/mobile/_layout.scss */ + .mobile-back-unhide { + pointer-events: all; + -moz-transition-property: opacity; + -o-transition-property: opacity; + -webkit-transition-property: opacity; + transition-property: opacity; + -moz-transition-duration: 0.4s; + -o-transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + -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; + opacity: 1; } } +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px) { + /* line 157, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree .pane.left.treeview { + width: 90% !important; } + /* line 160, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree .pane.right-repr { + left: 0 !important; + transform: translateX(90%); + -webkit-transform: translateX(90%); } + /* line 163, ../../../../general/res/sass/mobile/_layout.scss */ + .browse-showtree .pane.right-repr #content-area { + opacity: 0; } } +@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 171, ../../../../general/res/sass/mobile/_layout.scss */ + .desktop-hide { + display: none; } } +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 26, ../../../../general/res/sass/edit/_editor.scss */ +.edit-main .edit-corner, +.edit-main .edit-handle { + position: absolute; + z-index: 2; } +/* line 32, ../../../../general/res/sass/edit/_editor.scss */ +.edit-main .edit-corner { + width: 15px; + height: 15px; } + /* line 35, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-corner:hover { + z-index: 11; } + /* line 38, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-corner.edit-resize-nw { + -moz-border-radius-bottomright: 5px; + -webkit-border-bottom-right-radius: 5px; + border-bottom-right-radius: 5px; + cursor: nw-resize; + top: 0; + left: 0; } + /* line 43, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-corner.edit-resize-ne { + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + border-bottom-left-radius: 5px; + cursor: ne-resize; + top: 0; + right: 0; } + /* line 48, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-corner.edit-resize-se { + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + border-top-left-radius: 5px; + cursor: se-resize; + bottom: 0; + right: 0; } + /* line 53, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-corner.edit-resize-sw { + -moz-border-radius-topright: 5px; + -webkit-border-top-right-radius: 5px; + border-top-right-radius: 5px; + cursor: sw-resize; + bottom: 0; + left: 0; } +/* line 61, ../../../../general/res/sass/edit/_editor.scss */ +.edit-main .edit-handle { + top: 15px; + right: 15px; + bottom: 15px; + left: 15px; } + /* line 63, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-handle.edit-move { + cursor: move; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 1; } + /* line 73, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-handle.edit-resize-n { + top: 0px; + bottom: auto; + height: 15px; + cursor: n-resize; } + /* line 78, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-handle.edit-resize-e { + right: 0px; + left: auto; + width: 15px; + cursor: e-resize; } + /* line 83, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-handle.edit-resize-s { + bottom: 0px; + top: auto; + height: 15px; + cursor: s-resize; } + /* line 88, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .edit-handle.edit-resize-w { + left: 0px; + right: auto; + width: 15px; + cursor: w-resize; } +/* line 97, ../../../../general/res/sass/edit/_editor.scss */ +.edit-main .frame.child-frame.panel:hover { + -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + border-color: #0099cc; } + /* line 101, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .frame.child-frame.panel:hover .view-switcher { + opacity: 1; } + /* line 104, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .frame.child-frame.panel:hover .edit-corner { + background-color: rgba(0, 153, 204, 0.8); } + /* line 106, ../../../../general/res/sass/edit/_editor.scss */ + .edit-main .frame.child-frame.panel:hover .edit-corner:hover { + background-color: #0099cc; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/search/_search.scss */ +.abs.search-holder, .s-menu span.search-holder.l-click-area { + height: 25px; + bottom: 0; + top: 23px; + z-index: 5; } + /* line 27, ../../../../general/res/sass/search/_search.scss */ + .abs.search-holder.active, .s-menu span.search-holder.active.l-click-area { + height: auto; + bottom: 0; } + +/* line 38, ../../../../general/res/sass/search/_search.scss */ +.search { + display: flex; + display: -webkit-flex; + flex-direction: column; + -webkit-flex-direction: column; + height: 100%; } + /* line 48, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar { + font-size: 0.8em; + max-width: 250px; + position: relative; + width: 100%; } + /* line 60, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-input { + height: 25px; + line-height: 25px; + padding-top: 0; + padding-bottom: 0; } + /* line 67, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-icon, + .search .search-bar .clear-icon, + .search .search-bar .menu-icon { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #a6a6a6; + height: 17px; + width: 17px; + line-height: 17px; + position: absolute; + text-align: center; + top: 4px; } + /* line 80, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .clear-icon, + .search .search-bar .menu-icon { + cursor: pointer; + -moz-transition: color, 0.25s; + -o-transition: color, 0.25s; + -webkit-transition: color, 0.25s; + transition: color, 0.25s; } + /* line 87, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-input { + position: relative; + width: 100%; + padding-left: 22px !important; + padding-right: 44px !important; } + /* line 94, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-input input { + width: 100%; } + /* line 99, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-icon { + left: 3px; + transition: visibility .15s, opacity .15s, color .2s; + pointer-events: none; } + /* line 119, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-input:hover + div.search-icon { + color: #8c8c8c; } + /* line 123, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .clear-icon { + right: 22px; + visibility: hidden; + opacity: 0; + transition: visibility .15s, opacity .15s, color .2s; } + /* line 132, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .clear-icon.content { + visibility: visible; + opacity: 1; } + /* line 137, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .clear-icon:hover { + color: #8c8c8c; } + /* line 142, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .menu-icon { + font-size: 0.8em; + padding-right: 4px; + right: 4px; + text-align: right; } + /* line 148, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .menu-icon:hover { + color: #8c8c8c; } + /* line 153, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-menu-holder { + float: right; + left: -20px; + z-index: 1; + transition: visibility .05s, opacity .05s; } + /* line 163, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .search-menu-holder.off { + visibility: hidden; + opacity: 0; } + /* line 170, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar .menu-icon:hover + div.search-menu-holder { + visibility: visible; } + /* line 173, ../../../../general/res/sass/search/_search.scss */ + .search .search-bar div.search-menu-holder:hover { + visibility: visible; } + /* line 178, ../../../../general/res/sass/search/_search.scss */ + .search .active-filter-display { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + line-height: 130%; + padding: 5px 0; + padding-left: 1.4625em; + font-size: 0.65em; + margin-top: 3px; } + /* line 193, ../../../../general/res/sass/search/_search.scss */ + .search .active-filter-display .clear-filters-icon { + color: #a6a6a6; + opacity: 1; + font-size: 0.8em; + position: absolute; + left: 1px; + cursor: pointer; } + /* line 205, ../../../../general/res/sass/search/_search.scss */ + .search .active-filter-display.off { + visibility: hidden; + opacity: 0; + height: 0; + margin: 0; + padding: 0; + border: 0; } + /* line 215, ../../../../general/res/sass/search/_search.scss */ + .search .search-scroll { + order: 3; + margin-top: 4px; + overflow-y: auto; + top: auto; + height: auto; + max-height: 100%; + 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 */ + .search .search-scroll .load-more-button { + margin-top: 5px 0; + font-size: 0.8em; + position: relative; + left: 50%; + margin-left: -45px; + text-align: center; + width: 90px; + white-space: nowrap; } + +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 5, ../../../../general/res/sass/mobile/search/_search.scss */ + .search .search-bar .menu-icon { + display: none; } + /* line 8, ../../../../general/res/sass/mobile/search/_search.scss */ + .search .search-bar .clear-icon { + right: 5px; } } +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .blocker { + background: rgba(0, 0, 0, 0.7); + z-index: 100; } +/* line 27, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .clk-icon.close { + font-size: 0.8rem; + position: absolute; + top: 10px; + right: 10px; + bottom: auto; + left: auto; + z-index: 100; } +/* line 33, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay > .holder { + background-color: #fcfcfc; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #666; + display: inline-block; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + color: #666; + top: 15%; + right: 15%; + bottom: 15%; + left: 15%; + z-index: 101; } + /* line 40, ../../../../general/res/sass/overlay/_overlay.scss */ + .overlay > .holder > .contents { + top: 25px; + right: 25px; + bottom: 25px; + left: 25px; } +/* line 45, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 1.2em; + margin-bottom: 5px; } +/* line 51, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .top-bar { + height: 60px; } +/* line 55, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .editor { + top: 70px; + bottom: 40px; + left: 0; + right: 0; } +/* line 61, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .bottom-bar { + top: auto; + right: 0; + bottom: 0; + left: 0; + overflow: visible; + height: 30px; + text-align: right; } + /* line 67, ../../../../general/res/sass/overlay/_overlay.scss */ + .overlay .bottom-bar .s-btn, .overlay .bottom-bar .s-menu { + font-size: 95%; + height: 30px; + line-height: 30px; + margin-left: 5px; + padding: 0 15px; } + /* line 69, ../../../../general/res/sass/overlay/_overlay.scss */ + .overlay .bottom-bar .s-btn:not(.major), .overlay .bottom-bar .s-menu:not(.major) { + background-color: #969696; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .overlay .bottom-bar .s-btn:not(.major) .icon, .overlay .bottom-bar .s-menu:not(.major) .icon { + color: #fff; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 277, ../../../../general/res/sass/_mixins.scss */ + .overlay .bottom-bar .s-btn:not(.major):not(.disabled):hover, .overlay .bottom-bar .s-menu:not(.major):not(.disabled):hover { + background: #7d7d7d; } + /* line 279, ../../../../general/res/sass/_mixins.scss */ + .overlay .bottom-bar .s-btn:not(.major):not(.disabled):hover > .icon, .overlay .bottom-bar .s-menu:not(.major):not(.disabled):hover > .icon { + color: white; } } +/* line 85, ../../../../general/res/sass/overlay/_overlay.scss */ +.overlay .contents.l-dialog { + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + overflow: auto; } + /* line 93, ../../../../general/res/sass/overlay/_overlay.scss */ + .overlay .contents.l-dialog .field.l-med input[type='text'] { + width: 100%; } + +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 4, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay .clk-icon.close { + top: 10px; + right: 10px; } + /* line 8, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + top: 0; + right: 0; + bottom: 0; + left: 0; } + /* line 14, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents { + top: 10px; + right: 10px; + bottom: 10px; + left: 10px; } + /* line 21, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents .top-bar > .title { + margin-right: 1.2em; } + /* line 26, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents .form.editor { + border: none; } + /* line 29, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents .form.editor .contents { + top: 0; + right: 0; + bottom: 0; + left: 0; } } +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 43, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents .form.editor .contents .form-row > .label, + .overlay > .holder > .contents .form.editor .contents .form-row > .controls { + display: block; + float: none; + width: 100%; } + /* line 51, ../../../../general/res/sass/mobile/overlay/_overlay.scss */ + .overlay > .holder > .contents .form.editor .contents .form-row > .label:after { + float: none; } } +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 23, ../../../../general/res/sass/tree/_tree.scss */ +ul.tree { + margin: 0; + padding: 0; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; } + /* line 329, ../../../../general/res/sass/_mixins.scss */ + ul.tree li { + list-style-type: none; + margin: 0; + padding: 0; } + /* line 26, ../../../../general/res/sass/tree/_tree.scss */ + ul.tree li { + display: block; + position: relative; } + /* line 30, ../../../../general/res/sass/tree/_tree.scss */ + ul.tree ul.tree { + margin-left: 15px; } + +/* line 35, ../../../../general/res/sass/tree/_tree.scss */ +.tree-item, +.search-result-item { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-transition: background-color 0.25s; + -o-transition: background-color 0.25s; + -webkit-transition: background-color 0.25s; + transition: background-color 0.25s; + display: block; + font-size: 0.8rem; + height: 1.5rem; + line-height: 1.5rem; + margin-bottom: 3px; + position: relative; } + /* line 48, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .view-control, + .search-result-item .view-control { + color: #666; + display: inline-block; + margin-left: 5px; + font-size: 0.75em; + width: 10px; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 57, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .view-control:hover, + .search-result-item .view-control:hover { + color: #0099cc !important; } } + /* line 63, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label, + .search-result-item .label { + display: block; + overflow: hidden; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + width: auto; + height: auto; + line-height: 1.5rem; } + /* line 71, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label .type-icon, + .search-result-item .label .type-icon { + font-size: 16px; + color: #0099cc; + left: 5px; + position: absolute; + top: 4px; + bottom: auto; + height: 16px; + line-height: 100%; + right: auto; + width: 16px; } + /* line 84, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label .type-icon .icon.l-icon-link, .tree-item .label .type-icon .icon.l-icon-alert, + .search-result-item .label .type-icon .icon.l-icon-link, + .search-result-item .label .type-icon .icon.l-icon-alert { + position: absolute; + z-index: 2; } + /* line 90, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label .type-icon .icon.l-icon-alert, + .search-result-item .label .type-icon .icon.l-icon-alert { + color: #ff3c00; + font-size: 8px; + line-height: 8px; + height: 8px; + width: 8px; + top: 1px; + right: -2px; } + /* line 96, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label .type-icon .icon.l-icon-link, + .search-result-item .label .type-icon .icon.l-icon-link { + color: #49dedb; + font-size: 8px; + line-height: 8px; + height: 8px; + width: 8px; + left: -3px; + bottom: 0px; } + /* line 104, ../../../../general/res/sass/tree/_tree.scss */ + .tree-item .label .title-label, + .search-result-item .label .title-label { + overflow: hidden; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + width: auto; + height: auto; + display: block; + left: 30px; + 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 */ + .tree-item.selected, + .search-result-item.selected { + background: #1ac6ff; + color: #fcfcfc; } + /* line 131, ../../../../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 */ + .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 */ + .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 */ + .tree-item:not(.selected):hover .icon, + .search-result-item:not(.selected):hover .icon { + color: #0099cc; } } + /* line 155, ../../../../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 */ + .tree-item .context-trigger, + .search-result-item .context-trigger { + top: -1px; + position: absolute; + right: 3px; } + /* line 165, ../../../../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 */ +.tree-item .label { + left: 15px; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 27, ../../../../general/res/sass/mobile/_tree.scss */ + ul.tree ul.tree { + margin-left: 20px; } + + /* line 31, ../../../../general/res/sass/mobile/_tree.scss */ + .tree-item, + .search-result-item { + height: 35px; + line-height: 35px; + margin-bottom: 0px; } + /* line 36, ../../../../general/res/sass/mobile/_tree.scss */ + .tree-item .view-control, + .search-result-item .view-control { + position: absolute; + font-size: 1.1em; + right: 0px; + width: 30px; + text-align: center; } + /* line 45, ../../../../general/res/sass/mobile/_tree.scss */ + .tree-item .label, + .search-result-item .label { + left: 0; + right: 35px; + line-height: 35px; } + /* line 50, ../../../../general/res/sass/mobile/_tree.scss */ + .tree-item .label .type-icon, + .search-result-item .label .type-icon { + top: 9px; + bottom: auto; + height: 16px; } } +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 25, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame.child-frame.panel { + background: #fcfcfc; + border: 1px solid rgba(102, 102, 102, 0.2); } + /* line 28, ../../../../general/res/sass/user-environ/_frame.scss */ + .frame.child-frame.panel:hover { + border-color: rgba(128, 128, 128, 0.2); } +/* line 32, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame > .object-header.abs, .s-menu .frame > span.object-header.l-click-area { + font-size: 0.75em; + height: 16px; + line-height: 16px; } +/* line 38, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame > .object-holder.abs, .s-menu .frame > span.object-holder.l-click-area { + top: 21px; } +/* line 41, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame .contents { + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; } +/* line 49, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame.frame-template .s-btn, .frame.frame-template .s-menu, +.frame.frame-template .s-menu { + height: 16px; + line-height: 16px; + padding: 0 5px; } + /* line 54, ../../../../general/res/sass/user-environ/_frame.scss */ + .frame.frame-template .s-btn > span, .frame.frame-template .s-menu > span, + .frame.frame-template .s-menu > span { + font-size: 0.65rem; } +/* line 59, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame.frame-template .s-menu:after { + font-size: 8px; } +/* line 63, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame.frame-template .view-switcher { + z-index: 10; } +@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 69, ../../../../general/res/sass/user-environ/_frame.scss */ + .frame.frame-template .view-switcher { + opacity: 0; } + /* line 72, ../../../../general/res/sass/user-environ/_frame.scss */ + .frame.frame-template:hover .view-switcher { + opacity: 1; } } +/* line 80, ../../../../general/res/sass/user-environ/_frame.scss */ +.frame .view-switcher .title-label { + display: none; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/user-environ/_top-bar.scss */ +.top-bar { + /* .title { + color: #fff; + }*/ } + /* line 23, ../../../../general/res/sass/user-environ/_top-bar.scss */ + .top-bar.browse, .top-bar.edit { + border-bottom: 1px solid rgba(102, 102, 102, 0.2); + top: 10px; + right: 10px; + bottom: auto; + left: 10px; + height: 30px; + line-height: 24px; } + /* line 35, ../../../../general/res/sass/user-environ/_top-bar.scss */ + .top-bar .buttons-main { + font-size: 0.8em; + left: auto; + text-align: right; } + +/* line 48, ../../../../general/res/sass/user-environ/_top-bar.scss */ +.edit-mode .top-bar .buttons-main { + white-space: nowrap; } + /* line 52, ../../../../general/res/sass/user-environ/_top-bar.scss */ + .edit-mode .top-bar .buttons-main.abs, .edit-mode .top-bar .s-menu span.buttons-main.l-click-area, .s-menu .edit-mode .top-bar span.buttons-main.l-click-area { + bottom: auto; + left: auto; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ +.ue-bottom-bar { + background: #000; + color: white; + font-size: .7rem; } + /* line 28, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .ue-bottom-bar .status-holder { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + width: auto; + height: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + line-height: 15px; + right: 120px; + text-transform: uppercase; } + /* line 39, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .ue-bottom-bar .app-logo { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + width: auto; + height: auto; + left: auto; + cursor: pointer; } + /* line 48, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .ue-bottom-bar .app-logo.logo-openmctweb { + background: url("../../../../general/res/images/logo-openmctweb.svg") no-repeat center center; } + +/* line 54, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ +.status.block { + display: inline; + margin-right: 10px; } + /* line 58, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .status.block .status-indicator { + display: inline-block; + margin-right: 3px; + color: #0099cc; } + /* line 65, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .status.block .status-indicator.ok { + color: #009900; } + /* line 68, ../../../../general/res/sass/user-environ/_bottom-bar.scss */ + .status.block .status-indicator.caution { + color: #ffaa00; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/user-environ/_tool-bar.scss */ +.tool-bar { + border-bottom: 1px solid rgba(102, 102, 102, 0.2); } + /* line 24, ../../../../general/res/sass/user-environ/_tool-bar.scss */ + .tool-bar .l-control-group { + height: 25px; } + /* line 27, ../../../../general/res/sass/user-environ/_tool-bar.scss */ + .tool-bar input[type="text"] { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: .9em; + height: 25px; + margin-bottom: 1px; + position: relative; } + /* line 33, ../../../../general/res/sass/user-environ/_tool-bar.scss */ + .tool-bar input[type="text"].sm { + width: 25px; } + /* line 37, ../../../../general/res/sass/user-environ/_tool-bar.scss */ + .tool-bar .input-labeled label { + font-size: 11.25px; } + +/********************************* VIEWS */ +/***************************************************************************** +* 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. +*****************************************************************************/ +/* line 23, ../../../../general/res/sass/_fixed-position.scss */ +.t-fixed-position.l-fixed-position { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; } + /* line 33, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position.l-fixed-position .l-grid-holder { + position: relative; + height: 100%; + width: 100%; } + /* line 37, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position.l-fixed-position .l-grid-holder .l-grid { + position: absolute; + height: 100%; + width: 100%; + pointer-events: none; + z-index: 0; } +/* line 48, ../../../../general/res/sass/_fixed-position.scss */ +.t-fixed-position .l-fixed-position-item { + position: absolute; + border: 1px solid transparent; } + /* line 52, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item.s-selected { + -moz-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + -webkit-box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + box-shadow: rgba(0, 0, 0, 0.7) 0 3px 10px; + border-color: #0099cc; + cursor: move; } + /* line 57, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item.s-not-selected { + opacity: 0.8; } + /* line 61, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-box, + .t-fixed-position .l-fixed-position-item .l-fixed-position-image, + .t-fixed-position .l-fixed-position-item .l-fixed-position-text { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 100%; + width: 100%; } + /* line 72, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-image { + background-size: cover; + background-repeat: no-repeat; + background-position: center; } + /* line 78, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text { + border: 1px solid transparent; + font-size: 0.8rem; + line-height: 100%; } + /* line 84, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-static-text { + padding: 1px; } + /* line 89, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: block; + padding: 2px; } + /* line 96, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-title { + float: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: auto; } + /* line 105, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-value { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + float: right; + margin-left: 5px; + padding-left: 5px; + padding-right: 5px; + text-align: right; } + /* line 116, ../../../../general/res/sass/_fixed-position.scss */ + .t-fixed-position .l-fixed-position-item .l-fixed-position-text.l-telemetry .l-elem.l-value.telem-only { + margin-left: 0; + width: 100%; } +/* line 126, ../../../../general/res/sass/_fixed-position.scss */ +.t-fixed-position .l-fixed-position-item-handle { + background: rgba(0, 153, 204, 0.5); + cursor: crosshair; + border: 1px solid #0099cc; + position: absolute; } + +/* line 140, ../../../../general/res/sass/_fixed-position.scss */ +.edit-mode .t-fixed-position.l-fixed-position .l-grid-holder .l-grid.l-grid-x { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIxcHgiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wNSIvPjxzdG9wIG9mZnNldD0iMXB4IiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); + background-size: 100%; + background-image: -moz-linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-image: -webkit-linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-repeat: repeat-x; } +/* line 144, ../../../../general/res/sass/_fixed-position.scss */ +.edit-mode .t-fixed-position.l-fixed-position .l-grid-holder .l-grid.l-grid-y { + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIxcHgiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wNSIvPjxzdG9wIG9mZnNldD0iMXB4IiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); + background-size: 100%; + background-image: -moz-linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-image: -webkit-linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.05) 1px, rgba(0, 0, 0, 0) 1px, rgba(0, 0, 0, 0) 100%); + background-repeat: repeat-y; } +/* line 152, ../../../../general/res/sass/_fixed-position.scss */ +.edit-mode .t-fixed-position .l-fixed-position-item:not(.s-selected) { + border: 1px dotted rgba(0, 153, 204, 0.75); } + /* line 154, ../../../../general/res/sass/_fixed-position.scss */ + .edit-mode .t-fixed-position .l-fixed-position-item:not(.s-selected):hover { + border: 1px dotted #0099cc; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/lists/_tabular.scss */ +.w1, .w2 { + position: relative; + height: 100%; } + +/* line 27, ../../../../general/res/sass/lists/_tabular.scss */ +.tabular, +table { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-spacing: 0; + border-collapse: collapse; + display: table; + font-size: 0.75rem; + position: relative; + width: 100%; } + /* line 36, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular thead, .tabular .thead, + .tabular tbody tr, .tabular .tbody .tr, + table thead, + table .thead, + table tbody tr, + table .tbody .tr { + width: 100%; } + /* line 40, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular thead, .tabular .thead, + table thead, + table .thead { + border-bottom: 1px solid #fcfcfc; } + /* line 43, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tbody, .tabular .tbody, + table tbody, + table .tbody { + display: table-row-group; } + /* line 46, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tbody tr:hover, .tabular tbody .tr:hover, .tabular .tbody tr:hover, .tabular .tbody .tr:hover, + table tbody tr:hover, + table tbody .tr:hover, + table .tbody tr:hover, + table .tbody .tr:hover { + background: rgba(51, 51, 51, 0.1); } + /* line 51, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr, .tabular .tr, + table tr, + table .tr { + display: table-row; } + /* line 53, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr:first-child .td, .tabular .tr:first-child .td, + table tr:first-child .td, + table .tr:first-child .td { + border-top: none; } + /* line 57, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr.group-header td, .tabular tr.group-header .td, .tabular .tr.group-header td, .tabular .tr.group-header .td, + table tr.group-header td, + table tr.group-header .td, + table .tr.group-header td, + table .tr.group-header .td { + background-color: #efefef; + color: #404040; } + /* line 63, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th, .tabular tr .th, .tabular tr td, .tabular tr .td, .tabular .tr th, .tabular .tr .th, .tabular .tr td, .tabular .tr .td, + table tr th, + table tr .th, + table tr td, + table tr .td, + table .tr th, + table .tr .th, + table .tr td, + table .tr .td { + display: table-cell; } + /* line 66, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th, .tabular tr .th, .tabular .tr th, .tabular .tr .th, + table tr th, + table tr .th, + table .tr th, + table .tr .th { + background-color: #e3e3e3; + border-left: 1px solid #fcfcfc; + color: #333333; + padding: 5px 5px; + white-space: nowrap; + vertical-align: middle; } + /* line 73, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th:first-child, .tabular tr .th:first-child, .tabular .tr th:first-child, .tabular .tr .th:first-child, + table tr th:first-child, + table tr .th:first-child, + table .tr th:first-child, + table .tr .th:first-child { + border-left: none; } + /* line 77, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th.sort.sort:after, .tabular tr .th.sort.sort:after, .tabular .tr th.sort.sort:after, .tabular .tr .th.sort.sort:after, + table tr th.sort.sort:after, + table tr .th.sort.sort:after, + table .tr th.sort.sort:after, + table .tr .th.sort.sort:after { + color: #49dedb; + font-family: symbolsfont; + font-size: 8px; + content: "\ed"; + display: inline-block; + margin-left: 3px; } + /* line 85, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th.sort.sort.desc:after, .tabular tr .th.sort.sort.desc:after, .tabular .tr th.sort.sort.desc:after, .tabular .tr .th.sort.sort.desc:after, + table tr th.sort.sort.desc:after, + table tr .th.sort.sort.desc:after, + table .tr th.sort.sort.desc:after, + table .tr .th.sort.sort.desc:after { + content: "\ec"; } + /* line 89, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr th.sortable, .tabular tr .th.sortable, .tabular .tr th.sortable, .tabular .tr .th.sortable, + table tr th.sortable, + table tr .th.sortable, + table .tr th.sortable, + table .tr .th.sortable { + cursor: pointer; } + /* line 93, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr td, .tabular tr .td, .tabular .tr td, .tabular .tr .td, + table tr td, + table tr .td, + table .tr td, + table .tr .td { + border-bottom: 1px solid #e3e3e3; + min-width: 20px; + color: #333333; + padding: 3px 5px; + word-wrap: break-word; + vertical-align: top; } + /* line 100, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr td.numeric, .tabular tr .td.numeric, .tabular .tr td.numeric, .tabular .tr .td.numeric, + table tr td.numeric, + table tr .td.numeric, + table .tr td.numeric, + table .tr .td.numeric { + text-align: right; } + /* line 103, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr td.s-cell-type-value, .tabular tr .td.s-cell-type-value, .tabular .tr td.s-cell-type-value, .tabular .tr .td.s-cell-type-value, + table tr td.s-cell-type-value, + table tr .td.s-cell-type-value, + table .tr td.s-cell-type-value, + table .tr .td.s-cell-type-value { + text-align: right; } + /* line 105, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular tr td.s-cell-type-value .l-cell-contents, .tabular tr .td.s-cell-type-value .l-cell-contents, .tabular .tr td.s-cell-type-value .l-cell-contents, .tabular .tr .td.s-cell-type-value .l-cell-contents, + table tr td.s-cell-type-value .l-cell-contents, + table tr .td.s-cell-type-value .l-cell-contents, + table .tr td.s-cell-type-value .l-cell-contents, + table .tr .td.s-cell-type-value .l-cell-contents { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + padding-left: 5px; + padding-right: 5px; } + /* line 121, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.filterable tbody, .tabular.filterable .tbody, + table.filterable tbody, + table.filterable .tbody { + top: 44px; } + /* line 124, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.filterable input[type="text"], + table.filterable input[type="text"] { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + width: 100%; } + /* line 130, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.fixed-header, + table.fixed-header { + height: 100%; } + /* line 132, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.fixed-header thead, .tabular.fixed-header .thead, + .tabular.fixed-header tbody tr, .tabular.fixed-header .tbody .tr, + table.fixed-header thead, + table.fixed-header .thead, + table.fixed-header tbody tr, + table.fixed-header .tbody .tr { + display: table; + table-layout: fixed; } + /* line 137, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.fixed-header thead, .tabular.fixed-header .thead, + table.fixed-header thead, + table.fixed-header .thead { + width: calc(100% - 10px); } + /* line 139, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.fixed-header thead:before, .tabular.fixed-header .thead:before, + table.fixed-header thead:before, + table.fixed-header .thead:before { + content: ""; + display: block; + z-index: 0; + position: absolute; + width: 100%; + height: 22px; + background: rgba(255, 255, 255, 0.15); } + /* line 149, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.fixed-header tbody, .tabular.fixed-header .tbody, + table.fixed-header tbody, + table.fixed-header .tbody { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; + top: 22px; + display: block; + overflow-y: scroll; } + /* line 157, ../../../../general/res/sass/lists/_tabular.scss */ + .tabular.t-event-messages td, .tabular.t-event-messages .td, + table.t-event-messages td, + table.t-event-messages .td { + min-width: 150px; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 31, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot { + color: #666; + font-size: 0.7rem; + position: relative; + width: 100%; + height: 100%; + /****************************** Limits and Out-of-Bounds data */ } + /* line 38, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-axis-area { + position: absolute; } + /* line 41, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-axis-area.gl-plot-x { + top: auto; + right: 0; + bottom: 5px; + left: 60px; + height: 32px; + width: auto; + overflow: hidden; } + /* line 50, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-axis-area.gl-plot-y { + top: 25px; + right: auto; + bottom: 37px; + left: 0; + width: 60px; } + /* line 59, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-coords { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background: black; + color: #b3b3b3; + padding: 2px 5px; + position: absolute; + top: 35px; + right: auto; + bottom: auto; + left: 70px; + z-index: 10; } + /* line 71, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-coords:empty { + display: none; } + /* line 76, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-display-area { + background-color: rgba(0, 0, 0, 0.05); + position: absolute; + top: 25px; + right: 0; + bottom: 37px; + left: 60px; + cursor: crosshair; + border: 1px solid rgba(102, 102, 102, 0.2); } + /* line 89, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-label, + .gl-plot .l-plot-label { + color: #999999; + position: absolute; + text-align: center; } + /* line 97, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-label.gl-plot-x-label, .gl-plot .gl-plot-label.l-plot-x-label, + .gl-plot .l-plot-label.gl-plot-x-label, + .gl-plot .l-plot-label.l-plot-x-label { + top: auto; + right: 0; + bottom: 0; + left: 0; + height: auto; } + /* line 106, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-label.gl-plot-y-label, .gl-plot .gl-plot-label.l-plot-y-label, + .gl-plot .l-plot-label.gl-plot-y-label, + .gl-plot .l-plot-label.l-plot-y-label { + -moz-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + -webkit-transform-origin: 50% 0; + transform-origin: 50% 0; + -moz-transform: translateX(-50%) rotate(-90deg); + -ms-transform: translateX(-50%) rotate(-90deg); + -webkit-transform: translateX(-50%) rotate(-90deg); + transform: translateX(-50%) rotate(-90deg); + display: inline-block; + margin-left: 5px; + left: 0; + top: 50%; + white-space: nowrap; } + /* line 120, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-y-options { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: auto5px; + margin-top: -16px; + height: auto; + min-height: 32px; + width: 32px; } + /* line 134, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-hash { + position: absolute; + border: 0 rgba(0, 0, 0, 0.2) dashed; } + /* line 137, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-hash.hash-v { + border-right-width: 1px; + height: 100%; } + /* line 141, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-hash.hash-h { + border-bottom-width: 1px; + width: 100%; } + /* line 147, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .gl-plot-legend { + position: absolute; + top: 0; + right: 0; + bottom: auto; + left: 0; + height: 20px; + overflow-x: hidden; + overflow-y: auto; } + /* line 160, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-limit-bar, + .gl-plot .l-oob-data { + position: absolute; + left: 0; + right: 0; + width: auto; } + /* line 168, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-limit-bar { + height: auto; + z-index: 0; } + /* line 176, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-limit-bar.s-limit-yellow { + background: rgba(255, 170, 0, 0.2); } + /* line 177, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-limit-bar.s-limit-red { + background: rgba(255, 0, 0, 0.2); } + /* line 180, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-oob-data { + overflow: hidden; + position: absolute; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + width: auto; + height: auto; + pointer-events: none; + height: 10px; + z-index: 1; } + /* line 188, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-oob-data.l-oob-data-up { + top: 0; + bottom: auto; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjEuMCIgeDI9IjAuNSIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); + background-size: 100%; + background-image: -moz-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); + background-image: -webkit-linear-gradient(90deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); + background-image: linear-gradient(0deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); } + /* line 193, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot .l-oob-data.l-oob-data-dwn { + bottom: 0; + top: auto; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzc3NDhkNiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3NzQ4ZDYiIHN0b3Atb3BhY2l0eT0iMC41Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); + background-size: 100%; + background-image: -moz-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); + background-image: -webkit-linear-gradient(270deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); + background-image: linear-gradient(180deg, rgba(119, 72, 214, 0), rgba(119, 72, 214, 0.5) 100%); } + +/* line 203, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot-legend .plot-legend-item, +.gl-plot-legend .legend-item, +.legend .plot-legend-item, +.legend .legend-item { + display: inline-block; + margin-right: 10px; + margin-bottom: 3px; } + /* line 208, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot-legend .plot-legend-item span, + .gl-plot-legend .legend-item span, + .legend .plot-legend-item span, + .legend .legend-item span { + vertical-align: middle; } + /* line 211, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot-legend .plot-legend-item .plot-color-swatch, + .gl-plot-legend .plot-legend-item .color-swatch, + .gl-plot-legend .legend-item .plot-color-swatch, + .gl-plot-legend .legend-item .color-swatch, + .legend .plot-legend-item .plot-color-swatch, + .legend .plot-legend-item .color-swatch, + .legend .legend-item .plot-color-swatch, + .legend .legend-item .color-swatch { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + display: inline-block; + height: 8px; + width: 8px; } + +/* line 228, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot-legend .plot-legend-item { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + line-height: 1.5em; + padding: 0px 5px; } + /* line 234, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot-legend .plot-legend-item .plot-color-swatch { + border: 1px solid #fcfcfc; + height: 9px; + width: 9px; } + +/* line 242, ../../../../general/res/sass/plots/_plots-main.scss */ +.tick { + position: absolute; + border: 0 rgba(0, 0, 0, 0.2) solid; } + /* line 245, ../../../../general/res/sass/plots/_plots-main.scss */ + .tick.tick-x { + border-right-width: 1px; + height: 100%; } + +/* line 251, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot-tick, +.tick-label { + font-size: 0.7rem; + position: absolute; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } + /* line 259, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot-tick.gl-plot-x-tick-label, .gl-plot-tick.tick-label-x, + .tick-label.gl-plot-x-tick-label, + .tick-label.tick-label-x { + right: auto; + bottom: auto; + left: auto; + height: auto; + width: 20%; + margin-left: -10%; + text-align: center; } + /* line 269, ../../../../general/res/sass/plots/_plots-main.scss */ + .gl-plot-tick.gl-plot-y-tick-label, .gl-plot-tick.tick-label-y, + .tick-label.gl-plot-y-tick-label, + .tick-label.tick-label-y { + top: auto; + height: 1em; + width: auto; + margin-bottom: -0.5em; + text-align: right; } + +/* line 281, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot-tick.gl-plot-x-tick-label { + top: 5px; } +/* line 284, ../../../../general/res/sass/plots/_plots-main.scss */ +.gl-plot-tick.gl-plot-y-tick-label { + right: 5px; + left: 5px; } + +/* line 291, ../../../../general/res/sass/plots/_plots-main.scss */ +.tick-label.tick-label-x { + top: 0; } +/* line 294, ../../../../general/res/sass/plots/_plots-main.scss */ +.tick-label.tick-label-y { + right: 0; + left: 0; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* Styles for the iframe EmbeddedPageController element */ +/* line 25, ../../../../general/res/sass/_iframe.scss */ +.l-iframe iframe { + display: block; + height: 100%; + width: 100%; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/******************************** BROWSE */ +/* line 27, ../../../../general/res/sass/_hide-non-functional.scss */ +.browse-mode .browse.top-bar { + display: none; } +/* line 32, ../../../../general/res/sass/_hide-non-functional.scss */ +.browse-mode .browse-area.holder { + top: 10px; } + +/* Styles for sub-dividing views generically */ +/* line 3, ../../../../general/res/sass/_views.scss */ +.l-view-section { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; + font-size: 0.8rem; } + /* line 6, ../../../../general/res/sass/_views.scss */ + .l-view-section h2 { + color: #fff; + margin-bottom: 5px; } + /* line 10, ../../../../general/res/sass/_views.scss */ + .l-view-section.fixed { + font-size: 0.8em; } + /* line 13, ../../../../general/res/sass/_views.scss */ + .l-view-section.scrolling { + overflow: auto; } + /* line 16, ../../../../general/res/sass/_views.scss */ + .l-view-section .controls, + .l-view-section label, + .l-view-section .inline-block { + display: inline-block; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/items/_item.scss */ +.items-holder { + overflow: hidden; + *zoom: 1; + overflow-y: auto; } + /* line 25, ../../../../general/res/sass/items/_item.scss */ + .items-holder .contents { + top: 0; } + /* line 29, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item { + background-color: #ddd; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #666; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; + box-sizing: border-box; + cursor: pointer; + float: left; + height: 200px; + width: 200px; + margin-bottom: 3px; + margin-right: 3px; + position: relative; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .items-holder .item.grid-item .icon { + color: #0099cc; } + @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { + /* line 277, ../../../../general/res/sass/_mixins.scss */ + .items-holder .item.grid-item:not(.disabled):hover { + background: #d0d0d0; } + /* line 279, ../../../../general/res/sass/_mixins.scss */ + .items-holder .item.grid-item:not(.disabled):hover > .icon { + color: #33ccff; } } + /* line 45, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item:hover .item-main .item-type { + color: deepskyblue; } + /* line 47, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item:hover .item-main .item-type .l-icon-link { + color: #49dedb; } + /* line 51, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item:hover .item-main .item-open { + opacity: 1; } + /* line 55, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .contents { + top: 10px; + right: 10px; + bottom: 10px; + left: 10px; } + /* line 61, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .bar.top-bar { + bottom: auto; + color: #8c8c8c; + height: 20px; + line-height: 20px; + text-align: right; + z-index: 5; } + /* line 68, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .bar.top-bar .left, .items-holder .item.grid-item .bar.top-bar .right { + width: auto; } + /* line 70, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .bar.top-bar .left .icon, .items-holder .item.grid-item .bar.top-bar .right .icon { + margin-left: 3px; } + /* line 72, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .bar.top-bar .left .icon.l-icon-link, .items-holder .item.grid-item .bar.top-bar .right .icon.l-icon-link { + color: #49dedb; } + /* line 78, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .bar.bottom-bar { + top: auto; + line-height: 110%; } + /* line 83, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .item-main { + line-height: 160px; + z-index: 1; } + /* line 89, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .item-main .item-type { + overflow: false; + position: absolute; + top: 40px; + right: 40px; + bottom: 40px; + left: 40px; + width: auto; + height: auto; + text-align: center; + font-size: 96.9px; + line-height: 102px; + bottom: auto; + height: 102px; + top: 30px; } + /* line 100, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .item-main .item-type .l-icon-link { + color: #49dedb; + height: auto; + line-height: 100%; + position: absolute; + font-size: 0.3em; + left: 0px; + bottom: 10px; + z-index: 2; } + /* line 111, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .item-main .item-open { + -moz-transition-property: "opacity"; + -o-transition-property: "opacity"; + -webkit-transition-property: "opacity"; + transition-property: "opacity"; + -moz-transition-duration: 200ms; + -o-transition-duration: 200ms; + -webkit-transition-duration: 200ms; + transition-duration: 200ms; + -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; + opacity: 0; + color: #8c8c8c; + font-size: 3em; + left: auto; + width: 50px; + pointer-events: none; + text-align: right; } + /* line 121, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .title { + text-shadow: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: #666; } + /* line 126, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item .details { + text-shadow: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: #8c8c8c; + font-size: 0.8em; } + /* line 132, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item.selected { + background-color: #0099cc; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + display: inline-block; + -moz-user-select: -moz-none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; + -moz-transition: background, 0.25s; + -o-transition: background, 0.25s; + -webkit-transition: background, 0.25s; + transition: background, 0.25s; + text-shadow: none; + color: #80dfff; } + /* line 272, ../../../../general/res/sass/_mixins.scss */ + .items-holder .item.grid-item.selected .icon { + color: #eee; } + /* line 137, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item.selected .item-type, .items-holder .item.grid-item.selected .top-bar .icon:not(.alert) { + color: #80dfff; } + /* line 138, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item.selected .item-main .item-open { + color: #80dfff; } + /* line 139, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item.selected .title { + color: white; } + /* line 141, ../../../../general/res/sass/items/_item.scss */ + .items-holder .item.grid-item.selected:hover .item-main .item-type { + color: white !important; } + +/***************************************************************************** + * 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. + *****************************************************************************/ +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 29, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item { + width: 100%; } + /* line 33, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item > .contents { + top: 0px; + right: 10px; + bottom: 0px; + left: 10px; } + /* line 37, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.top-bar { + bottom: 0 !important; + left: auto !important; + right: 20px !important; + width: 40px !important; + height: auto !important; + text-align: right; } + /* line 44, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.bottom-bar { + left: 40px; + right: 60px; } + /* line 52, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-type { + font-size: 30px; + right: auto; + bottom: auto; + left: 0; + line-height: 100%; + text-align: left; + width: 30px; } + /* line 61, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-type .l-icon-link { + bottom: 0; } + /* line 65, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-open { + display: block; + opacity: 1; + font-size: 1em; + width: auto; } } +@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 29, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item { + height: 50px; } + /* line 78, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.top-bar { + line-height: 50px !important; } + /* line 82, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.bottom-bar { + top: 7px; + bottom: auto; + height: 35px; } + /* line 87, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-type { + top: 10px; + bottom: auto; + height: 30px; } + /* line 90, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-open { + line-height: 50px; } } +@media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) { + /* line 29, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item { + height: 66px; } + /* line 100, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.top-bar { + line-height: 66px !important; } + /* line 104, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .bar.bottom-bar { + top: 15px; + bottom: auto; + height: 35px; } + /* line 109, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-type { + top: 18px; + bottom: auto; + height: 30px; } + /* line 112, ../../../../general/res/sass/mobile/_item.scss */ + .items-holder .item.grid-item .item-main .item-open { + line-height: 66px; } } + +/********************************* TO BE MOVED */ +/***************************************************************************** + * 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. + *****************************************************************************/ +/* line 22, ../../../../general/res/sass/_autoflow.scss */ +.autoflow { + font-size: 0.75rem; } + /* line 32, ../../../../general/res/sass/_autoflow.scss */ + .autoflow:hover .l-autoflow-header .s-btn.change-column-width, .autoflow:hover .l-autoflow-header .change-column-width.s-menu { + -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: 50ms; + -o-transition-duration: 50ms; + -webkit-transition-duration: 50ms; + transition-duration: 50ms; + -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; + opacity: 1; } + /* line 40, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-header { + bottom: auto; + height: 22px; + line-height: 22px; + min-width: 225px; } + /* line 45, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-header span { + vertical-align: middle; } + /* line 48, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-header .s-btn.change-column-width, .autoflow .l-autoflow-header .change-column-width.s-menu { + -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: 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; + opacity: 0; } + /* line 52, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-header .l-filter { + margin-left: 5px; } + /* line 54, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-header .l-filter input.t-filter-input { + width: 100px; } + /* line 60, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items { + overflow-x: scroll; + overflow-y: hidden; + top: 32px; + white-space: nowrap; } + /* line 66, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-left: 1px solid rgba(102, 102, 102, 0.2); + display: inline-block; + padding-left: 5px; + padding-right: 5px; + vertical-align: top; + width: 225px; } + /* line 76, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + display: block; + height: 15px; + line-height: 15px; + margin-bottom: 1px; + margin-top: 1px; + position: relative; } + /* line 85, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:first-child { + border-top: none; } + /* line 88, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:hover { + background: rgba(255, 255, 255, 0.1); } + /* line 93, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.s-stale .l-autoflow-item.l { + color: rgba(51, 51, 51, 0.3) !important; + font-style: italic; } + /* line 94, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.s-stale .l-autoflow-item.r { + color: rgba(51, 51, 51, 0.5) !important; + font-style: italic; } + /* line 97, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row:not(.s-stale) .l-autoflow-item.r { + color: gray; } + /* line 101, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row.first-in-group { + border-top: 1px solid rgba(153, 153, 153, 0.2); } + /* line 104, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item { + display: block; } + /* line 106, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item.l { + float: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: auto; } + /* line 113, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col .l-autoflow-row .l-autoflow-item.r { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + float: right; + margin-left: 5px; + padding-left: 5px; + padding-right: 5px; + text-align: right; } + /* line 124, ../../../../general/res/sass/_autoflow.scss */ + .autoflow .l-autoflow-items .l-autoflow-col:first-child { + border-left: none; + padding-left: 0; } + +/* line 1, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-main-wrapper, +.l-image-main, +.l-image-main-controlbar, +.l-image-thumbs-wrapper { + overflow: false; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: auto; + height: auto; } + +/*************************************** MAIN LAYOUT */ +/* line 9, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-main-wrapper { + min-height: 100px; + min-width: 150px; } + /* line 16, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-wrapper .l-image-main { + background-color: rgba(0, 0, 0, 0.05); + bottom: 30px; } + /* line 20, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-wrapper .l-image-main-controlbar { + top: auto; + height: 25px; } + +/* line 26, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-thumbs-wrapper { + top: auto; + height: 168px; } + +/* line 32, ../../../../general/res/sass/features/_imagery.scss */ +.l-date, +.l-time, +.l-timezone { + display: inline-block; } + +/*************************************** MAIN IMAGE */ +/* line 40, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-main, +.l-image-thumb-item .l-thumb { + background-size: contain; + background-position: center; + background-repeat: no-repeat; } + +/* line 51, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-main-controlbar { + font-size: 0.8em; + line-height: 25px; } + /* line 55, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .left, .l-image-main-controlbar .right { + direction: rtl; + overflow: hidden; } + /* line 59, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .left { + text-align: left; } + /* line 63, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .right { + z-index: 2; } + /* line 67, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .l-date, + .l-image-main-controlbar .l-time { + color: #333333; } + /* line 71, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .l-mag { + direction: ltr; + display: inline-block; } + /* line 75, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .l-mag:before { + content: "\000049"; } + /* line 79, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .s-mag { + color: #999999; } + /* line 82, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-main-controlbar .l-btn.show-thumbs { + display: none; } + +/* line 87, ../../../../general/res/sass/features/_imagery.scss */ +.s-image-main { + border: 1px solid transparent; } + /* line 89, ../../../../general/res/sass/features/_imagery.scss */ + .s-image-main.paused { + border-color: #ff9900; } + +/*************************************** THUMBS */ +/* line 96, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-thumbs-wrapper { + direction: rtl; + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 5px; + white-space: nowrap; + z-index: 70; } + +/* line 106, ../../../../general/res/sass/features/_imagery.scss */ +.l-image-thumb-item { + -moz-transition: background-color 0.25s; + -o-transition: background-color 0.25s; + -webkit-transition: background-color 0.25s; + transition: background-color 0.25s; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 1px; + position: relative; + cursor: pointer; + direction: ltr; + display: inline-block; + font-size: 0.8em; + margin-left: 3px; + text-align: left; + width: 122px; + white-space: normal; } + /* line 111, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item .l-thumb, + .l-image-thumb-item .l-date, + .l-image-thumb-item .l-time { + display: inline-block; } + /* line 116, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item .l-date, + .l-image-thumb-item .l-time { + padding: 2px 3px; } + /* line 128, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item:hover { + background: rgba(255, 255, 255, 0.2); } + /* line 130, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item:hover .l-date, + .l-image-thumb-item:hover .l-time { + color: #fff; } + /* line 135, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item.selected { + background: #0099cc; } + /* line 137, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item.selected .l-date, + .l-image-thumb-item.selected .l-time { + color: #fff; } + /* line 142, ../../../../general/res/sass/features/_imagery.scss */ + .l-image-thumb-item .l-thumb { + background-color: rgba(255, 255, 255, 0.1); + height: 120px; + width: 120px; + margin-top: 0; } + +/*************************************** WHEN IN FRAME */ +/* line 152, ../../../../general/res/sass/features/_imagery.scss */ +.frame .t-imagery .l-image-main-wrapper { + bottom: 0; } + /* line 154, ../../../../general/res/sass/features/_imagery.scss */ + .frame .t-imagery .l-image-main-wrapper .l-image-main-controlbar { + font-size: 0.7em; } +/* line 163, ../../../../general/res/sass/features/_imagery.scss */ +.frame .t-imagery .l-image-thumbs-wrapper { + display: none; } + +/* line 5, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display:hover .l-btn.control { + opacity: 1; } +/* line 9, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display .l-elem-wrapper { + position: relative; } +/* line 12, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display .l-elem { + display: inline-block; } +/* line 17, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display.l-timer .l-elem.l-value { + -moz-transition-property: left; + -o-transition-property: left; + -webkit-transition-property: left; + transition-property: left; + -moz-transition-duration: 200ms; + -o-transition-duration: 200ms; + -webkit-transition-duration: 200ms; + transition-duration: 200ms; + -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; + position: absolute; + left: 0; + z-index: 1; } + /* line 22, ../../../../general/res/sass/features/_time-display.scss */ + .l-time-display.l-timer .l-elem.l-value .ui-symbol.direction { + font-size: 0.8em; } +/* line 26, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display.l-timer:hover .l-elem.l-value { + left: 20px; } +/* line 33, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display .l-elem .value.active, .l-time-display .l-elem.value.active { + color: #fff; } +/* line 38, ../../../../general/res/sass/features/_time-display.scss */ +.l-time-display .l-btn.control { + -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: 200ms; + -o-transition-duration: 200ms; + -webkit-transition-duration: 200ms; + transition-duration: 200ms; + -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; + opacity: 0; + font-size: 0.65em; + vertical-align: top; } + +/* line 3, ../sass/_controls.scss */ +.s-btn.major .title-label, .major.s-menu .title-label { + text-transform: uppercase; } diff --git a/platform/commonUI/themes/snow/res/sass/_constants.scss b/platform/commonUI/themes/snow/res/sass/_constants.scss index 61d76cebb8..986bf4cbb3 100644 --- a/platform/commonUI/themes/snow/res/sass/_constants.scss +++ b/platform/commonUI/themes/snow/res/sass/_constants.scss @@ -12,7 +12,7 @@ $basicCr: 4px; $controlCr: $basicCr; $smallCr: 3px; -// Buttons +// Buttons and Controls $colorBtnBg: pullForward($colorBodyBg, $contrastRatioPercent); $colorBtnFg: #fff; $colorBtnMajorBg: $colorKey; @@ -20,6 +20,13 @@ $colorBtnMajorFg: $colorKeyFg; $colorBtnIcon: #eee; $colorInvokeMenu: #000; $contrastInvokeMenuPercent: 40%; +$sliderColorBase: $colorKey; +$sliderColorRangeHolder: rgba(black, 0.07); +$sliderColorRange: rgba($sliderColorBase, 0.3); +$sliderColorRangeHov: rgba($sliderColorBase, 0.5); +$sliderColorKnob: $sliderColorRange; +$sliderColorKnobHov: $sliderColorBase; +$sliderKnobW: 5px; // General Colors $colorAlt1: #ff6600; @@ -32,6 +39,7 @@ $colorGridLines: rgba(#000, 0.05); $colorInvokeMenu: #fff; $colorObjHdrTxt: $colorBodyFg; $colorObjHdrIc: pushBack($colorObjHdrTxt, 30%); +$colorTick: rgba(black, 0.2); // Menu colors $colorMenuBg: pushBack($colorBodyBg, 10%); @@ -104,9 +112,10 @@ $colorTabHeaderBorder: $colorBodyBg; // Plot $colorPlotBg: rgba(black, 0.05); $colorPlotFg: $colorBodyFg; -$colorPlotHash: rgba(black, 0.2); +$colorPlotHash: $colorTick; $stylePlotHash: dashed; $colorPlotAreaBorder: $colorInteriorBorder; +$colorPlotLabelFg: pushBack($colorPlotFg, 20%); // Tree $colorItemTreeIcon: $colorKey; From 1214a32c262bc709fe723a947b67c2082acb03e6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 23 Sep 2015 17:22:32 -0700 Subject: [PATCH 090/226] [Common UI] Avoid apply-in-a-digest Don't invoke from mct-resize when first observing an element's size during linking; observed issue in the context of adding domain selector to time conductor. --- platform/commonUI/general/src/directives/MCTResize.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/commonUI/general/src/directives/MCTResize.js b/platform/commonUI/general/src/directives/MCTResize.js index 7f2d722803..f0fd8e0a69 100644 --- a/platform/commonUI/general/src/directives/MCTResize.js +++ b/platform/commonUI/general/src/directives/MCTResize.js @@ -58,6 +58,7 @@ define( // Link; start listening for changes to an element's size function link(scope, element, attrs) { var lastBounds, + linking = true, active = true; // Determine how long to wait before the next update @@ -74,7 +75,9 @@ define( lastBounds.width !== bounds.width || lastBounds.height !== bounds.height) { scope.$eval(attrs.mctResize, { bounds: bounds }); - scope.$apply(); // Trigger a digest + if (!linking) { // Avoid apply-in-a-digest + scope.$apply(); + } lastBounds = bounds; } } @@ -101,6 +104,9 @@ define( // Handle the initial callback onInterval(); + + // Trigger scope.$apply on subsequent changes + linking = false; } return { From 404d1e7801d43dbeb71bfc722e2c8583d1daa393 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Thu, 24 Sep 2015 11:29:28 -0700 Subject: [PATCH 091/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Begin work on styling the datetime picker; --- .../general/res/sass/controls/_controls.scss | 5 + .../general/res/sass/controls/_menus.scss | 312 +++++++------- .../general/res/sass/forms/_selects.scss | 5 +- .../templates/controls/datetime-picker.html | 80 ++-- .../templates/controls/time-controller.html | 48 +-- .../espresso/res/css/theme-espresso.css | 382 +++++++++--------- .../themes/snow/res/css/theme-snow.css | 372 +++++++++-------- 7 files changed, 624 insertions(+), 580 deletions(-) diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index a93fc077ca..317eb2aef6 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -349,6 +349,11 @@ label.checkbox.custom { } } +/******************************************************** DATETIME PICKER */ +.l-datetime-picker { + padding: $interiorMarginLg !important; +} + /******************************************************** BROWSER ELEMENTS */ @include desktop { diff --git a/platform/commonUI/general/res/sass/controls/_menus.scss b/platform/commonUI/general/res/sass/controls/_menus.scss index d9aecfd1c8..889e4003f7 100644 --- a/platform/commonUI/general/res/sass/controls/_menus.scss +++ b/platform/commonUI/general/res/sass/controls/_menus.scss @@ -62,186 +62,188 @@ /******************************************************** MENUS THEMSELVES */ .menu-element { - $bg: $colorMenuBg; - $fg: $colorMenuFg; - $ic: $colorMenuIc; cursor: pointer; position: relative; - .menu { - @include border-radius($basicCr); - @include containerSubtle($bg, $fg); - @include boxShdw($shdwMenu); - @include txtShdw($shdwMenuText); - display: block; // set to block via jQuery - padding: $interiorMarginSm 0; - position: absolute; - z-index: 10; - ul { - @include menuUlReset(); - li { - @include box-sizing(border-box); - border-top: 1px solid lighten($bg, 20%); - color: pullForward($bg, 60%); - line-height: $menuLineH; - padding: $interiorMarginSm $interiorMargin * 2 $interiorMarginSm ($interiorMargin * 2) + $treeTypeIconW; - position: relative; - white-space: nowrap; - &:first-child { - border: none; - } - &:hover { - background: $colorMenuHovBg; - color: $colorMenuHovFg; - .icon { - color: $colorMenuHovIc; - } - } - .type-icon { - left: $interiorMargin * 2; - } - } - } - } +} - .menu, - .context-menu, - .super-menu { - pointer-events: auto; - ul li { - //padding-left: 25px; - a { - color: $fg; - } - .icon { - color: $ic; - } - .type-icon { - left: $interiorMargin; - } - &:hover .icon { - //color: lighten($ic, 5%); - } - } - } - - .checkbox-menu { - // Used in search dropdown in tree - @extend .context-menu; - ul li { - padding-left: 50px; - .checkbox { - $d: 0.7rem; - position: absolute; - left: $interiorMargin; - top: ($menuLineH - $d) / 1.5; - em { - height: $d; - width: $d; - &:before { - font-size: 7px !important;// $d/2; - height: $d; - width: $d; - line-height: $d; - } - } - } - .type-icon { - left: 25px; - } - } - } - - .super-menu { - $w: 500px; - $h: $w - 20; - $plw: 50%; - $prw: 50%; - display: block; - width: $w; - height: $h; - .contents { - @include absPosDefault($interiorMargin); - } - .pane { +.menu { + @include border-radius($basicCr); + @include containerSubtle($colorMenuBg, $colorMenuFg); + @include boxShdw($shdwMenu); + @include txtShdw($shdwMenuText); + display: block; // set to block via jQuery + padding: $interiorMarginSm 0; + position: absolute; + z-index: 10; + ul { + @include menuUlReset(); + li { @include box-sizing(border-box); - &.left { - //@include test(); - border-right: 1px solid pullForward($colorMenuBg, 10%); - left: 0; - padding-right: $interiorMargin; - right: auto; - width: $plw; - overflow-x: hidden; - overflow-y: auto; - ul { - li { - @include border-radius($controlCr); - padding-left: 30px; - border-top: none; - } + border-top: 1px solid lighten($colorMenuBg, 20%); + color: pullForward($colorMenuBg, 60%); + line-height: $menuLineH; + padding: $interiorMarginSm $interiorMargin * 2 $interiorMarginSm ($interiorMargin * 2) + $treeTypeIconW; + position: relative; + white-space: nowrap; + &:first-child { + border: none; + } + &:hover { + background: $colorMenuHovBg; + color: $colorMenuHovFg; + .icon { + color: $colorMenuHovIc; } } - &.right { - //@include test(red); - left: auto; - right: 0; - padding: $interiorMargin * 5; - width: $prw; + .type-icon { + left: $interiorMargin * 2; } } - .menu-item-description { - .desc-area { - &.icon { - $h: 150px; - color: $colorCreateMenuLgIcon; - position: relative; - font-size: 8em; - left: 0; - height: $h; - line-height: $h; - margin-bottom: $interiorMargin * 5; - text-align: center; - } - &.title { - color: $colorCreateMenuText; - font-size: 1.2em; - margin-bottom: 0.5em; - } - &.description { - //color: lighten($bg, 30%); - color: $colorCreateMenuText; - font-size: 0.8em; - line-height: 1.5em; - } - } - } - } - .context-menu { - font-size: 0.80rem; } } -.context-menu-holder { +.menu, +.context-menu, +.super-menu { + pointer-events: auto; + ul li { + //padding-left: 25px; + a { + color: $colorMenuFg; + } + .icon { + color: $colorMenuIc; + } + .type-icon { + left: $interiorMargin; + } + &:hover .icon { + //color: lighten($colorMenuIc, 5%); + } + } +} + +.checkbox-menu { + // Used in search dropdown in tree + @extend .context-menu; + ul li { + padding-left: 50px; + .checkbox { + $d: 0.7rem; + position: absolute; + left: $interiorMargin; + top: ($menuLineH - $d) / 1.5; + em { + height: $d; + width: $d; + &:before { + font-size: 7px !important;// $d/2; + height: $d; + width: $d; + line-height: $d; + } + } + } + .type-icon { + left: 25px; + } + } +} + +.super-menu { + $w: 500px; + $h: $w - 20; + $plw: 50%; + $prw: 50%; + display: block; + width: $w; + height: $h; + .contents { + @include absPosDefault($interiorMargin); + } + .pane { + @include box-sizing(border-box); + &.left { + //@include test(); + border-right: 1px solid pullForward($colorMenuBg, 10%); + left: 0; + padding-right: $interiorMargin; + right: auto; + width: $plw; + overflow-x: hidden; + overflow-y: auto; + ul { + li { + @include border-radius($controlCr); + padding-left: 30px; + border-top: none; + } + } + } + &.right { + //@include test(red); + left: auto; + right: 0; + padding: $interiorMargin * 5; + width: $prw; + } + } + .menu-item-description { + .desc-area { + &.icon { + $h: 150px; + color: $colorCreateMenuLgIcon; + position: relative; + font-size: 8em; + left: 0; + height: $h; + line-height: $h; + margin-bottom: $interiorMargin * 5; + text-align: center; + } + &.title { + color: $colorCreateMenuText; + font-size: 1.2em; + margin-bottom: 0.5em; + } + &.description { + //color: lighten($colorMenuBg, 30%); + color: $colorCreateMenuText; + font-size: 0.8em; + line-height: 1.5em; + } + } + } +} +.context-menu { + font-size: 0.80rem; +} + +.context-menu-holder, +.menu-holder { pointer-events: none; position: absolute; - height: 200px; - width: 170px; z-index: 70; .context-menu-wrapper { position: absolute; height: 100%; width: 100%; - .context-menu { - } } - &.go-left .context-menu { + &.go-left .context-menu, + &.go-left .menu { right: 0; } - &.go-up .context-menu { + &.go-up .context-menu, + &.go-up .menu { bottom: 0; } } +.context-menu-holder { + height: 200px; + width: 170px; +} + .btn-bar.right .menu, .menus-to-left .menu { left: auto; diff --git a/platform/commonUI/general/res/sass/forms/_selects.scss b/platform/commonUI/general/res/sass/forms/_selects.scss index 2eda20dd6c..ca45addd4d 100644 --- a/platform/commonUI/general/res/sass/forms/_selects.scss +++ b/platform/commonUI/general/res/sass/forms/_selects.scss @@ -40,11 +40,8 @@ } &:after { @include contextArrow(); + pointer-events: none; color: rgba($colorSelectFg, percentToDecimal($contrastInvokeMenuPercent)); - //content:"v"; - //display: block; - //font-family: 'symbolsfont'; - //pointer-events: none; position: absolute; right: $interiorMargin; top: 0; } diff --git a/platform/commonUI/general/res/templates/controls/datetime-picker.html b/platform/commonUI/general/res/templates/controls/datetime-picker.html index dd774588d6..d9fc42367f 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-picker.html +++ b/platform/commonUI/general/res/templates/controls/datetime-picker.html @@ -20,42 +20,46 @@ at runtime from the About dialog for additional information. --> -
-
-
- < - {{month}} {{year}} - > -
-
- - - - - - - -
- {{day}} -
-
{{cell.day}}
-
{{cell.dayOfYear}}
-
-
-
-
-
{{nameFor(key)}}
- -
+ diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index f2bfb01cbf..0c0e4d077b 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -20,8 +20,6 @@ at runtime from the About dialog for additional information. --> - -
C @@ -29,19 +27,16 @@ {{startOuterText}} - - - -
- - -
-
-
+ + + +
@@ -51,19 +46,16 @@ {{endOuterText}} - - - -
- - -
-
-
+ + + +
  diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index 3a90c66458..c459d1ebb9 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -1898,9 +1898,14 @@ label.checkbox.custom { .slider .range:hover { background-color: rgba(0, 153, 204, 0.5); } +/******************************************************** DATETIME PICKER */ +/* line 353, ../../../../general/res/sass/controls/_controls.scss */ +.l-datetime-picker { + padding: 10px !important; } + /******************************************************** BROWSER ELEMENTS */ @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 355, ../../../../general/res/sass/controls/_controls.scss */ + /* line 360, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -1915,7 +1920,7 @@ label.checkbox.custom { height: 10px; width: 10px; } - /* line 364, ../../../../general/res/sass/controls/_controls.scss */ + /* line 369, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzU5NTk1OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzRkNGQ0ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1929,7 +1934,7 @@ label.checkbox.custom { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - /* line 373, ../../../../general/res/sass/controls/_controls.scss */ + /* line 378, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzVlNWU1ZSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzUyNTI1MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1938,7 +1943,7 @@ label.checkbox.custom { background-image: -webkit-linear-gradient(#5e5e5e, #525252 20px); background-image: linear-gradient(#5e5e5e, #525252 20px); } - /* line 378, ../../../../general/res/sass/controls/_controls.scss */ + /* line 383, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-corner { background: rgba(0, 0, 0, 0.4); } } /***************************************************************************** @@ -2027,198 +2032,214 @@ label.checkbox.custom { .menu-element { cursor: pointer; position: relative; } - /* line 70, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu { - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - background-color: #6e6e6e; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: white; - display: inline-block; - background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdhN2E3YSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzZlNmU2ZSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); - background-size: 100%; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7a7a7a), color-stop(100%, #6e6e6e)); - background-image: -moz-linear-gradient(#7a7a7a, #6e6e6e); - background-image: -webkit-linear-gradient(#7a7a7a, #6e6e6e); - background-image: linear-gradient(#7a7a7a, #6e6e6e); - -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; - text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px; - display: block; - padding: 3px 0; - position: absolute; - z-index: 10; } - /* line 79, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul { + +/* line 69, ../../../../general/res/sass/controls/_menus.scss */ +.menu { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + background-color: #6e6e6e; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: white; + display: inline-block; + background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzdhN2E3YSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzZlNmU2ZSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); + background-size: 100%; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #7a7a7a), color-stop(100%, #6e6e6e)); + background-image: -moz-linear-gradient(#7a7a7a, #6e6e6e); + background-image: -webkit-linear-gradient(#7a7a7a, #6e6e6e); + background-image: linear-gradient(#7a7a7a, #6e6e6e); + -moz-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; + -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; + box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px; + text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px; + display: block; + padding: 3px 0; + position: absolute; + z-index: 10; } + /* line 78, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul { + margin: 0; + padding: 0; } + /* line 329, ../../../../general/res/sass/_mixins.scss */ + .menu ul li { + list-style-type: none; margin: 0; padding: 0; } - /* line 329, ../../../../general/res/sass/_mixins.scss */ - .menu-element .menu ul li { - list-style-type: none; - margin: 0; - padding: 0; } - /* line 81, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-top: 1px solid #a1a1a1; - color: white; - line-height: 1.5rem; - padding: 3px 10px 3px 30px; - position: relative; - white-space: nowrap; } - /* line 89, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:first-child { - border: none; } - /* line 92, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover { - background: #878787; - color: #fff; } - /* line 95, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover .icon { - color: #fff; } - /* line 99, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon { - left: 10px; } - /* line 106, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu, - .menu-element .context-menu, - .menu-element .checkbox-menu, - .menu-element .super-menu { - pointer-events: auto; } - /* line 112, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li a, - .menu-element .context-menu ul li a, - .menu-element .checkbox-menu ul li a, - .menu-element .super-menu ul li a { - color: white; } - /* line 115, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .icon, - .menu-element .context-menu ul li .icon, - .menu-element .checkbox-menu ul li .icon, - .menu-element .super-menu ul li .icon { - color: #24c8ff; } - /* line 118, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon, - .menu-element .context-menu ul li .type-icon, - .menu-element .checkbox-menu ul li .type-icon, - .menu-element .super-menu ul li .type-icon { - left: 5px; } - /* line 130, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li { - padding-left: 50px; } - /* line 132, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox { - position: absolute; - left: 5px; - top: 0.53333rem; } - /* line 137, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em { - height: 0.7rem; - width: 0.7rem; } - /* line 140, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em:before { - font-size: 7px !important; - height: 0.7rem; - width: 0.7rem; - line-height: 0.7rem; } - /* line 148, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .type-icon { - left: 25px; } - /* line 154, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu { - display: block; - width: 500px; - height: 480px; } - /* line 162, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .contents { - overflow: hidden; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - width: auto; - height: auto; } - /* line 165, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane { + /* line 80, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; - box-sizing: border-box; } - /* line 167, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left { - border-right: 1px solid #878787; - left: 0; - padding-right: 5px; - right: auto; - width: 50%; - overflow-x: hidden; - overflow-y: auto; } - /* line 177, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left ul li { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - padding-left: 30px; - border-top: none; } - /* line 184, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.right { - left: auto; - right: 0; - padding: 25px; - width: 50%; } - /* line 194, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.icon { + box-sizing: border-box; + border-top: 1px solid #a1a1a1; color: white; + line-height: 1.5rem; + padding: 3px 10px 3px 30px; position: relative; - font-size: 8em; - left: 0; - height: 150px; - line-height: 150px; - margin-bottom: 25px; - text-align: center; } - /* line 205, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.title { - color: white; - font-size: 1.2em; - margin-bottom: 0.5em; } - /* line 210, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.description { - color: white; - font-size: 0.8em; - line-height: 1.5em; } - /* line 219, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .context-menu, .menu-element .checkbox-menu { - font-size: 0.80rem; } + white-space: nowrap; } + /* line 88, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:first-child { + border: none; } + /* line 91, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:hover { + background: #878787; + color: #fff; } + /* line 94, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:hover .icon { + color: #fff; } + /* line 98, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .type-icon { + left: 10px; } -/* line 224, ../../../../general/res/sass/controls/_menus.scss */ -.context-menu-holder { +/* line 105, ../../../../general/res/sass/controls/_menus.scss */ +.menu, +.context-menu, +.checkbox-menu, +.super-menu { + pointer-events: auto; } + /* line 111, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li a, + .context-menu ul li a, + .checkbox-menu ul li a, + .super-menu ul li a { + color: white; } + /* line 114, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .icon, + .context-menu ul li .icon, + .checkbox-menu ul li .icon, + .super-menu ul li .icon { + color: #24c8ff; } + /* line 117, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .type-icon, + .context-menu ul li .type-icon, + .checkbox-menu ul li .type-icon, + .super-menu ul li .type-icon { + left: 5px; } + +/* line 129, ../../../../general/res/sass/controls/_menus.scss */ +.checkbox-menu ul li { + padding-left: 50px; } + /* line 131, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox { + position: absolute; + left: 5px; + top: 0.53333rem; } + /* line 136, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox em { + height: 0.7rem; + width: 0.7rem; } + /* line 139, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox em:before { + font-size: 7px !important; + height: 0.7rem; + width: 0.7rem; + line-height: 0.7rem; } + /* line 147, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .type-icon { + left: 25px; } + +/* line 153, ../../../../general/res/sass/controls/_menus.scss */ +.super-menu { + display: block; + width: 500px; + height: 480px; } + /* line 161, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .contents { + overflow: hidden; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + width: auto; + height: auto; } + /* line 164, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + /* line 166, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.left { + border-right: 1px solid #878787; + left: 0; + padding-right: 5px; + right: auto; + width: 50%; + overflow-x: hidden; + overflow-y: auto; } + /* line 176, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.left ul li { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + padding-left: 30px; + border-top: none; } + /* line 183, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.right { + left: auto; + right: 0; + padding: 25px; + width: 50%; } + /* line 193, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.icon { + color: white; + position: relative; + font-size: 8em; + left: 0; + height: 150px; + line-height: 150px; + margin-bottom: 25px; + text-align: center; } + /* line 204, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.title { + color: white; + font-size: 1.2em; + margin-bottom: 0.5em; } + /* line 209, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.description { + color: white; + font-size: 0.8em; + line-height: 1.5em; } + +/* line 218, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu, .checkbox-menu { + font-size: 0.80rem; } + +/* line 222, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu-holder, +.menu-holder { pointer-events: none; position: absolute; - height: 200px; - width: 170px; z-index: 70; } - /* line 230, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder .context-menu-wrapper { + /* line 227, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder .context-menu-wrapper, + .menu-holder .context-menu-wrapper { position: absolute; height: 100%; width: 100%; } - /* line 237, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-left .checkbox-menu { + /* line 232, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .checkbox-menu, .context-menu-holder.go-left .menu, + .menu-holder.go-left .context-menu, + .menu-holder.go-left .checkbox-menu, + .menu-holder.go-left .menu { right: 0; } - /* line 240, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-up .checkbox-menu { + /* line 236, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .checkbox-menu, .context-menu-holder.go-up .menu, + .menu-holder.go-up .context-menu, + .menu-holder.go-up .checkbox-menu, + .menu-holder.go-up .menu { bottom: 0; } -/* line 245, ../../../../general/res/sass/controls/_menus.scss */ +/* line 242, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu-holder { + height: 200px; + width: 170px; } + +/* line 247, ../../../../general/res/sass/controls/_menus.scss */ .btn-bar.right .menu, .menus-to-left .menu { left: auto; @@ -2685,6 +2706,7 @@ textarea { font-family: 'symbolsfont'; margin-left: 3px; vertical-align: top; + pointer-events: none; color: rgba(153, 153, 153, 0.2); position: absolute; right: 5px; diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index 4d43df559d..f8660b75aa 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -1868,9 +1868,14 @@ label.checkbox.custom { .slider .range:hover { background-color: rgba(0, 153, 204, 0.5); } +/******************************************************** DATETIME PICKER */ +/* line 353, ../../../../general/res/sass/controls/_controls.scss */ +.l-datetime-picker { + padding: 10px !important; } + /******************************************************** BROWSER ELEMENTS */ @media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) { - /* line 355, ../../../../general/res/sass/controls/_controls.scss */ + /* line 360, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -1885,7 +1890,7 @@ label.checkbox.custom { height: 10px; width: 10px; } - /* line 364, ../../../../general/res/sass/controls/_controls.scss */ + /* line 369, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzg5ODk4OSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzdkN2Q3ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1899,7 +1904,7 @@ label.checkbox.custom { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - /* line 373, ../../../../general/res/sass/controls/_controls.scss */ + /* line 378, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-thumb:hover { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwYWNlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwOTljYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -1908,7 +1913,7 @@ label.checkbox.custom { background-image: -webkit-linear-gradient(#00ace6, #0099cc 20px); background-image: linear-gradient(#00ace6, #0099cc 20px); } - /* line 378, ../../../../general/res/sass/controls/_controls.scss */ + /* line 383, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-corner { background: rgba(0, 0, 0, 0.1); } } /***************************************************************************** @@ -1997,192 +2002,208 @@ label.checkbox.custom { .menu-element { cursor: pointer; position: relative; } - /* line 70, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - background-color: white; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - color: #4d4d4d; - display: inline-block; - -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; - text-shadow: none; - display: block; - padding: 3px 0; - position: absolute; - z-index: 10; } - /* line 79, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul { + +/* line 69, ../../../../general/res/sass/controls/_menus.scss */ +.menu { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + background-color: white; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: #4d4d4d; + display: inline-block; + -moz-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + -webkit-box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + box-shadow: rgba(0, 0, 0, 0.5) 0 1px 5px; + text-shadow: none; + display: block; + padding: 3px 0; + position: absolute; + z-index: 10; } + /* line 78, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul { + margin: 0; + padding: 0; } + /* line 329, ../../../../general/res/sass/_mixins.scss */ + .menu ul li { + list-style-type: none; margin: 0; padding: 0; } - /* line 329, ../../../../general/res/sass/_mixins.scss */ - .menu-element .menu ul li { - list-style-type: none; - margin: 0; - padding: 0; } - /* line 81, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border-top: 1px solid white; - color: #666666; - line-height: 1.5rem; - padding: 3px 10px 3px 30px; - position: relative; - white-space: nowrap; } - /* line 89, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:first-child { - border: none; } - /* line 92, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover { - background: #e6e6e6; - color: #4d4d4d; } - /* line 95, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li:hover .icon { - color: #0099cc; } - /* line 99, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon { - left: 10px; } - /* line 106, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu, - .menu-element .context-menu, - .menu-element .checkbox-menu, - .menu-element .super-menu { - pointer-events: auto; } - /* line 112, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li a, - .menu-element .context-menu ul li a, - .menu-element .checkbox-menu ul li a, - .menu-element .super-menu ul li a { - color: #4d4d4d; } - /* line 115, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .icon, - .menu-element .context-menu ul li .icon, - .menu-element .checkbox-menu ul li .icon, - .menu-element .super-menu ul li .icon { - color: #0099cc; } - /* line 118, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .menu ul li .type-icon, - .menu-element .context-menu ul li .type-icon, - .menu-element .checkbox-menu ul li .type-icon, - .menu-element .super-menu ul li .type-icon { - left: 5px; } - /* line 130, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li { - padding-left: 50px; } - /* line 132, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox { - position: absolute; - left: 5px; - top: 0.53333rem; } - /* line 137, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em { - height: 0.7rem; - width: 0.7rem; } - /* line 140, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .checkbox em:before { - font-size: 7px !important; - height: 0.7rem; - width: 0.7rem; - line-height: 0.7rem; } - /* line 148, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .checkbox-menu ul li .type-icon { - left: 25px; } - /* line 154, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu { - display: block; - width: 500px; - height: 480px; } - /* line 162, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .contents { - overflow: hidden; - position: absolute; - top: 5px; - right: 5px; - bottom: 5px; - left: 5px; - width: auto; - height: auto; } - /* line 165, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane { + /* line 80, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; - box-sizing: border-box; } - /* line 167, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left { - border-right: 1px solid #e6e6e6; - left: 0; - padding-right: 5px; - right: auto; - width: 50%; - overflow-x: hidden; - overflow-y: auto; } - /* line 177, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.left ul li { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - padding-left: 30px; - border-top: none; } - /* line 184, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .pane.right { - left: auto; - right: 0; - padding: 25px; - width: 50%; } - /* line 194, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.icon { - color: #0099cc; + box-sizing: border-box; + border-top: 1px solid white; + color: #666666; + line-height: 1.5rem; + padding: 3px 10px 3px 30px; position: relative; - font-size: 8em; - left: 0; - height: 150px; - line-height: 150px; - margin-bottom: 25px; - text-align: center; } - /* line 205, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.title { - color: #666; - font-size: 1.2em; - margin-bottom: 0.5em; } - /* line 210, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .super-menu .menu-item-description .desc-area.description { - color: #666; - font-size: 0.8em; - line-height: 1.5em; } - /* line 219, ../../../../general/res/sass/controls/_menus.scss */ - .menu-element .context-menu, .menu-element .checkbox-menu { - font-size: 0.80rem; } + white-space: nowrap; } + /* line 88, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:first-child { + border: none; } + /* line 91, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:hover { + background: #e6e6e6; + color: #4d4d4d; } + /* line 94, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li:hover .icon { + color: #0099cc; } + /* line 98, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .type-icon { + left: 10px; } -/* line 224, ../../../../general/res/sass/controls/_menus.scss */ -.context-menu-holder { +/* line 105, ../../../../general/res/sass/controls/_menus.scss */ +.menu, +.context-menu, +.checkbox-menu, +.super-menu { + pointer-events: auto; } + /* line 111, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li a, + .context-menu ul li a, + .checkbox-menu ul li a, + .super-menu ul li a { + color: #4d4d4d; } + /* line 114, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .icon, + .context-menu ul li .icon, + .checkbox-menu ul li .icon, + .super-menu ul li .icon { + color: #0099cc; } + /* line 117, ../../../../general/res/sass/controls/_menus.scss */ + .menu ul li .type-icon, + .context-menu ul li .type-icon, + .checkbox-menu ul li .type-icon, + .super-menu ul li .type-icon { + left: 5px; } + +/* line 129, ../../../../general/res/sass/controls/_menus.scss */ +.checkbox-menu ul li { + padding-left: 50px; } + /* line 131, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox { + position: absolute; + left: 5px; + top: 0.53333rem; } + /* line 136, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox em { + height: 0.7rem; + width: 0.7rem; } + /* line 139, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .checkbox em:before { + font-size: 7px !important; + height: 0.7rem; + width: 0.7rem; + line-height: 0.7rem; } + /* line 147, ../../../../general/res/sass/controls/_menus.scss */ + .checkbox-menu ul li .type-icon { + left: 25px; } + +/* line 153, ../../../../general/res/sass/controls/_menus.scss */ +.super-menu { + display: block; + width: 500px; + height: 480px; } + /* line 161, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .contents { + overflow: hidden; + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + width: auto; + height: auto; } + /* line 164, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; } + /* line 166, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.left { + border-right: 1px solid #e6e6e6; + left: 0; + padding-right: 5px; + right: auto; + width: 50%; + overflow-x: hidden; + overflow-y: auto; } + /* line 176, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.left ul li { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + padding-left: 30px; + border-top: none; } + /* line 183, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .pane.right { + left: auto; + right: 0; + padding: 25px; + width: 50%; } + /* line 193, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.icon { + color: #0099cc; + position: relative; + font-size: 8em; + left: 0; + height: 150px; + line-height: 150px; + margin-bottom: 25px; + text-align: center; } + /* line 204, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.title { + color: #666; + font-size: 1.2em; + margin-bottom: 0.5em; } + /* line 209, ../../../../general/res/sass/controls/_menus.scss */ + .super-menu .menu-item-description .desc-area.description { + color: #666; + font-size: 0.8em; + line-height: 1.5em; } + +/* line 218, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu, .checkbox-menu { + font-size: 0.80rem; } + +/* line 222, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu-holder, +.menu-holder { pointer-events: none; position: absolute; - height: 200px; - width: 170px; z-index: 70; } - /* line 230, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder .context-menu-wrapper { + /* line 227, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder .context-menu-wrapper, + .menu-holder .context-menu-wrapper { position: absolute; height: 100%; width: 100%; } - /* line 237, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-left .checkbox-menu { + /* line 232, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-left .context-menu, .context-menu-holder.go-left .checkbox-menu, .context-menu-holder.go-left .menu, + .menu-holder.go-left .context-menu, + .menu-holder.go-left .checkbox-menu, + .menu-holder.go-left .menu { right: 0; } - /* line 240, ../../../../general/res/sass/controls/_menus.scss */ - .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .menu-element .checkbox-menu, .menu-element .context-menu-holder.go-up .checkbox-menu { + /* line 236, ../../../../general/res/sass/controls/_menus.scss */ + .context-menu-holder.go-up .context-menu, .context-menu-holder.go-up .checkbox-menu, .context-menu-holder.go-up .menu, + .menu-holder.go-up .context-menu, + .menu-holder.go-up .checkbox-menu, + .menu-holder.go-up .menu { bottom: 0; } -/* line 245, ../../../../general/res/sass/controls/_menus.scss */ +/* line 242, ../../../../general/res/sass/controls/_menus.scss */ +.context-menu-holder { + height: 200px; + width: 170px; } + +/* line 247, ../../../../general/res/sass/controls/_menus.scss */ .btn-bar.right .menu, .menus-to-left .menu { left: auto; @@ -2633,6 +2654,7 @@ textarea { font-family: 'symbolsfont'; margin-left: 3px; vertical-align: top; + pointer-events: none; color: rgba(102, 102, 102, 0.4); position: absolute; right: 5px; From 0c7de981950b7bad0f59679da6ff4527b1960d6d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 24 Sep 2015 12:18:47 -0700 Subject: [PATCH 092/226] [Time Conductor] Use active domain in binary search --- .../features/conductor/src/ConductorTelemetrySeries.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/features/conductor/src/ConductorTelemetrySeries.js b/platform/features/conductor/src/ConductorTelemetrySeries.js index 98cebe0907..d2f7c874cc 100644 --- a/platform/features/conductor/src/ConductorTelemetrySeries.js +++ b/platform/features/conductor/src/ConductorTelemetrySeries.js @@ -38,13 +38,14 @@ define( * @implements {TelemetrySeries} */ function ConductorTelemetrySeries(series, conductor) { - var max = series.getPointCount() - 1; + var max = series.getPointCount() - 1, + domain = conductor.activeDomain(); function binSearch(min, max, value) { var mid = Math.floor((min + max) / 2); return min > max ? min : - series.getDomainValue(mid) < value ? + series.getDomainValue(mid, domain) < value ? binSearch(mid + 1, max, value) : binSearch(min, mid - 1, value); } @@ -52,7 +53,7 @@ define( this.startIndex = binSearch(0, max, conductor.displayStart()); this.endIndex = binSearch(0, max, conductor.displayEnd()); this.series = series; - this.domain = conductor.activeDomain(); + this.domain = domain; } ConductorTelemetrySeries.prototype.getPointCount = function () { From 2f4cf44229c4d345c3edb77c658de6512b39abf9 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Thu, 24 Sep 2015 13:17:46 -0700 Subject: [PATCH 093/226] Added additional pages to developer's guide MD version --- docs/src/guide/index.md | 1468 ++++++++++++++++++++------------------- 1 file changed, 742 insertions(+), 726 deletions(-) diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index 5c30ddb8e9..25b18575b8 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -260,24 +260,24 @@ distinguish types of extensions from specific extension instances.  identifier for a specific thing in a set of things. (Most often used in the  context of extensions or other similar application­specific object sets.) This  term is chosen to avoid attaching ambiguous meanings to “id”.  -* __model__​: The persistent state associated with a domain object. A domain object's  -model is a JavaScript object which can be converted to JSON without losing  -information (that is, it contains no methods.)  -* __name__​: When used as an object property, this refers to the human­readable name  -for a thing. (Most often used in the context of extensions, domain object  +* __model__​: The persistent state associated with a domain object. A domain  +object's model is a JavaScript object which can be converted to JSON without  +losing information (that is, it contains no methods.)  +* __name__​: When used as an object property, this refers to the human­readable  +name for a thing. (Most often used in the context of extensions, domain object  models, or other similar application­specific objects.)  -* __navigation__​: Refers to the current state of the application with respect to the  -user's expressed interest in a specific domain object; e.g. when a user clicks  -on a domain object in the tree, they are ​navigating​ to it, and it is thereafter  -considered the ​navigated object (until the user makes another such choice.) This  -term is used to distinguish navigation from selection, which occurs in an  -editing context.  +* __navigation__​: Refers to the current state of the application with respect to  +the user's expressed interest in a specific domain object; e.g. when a user  +clicks on a domain object in the tree, they are ​navigating​ to it, and it is  +thereafter considered the ​navigated object (until the user makes another such  +choice.) This term is used to distinguish navigation from selection, which  +occurs in an editing context.  * __space__​: A machine­readable name used to identify a persistence store.  Interactions with persistence with generally involve a space parameter in some  form, to distinguish multiple persistence stores from one another (for cases  where there are multiple valid persistence locations available.)  -* __source__​: A machine­readable name used to identify a source of telemetry data.  -Similar to "space", this allows multiple telemetry sources to operate  +* __source__​: A machine­readable name used to identify a source of telemetry  +data. Similar to "space", this allows multiple telemetry sources to operate  side­by­side without conflicting.  # Framework @@ -292,555 +292,571 @@ plugin mechanism.    This framework layer operates on two key concepts: -* __Bundle:__ ​A bundle is a collection of related functionality that can be added to  -the application as a group. More concretely, a bundle is a directory containing  -a JSON file declaring its contents, as well as JavaScript sources, HTML  -templates, and other resources used to support that functionality. (The term  -bundle is borrowed from [OSGi](http://www.osgi.org/)​ ­ which has also inspired  -many of the concepts used in the framework layer. A familiarity with OSGi,  -particularly Declarative Services, may be useful when working with Open MCT  -Web.) -* __Extension:__ ​An extension is an individual unit of functionality. Extensions are  -collected together in bundles, and may interact with other extensions.  +* __Bundle:__ ​A bundle is a collection of related functionality that can be  +added to the application as a group. More concretely, a bundle is a directory  +containing a JSON file declaring its contents, as well as JavaScript sources,  +HTML templates, and other resources used to support that functionality. (The  +term bundle is borrowed from [OSGi](http://www.osgi.org/)​ ­ which has also  +inspired many of the concepts used in the framework layer. A familiarity with  +OSGi, particularly Declarative Services, may be useful when working with Open  +MCT Web.) +* __Extension:__ ​An extension is an individual unit of functionality. Extensions  +are collected together in bundles, and may interact with other extensions.  -The framework layer, loaded and initiated from ​`index.html`​, is the main point of  -entry for an application built on Open MCT Web. It is responsible for wiring  +The framework layer, loaded and initiated from ​`index.html`​, is the main point  +of entry for an application built on Open MCT Web. It is responsible for wiring  together the application at run time (much of this responsibility is actually  delegated to Angular); at a high­level, the framework does this by proceeding  through four stages: -1. __Loading definitions:__​ JSON declarations are loaded for all bundles which will  -constitute the application, and wrapped in a useful API for subsequent stages.  +1. __Loading definitions:__​ JSON declarations are loaded for all bundles which  +will constitute the application, and wrapped in a useful API for subsequent  +stages.  2. __Resolving extensions:__​ Any scripts which provide implementations for  extensions exposed by bundles are loaded, using Require.  -3. __Registering extensions__​ Resolved extensions are registered with Angular, such  -that they can be used by the application at run­time. This stage includes both  -registration of Angular built­ins (directives, controllers, routes, constants,  -and services) as well as registration of non­Angular extensions.  +3. __Registering extensions__​ Resolved extensions are registered with Angular,  +such that they can be used by the application at run­time. This stage includes  +both registration of Angular built­ins (directives, controllers, routes,  +constants, and services) as well as registration of non­Angular extensions.  4. __Bootstrapping__​ The Angular application is bootstrapped; at that point,  Angular takes over and populates the body of the page using the extensions that  have been registered.  -UP TO HERE - ## Bundles -The basic configurable unit of Open MCT Web is the bundle. This term has been used a  -bit already; now we’ll get to a more formal definition.  +The basic configurable unit of Open MCT Web is the bundle. This term has been  +used a bit already; now we’ll get to a more formal definition.  -A bundle is a directory which contains:  -  - ● A bundle definition; a file named ​bundle.json​.  - ● Subdirectories for sources, resources, and tests.  - ● Optionally, a ​README.md​ Markdown file describing its contents (this is not used by  - Open MCT Web in any way, but it’s a helpful convention to follow.)  -  - The bundle definition is the main point of entry for the bundle. The framework looks at  -this to determine which components need to be loaded and how they interact.  - A plugin in Open MCT Web is a bundle. The platform itself is also decomposed into  -bundles, each of which provides some category of functionality. The difference between a  -“bundle” and a “plugin” is purely a matter of the intended use; a plugin is just a bundle that is  -meant to be easily added or removed. When developing, it is typically more useful to think in  -terms of bundles.  -  -   -Configuring Active Bundles -  - To decide ​which​ bundles should be loaded, the framework loads a file named  -bundles.json​ (peer to the index.html file which serves the application) to determine which  -bundles should be loaded. This file should contain a single JSON array of strings, where each is  -the path to a bundle. These paths should not include ​bundle.json​ (this is implicit) or a trailing  -slash.  - For instance, if bundles.json contained:  -   - [  - "example/builtins",  - "example/extensions"  - ]  -   - ...then the Open MCT Web framework would look for bundle definitions at  -example/builtins/bundle.json​ and ​example/extensions/bundle.json​, relative  -to the path of ​index.html​. No other bundles would be loaded.  -  +A bundle is a directory which contains: - - 14  -Bundle Definition +* A bundle definition; a file named `​bundle.json​`. +* Subdirectories for sources, resources, and tests.  +* Optionally, a ​`README.md`​ Markdown file describing its contents (this is not  +used by Open MCT Web in any way, but it’s a helpful convention to follow.) + +The bundle definition is the main point of entry for the bundle. The framework  +looks at this to determine which components need to be loaded and how they  +interact. + +A plugin in Open MCT Web is a bundle. The platform itself is also decomposed  +into bundles, each of which provides some category of functionality. The  +difference between a _bundle_ and a _plugin_ is purely a matter of the intended  +use; a plugin is just a bundle that is meant to be easily added or removed. When  +developing, it is typically more useful to think in terms of bundles.  +   +### Configuring Active Bundles   - A bundle definition (the ​bundle.json​ file located within a bundle) contains a  -description of the bundle itself, as well as the information exposed by the bundle.  +To decide ​which​ bundles should be loaded, the framework loads a file named  +`bundles.json`​ (peer to the `index.html` file which serves the application) to  +determine which bundles should be loaded. This file should contain a single JSON  +array of strings, where each is the path to a bundle. These paths should not  +include ​bundle.json​ (this is implicit) or a trailing slash.  + +For instance, if `bundles.json` contained:  + + [  + "example/builtins",  + "example/extensions"  + ]  +   +...then the Open MCT Web framework would look for bundle definitions at  +`example/builtins/bundle.json`​ and `​example/extensions/bundle.json`​, relative  +to the path of `​index.html`​. No other bundles would be loaded.   + +### Bundle Definition   - This definition is expressed as a single JSON object with the following properties (all of  -which are optional, falling back to reasonable defaults):  +A bundle definition (the ​`bundle.json`​ file located within a bundle) contains a  +description of the bundle itself, as well as the information exposed by the  +bundle.    - ● key​: A machine­readable name for the bundle. (Currently used only in logging.)  - ● name​: A human­readable name for the bundle. (Also only used in logging.)  - ● sources​: Names a directory in which source scripts (which will implement extensions)  - are located. Defaults to “src”  - ● resources​: Names a directory in which resource files (such as HTML templates,  - images, CS files, and other non­JavaScript files needed by this bundle) are located.  - Defaults to “res”   - ● libraries​: Names a directory in which third­party libraries are located. Defaults to “lib”  - ● configuration​: A bundle’s configuration object, which should be formatted as would  - be passed to require.config (see RequireJS documentation at  - http://requirejs.org/docs/api.html​); note that only paths and shim have been tested.  - ● extensions​: An object containing key­value pairs, where keys are extension  - categories, and values are extension definitions. See the section on Extensions for more  - information.   +This definition is expressed as a single JSON object with the following  +properties (all of which are optional, falling back to reasonable defaults): + +* `key​`: A machine­readable name for the bundle. (Currently used only in  +logging.)  +* `name​`: A human­readable name for the bundle. (Also only used in logging.)  +* `sources​`: Names a directory in which source scripts (which will implement  +extensions) are located. Defaults to “src”  +* `resources​`: Names a directory in which resource files (such as HTML templates,  +images, CS files, and other non­JavaScript files needed by this bundle) are  +located. Defaults to “res”   +* `libraries`​: Names a directory in which third­party libraries are located.  +Defaults to “lib”  +* `configuration`​: A bundle’s configuration object, which should be formatted as  +would be passed to require.config (see [RequireJS documentation](http://requirejs.org/docs/api.html​) );  +note that only paths and shim have been tested.  +* `extensions`​: An object containing key­value pairs, where keys are extension  +categories, and values are extension definitions. See the section on Extensions  +for more information.   + +For example, the bundle definition for ​example/policy​ looks like:   + + { + "name": "Example Policy",  + "description": "Provides an example of using policies.",  + "sources": "src",  + "extensions": {  + "policies": [  + {  + "implementation": "ExamplePolicy.js",  + "category": "action"  + } + ]  + }  + } + +### Bundle Directory Structure   - For example, the bundle definition for ​example/policy​ looks like:  +In addition to the directories defined in the bundle definition, a bundle will  +typically contain other directories not used at run­time. Additionally, some  +useful development scripts (such as the command line build and the test suite)  +expect this directory structure to be in use, and may ignore options chosen by  +`b​undle.json`​. It is recommended that the directory structure described below be  +used for new bundles. + +* `src`​: Contains JavaScript sources for this bundle. May contain additional  +subdirectories to organize these sources; typically, these subdirectories are  +named to correspond to the extension categories they contain and/or support, but  +this is only a convention.  +* `res`​: Contains other files needed by this bundle, such as HTML templates. May  +contain additional subdirectories to organize these sources.  +* `lib`​: Contains JavaScript sources from third­party libraries. These are  +separated from bundle sources in order to ignore them during code style checking  +from the command line build. +* `test`​: Contains JavaScript sources implementing [Jasmine](http://jasmine.github.io/)  +tests, as well as a file named `​suite.json`​ describing which files to test.  +Should have the same folder structure as the `src` directory; see the section on  +automated testing for more information.    -{  -    "name": "Example Policy",  -    "description": "Provides an example of using policies.",  -    "sources": "src",  -    "extensions": {  -        "policies": [  -            {  -                "implementation": "ExamplePolicy.js",  -                "category": "action"  -            }  -        ]  -    }  -}  -  - - - 15  -Bundle Directory Structure -  - In addition to the directories defined in the bundle definition, a bundle will typically  -contain other directories not used at run­time. Additionally, some useful development scripts  -(such as the command line build and the test suite) expect this directory structure to be in use,  -and may ignore options chosen by b​ undle.json​. It is recommended that the directory  -structure described below be used for new bundles.  -  - ● src​: Contains JavaScript sources for this bundle. May contain additional subdirectories  - to organize these sources; typically, these subdirectories are named to correspond to the  - extension categories they contain and/or support, but this is only a convention.  - ● res​: Contains other files needed by this bundle, such as HTML templates. May contain  - additional subdirectories to organize these sources.  - ● lib​: Contains JavaScript sources from third­party libraries. These are separated from  - bundle sources in order to ignore them during code style checking from the command  - line build.  - ● test​: Contains JavaScript sources implementing Jasmine (http://jasmine.github.io/)  - tests, as well as a file named ​suite.json​ describing which files to test. Should have  - the same folder structure as the src directory; see the section on automated testing for  - more information.  -  - For example, the directory structure for bundle ​platform/commonUI/about ​looks  +For example, the directory structure for bundle ​`platform/commonUI/about` ​looks  like:  -   -  -  - - 16  -Extensions +INSERT DIAGRAM HERE + +## Extensions + +While bundles provide groupings of related behaviors, the individual units of  +behavior are called extensions.  + +Extensions belong to categories; an extension category is the machine­readable  +identifier used to identify groups of extensions. In the ​`extensions`​ property  +of a bundle definition, the keys are extension categories and the values are  +arrays of extension definitions.    - While bundles provide groupings of related behaviors, the individual units of behavior  -are called extensions.  - Extensions belong to categories; an extension category is the machine­readable  -identifier used to identify groups of extensions. In the ​extensions​ property of a bundle  -definition, the keys are extension categories and the values are arrays of extension definitions.  -  -General Extensions -  - Extensions are intended as a general­purpose mechanism for adding new types of  +### General Extensions + +Extensions are intended as a general­purpose mechanism for adding new types of  functionality to Open MCT Web.  - An extension category is registered with Angular under the name of the extension, plus a  -suffix of two square brackets; so, an Angular service (or, generally, any other extension) can  -access the full set of registered extensions, from all bundles, by including this string (e.g.  -types[]​ to get all type definitions) in a dependency declaration.  - As a convention, extension categories are given single­word, plural nouns for names  -within Open MCT Web (e.g. ​types​.) This convention is not enforced by the platform in any  -way. For extension categories introduced by external plugins, it is recommended to prefix the  -extension category with a vendor identifier (or similar) followed by a dot, to avoid collisions.  -  -Extension Definitions -  - The properties used in extension definitions are typically unique to each category of  -extension; a few properties have standard interpretations by the platform.  -  - ● implementation​: Identifies a JavaScript source file (in the sources folder) which  - implements this extension. This JavaScript file is expected to contain an AMD module  - (see ​http://requirejs.org/docs/whyamd.html#amd​) which gives as its result a single  - constructor function.  - ● depends​: An array of dependencies needed by this extension; these will be passed on  - to Angular’s dependency injector, ​https://docs.angularjs.org/guide/di​. By default, this is  - treated as an empty array. Note that ​depends​ does not make sense without  - implementation​ (since these dependencies will be passed to the implementation  - when it is instantiated.)  - ● priority​: A number or string indicating the priority order (see below) of this extension  - instance. Before an extension category is registered with AngularJS, the extensions of  - this category from all bundles will be concatenated into a single array, and then sorted  - by priority.  -  - 17  - Extensions do not need to have an implementation. If no implementation is provided,  -consumers of the extension category will receive the extension definition as a plain JavaScript  -object. Otherwise, they will receive the partialized (see below) constructor for that  -implementation, which will additionally have all properties from the extension definition attached.  -Partial Construction +An extension category is registered with Angular under the name of the  +extension, plus a suffix of two square brackets; so, an Angular service (or,  +generally, any other extension) can access the full set of registered  +extensions, from all bundles, by including this string (e.g. `types[]`​ to get  +all type definitions) in a dependency declaration.  + +As a convention, extension categories are given single­word, plural nouns for  +names within Open MCT Web (e.g. ​`types`​.) This convention is not enforced by the  +platform in any way. For extension categories introduced by external plugins, it  +is recommended to prefix the extension category with a vendor identifier (or  +similar) followed by a dot, to avoid collisions.    - In general, extensions are intended to be implemented as constructor functions, which  -will be used elsewhere to instantiate new objects of that type. However, the Angular­supported  -method for dependency injection is (effectively) constructor­style injection; so, both declared  -dependencies and run­time arguments are competing for space in a constructor’s arguments.  - To resolve this, the Open MCT Web framework registers extension instances in a  -partially constructed​ form. That is, the constructor exposed by the extension’s implementation is  -effectively decomposed into two calls; the first takes the dependencies, and returns the  -constructor in its second form, which takes the remaining arguments.  - This means that, when writing implementations, the constructor function should be  -written to include all declared dependencies, followed by all run­time arguments. When using  -extensions, only the run­time arguments need to be provided.  +### Extension Definitions + +The properties used in extension definitions are typically unique to each  +category of extension; a few properties have standard interpretations by the  +platform.    -Priority +* `implementation`​: Identifies a JavaScript source file (in the sources  +folder) which implements this extension. This JavaScript file is expected to  +contain an AMD module (see ​http://requirejs.org/docs/whyamd.html#amd​) which  +gives as its result a single constructor function.  +* `depends`​: An array of dependencies needed by this extension; these will be  +passed on to Angular’s [dependency injector](https://docs.angularjs.org/guide/di​)​.  +By default, this is treated as an empty array. Note that ​depends​ does not make  +sense without `implementation`​ (since these dependencies will be passed to the  +implementation when it is instantiated.)  +* `priority`​: A number or string indicating the priority order (see below) of  +this extension instance. Before an extension category is registered with  +AngularJS, the extensions of this category from all bundles will be concatenated  +into a single array, and then sorted by priority.  + +Extensions do not need to have an implementation. If no implementation is  +provided, consumers of the extension category will receive the extension  +definition as a plain JavaScript object. Otherwise, they will receive the  +partialized (see below) constructor for that implementation, which will  +additionally have all properties from the extension definition attached.  + +#### Partial Construction + +In general, extensions are intended to be implemented as constructor functions,  +which will be used elsewhere to instantiate new objects of that type. However,  +the Angular­supported method for dependency injection is (effectively)  +constructor­style injection; so, both declared dependencies and run­time  +arguments are competing for space in a constructor’s arguments.  + +To resolve this, the Open MCT Web framework registers extension instances in a  +partially constructed​ form. That is, the constructor exposed by the extension’s  +implementation is effectively decomposed into two calls; the first takes the  +dependencies, and returns the constructor in its second form, which takes the  +remaining arguments.  + +This means that, when writing implementations, the constructor function should  +be written to include all declared dependencies, followed by all run­time  +arguments. When using extensions, only the run­time arguments need to be  +provided.    - Within each extension category, registration occurs in priority order. An extension's  -priority may be specified as a ​priority​ property in its extension definition; this may be a  -number, or a symbolic string. Extensions are registered in reverse order (highest­priority first),  -and symbolic strings are mapped to the numeric values as follows:  +#### Priority + +Within each extension category, registration occurs in priority order. An  +extension's priority may be specified as a ​`priority`​ property in its extension  +definition; this may be a number, or a symbolic string. Extensions are  +registered in reverse order (highest­priority first), and symbolic strings are  +mapped to the numeric values as follows:    - ● fallback​: Negative infinity. Used for extensions that are not intended for use (that is,  - they are meant to be overridden) but are present as an option of last resort.  - ● default​: ­100. Used for extensions that are expected to be overridden, but need a  - useful default.  - ● none​: 0. Also used if no priority is specified, or if an unknown or malformed priority is  - specified.  - ● optional​: 100. Used for extensions that are meant to be used, but may be overridden.  - ● preferred​: 1000. Used for extensions that are specifically intended to be used, but still  - may be overridden in principle.  - ● mandatory​: Positive infinity. Used when an extension should definitely not be  - overridden.  +* `fallback`​: Negative infinity. Used for extensions that are not intended for  +use (that is, they are meant to be overridden) but are present as an option of  +last resort.  +* `default​`: ­100. Used for extensions that are expected to be overridden, but  +need a useful default.  +* `none`​: 0. Also used if no priority is specified, or if an unknown or  +malformed priority is specified.  +* `optional`​: 100. Used for extensions that are meant to be used, but may be  +overridden.  +* `preferred​`: 1000. Used for extensions that are specifically intended to be  +used, but still may be overridden in principle.  +* `mandatory`​: Positive infinity. Used when an extension should definitely not  +be overridden.    - These symbolic names are chosen to support usage where many extensions may satisfy  -a given need, but only one may be used; in this case, as a convention it should be the  -lowest­ordered (highest­priority) extensions available. In other cases, a full set (or multi­element  - 18  -subset) of extensions may be desired, with a specific ordering; in these cases, it is preferable to  -specify priority numerically when declaring extensions, and to understand that extensions will be  +These symbolic names are chosen to support usage where many extensions may  +satisfy a given need, but only one may be used; in this case, as a convention it  +should be the lowest­ordered (highest­priority) extensions available. In other  +cases, a full set (or multi­element subset) of extensions may be desired, with a  +specific ordering; in these cases, it is preferable to specify priority  +numerically when declaring extensions, and to understand that extensions will be  sorted according to these conventions when using them.    -Angular Built-ins +### Angular Built-ins + +Several entities supported Angular are expressed and managed as extensions in  +Open MCT Web. Specifically, these extension categories are _directives​_,  +_​controllers​_, _services​_, _​constants​_, _​runs​_, and _​routes​_.    - Several entities supported Angular are expressed and managed as extensions in Open  -MCT Web. Specifically, these extension categories are ​directives​, ​controllers​,  -services​, ​constants​, ​runs​, and ​routes​.  +#### Angular Directives + +New [directives](​https://docs.angularjs.org/guide/directive​) may be  +registered as extensions of the ​directives​ category. Implementations of  +directives in this category should take only dependencies as arguments, and  +should return a directive definition object.  + +The directive’s name should be provided as a ​key​ property of its extension  +definition, in camel­case format.    -Directives -  - New directives (see ​https://docs.angularjs.org/guide/directive​) may be registered as  -extensions of the ​directives​ category. Implementations of directives in this category should  -take only dependencies as arguments, and should return a directive definition object.   - The directive’s name should be provided as a ​key​ property of its extension definition, in  -camel­case format.  -  -Controllers -  - New controllers (see ​https://docs.angularjs.org/guide/controller​) may be registered as  -extensions of the ​controllers​ category. The implementation is registered directly as the  -controller; its only constructor arguments are its declared dependencies.  - The directive’s identifier should be provided as a ​key​ property of its extension definition.  +#### Angular Controllers + +New [controllers](​https://docs.angularjs.org/guide/controller​) may be registered  +as extensions of the ​controllers​ category. The implementation is registered  +directly as the controller; its only constructor arguments are its declared  +dependencies.  + +The directive’s identifier should be provided as a ​key​ property of its extension  +definition.      -Services -  - New services (see ​https://docs.angularjs.org/guide/services​) may be registered as  -extensions of the ​services​ category. The implementation is registered via a service call  -(​https://docs.angularjs.org/api/auto/service/$provide#service​), so it will be instantiated with the  -new​ operator.  -  -  +#### Angular Services -Constants -  - Constant values may be registered as extensions of the ​constants​ category; see  -https://docs.angularjs.org/api/ng/type/angular.Module#constant​. These extensions have no  - 19  -implementation; instead, they should contain a property ​key​, which is the name under which the  -constant will be registered, and a property ​value​, which is the constant value that will be  -registered.  -  -  -Runs -  - In some cases, you want to register code to run as soon as the application starts; these  -can be registered as extensions of the ​runs​ category; see  -https://docs.angularjs.org/api/ng/type/angular.Module#run​. Implementations registered in this  -category will be invoked (with their declared dependencies) when the Open MCT Web  -application first starts. (Note that, in this case, the implementation is better thought of as just a  -function, as opposed to a constructor function.)  -  -  -Routes -  - Extensions of category ​routes​ will be registered with Angular’s route provider,  -https://docs.angularjs.org/api/ngRoute/provider/$routeProvider​. Extensions of this category have  -no implementations, and need only two properties in their definition:  -  - ● when​: The value that will be passed as the path argument to ​$routeProvider.when​;  - specifically, the string that will appear in the trailing part of the URL corresponding to this  - route. This property may be omitted, in which case this extension instance will be treated  - as the default route.  - ● templateUrl​: A path to the template to render for this route. Specified as a path  - relative to the bundle’s resource directory (​res​ by default.)  -  -  +New [services](https://docs.angularjs.org/guide/services​) may be registered as  +extensions of the ​services​ category. The implementation is registered via a  +[service call](​https://docs.angularjs.org/api/auto/service/$provide#service​), so  +it will be instantiated with the new​ operator.  - - 20  -Composite Services +#### Angular Constants + +Constant values may be registered as extensions of the [​constants​ category](https://docs.angularjs.org/api/ng/type/angular.Module#constant​).  +These extensions have no implementation; instead, they should contain a property  +​key​, which is the name under which the constant will be registered, and a  +property ​value​, which is the constant value that will be registered. + +#### Angular Runs + +In some cases, you want to register code to run as soon as the application  +starts; these can be registered as extensions of the [​runs​ category](https://docs.angularjs.org/api/ng/type/angular.Module#run​).  +Implementations registered in this category will be invoked (with their declared  +dependencies) when the Open MCT Web application first starts. (Note that, in  +this case, the implementation is better thought of as just a function, as  +opposed to a constructor function.) + +#### Angular Routes + +Extensions of category `​routes`​ will be registered with Angular’s [route provider](https://docs.angularjs.org/api/ngRoute/provider/$routeProvider​).  +Extensions of this category have no implementations, and need only two  +properties in their definition:    - A special category of extensions recognized by the framework are ​components​; these  -are parts of services intended to be fit together in a common pattern.  -  -   -  - Components all implement the same interface, which is the interface expected for  -services of the type that they create. Components fall into three types:  -  - ● provider​: Provides an actual implementation of the service in question.  - ● aggregator​: Makes many implementations of the service in question appear as one.  - ● decorator​: Modifies the inputs or outputs of another implementation of the service.  -  - When the framework layer encounters components, it assembles them into single  -service instances that can be referred to elsewhere as single dependencies. All providers are  -instantiated, and passed to the first available aggregator; decorators are then layered on in  -priority order to create the final form of the service.  - A component should include the following properties in its extension definition:  -  - ● provides​: The symbolic identifier for the service that will be composed. The  - fully­composed service will be registered with Angular under this name.  - ● type​: One of ​provider​, ​aggregator​, or ​decorator​ (as above)  -  - In addition to any declared dependencies, aggregators and decorators both receive one  -more argument (immediately following declared dependencies) that is provided by the  -framework. For an aggregator, this will be an array of all providers of the same service (that is,  -with matching ​provides​ properties); for a decorator, this will be whichever provider, decorator,  -or aggregator is next in the sequence of decorators.  - Services exposed by the Open MCT Web platform are often declared as composite  +* `when​`: The value that will be passed as the path argument to ​ +`$routeProvider.when`​; specifically, the string that will appear in the trailing  +part of the URL corresponding to this route. This property may be omitted, in  +which case this extension instance will be treated as the default route.  +* `templateUrl`​: A path to the template to render for this route. Specified as a  +path relative to the bundle’s resource directory (​`res​` by default.)  + +### Composite Services + +A special category of extensions recognized by the framework are ​`components`​;  +these are parts of services intended to be fit together in a common pattern.  + +INSERT DIAGRAM HERE + +Components all implement the same interface, which is the interface expected for  +services of the type that they create. Components fall into three types: + +* `provider​`: Provides an actual implementation of the service in question.  +* `aggregator`​: Makes many implementations of the service in question appear as  +one.  +* `decorator​`: Modifies the inputs or outputs of another implementation of the  +service.  + +When the framework layer encounters components, it assembles them into single  +service instances that can be referred to elsewhere as single dependencies. All  +providers are instantiated, and passed to the first available aggregator;  +decorators are then layered on in priority order to create the final form of the  +service. + +A component should include the following properties in its extension definition: + +* `provides`​: The symbolic identifier for the service that will be composed. The  + fully­composed service will be registered with Angular under this name. +* `type​`: One of `​provider`​, ​`aggregator​`, or `​decorator​` (as above)  + +In addition to any declared dependencies, aggregators and decorators both  +receive one more argument (immediately following declared dependencies) that is  +provided by the framework. For an aggregator, this will be an array of all  +providers of the same service (that is, with matching `​provides`​ properties);  +for a decorator, this will be whichever provider, decorator, or aggregator is  +next in the sequence of decorators.  + +Services exposed by the Open MCT Web platform are often declared as composite  services, as this form is open for a variety of common modifications.  - - 21  -Core API -  - Most of Open MCT Web’s relevant API is provided and/or mediated by the framework;  -that is, much of developing for Open MCT Web is a matter of adding extensions which access  -other parts of the platform by means of dependency injection.  - The core bundle (​platform/core​) introduces a few additional object types meant to  -be passed along by other services.  -  -Domain Objects -  - Domain objects are the most fundamental component of Open MCT Web’s information  -model. A domain object is some distinct thing relevant to a user’s work flow, such as a telemetry  -channel, display, or similar. Open MCT Web is a tool for viewing, browsing, manipulating, and  -otherwise interacting with a graph of domain objects.  - A domain object should be conceived of as the union of the following:  -   - ● Identifier: A machine­readable string that uniquely identifies the domain object within this  - application instance.  - ● Model: The persistent state of the domain object. A domain object’s model is a  - JavaScript object that can be losslessly converted to JSON.  - ● Capabilities: Dynamic behavior associated with the domain object. Capabilities are  - JavaScript objects which provide additional methods for interacting with the domain  - objects which expose those capabilities. Not all domain objects expose all capabilities.  -  - At run­time, a domain object has the following interface:  -  - ● getId()​: Get the identifier for this domain object.  - ● getModel()​: Get the plain state associated with this domain object. This will return a  - JavaScript object that can be losslessly converted to JSON. Note that the model  - returned here can be modified directly but should not be; instead, use the ​mutation  - capability.  - ● getCapability(key)​: Get the specified capability associated with this domain object.  - This will return a JavaScript object whose interface is specific to the type of capability  - being requested. If the requested capability is not exposed by this domain object, this  - will return ​undefined​.  - 22  - ● hasCapability(key)​: Shorthand for checking if a domain object exposes the  - requested capability.  - ● useCapability(key, arguments…)​: Shorthand for  - getCapability(key).invoke(arguments)​, with additional checking between  - calls. If the provided capability has no invoke method, the return value here functions as  - getCapability​, including returning ​undefined​ if the capability is not exposed.  -  -Actions -  - An ​Action​ is behavior that can be performed upon/using a ​DomainObject​. An Action  -has the following interface:  -  - ● perform()​: Do this action. For example, if one had an instance of a ​RemoveAction​,  - invoking its ​perform​ method would cause the domain object which exposed it to be  - removed from its container.  - ● getMetadata()​: Get metadata associated with this action. Returns an object  - containing:  - ○ name​: Human­readable name.  - ○ description​: Human­readable summary of this action.  - ○ glyph​: Single character to be displayed in Open MCT Web’s icon font set.  - ○ context​: The context in which this action is being performed (see below)  -  - Action instances are typically obtained via a domain object’s ​action​ capability.  -  -Action Contexts -  - An action context is a JavaScript object with the following properties:  -  - ● domainObject​: The domain object being acted upon.  - ● selectedObject​: Optional; the selection at the time of action (e.g. the dragged object  - in a drag­and­drop operation.)  +# Core API - - 23  -Telemetry -  - Telemetry series data in Open MCT Web is represented by a common interface, and  -packaged in a consistent manner to facilitate passing telemetry updates around multiple  -visualizations.  -  -Telemetry Requests -  - A telemetry request is a JavaScript object containing the following properties:  -  - ● source​: A machine­readable identifier for the source of this telemetry. This is useful  - when multiple distinct data sources are in use side­by­side.  - ● key​: A machine­readable identifier for a unique series of telemetry within that source.  - ● Note: This API is still under development; additional properties, such as start and end  - time, should be present in future versions of Open MCT Web.  -  - Additional properties may be included in telemetry requests which have specific  -interpretations for specific sources.  -  -Telemetry Responses -  - When returned from the ​telemetryService​ (see Services section), telemetry series  -data will be packaged in a ​source ­> key ­> TelemetrySeries​ fashion. That is,  -telemetry is passed in an object containing key­value pairs. Keys identify telemetry sources;  -values are objects containing additional key­value pairs. In this object, keys identify individual  -telemetry series (and match they ​key​ property from corresponding requests) and values are  -TelemetrySeries​ objects (see below.)  -  +Most of Open MCT Web’s relevant API is provided and/or mediated by the  +framework; that is, much of developing for Open MCT Web is a matter of adding  +extensions which access other parts of the platform by means of dependency  +injection.  - - 24  -Telemetry Series +The core bundle (`​platform/core`​) introduces a few additional object types meant  +to be passed along by other services.  + +## Domain Objects + +Domain objects are the most fundamental component of Open MCT Web’s information  +model. A domain object is some distinct thing relevant to a user’s work flow,  +such as a telemetry channel, display, or similar. Open MCT Web is a tool for  +viewing, browsing, manipulating, and otherwise interacting with a graph of  +domain objects.  + +A domain object should be conceived of as the union of the following: + +* __Identifier__: A machine­readable string that uniquely identifies the domain  +object within this application instance.  +* __Model__: The persistent state of the domain object. A domain object’s model  +is a JavaScript object that can be losslessly converted to JSON.  +* __Capabilities__: Dynamic behavior associated with the domain object.  +Capabilities are JavaScript objects which provide additional methods for  +interacting with the domain objects which expose those capabilities. Not all  +domain objects expose all capabilities.  + +At run­time, a domain object has the following interface: + +* `getId()`​: Get the identifier for this domain object.  +* `getModel()`​: Get the plain state associated with this domain object. This  +will return a JavaScript object that can be losslessly converted to JSON. Note  +that the model returned here can be modified directly but should not be;  +instead, use the ​mutation capability.  +* `getCapability(key)`​: Get the specified capability associated with this domain  +object. This will return a JavaScript object whose interface is specific to the  +type of capability being requested. If the requested capability is not exposed  +by this domain object, this will return ​undefined​. +* `hasCapability(key)`​: Shorthand for checking if a domain object exposes the  +requested capability. +* `useCapability(key, arguments…)`​: Shorthand for  +`getCapability(key).invoke(arguments)`​, with additional checking between calls.  +If the provided capability has no invoke method, the return value here functions  +as `getCapability​`, including returning ​`undefined​` if the capability is not  +exposed. + +## Actions + +An ​`Action​` is behavior that can be performed upon/using a `​DomainObject​`. An  +Action has the following interface: + +* `perform()`​: Do this action. For example, if one had an instance of a  +`​RemoveAction​`, invoking its ​perform​ method would cause the domain object which  +exposed it to be removed from its container. +* `getMetadata()`​: Get metadata associated with this action. Returns an object  +containing:  + * `name`​: Human­readable name. + * `description`​: Human­readable summary of this action.  + * `glyph​`: Single character to be displayed in Open MCT Web’s icon font set.  + * `context`​: The context in which this action is being performed (see below) + +Action instances are typically obtained via a domain object’s `​action​`  +capability.    - A telemetry series is a specific sequence of data, typically associated with a specific  -instrument. Telemetry is modeled as an ordered sequence of domain and range values, where  -domain values must be non­decreasing but range values do not. (Typically, domain values are  -interpreted as UTC timestamps in milliseconds relative to the UNIX epoch.) A series must have  -at least one domain and one range, and may have more than one.  - Telemetry series data in Open MCT Web is expressed via the following  -TelemetrySeries​ interface:  +### Action Contexts + +An action context is a JavaScript object with the following properties:  + +* `domainObject​`: The domain object being acted upon.  +* `selectedObject`​: Optional; the selection at the time of action (e.g. the  +dragged object in a drag­and­drop operation.) + +## Telemetry + +Telemetry series data in Open MCT Web is represented by a common interface, and  +packaged in a consistent manner to facilitate passing telemetry updates around  +multiple visualizations.    - ● getPointCount()​: Returns the number of unique points/samples in this series.  - ● getDomainValue(index, [domain]):​ Get the domain value at the specified  - index​. If a second ​domain​ argument is provided, this is taken as a string identifier  - indicating which domain option (of, presumably, multiple) should be returned.  - ● getRangeValue(index, [range]):​ Get the domain value at the specified ​index​.  - If a second ​range​ argument is provided, this is taken as a string identifier indicating  - which range option (of, presumably, multiple) should be returned.  +### Telemetry Requests + +A telemetry request is a JavaScript object containing the following properties:  + +* `source​`: A machine­readable identifier for the source of this telemetry. This  +is useful when multiple distinct data sources are in use side­by­side.  +* `key​`: A machine­readable identifier for a unique series of telemetry within  +that source.  +* _Note: This API is still under development; additional properties, such as  +start and end time, should be present in future versions of Open MCT Web._  + +Additional properties may be included in telemetry requests which have specific  +interpretations for specific sources. + +### Telemetry Responses + +When returned from the `​telemetryService​` (see [Services](#Services) section),  +telemetry series data will be packaged in a ​`source ­> key ­> TelemetrySeries​`  +fashion. That is, telemetry is passed in an object containing key­value pairs.  +Keys identify telemetry sources; values are objects containing additional  +key­value pairs. In this object, keys identify individual telemetry series (and  +match they ​`key​` property from corresponding requests) and values are  +`TelemetrySeries​` objects (see below.)  + +### Telemetry Series + +A telemetry series is a specific sequence of data, typically associated with a  +specific instrument. Telemetry is modeled as an ordered sequence of domain and  +range values, where domain values must be non­decreasing but range values do  +not. (Typically, domain values are interpreted as UTC timestamps in milliseconds  +relative to the UNIX epoch.) A series must have at least one domain and one  +range, and may have more than one. + +Telemetry series data in Open MCT Web is expressed via the following  +`TelemetrySeries​` interface:    -Telemetry Metadata +* `getPointCount()`​: Returns the number of unique points/samples in this series.  +* `getDomainValue(index, [domain])`:​ Get the domain value at the specified index​.  +If a second ​domain​ argument is provided, this is taken as a string identifier  +indicating which domain option (of, presumably, multiple) should be returned.  +* `getRangeValue(index, [range])`:​ Get the domain value at the specified ​index​.  +If a second ​range​ argument is provided, this is taken as a string identifier  +indicating which range option (of, presumably, multiple) should be returned.    - Domain objects which have associated telemetry also expose metadata about that  -telemetry; this is retrievable via the ​getMetadata()​ of the telemetry capability. This will return  -a single JavaScript object containing the following properties:  +### Telemetry Metadata + +Domain objects which have associated telemetry also expose metadata about that  +telemetry; this is retrievable via the `​getMetadata()`​ of the telemetry  +capability. This will return a single JavaScript object containing the following  +properties:    - ● source​: The machine­readable identifier for the source of telemetry data for this object.  - ● key​: The machine­readable identifier for the individual telemetry series.  - ● domains​: An array of supported domains (see ​TelemetrySeries​ above.) Each  - domain should be expressed as an object which includes:  - ○ key​: Machine­readable identifier for this domain, as will be passed into a  - getDomainValue(index, domain)​ call.  - ○ name​: Human­readable name for this domain.  - ● ranges​: An array of supported ranges; same format as ​domains​.  -  - Note that this metadata is also used as the prototype for telemetry requests made using  -this capability.  -  -  -Types -  - A domain object’s type is represented as a ​Type​ object, which has the following  +* `source​`: The machine­readable identifier for the source of telemetry data for  +this object.  +* `key​`: The machine­readable identifier for the individual telemetry series.  +* `domains​`: An array of supported domains (see ​TelemetrySeries​ above.) Each  +domain should be expressed as an object which includes:  + * `key​`: Machine­readable identifier for this domain, as will be passed  + into a getDomainValue(index, domain)​ call.  + * `name​`: Human­readable name for this domain.  +* `ranges​`: An array of supported ranges; same format as ​domains​.  + +Note that this metadata is also used as the prototype for telemetry requests  +made using this capability.  + +## Types +A domain object’s type is represented as a ​Type​ object, which has the following  interface:  - 25  -  - ● getKey()​: Get the machine­readable identifier for this type.  - ● getName()​: Get the human­readable name for this type.  - ● getDescription()​: Get a human­readable summary of this type.  - ● getGlyph()​: Get the single character to be rendered as an icon for this type in Open  - MCT Web’s custom font set.  - ● getInitialModel()​: Get a domain object model that represents the initial state  - (before user specification of properties) for domain objects of this type.  - ● getDefinition()​: Get the extension definition for this type, as a JavaScript object.  - ● instanceOf(type)​: Check if this type is (or inherits from) a specified ​type​. This type  - can be either a string, in which case it is taken to be that type’s ​key​, or it may be a ​Type  - instance.  - ● hasFeature(feature)​: Returns a boolean value indicating whether or not this type  - supports the specified ​feature​, which is a symbolic string.  - ● getProperties()​: Get all properties associated with this type, expressed as an array  - of ​TypeProperty​ instances.  -  -Type Features -  - Features of a domain object type are expressed as symbolic string identifiers. They are  -defined in practice by usage; currently, the Open MCT Web platform only uses the ​creation  -feature to determine which domain object types should appear in the Create menu.  -  -Type Properties -  - Types declare the user­editable properties of their domain object instances in order to  -allow the forms which appear in the Create and Edit Properties dialogs to be generated by the  -platform. A ​TypeProperty​ has the following interface:  -  - ● getValue(model)​: Get the current value for this property, as it appears in the  - provided domain object ​model​.  - ● setValue(model, value)​: Set a new ​value​ for this property in the provided  - domain object ​model​.  - ● getDefinition()​: Get the raw definition for this property as a JavaScript object (as it  - was declared in this type’s extension definition.)  -Extension Categories -  - The information in this section is focused on registering new extensions of specific types;  -it does not contain a catalog of the extension instances of these categories provided by the  -platform. Relevant summaries there are provided in subsequent sections.  - 26  -  -Actions -  - An action is a thing that can be done to or using a domain object, typically as initiated by  -the user.  -  - An action’s implementation:  - ● Should take a single ​context​ argument in its constructor. (See Action Contexts, under  - Core API.)  - ● Should provide a method ​perform​, which causes the behavior associated with the  - action to occur.  - ● May provide a method ​getMetadata​, which provides metadata associated with the  - action. If omitted, one will be provided by the platform which includes metadata from the  - action’s extension definition.  - ● May provide a static method ​appliesTo(context)​ (that is, a function available as a  - property of the implementation’s constructor itself), which will be used by the platform to  - filter out actions from contexts in which they are inherently inapplicable.  -  - An action’s bundle definition (and/or ​getMetadata()​ return value) may include:  - ● category​: A string or dearray of strings identifying which category or categories an  - action falls into; used to determine when an action is displayed. Categories supported by  - the platform include:  - ○ contextual​: Actions in a context menu.  - ○ view­control​: Actions triggered by buttons in the top­right of Browse view.  - ● key​: A machine­readable identifier for this action.  - ● name​: A human­readable name for this action (e.g. to show in a menu)  - ● description​: A human­readable summary of the behavior of this action.  - ● glyph​: A single character which will be rendered in Open MCT Web’s custom font set  - as an icon for this action.  -  +* `getKey()`​: Get the machine­readable identifier for this type.  +* `getName()​`: Get the human­readable name for this type.  +* `getDescription()`​: Get a human­readable summary of this type.  +* `getGlyph()​`: Get the single character to be rendered as an icon for this type  +in Open MCT Web’s custom font set.  +* `getInitialModel()`​: Get a domain object model that represents the initial  +state (before user specification of properties) for domain objects of this type.  +* `getDefinition()​`: Get the extension definition for this type, as a JavaScript  +object.  +* `instanceOf(type)`​: Check if this type is (or inherits from) a specified ​type​.  +This type can be either a string, in which case it is taken to be that type’s  +​key​, or it may be a ​Type instance.  +* `hasFeature(feature)`​: Returns a boolean value indicating whether or not this  +type supports the specified ​feature​, which is a symbolic string.  +* `getProperties()​`: Get all properties associated with this type, expressed as  +an array of ​TypeProperty​ instances.    +### Type Features +Features of a domain object type are expressed as symbolic string identifiers.  +They are defined in practice by usage; currently, the Open MCT Web platform only  +uses the ​creation feature to determine which domain object types should appear  +in the Create menu.  +  +### Type Properties + +Types declare the user­editable properties of their domain object instances in  +order to allow the forms which appear in the Create and Edit Properties dialogs  +to be generated by the platform. A ​TypeProperty​ has the following interface: + +* `getValue(model)`​: Get the current value for this property, as it appears in  +the provided domain object ​model​.  +* `setValue(model, value)`​: Set a new ​value​ for this property in the provided  +domain object ​model​.  +* `getDefinition()​`: Get the raw definition for this property as a JavaScript  +object (as it was declared in this type’s extension definition.)  + +#Extension Categories + +The information in this section is focused on registering new extensions of  +specific types; it does not contain a catalog of the extension instances of  +these categories provided by the platform. Relevant summaries there are provided  +in subsequent sections. +  +## Actions + +An action is a thing that can be done to or using a domain object, typically as  +initiated by the user.  + +An action’s implementation: + +* Should take a single `​context​` argument in its constructor. (See Action  +Contexts, under Core API.)  +* Should provide a method ​`perform​`, which causes the behavior associated with  +the action to occur.  +* May provide a method `​getMetadata​`, which provides metadata associated with  +the action. If omitted, one will be provided by the platform which includes  +metadata from the action’s extension definition. +* May provide a static method ​`appliesTo(context)`​ (that is, a function  +available as a property of the implementation’s constructor itself), which will  +be used by the platform to filter out actions from contexts in which they are  +inherently inapplicable. + +An action’s bundle definition (and/or `​getMetadata()`​ return value) may include:  +* `category​`: A string or dearray of strings identifying which category or  +categories an action falls into; used to determine when an action is displayed.  +Categories supported by the platform include:  + * `contextual​`: Actions in a context menu.  + * `view­control​`: Actions triggered by buttons in the top­right of Browse view.  +* `key​`: A machine­readable identifier for this action.  +* `name​`: A human­readable name for this action (e.g. to show in a menu)  +* `description​`: A human­readable summary of the behavior of this action.  +* `glyph`​: A single character which will be rendered in Open MCT Web’s custom font  +set as an icon for this action.  27  Capabilities @@ -869,41 +885,41 @@ Controls   Four standard control types are included in the forms bundle:    - ● textfield​: An area to enter plain text.  - ● select​: A drop­down list of options.  - ● checkbox​: A box which may be checked/unchecked.  - ● color​: A color picker.  - ● button​: A button.  - ● datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  + * textfield​: An area to enter plain text.  + * select​: A drop­down list of options.  + * checkbox​: A box which may be checked/unchecked.  + * color​: A color picker.  + * button​: A button.  + * datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  milliseconds since start of 1970, UTC.    New controls may be added as extensions of the controls category. Extensions of this  category have two properties:    - ● key​: The symbolic name for this control (matched against the control field in rows of the  + * key​: The symbolic name for this control (matched against the control field in rows of the  form structure).  - ● templateUrl​: The URL to the control's Angular template, relative to the resources  + * templateUrl​: The URL to the control's Angular template, relative to the resources  directory of the bundle which exposes the extension.  28    Within the template for a control, the following variables will be included in scope:    - ● ngModel​: The model where form input will be stored. Notably we also need to look at  + * ngModel​: The model where form input will be stored. Notably we also need to look at  field​ (see below) to determine which field in the model should be modified.  - ● ngRequired​: True if input is required.  - ● ngPattern​: The pattern to match against (for text entry.)  - ● options​: The options for this control, as passed from the ​options​ property of an  + * ngRequired​: True if input is required.  + * ngPattern​: The pattern to match against (for text entry.)  + * options​: The options for this control, as passed from the ​options​ property of an  individual row definition.  - ● field​: Name of the field in ​ngModel​ which will hold the value for this control.  + * field​: Name of the field in ​ngModel​ which will hold the value for this control.    Gestures   A gesture is a user action which can be taken upon a representation of a domain object.  Examples of gestures included in the platform are:    - ● drag​: For representations that can be used to initiate drag­and­drop composition.  - ● drop​: For representations that can be drop targets for drag­and­drop composition.  - ● menu​: For representations that can be used to pop up a context menu.  + * drag​: For representations that can be used to initiate drag­and­drop composition.  + * drop​: For representations that can be drop targets for drag­and­drop composition.  + * menu​: For representations that can be used to pop up a context menu.    Gesture definitions have a property ​key​ which is used as a machine­readable identifier  for the gesture (e.g. ​drag​, ​drop​, ​menu​ above.)  @@ -928,15 +944,15 @@ Standard Indicators Indicators which wish to appear in the common form of an icon­text pair should provide  implementations with the following methods:    - ● getText()​: Provides the human­readable text that will be displayed for this indicator.  - ● getGlyph()​: Provides a single­character string that will be displayed as an icon in  + * getText()​: Provides the human­readable text that will be displayed for this indicator.  + * getGlyph()​: Provides a single­character string that will be displayed as an icon in  Open MCT Web’s custom font set.  - ● getDescription()​: Provides a human­readable summary of the current state of this  + * getDescription()​: Provides a human­readable summary of the current state of this  indicator; will be displayed in a tooltip on hover.  - ● getClass()​: Get a CSS class that will be applied to this indicator.  - ● getTextClass()​: Get a CSS class that will be applied to this indicator’s text portion.  - ● getGlyphClass()​: Get a CSS class that will be applied to this indicator’s icon portion.  - ● configure()​: If present, a configuration icon will appear to the right of this indicator,  + * getClass()​: Get a CSS class that will be applied to this indicator.  + * getTextClass()​: Get a CSS class that will be applied to this indicator’s text portion.  + * getGlyphClass()​: Get a CSS class that will be applied to this indicator’s icon portion.  + * configure()​: If present, a configuration icon will appear to the right of this indicator,  and clicking it will invoke this method.    Note that all methods are optional, and are called directly from an Angular template, so  @@ -957,12 +973,12 @@ Licenses information” page, reachable from Open MCT Web’s About dialog.  Licenses may have the following properties, all of which are strings:    - ● name​: Human­readable name of the licensed component. (e.g. “AngularJS”.)  - ● version​: Human­readable version of the licensed component. (e.g. “1.2.26”.)  - ● description​: Human­readable summary of the component.  - ● author​: Name or names of entities to which authorship should be attributed.  - ● copyright​: Copyright text to display for this component.  - ● link​: URL to full license text.  + * name​: Human­readable name of the licensed component. (e.g. “AngularJS”.)  + * version​: Human­readable version of the licensed component. (e.g. “1.2.26”.)  + * description​: Human­readable summary of the component.  + * author​: Name or names of entities to which authorship should be attributed.  + * copyright​: Copyright text to display for this component.  + * link​: URL to full license text.    30    @@ -974,10 +990,10 @@ whether or not a domain object of one type can contain a domain obj the section on the Policies for an overview of Open MCT Web’s policy model.  A policy’s extension definition should include:    - ● category​: The machine­readable identifier for the type of policy decision being  + * category​: The machine­readable identifier for the type of policy decision being  supported here. For a list of categories supported by the platform, see the section on  Policies. Plugins may introduce and utilize additional policy categories not in that list.  - ● message​: Optional; a human­readable message describing the policy, intended for  + * message​: Optional; a human­readable message describing the policy, intended for  display in situations where this specific policy has disallowed something.    A policy’s implementation should include a single method, ​allow(candidate,  @@ -996,17 +1012,17 @@ directive.    A representation definition should include the following properties:    - ● key​: The machine­readable name which identifies the representation.  - ● templateUrl​: The path to the representation's Angular template. This path is relative  + * key​: The machine­readable name which identifies the representation.  + * templateUrl​: The path to the representation's Angular template. This path is relative  to the bundle's resources directory.  - ● uses​: Optional; an array of capability names. Indicates that this representation intends  + * uses​: Optional; an array of capability names. Indicates that this representation intends  to use those capabilities of a domain object (via a ​useCapability​ call), and expects to  find the latest results of that ​useCapability​ call in the scope of the presented  template (under the same name as the capability itself.) Note that, if ​useCapability  returns a promise, this will be resolved before being placed in the representation’s  scope.  31  - ● gestures​: An array of keys identifying gestures (see the ​gestures​ extension  + * gestures​: An array of keys identifying gestures (see the ​gestures​ extension  category) which should be available upon this representation. Examples of gestures  include ​drag​ (for representations that should act as draggable sources for drag­drop  operations) and ​menu​ (for representations which should show a domain­object­specific  @@ -1023,17 +1039,17 @@ https://docs.angularjs.org/guide/controller​ for more information on cont   A representation’s scope will contain:    - ● domainObject​: The represented domain object.  - ● model​: The domain object’s model.  - ● configuration​: An object containing configuration information for this representation  + * domainObject​: The represented domain object.  + * model​: The domain object’s model.  + * configuration​: An object containing configuration information for this representation  (an empty object if there is no saved configuration.) The contents of this object are  managed entirely by the view/representation which receives it.  - ● representation​: An empty object, useful as a “scratch pad” for representation state.  - ● ngModel​: An object passed through the ​ng­model​ attribute of the  + * representation​: An empty object, useful as a “scratch pad” for representation state.  + * ngModel​: An object passed through the ​ng­model​ attribute of the  mct­representation​, if any.  - ● parameters​: An object passed through the ​parameters​ attribute of the  + * parameters​: An object passed through the ​parameters​ attribute of the  mct­representation​, if any.  - ● Any capabilities requested by the ​uses​ property of the representation definition.  + * Any capabilities requested by the ​uses​ property of the representation definition.    Representers   @@ -1062,15 +1078,15 @@ Root­level domain objects appear at the top­level of the tree hierar Items” folder is added as an extension of this category.  Extensions of this category should have the following properties:    - ● id​: The machine­readable identifier for the domain object being exposed.  - ● model​: The model, as a JSON object, for the domain object being exposed.  + * id​: The machine­readable identifier for the domain object being exposed.  + * model​: The model, as a JSON object, for the domain object being exposed.    Stylesheets   The ​stylesheets​ extension category is used to add CSS files to style the application.  Extension definitions for this category should include one property:    - ● stylesheetUrl​: Path and filename, including extension, for the stylesheet to include.  + * stylesheetUrl​: Path and filename, including extension, for the stylesheet to include.  This path is relative to the bundle’s resources folder (by default, ​res​)    To control the order of CSS files, use ​priority​ (see the section on Extension  @@ -1088,9 +1104,9 @@ behaves similarly to ​ng­include​, except that it uses these symbo paths.  A template’s extension definition should include the following properties:    - ● key​: The machine­readable name which identifies this template, matched against the  + * key​: The machine­readable name which identifies this template, matched against the  value given to the key attribute of the mct­include directive.  - ● templateUrl​: The path to the relevant Angular template. This path is relative to the  + * templateUrl​: The path to the relevant Angular template. This path is relative to the  bundle's resources directory.    Note that, when multiple templates are present with the same ​key​, the one with the  @@ -1105,19 +1121,19 @@ Types within Open MCT Web.  A type’s extension definition should have the following properties:    - ● key​: The machine­readable identifier for this domain object type. Will be stored to and  + * key​: The machine­readable identifier for this domain object type. Will be stored to and  matched against the ​type​ property of domain object models.  - ● name​: The human­readable name for this domain object type.  - ● description​: A human­readable summary of this domain object type.  - ● glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  + * name​: The human­readable name for this domain object type.  + * description​: A human­readable summary of this domain object type.  + * glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  set.  - ● model​: A domain object model, used as the initial state for created domain objects of  + * model​: A domain object model, used as the initial state for created domain objects of  this type (before any properties are specified.)  - ● features​: Optional; an array of strings describing features of this domain object type.  + * features​: Optional; an array of strings describing features of this domain object type.  Currently, only ​creation​ is recognized by the platform; this is used to determine that  this type should appear in the Create menu. More generally, this is used to support the  hasFeature(...)​ method of the ​type​ capability.  - ● properties​: An array describing individual properties of this domain object (as should  + * properties​: An array describing individual properties of this domain object (as should  appear in the Create or the Edit Properties dialog.) Each property is described by an  object containing the following properties:  34  @@ -1139,9 +1155,9 @@ Versions The ​versions​ extension category is used to introduce line items in Open MCT Web’s  About dialog. These should have the following properties:    - ● name​: The name of this line item, as should appear in the left­hand side of the list of  + * name​: The name of this line item, as should appear in the left­hand side of the list of  version information in the About dialog.  - ● value​: The value which should appear to the right of the name in the About dialog.  + * value​: The value which should appear to the right of the name in the About dialog.    To control the ordering of line items within the About dialog, use ​priority​. (See  section on Extension Definitions above.)  @@ -1155,19 +1171,19 @@ available views of domain objects of specific types. A view’s extens properties as a representation (and views can be utilized via ​mct­representation​);  additionally:    - ● name​: The human­readable name for this view type.  - ● description​: A human­readable summary of this view type.  - ● glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  + * name​: The human­readable name for this view type.  + * description​: A human­readable summary of this view type.  + * glyph​: A single character to be rendered as an icon in Open MCT Web’s custom font  set.  - ● type​: Optional; if present, this representation is only applicable for domain object’s of  + * type​: Optional; if present, this representation is only applicable for domain object’s of  this type.  35  - ● needs​: Optional array of strings; if present, this representation is only applicable for  + * needs​: Optional array of strings; if present, this representation is only applicable for  domain objects which have the capabilities identified by these strings.  - ● delegation​: Optional boolean, intended to be used in conjunction with ​needs​;  if  + * delegation​: Optional boolean, intended to be used in conjunction with ​needs​;  if  present, allow required capabilities to be satisfied by means of capability delegation.  (See the ​delegation​ capability, in the Capabilities section.)  - ● toolbar​: Optional; a definition for the toolbar which may appear in a toolbar when  + * toolbar​: Optional; a definition for the toolbar which may appear in a toolbar when  using this view in Edit mode. This should be specified as a structure for ​mct­toolbar​,  with additional properties available for each item in that toolbar:  ○ property​: A property name. This will refer to a property in the view’s current  @@ -1186,9 +1202,9 @@ provided for ​representations​.    When a view is in Edit mode, this scope will additionally contain:    - ● commit()​: A function which can be invoked to mark any changes to the view’s  + * commit()​: A function which can be invoked to mark any changes to the view’s  configuration​ as ready to persist.  - ● selection​: An object representing the current selection state.  + * selection​: An object representing the current selection state.    Selection State   @@ -1204,15 +1220,15 @@ within the view. (Future versions of Open MCT Web may support multipl 36  The ​selection​ object made available during Edit mode has the following methods:    - ● proxy([object])​: Get (or set, if called with an argument) the current view proxy.   - ● select(object)​: Make this object the selected object.  - ● deselect()​: Clear the currently selected object.  - ● get()​: Get the currently selected object. Returns ​undefined​ if there is no currently  + * proxy([object])​: Get (or set, if called with an argument) the current view proxy.   + * select(object)​: Make this object the selected object.  + * deselect()​: Clear the currently selected object.  + * get()​: Get the currently selected object. Returns ​undefined​ if there is no currently  selected object.  - ● selected(object)​: Check if the JavaScript object is currently in the selection set.  + * selected(object)​: Check if the JavaScript object is currently in the selection set.  Returns ​true​ if the object is either the currently selected object, or the current view  proxy.  - ● all()​: Get an array of all objects in the selection state. Will include either or both of the  + * all()​: Get an array of all objects in the selection state. Will include either or both of the  view proxy and selected object.    @@ -1242,18 +1258,18 @@ view.  This directive is used at the element level and takes one attribute, ​draw​, which is an  Angular expression which will should evaluate to a drawing object. This drawing object should  contain the following properties:  - ● dimensions​: The size, in logical coordinates, of the chart area. A two­element  + * dimensions​: The size, in logical coordinates, of the chart area. A two­element  array or numbers.  - ● origin​: The position, in logical coordinates, of the lower­left corner of the chart  + * origin​: The position, in logical coordinates, of the lower­left corner of the chart  area. A two­element array or numbers.  - ● lines​: An array of lines (e.g. as a plot line) to draw, where each line is  + * lines​: An array of lines (e.g. as a plot line) to draw, where each line is  expressed as an object containing:  ○ buffer​: A Float32Array containing points in the line, in logical  coordinates, in sequential x,y pairs.  ○ color​: The color of the line, as a four­element RGBA array, where each  element is a number in the range of 0.0­1.0.  ○ points​: The number of points in the line.  - ● boxes​: An array of rectangles to draw in the chart area. Each is an object  + * boxes​: An array of rectangles to draw in the chart area. Each is an object  containing:  ○ start​: The first corner of the rectangle, as a two­element array of  numbers, in logical coordinates.  @@ -1289,11 +1305,11 @@ delegate to other ​mct­control​ instances, and also facilitates usa This directive supports the following additional attributes, all specified as Angular  expressions:    - ● key​: A machine­readable identifier for the specific type of control to display.  - ● options​: A set of options to display in this control.  - ● structure​: In practice, contains the definition object which describes this form row or  + * key​: A machine­readable identifier for the specific type of control to display.  + * options​: A set of options to display in this control.  + * structure​: In practice, contains the definition object which describes this form row or  toolbar item. Used to pass additional control­specific parameters.  - ● field​: The field in the ​ngModel​ under which to read/store the property associated with  + * field​: The field in the ​ngModel​ under which to read/store the property associated with  this control.    Drag @@ -1304,9 +1320,9 @@ Note that this is not “drag” in the “drag­and­drop” sense, b down, mouse move, mouse up” sense.  This takes the form of three attributes:    - ● mct­drag​: An Angular expression to evaluate during drag movement.  - ● mct­drag­down​: An Angular expression to evaluate when the drag starts.  - ● mct­drag­up​: An Angular expression to evaluate when the drag ends.  + * mct­drag​: An Angular expression to evaluate during drag movement.  + * mct­drag­down​: An Angular expression to evaluate when the drag starts.  + * mct­drag­up​: An Angular expression to evaluate when the drag ends.    In each case, a variable ​delta​ will be provided to the expression; this is a two­element  array or the horizontal and vertical pixel offset of the current mouse position relative to the  @@ -1317,12 +1333,12 @@ Form The ​mct­form​ directive is used to generate forms using a declarative structure, and to  gather back user input. It is applicable at the element level and supports the following attributes:    - ● ng­model​: The object which should contain the full form input. Individual fields in this  + * ng­model​: The object which should contain the full form input. Individual fields in this  model are bound to individual controls; the names used for these fields are provided in  the form structure (see below).  - ● structure​: The structure of the form; e.g. sections, rows, their names, and so forth.  + * structure​: The structure of the form; e.g. sections, rows, their names, and so forth.  The value of this attribute should be an Angular expression.  - ● name​: The name in the containing scope under which to publish form "meta­state", e.g.  + * name​: The name in the containing scope under which to publish form "meta­state", e.g.  $valid​, ​$dirty​, etc. This is as the behavior of ​ng­form​. Passed as plain text in the  attribute.    @@ -1371,12 +1387,12 @@ Form Controls   A few standard control types are included in the ​platform/forms​ bundle:    - ● textfield​: An area to enter plain text.  - ● select​: A drop­down list of options.  - ● checkbox​: A box which may be checked/unchecked.  - ● color​: A color picker.  - ● button​: A button.  - ● datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  + * textfield​: An area to enter plain text.  + * select​: A drop­down list of options.  + * checkbox​: A box which may be checked/unchecked.  + * color​: A color picker.  + * button​: A button.  + * datetime​: An input for UTC date/time entry; gives result as a UNIX timestamp, in  milliseconds since start of 1970, UTC.    Include @@ -1387,11 +1403,11 @@ will have an isolated scope.  The directive should be used at the element level and supports the following attributes,  all of which are specified as Angular expressions:    - ● key​: Machine­readable identifier for the template (of extension category ​templates​) to  + * key​: Machine­readable identifier for the template (of extension category ​templates​) to  be displayed.  - ● ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  + * ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  usage is for two­way bound user input.  - ● parameters​: Optional; will be passed into the template’s scope as ​parameters​.  + * parameters​: Optional; will be passed into the template’s scope as ​parameters​.  Intended usage is for template­specific display parameters.    @@ -1404,12 +1420,12 @@ represent domain objects. Usage is similar to ​mct­include​.  The directive should be used at the element level and supports the following attributes,  all of which are specified as Angular expressions:    - ● key​: Machine­readable identifier for the representation (of extension category  + * key​: Machine­readable identifier for the representation (of extension category  representations​ or ​views​) to be displayed.  - ● mct­object​: The domain object being represented.  - ● ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  + * mct­object​: The domain object being represented.  + * ng­model​: Optional; will be passed into the template’s scope as ​ngModel​. Intended  usage is for two­way bound user input.  - ● parameters​: Optional; will be passed into the template’s scope as ​parameters​.  + * parameters​: Optional; will be passed into the template’s scope as ​parameters​.  Intended usage is for template­specific display parameters.    Resize @@ -1440,12 +1456,12 @@ Toolbar and to gather back user input. It is applicable at the element level and supports the following  attributes:    - ● ng­model​: The object which should contain the full toolbar input. Individual fields in this  + * ng­model​: The object which should contain the full toolbar input. Individual fields in this  model are bound to individual controls; the names used for these fields are provided in  the form structure (see below).  - ● structure​: The structure of the toolbar; e.g. sections, rows, their names, and so forth.  + * structure​: The structure of the toolbar; e.g. sections, rows, their names, and so forth.  The value of this attribute should be an Angular expression.  - ● name​: The name in the containing scope under which to publish form "meta­state", e.g.  + * name​: The name in the containing scope under which to publish form "meta­state", e.g.  $valid​, ​$dirty​, etc. This is as the behavior of ​ng­form​. Passed as plain text in the  attribute.    @@ -1484,18 +1500,18 @@ items​.          },          ... and other sections ...      ]  -}  -  -Services -  - The Open MCT Web platform provides a variety of services which can be retrieved and  +} + +# Services + +The Open MCT Web platform provides a variety of services which can be retrieved and  utilized via dependency injection. These services fall into two categories:    - ● Composite Services are defined by a set of ​components​ extensions; plugins may  + * Composite Services are defined by a set of ​components​ extensions; plugins may  introduce additional components with matching interfaces to extend or augment the  functionality of the composed service. (See the Framework section on Composite  Services.)  - ● Other services which are defined as standalone service objects; these can be utilized by  + * Other services which are defined as standalone service objects; these can be utilized by  plugins but are not intended to be modified or augmented.    Composite Services @@ -1524,7 +1540,7 @@ Action Service contexts. See Core API for additional notes on the interface for actions.  The ​actionService​ has the following interface:    - ● getActions(context)​: Returns an array of ​Action​ objects which are applicable in  + * getActions(context)​: Returns an array of ​Action​ objects which are applicable in  the specified action context.        @@ -1534,7 +1550,7 @@ Capability Service for a given domain object.  The ​capabilityService​ has the following interface:    - ● getCapabilities(model)​: Returns a an object containing key­value pairs,  + * getCapabilities(model)​: Returns a an object containing key­value pairs,  representing capabilities which should be exposed by the domain object with this model.  Keys in this object are the capability keys (as used in a ​getCapability(...)​ call)  and values are either:  @@ -1552,12 +1568,12 @@ Dialog Service The ​dialogService​ provides a means for requesting user input via a modal dialog. It  has the following interface:    - ● getUserInput(formStructure, formState)​: Prompt the user to fill out a form.  + * getUserInput(formStructure, formState)​: Prompt the user to fill out a form.  The first argument describes the form’s structure (as will be passed to ​mct­form​) while  the second argument contains the initial state of that form. This returns a ​Promise​ for  the state of the form after the user has filled it in; this promise will be rejected if the user  cancels input.  - ● getUserChoice(dialogStructure)​: Prompt the user to make a single choice from  + * getUserChoice(dialogStructure)​: Prompt the user to make a single choice from  a set of options, which (in the platform implementation) will be expressed as buttons in  the displayed dialog. Returns a ​Promise​ for the user’s choice, which will be rejected if  the user cancels input.  @@ -1568,13 +1584,13 @@ Dialog Structure The object passed as the ​dialogStructure​ to ​getUserChoice​ should have the  following properties:    - ● title​: The title to display at the top of the dialog.  - ● hint​: Short message to display below the title.  - ● template​: Identifying ​key​ (as will be passed to ​mct­include​) for the template which  + * title​: The title to display at the top of the dialog.  + * hint​: Short message to display below the title.  + * template​: Identifying ​key​ (as will be passed to ​mct­include​) for the template which  will be used to populate the inner area of the dialog.  - ● model​: Model to pass in the ​ng­model​ attribute of ​mct­include​.  - ● parameters​: Parameters to pass in the ​parameters​ attribute of ​mct­include​.  - ● options​: An array of options describing each button at the bottom. Each option may  + * model​: Model to pass in the ​ng­model​ attribute of ​mct­include​.  + * parameters​: Parameters to pass in the ​parameters​ attribute of ​mct­include​.  + * options​: An array of options describing each button at the bottom. Each option may  have the following properties:  ○ name​: Human­readable name to display in the button.  ○ key​: Machine­readable key, to pass as the result of the resolved promise when  @@ -1586,7 +1602,7 @@ Domain Object Service   The ​objectService​ provides domain object instances. It has the following interface:    - ● getObjects(ids)​: For the provided array of domain object identifiers, returns a  + * getObjects(ids)​: For the provided array of domain object identifiers, returns a  Promise​ for an object containing key­value pairs, where keys are domain object  identifiers and values are corresponding ​DomainObject​ instances. Note that the result  may contain a superset or subset of the objects requested.  @@ -1597,7 +1613,7 @@ Gesture Service The ​gestureService​ is used to attach gestures (see extension category ​gestures​)  to representations. It has the following interface:    - ● attachGestures(element, domainObject, keys)​: Attach gestures specified  + * attachGestures(element, domainObject, keys)​: Attach gestures specified  by the provided gesture ​keys​ (an array of strings) to this jqLite­wrapped HTML  element​, which represents the specified ​domainObject​. Returns an object with a  single method ​destroy()​, to be invoked when it is time to detach these gestures.  @@ -1608,7 +1624,7 @@ Model Service   The ​modelService​ provides domain object models. It has the following interface:    - ● getModels(ids)​: For the provided array of domain object identifiers, returns a  + * getModels(ids)​: For the provided array of domain object identifiers, returns a  Promise​ for an object containing key­value pairs, where keys are domain object  identifiers and values are corresponding domain object models. Note that the result may  contain a superset or subset of the models requested.  @@ -1620,21 +1636,21 @@ Persistence Service (presumably serializing/deserializing to JSON in the process.) This is used primarily to store  domain object models. It has the following interface:    - ● listSpaces()​: Returns a ​Promise​ for an array of strings identifying the different  + * listSpaces()​: Returns a ​Promise​ for an array of strings identifying the different  persistence spaces this service supports. Spaces are intended to be used to distinguish  between different underlying persistence stores, to allow these to live side by side.  - ● listObjects()​: Returns a Promise for an array of strings identifying all documents  + * listObjects()​: Returns a Promise for an array of strings identifying all documents  stored in this persistence service.  - ● createObject(space, key, value)​: Create a new document in the specified  + * createObject(space, key, value)​: Create a new document in the specified  persistence ​space​, identified by the specified ​key​, the contents of which shall match  the specified ​value​. Returns a promise that will be rejected if creation fails.  - ● readObject(space, key)​: Read an existing document in the specified persistence  + * readObject(space, key)​: Read an existing document in the specified persistence  space​, identified by the specified ​key​. Returns a promise for the specified document;  this promise will resolve to ​undefined​ if the document does not exist.  - ● updateObject(space, key, value)​: Update an existing document in the  + * updateObject(space, key, value)​: Update an existing document in the  specified persistence ​space​, identified by the specified ​key​, such that its contents  match the specified ​value​. Returns a promise that will be rejected if the update fails.  - ● deleteObject(space, key)​: Delete an existing document from the specified  + * deleteObject(space, key)​: Delete an existing document from the specified  persistence ​space​, identified by the specified ​key​. Returns a promise which will be  rejected if deletion fails.    @@ -1647,7 +1663,7 @@ Policy Service The ​policyService​ may be used to determine whether or not certain behaviors are  allowed within the application. It has the following interface:    - ● allow(category, candidate, context, [callback])​: Check if this decision  + * allow(category, candidate, context, [callback])​: Check if this decision  should be allowed. Returns a boolean. Its arguments are interpreted as:  ○ category​: A string identifying which kind of decision is being made. See the  section on Policies for categories supported by the platform; plugins may define  @@ -1676,9 +1692,9 @@ subscribing to and requesting telemetry data associated with domain obj domain objects. See the Other Services section for more information.  The ​telemetryService​ has the following interface:    - ● requestTelemetry(requests)​: Issue a request for telemetry, matching the  + * requestTelemetry(requests)​: Issue a request for telemetry, matching the  specified telemetry ​requests​. Returns a ​Promise​ for a telemetry response object.   - ● subscribe(callback, requests)​: Subscribe to real­time updates for telemetry,  + * subscribe(callback, requests)​: Subscribe to real­time updates for telemetry,  matching the specified ​requests​. The specified ​callback​ will be invoked with  telemetry response objects as they become available. This method returns a function  which can be invoked to terminate the subscription.  @@ -1688,9 +1704,9 @@ Type Service   The ​typeService​ exposes domain object types. It has the following interface:    - ● listTypes()​: Returns all domain object types supported in the application, as an  + * listTypes()​: Returns all domain object types supported in the application, as an  array of ​Type​ instances.  - ● getType(key)​: Returns the ​Type​ instance identified by the provided key, or  + * getType(key)​: Returns the ​Type​ instance identified by the provided key, or  undefined​ if no such type exists.    View Service @@ -1698,7 +1714,7 @@ View Service The ​viewService​ exposes definitions for views of domain objects. It has the following  interface:    - ● getViews(domainObject):​ Get an array of extension definitions of category ​views  + * getViews(domainObject):​ Get an array of extension definitions of category ​views  which are valid and applicable to the specified ​domainObject​.    Other Services @@ -1712,11 +1728,11 @@ as by permitting inspection during drag (which is normally prohibited  reasons.)  The ​dndService​ has the following methods:    - ● setData(key, value)​: Set drag data associated with a given type, specified by the  + * setData(key, value)​: Set drag data associated with a given type, specified by the  key​ argument.  - ● getData(key)​: Get drag data associated with a given type, specified by the ​key  + * getData(key)​: Get drag data associated with a given type, specified by the ​key  argument.  - ● removeData(key)​: Clear drag data associated with a given type, specified by the ​key  + * removeData(key)​: Clear drag data associated with a given type, specified by the ​key  argument.    @@ -1730,13 +1746,13 @@ state and notifies listeners; it does not take immediate action when  although its listeners might.  The ​navigationService​ has the following methods:    - ● getNavigation()​: Get the current navigation state. Returns a ​DomainObject​.  - ● setNavigation(domainObject)​: Set the current navigation state. Returns a  + * getNavigation()​: Get the current navigation state. Returns a ​DomainObject​.  + * setNavigation(domainObject)​: Set the current navigation state. Returns a  DomainObject​.  - ● addListener(callback)​: Listen for changes in navigation state. The provided  + * addListener(callback)​: Listen for changes in navigation state. The provided  callback​ should be a ​Function​ which takes a single ​DomainObject​ as an  argument.  - ● removeListener(callback)​: Stop listening for changes in navigation state. The  + * removeListener(callback)​: Stop listening for changes in navigation state. The  provided ​callback​ should be a ​Function​ which has previously been passed to  addListener​.    @@ -1752,9 +1768,9 @@ Telemetry Formatter from a telemetry series.  The ​telemetryFormatter​ has the following methods:    - ● formatDomainValue(value)​: Format the provided domain value (which will be  + * formatDomainValue(value)​: Format the provided domain value (which will be  assumed to be a timestamp) for display; returns a string.  - ● formatRangeValue(value)​: Format the provided range value (a number) for  + * formatRangeValue(value)​: Format the provided range value (a number) for  display; returns a string.    @@ -1767,7 +1783,7 @@ domain objects; it is particularly useful for dealing with cases where is delegated to contained objects (as occurs in Telemetry Panels.)  The ​telemetryHandler​ has the following methods:    - ● handle(domainObject, callback, [lossless])​: Subscribe to and issue  + * handle(domainObject, callback, [lossless])​: Subscribe to and issue  future requests for telemetry associated with the provided ​domainObject​, invoking the  provided ​callback​ function when streaming data becomes available. Returns a  TelemetryHandle​ (see below.)  @@ -1776,27 +1792,27 @@ Telemetry Handle   A ​TelemetryHandle​ has the following methods:    - ● getTelemetryObjects()​: Get the domain objects (as a ​DomainObject[]​) that  + * getTelemetryObjects()​: Get the domain objects (as a ​DomainObject[]​) that  have a ​telemetry​ capability and are being handled here. Note that these are looked  up asynchronously, so this method may return an empty array if the initial lookup is not  yet completed.  - ● promiseTelemetryObjects()​: As ​getTelemetryObjects()​, but returns a  + * promiseTelemetryObjects()​: As ​getTelemetryObjects()​, but returns a  Promise​ that will be fulfilled when the lookup is complete.  - ● unsubscribe()​: Unsubscribe to streaming telemetry updates associated with this  + * unsubscribe()​: Unsubscribe to streaming telemetry updates associated with this  handle.  - ● getDomainValue(domainObject)​: Get the most recent domain value received via a  + * getDomainValue(domainObject)​: Get the most recent domain value received via a  streaming update for the specified ​domainObject​.  - ● getRangeValue(domainObject)​: Get the most recent range value received via a  + * getRangeValue(domainObject)​: Get the most recent range value received via a  streaming update for the specified ​domainObject​.  - ● getMetadata()​: Get metadata (as reported by the ​getMetadata()​ method of a  + * getMetadata()​: Get metadata (as reported by the ​getMetadata()​ method of a  telemetry​ capability) associated with telemetry­providing domain objects. Returns an  array, which is in the same order as ​getTelemetryObjects()​.  - ● request(request, callback)​: Issue a new ​request​ for historical telemetry data.  + * request(request, callback)​: Issue a new ​request​ for historical telemetry data.  The provided ​callback​ will be invoked when new data becomes available, which may  occur multiple times (e.g. if there are multiple domain objects.) It will be invoked with the  DomainObject​ for which a new series is available, and the ​TelemetrySeries​ itself,  in that order.  - ● getSeries(domainObject)​: Get the latest ​TelemetrySeries​ (as resulted from a  + * getSeries(domainObject)​: Get the latest ​TelemetrySeries​ (as resulted from a  previous ​request(...)​ call) available for this domain object.    52  @@ -1812,7 +1828,7 @@ General Metadata Some properties of domain object models have a ubiquitous meaning through Open  MCT Web and can be utilized directly:    - ● name​: The human­readable name of the domain object.  + * name​: The human­readable name of the domain object.    Extension-specific Properties   @@ -1824,25 +1840,25 @@ Capability-specific Properties Some properties either trigger the presence/absence of certain capabilities, or are  managed by specific capabilities:    - ● composition​: An array of domain object identifiers that represents the contents of this  + * composition​: An array of domain object identifiers that represents the contents of this  domain object (e.g. as will appear in the tree hierarchy.) Understood by the  composition​ capability; the presence or absence of this property determines the  presence or absence of that capability.  - ● modified​: The timestamp (in milliseconds since the UNIX epoch) of the last  + * modified​: The timestamp (in milliseconds since the UNIX epoch) of the last  modification made to this domain object. Managed by the ​mutation​ capability.  - ● persisted​: The timestamp (in milliseconds since the UNIX epoch) of the last time  + * persisted​: The timestamp (in milliseconds since the UNIX epoch) of the last time  when changes to this domain object were persisted. Managed by the ​persistence  capability.  - ● relationships​: An object containing key­value pairs, where keys are symbolic  + * relationships​: An object containing key­value pairs, where keys are symbolic  identifiers for relationship types, and values are arrays of domain object identifiers. Used  by the ​relationship​ capability; the presence or absence of this property determines  the presence or absence of that capability.  - ● telemetry​: An object which serves as a template for telemetry requests associated  + * telemetry​: An object which serves as a template for telemetry requests associated  with this domain object (e.g. specifying ​source​ and ​key​; see Telemetry Requests  53  under Core API.) Used by the ​telemetry​ capability; the presence or absence of this  property determines the presence or absence of that capability.  - ● type​: A string identifying the type of this domain object. Used by the ​type​ capability.  + * type​: A string identifying the type of this domain object. Used by the ​type​ capability.    View Configurations   @@ -1888,11 +1904,11 @@ defined.    This capability has the following interface:    - ● getActions(context)​: Get the actions that are applicable in the specified action  + * getActions(context)​: Get the actions that are applicable in the specified action  context​; the capability will fill in the ​domainObject​ field of this context if necessary. If  context​ is specified as a string, they will instead be used as the ​key​ of the action  context. Returns an array of ​Action​ instances.  - ● perform(context)​: Perform an action. This will find and perform the first matching  + * perform(context)​: Perform an action. This will find and perform the first matching  action available for the specified action ​context​, filling in the ​domainObject​ field as  necessary. If ​context​ is specified as a string, they will instead be used as the ​key​ of  the action context. Returns a ​Promise​ for the result of the action that was performed, or  @@ -1908,7 +1924,7 @@ corresponding ​DomainObject​ instances in the same order. The absenc model will result in the absence of this capability in the domain object.  This capability has the following interface:    - ● invoke()​: Returns a ​Promise​ for an array of ​DomainObject​ instances.  + * invoke()​: Returns a ​Promise​ for an array of ​DomainObject​ instances.  Delegation   @@ -1917,10 +1933,10 @@ delegate responsibilities, which would normally handled by other capabil objects in its composition.  This capability has the following interface:    - ● getDelegates(key)​: Returns a ​Promise​ for an array of ​DomainObject​ instances,  + * getDelegates(key)​: Returns a ​Promise​ for an array of ​DomainObject​ instances,  to which this domain object wishes to delegate the capability with the specified ​key​.  - ● invoke(key)​: Alias of ​getDelegates(key)​.  - ● doesDelegate(key)​: Returns ​true​ if the domain object does delegate the capability  + * invoke(key)​: Alias of ​getDelegates(key)​.  + * doesDelegate(key)​: Returns ​true​ if the domain object does delegate the capability  with the specified ​key​.     The platform implementation of the ​delegation​ capability inspects the domain object’s  @@ -1946,11 +1962,11 @@ Mutation model can be modified. This capability is provided by the platform for all domain objects, and  has the following interface:    - ● mutate(mutator, [timestamp])​: Modify the domain object’s model using the  + * mutate(mutator, [timestamp])​: Modify the domain object’s model using the  specified ​mutator​ function. After changes are made, the ​modified​ property of the  model will be updated with the specified ​timestamp​, if one was provided, or with the  current system time.  - ● invoke(...)​: Alias of ​mutate​.  + * invoke(...)​: Alias of ​mutate​.    Changes to domain object models should only be made via the ​mutation​ capability;  other platform behavior is likely to break (either by exhibiting undesired behavior, or failing to  @@ -1961,13 +1977,13 @@ Mutator Function The ​mutator​ argument above is a function which will receive a cloned copy of the  domain object’s model as a single argument. It may return:    - ● A ​Promise​, in which case the resolved value of the promise will be used to determine  + * A ​Promise​, in which case the resolved value of the promise will be used to determine  which of the following forms is used.  - ● Boolean ​false​, in which case the mutation is cancelled.  - ● A JavaScript object, in which case this object will be used as the new model for this  + * Boolean ​false​, in which case the mutation is cancelled.  + * A JavaScript object, in which case this object will be used as the new model for this  domain object.  57  - ● No value (or, equivalently, ​undefined​), in which case the cloned copy (including any  + * No value (or, equivalently, ​undefined​), in which case the cloned copy (including any  changes made in place by the mutator function) will be used as the new domain object  model.    @@ -1976,12 +1992,12 @@ Persistence The ​persistence​ capability provides a mean for interacting with the underlying  persistence service which stores this domain object’s model. It has the following interface:    - ● persist()​: Store the local version of this domain object, including any changes, to the  + * persist()​: Store the local version of this domain object, including any changes, to the  persistence store. Returns a ​Promise​ for a boolean value, which will be true when the  object was successfully persisted.  - ● refresh()​: Replace this domain object’s model with the most recent version from  + * refresh()​: Replace this domain object’s model with the most recent version from  persistence. Returns a ​Promise​ which will resolve when the change has completed.  - ● getSpace()​: Return the string which identifies the persistence space which stores this  + * getSpace()​: Return the string which identifies the persistence space which stores this  domain object.    Relationship @@ -1989,9 +2005,9 @@ Relationship The ​relationship​ capability provides a means for accessing other domain objects  with which this domain object has some typed relationship. It has the following interface:    - ● listRelationships()​: List all types of relationships exposed by this object. Returns  + * listRelationships()​: List all types of relationships exposed by this object. Returns  an array of strings identifying the types of relationships.  - ● getRelatedObjects(relationship)​: Get all domain objects to which this domain  + * getRelatedObjects(relationship)​: Get all domain objects to which this domain  object has the specified type of ​relationship​, which is a string identifier (as above.)  Returns a ​Promise​ for an array of ​DomainObject​ instances.    @@ -2006,17 +2022,17 @@ Telemetry The ​telemetry​ capability provides a means for accessing telemetry data associated  with a domain object. It has the following interface:    - ● requestData([request])​: Request telemetry data for this specific domain object,  + * requestData([request])​: Request telemetry data for this specific domain object,  using telemetry request parameters from the specified ​request​ if provided. This  capability will fill in telemetry request properties as­needed for this domain object.  Returns a ​Promise​ for a ​TelemetrySeries​.  - ● subscribe(callback, [request])​:  Subscribe to telemetry data updates for this  + * subscribe(callback, [request])​:  Subscribe to telemetry data updates for this  specific domain object, using telemetry request parameters from the specified ​request  if provided. This capability will fill in telemetry request properties as­needed for this  domain object. The specified ​callback​ will be invoked with ​TelemetrySeries  instances as they arrive. Returns a function which can be invoked to terminate the  subscription, or ​undefined​ if no subscription could be obtained.  - ● getMetadata()​: Get metadata associated with this domain object’s telemetry.  + * getMetadata()​: Get metadata associated with this domain object’s telemetry.    The platform implementation of the ​telemetry​ capability is present for domain objects  which has a ​telemetry​ property in their model and/or type definition; this object will serve as a  @@ -2033,7 +2049,7 @@ View The ​view​ capability exposes views which are applicable to a given domain object. It has  the following interface:    - ● invoke()​: Returns an array of extension definitions for views which are applicable for  + * invoke()​: Returns an array of extension definitions for views which are applicable for  this domain object.  59  Actions @@ -2045,8 +2061,8 @@ Action Categories The platform understands the following action categories (specifiable as the ​category  parameter of an action’s extension definition.)    - ● contextual​: Appears in context menus.  - ● view­control​: Appears in top­right area of view (as buttons) in Browse mode  + * contextual​: Appears in context menus.  + * view­control​: Appears in top­right area of view (as buttons) in Browse mode    Platform Actions   @@ -2054,19 +2070,19 @@ Platform Actions action​ capability. Unless otherwise specified, these act upon (and modify) the object  described by the ​domainObject​ property of the action’s context.    - ● cancel​: Cancel the current editing action (invoked from Edit mode.)  - ● compose​: Place an object in another object’s composition. The object to be added  + * cancel​: Cancel the current editing action (invoked from Edit mode.)  + * compose​: Place an object in another object’s composition. The object to be added  should be provided as the ​selectedObject​ of the action context.  - ● edit​: Start editing an object (enter Edit mode.)  - ● fullscreen​: Enter full screen mode.  - ● navigate​: Make this object the focus of navigation (e.g. highlight it within the tree,  + * edit​: Start editing an object (enter Edit mode.)  + * fullscreen​: Enter full screen mode.  + * navigate​: Make this object the focus of navigation (e.g. highlight it within the tree,  display a view of it to the right.)  - ● properties​: Show the “Edit Properties” dialog.  - ● remove​: Remove this domain object from its parent’s composition. (The parent, in this  + * properties​: Show the “Edit Properties” dialog.  + * remove​: Remove this domain object from its parent’s composition. (The parent, in this  case, is whichever other domain object exposed this object by way of its ​composition  capability.)  - ● save​: Save changes (invoked from Edit mode.)  - ● window​: Open this object in a new window.  + * save​: Save changes (invoked from Edit mode.)  + * window​: Open this object in a new window.    @@ -2085,12 +2101,12 @@ Policy Categories The platform understands the following policy categories (specifiable as the ​category  parameter of an policy’s extension definition.)    - ● action​: Determines whether or not a given action is allowable. The candidate  + * action​: Determines whether or not a given action is allowable. The candidate  argument here is an ​Action​; the context is its action context object.  - ● composition​: Determines whether or not domain objects of a given type are allowed  + * composition​: Determines whether or not domain objects of a given type are allowed  to contain domain objects of another type. The candidate argument here is the  container’s ​Type​; the context argument is the ​Type​ of the object to be contained.  - ● view​: Determines whether or not a view is applicable for a domain object. The  + * view​: Determines whether or not a view is applicable for a domain object. The  candidate argument is the view’s extension definition; the context argument is the  DomainObject​ to be viewed.    @@ -2112,10 +2128,10 @@ Command-line Build   Invoking ​mvn clean install​ will:    - ● Check code style using JSLint. The build will fail if JSLint raises any warnings.  - ● Run the test suite (see below.) The build will fail if any tests fail.  - ● Populate version info (e.g. commit hash, build time.)  - ● Produce a web archive (​.war​) artifact in the ​target​ directory.  + * Check code style using JSLint. The build will fail if JSLint raises any warnings.  + * Run the test suite (see below.) The build will fail if any tests fail.  + * Populate version info (e.g. commit hash, build time.)  + * Produce a web archive (​.war​) artifact in the ​target​ directory.    The produced artifact contains a subset of the repository’s own folder hierarchy, omitting  tests and example bundles.   @@ -2129,25 +2145,25 @@ test.html​, included at the top level of the source repository, can perform tests for all active bundles, as defined in ​bundle.json​.  To define tests for a bundle:    - ● Include a directory named ​test​ within that bundle.  - ● In the ​test​ directory, include a file named ​suite.json​. This will identify which scripts  + * Include a directory named ​test​ within that bundle.  + * In the ​test​ directory, include a file named ​suite.json​. This will identify which scripts  will be tested.  - ● The file ​suite.json​ must contain a JSON array of strings, where each string is the  + * The file ​suite.json​ must contain a JSON array of strings, where each string is the  name of a script to be tested. These names should include any directory paths to the  script after (but not including) the ​src​ folder, and should not include the file’s ​.js  extension. (Note that while Open MCT Web’s framework allows a different name to be  chosen for the ​src​ directory, the test runner does not: This directory must be named  src​ for the test runner to find it.)  62  - ● For each script to be tested, a corresponding test script should be located in the bundle’s  + * For each script to be tested, a corresponding test script should be located in the bundle’s  test​ directory. This should include the suffix ​Spec​ at the end of the filename (but  before the ​.js​ extension.) This test script should be an AMD module which uses the  Jasmine API to declare its test behavior. It should declare an AMD dependency on the  script to be tested, using a relative path.    For example, if writing tests for a bundle at ​example/foo​ with two scripts:  - ● example/foo/src/controllers/FooController.js  - ● example/foo/src/directives/FooDirective.js  + * example/foo/src/controllers/FooController.js  + * example/foo/src/directives/FooDirective.js    First, these scripts should be identified in ​example/foo/test/suite.json​, e.g. with  contents:  @@ -2199,9 +2215,9 @@ manner in which they are exposed) that determine how to deploy Open  One important constraint to consider in this context is the browser’s same origin policy. If  external services are not on the same apparent host and port as the client (from the perspective  of the browser) then access may be disallowed. There are two workarounds if this occurs:  - ● Make the external service appear to be on the same host/port, either by actually  + * Make the external service appear to be on the same host/port, either by actually  deploying it there, or by proxying requests to it.  - ● Enable CORS (cross­origin resource sharing) on the external service. This is only  + * Enable CORS (cross­origin resource sharing) on the external service. This is only  possible if the external service can be configured to support CORS. Care should be  exercised if choosing this option to ensure that the chosen configuration does not create  a security vulnerability.  @@ -2209,28 +2225,28 @@ of the browser) then access may be disallowed. There are two workarou Examples of deployment strategies (and the conditions under which they make the most  sense) include:    - ● If the external services that Open MCT Web will utilize are all running on Apache Tomcat  + * If the external services that Open MCT Web will utilize are all running on Apache Tomcat  (​https://tomcat.apache.org/​), then it makes sense to run Open MCT Web from the same  Tomcat instance as a separate web application. The ​.war​ artifact produced by the  command line build facilitates this deployment option. (See  https://tomcat.apache.org/tomcat­8.0­doc/deployer­howto.html ​ for general information on  deploying in Tomcat.)  - ● If a variety of external services will be running from a variety of hosts/ports, then it may  + * If a variety of external services will be running from a variety of hosts/ports, then it may  make sense to use a web server that supports proxying, such as the Apache HTTP  Server (​http://httpd.apache.org/​). In this configuration, the HTTP server would be  configured to proxy (or reverse proxy) requests at specific paths to the various external  services, while providing Open MCT Web as flat files from a different path.  64  - ● If a single server component is being developed to handle all server­side needs of an  + * If a single server component is being developed to handle all server­side needs of an  Open MCT Web instance, it can make sense to serve Open MCT Web (as flat files) from  the same component using an embedded HTTP server such as Nancy  (​http://nancyfx.org/​).  - ● If no external services are needed (or if the “external services” will just be generating flat  + * If no external services are needed (or if the “external services” will just be generating flat  files to read) it makes sense to utilize a lightweight flat file HTTP server such as Lighttpd  (​http://www.lighttpd.net/​). In this configuration, Open MCT Web sources/resources would  be placed at one path, while the files generated by the external service are placed at  another path.  - ● If all external services support CORS, it may make sense to have an HTTP server that is  + * If all external services support CORS, it may make sense to have an HTTP server that is  solely responsible for making Open MCT Web sources/resources available, and to have  Open MCT Web contact these external services directly. Again, lightweight HTTP  servers such as Lighttpd (​http://www.lighttpd.net/​) are useful in this circumstance. The  @@ -2258,25 +2274,25 @@ specifying constants with higher priority.    This permits at least three configuration approaches:    - ● Modify the constants defined in their original bundles when deploying. This is generally  + * Modify the constants defined in their original bundles when deploying. This is generally  undesirable due to the amount of manual work required and potential for error, but is  viable if there are a small number of constants to change.  - ● Add a separate configuration bundle which overrides the values of these constants. This  + * Add a separate configuration bundle which overrides the values of these constants. This  is particularly appropriate when multiple configurations (e.g. development, test,  65  production) need to be managed easily; these can be swapped quickly by changing the  set of active bundles in ​bundles.json​.  - ● Deploy Open MCT Web and its external services in such a fashion that the default paths  + * Deploy Open MCT Web and its external services in such a fashion that the default paths  to reach external services are all correct.    Configuration Constants   The following configuration constants are recognized by Open MCT Web bundles:    - ● CouchDB adapter, ​platform/persistence/coucb  + * CouchDB adapter, ​platform/persistence/coucb  ○ COUCHDB_PATH​: URL or path to the CouchDB database to be used for domain  object persistence. Should not include a trailing slash.  - ● ElasticSearch adapter, ​platform/persistence/elastic  + * ElasticSearch adapter, ​platform/persistence/elastic  ○ ELASTIC_ROOT​: URL or path to the ElasticSearch instance to be used for  domain object persistence. Should not include a trailing slash.  ○ ELASTIC_PATH​: Path relative to the ElasticSearch instance where domain  From 13525a67c202e39daed7e5f9c2f3ff16d53c33a0 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 24 Sep 2015 12:48:07 -0700 Subject: [PATCH 094/226] [Time Conductor] Fix domain-based calculations ...in example telemetry, to support development work on time conductor. --- .../generator/src/SinewaveTelemetrySeries.js | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/example/generator/src/SinewaveTelemetrySeries.js b/example/generator/src/SinewaveTelemetrySeries.js index dbab6dcac5..1e84034766 100644 --- a/example/generator/src/SinewaveTelemetrySeries.js +++ b/example/generator/src/SinewaveTelemetrySeries.js @@ -29,24 +29,25 @@ define( function () { "use strict"; - var ONE_DAY = 1000 * 60 * 60 * 24, - 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); @@ -57,8 +58,8 @@ define( }; generatorData.getDomainValue = function (i, domain) { - return (i + offset) * 1000 + firstObservedTime * 1000 - - (domain === 'yesterday' ? ONE_DAY : 0); + return (i + offset) * 1000 + firstTime * 1000 - + (domain === 'yesterday' ? ONE_DAY : 0); }; generatorData.getRangeValue = function (i, range) { From 54a077a4e2b051f5e4a6aae060bea619de96beeb Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Thu, 24 Sep 2015 14:20:25 -0700 Subject: [PATCH 095/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Tweak to mixin "test"; --- platform/commonUI/general/res/sass/_mixins.scss | 2 +- platform/commonUI/themes/espresso/res/css/theme-espresso.css | 2 +- platform/commonUI/themes/snow/res/css/theme-snow.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/commonUI/general/res/sass/_mixins.scss b/platform/commonUI/general/res/sass/_mixins.scss index 9b128dca6a..070bf29e73 100644 --- a/platform/commonUI/general/res/sass/_mixins.scss +++ b/platform/commonUI/general/res/sass/_mixins.scss @@ -390,7 +390,7 @@ } @mixin test($c: #ffcc00, $a: 0.2) { - background-color: rgba($c, $a); + background-color: rgba($c, $a) !important; } @mixin tmpBorder($c: #ffcc00, $a: 0.75) { diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index c459d1ebb9..552a13a87e 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -247,7 +247,7 @@ a.disabled { /* line 42, ../../../../general/res/sass/_effects.scss */ .test { - background-color: rgba(255, 204, 0, 0.2); } + background-color: rgba(255, 204, 0, 0.2) !important; } @-moz-keyframes pulse { 0% { diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index f8660b75aa..5e64bb6929 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -247,7 +247,7 @@ a.disabled { /* line 42, ../../../../general/res/sass/_effects.scss */ .test { - background-color: rgba(255, 204, 0, 0.2); } + background-color: rgba(255, 204, 0, 0.2) !important; } @-moz-keyframes pulse { 0% { From 9e64dfe3b9ab32cc85f5773e31d5d5baed31e153 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Thu, 24 Sep 2015 14:31:26 -0700 Subject: [PATCH 096/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Tweaks to tick spacing; --- .../general/src/controllers/TimeRangeController.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index ac111ab1a9..c979f03a47 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -26,7 +26,9 @@ define( function (moment) { "use strict"; - var DATE_FORMAT = "YYYY-MM-DD HH:mm:ss"; + var + DATE_FORMAT = "YYYY-MM-DD HH:mm:ss", + TICK_SPACING_PX = 150; /** * @memberof platform/commonUI/general @@ -59,8 +61,7 @@ define( } function updateSpanWidth(w) { - // Space about 100px apart - tickCount = Math.max(Math.floor(w / 100), 2); + tickCount = Math.max(Math.floor(w / TICK_SPACING_PX), 2); updateTicks(); } From 1d835169823d61ee3d74163e8f15b12fea7dabaf Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Thu, 24 Sep 2015 15:38:52 -0700 Subject: [PATCH 097/226] [Frontend] Time Controller Markup and Styling open #1515 open #117 Significant re-org in menus.scss continued: Refactored s-menu to s-menu-btn; moved look-related style def's into .s-menu; .menu now extends .s-menu; --- .../res/templates/create/create-button.html | 2 +- .../commonUI/general/res/sass/_icons.scss | 2 +- .../general/res/sass/controls/_controls.scss | 2 +- .../general/res/sass/controls/_menus.scss | 12 +- .../general/res/sass/user-environ/_frame.scss | 4 +- .../res/sass/user-environ/_layout.scss | 4 +- .../templates/controls/datetime-picker.html | 2 +- .../res/templates/controls/switcher.html | 2 +- .../templates/controls/time-controller.html | 83 ++++++- .../espresso/res/css/theme-espresso.css | 219 ++++++++--------- .../themes/snow/res/css/theme-snow.css | 221 +++++++++--------- .../features/plot/res/templates/plot.html | 2 +- .../forms/res/templates/controls/color.html | 2 +- .../res/templates/controls/menu-button.html | 2 +- 14 files changed, 323 insertions(+), 236 deletions(-) diff --git a/platform/commonUI/browse/res/templates/create/create-button.html b/platform/commonUI/browse/res/templates/create/create-button.html index 67a0294111..a7b4ad96e5 100644 --- a/platform/commonUI/browse/res/templates/create/create-button.html +++ b/platform/commonUI/browse/res/templates/create/create-button.html @@ -20,7 +20,7 @@ at runtime from the About dialog for additional information. -->