From 7f0f03e787696c04864c24974dbaf5528b091d15 Mon Sep 17 00:00:00 2001 From: Tarik Date: Tue, 25 Aug 2015 14:20:27 +0300 Subject: [PATCH 001/138] Fixed typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42cd060282..0605dbd34a 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ bundle conventions. The tests described above are all at the unit-level; an additional test suite using [Protractor](https://angular.github.io/protractor/) -us under development, in the `protractor` folder. +is under development, in the `protractor` folder. To run: From 67d78772fa37136deea7c930409e6e87976d7b5d Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 8 Oct 2015 08:46:44 -0700 Subject: [PATCH 002/138] Added providers, adapters, data dictionary --- bundles.json | 4 +- example/msl/bundle.json | 64 ++++++++++++++ example/msl/src/RemsDataDictionary.js | 69 +++++++++++++++ example/msl/src/RemsTelemetryInitializer.js | 58 +++++++++++++ example/msl/src/RemsTelemetryModelProvider.js | 86 +++++++++++++++++++ example/msl/src/RemsTelemetryProvider.js | 0 example/msl/src/RemsTelemetryServerAdapter.js | 40 +++++++++ 7 files changed, 320 insertions(+), 1 deletion(-) create mode 100644 example/msl/bundle.json create mode 100644 example/msl/src/RemsDataDictionary.js create mode 100644 example/msl/src/RemsTelemetryInitializer.js create mode 100644 example/msl/src/RemsTelemetryModelProvider.js create mode 100644 example/msl/src/RemsTelemetryProvider.js create mode 100644 example/msl/src/RemsTelemetryServerAdapter.js diff --git a/bundles.json b/bundles.json index a0f7edd7a8..bf523028f7 100644 --- a/bundles.json +++ b/bundles.json @@ -19,6 +19,7 @@ "platform/features/plot", "platform/features/scrolling", "platform/features/events", + "platform/features/conductor", "platform/forms", "platform/identity", "platform/persistence/local", @@ -29,5 +30,6 @@ "example/imagery", "example/eventGenerator", - "example/generator" + "example/generator", + "example/msl" ] diff --git a/example/msl/bundle.json b/example/msl/bundle.json new file mode 100644 index 0000000000..eab4efab52 --- /dev/null +++ b/example/msl/bundle.json @@ -0,0 +1,64 @@ +{ + "name" : "Mars Science Laboratory Data Adapter", + "extensions" : { + "types": [ + { + "name":"Mars Science Laboratory", + "key": "msl.curiosity", + "glyph": "o" + }, + { + "name": "Instrument", + "key": "msl.instrument", + "glyph": "o", + "model": {"composition": []} + }, + { + "name": "Measurement", + "key": "msl.measurement", + "glyph": "T", + "model": {"telemetry": {}}, + "telemetry": { + "source": "msl.source", + "domains": [ + { + "name": "Time", + "key": "timestamp" + } + ] + } + } + ], + "roots": [ + { + "id": "msl:curiosity", + "priority" : "preferred", + "model": { + "type": "msl.curiosity", + "name": "Mars Science Laboratory", + "composition": [] + } + } + ], + "services": [ + { + "key":"rems.adapter", + "implementation": "RemsTelemetryServerAdapter.js" + } + ], + "runs": [ + { + "implementation": "RemsTelemetryInitializer.js", + "depends": ["rems.adapter", "objectService"] + } + ], + "components": [ + { + "provides": "modelService", + "type": "provider", + "implementation": "RemsTelemetryModelProvider.js", + "depends": ["rems.adapter"] + } + ] + } +} \ No newline at end of file diff --git a/example/msl/src/RemsDataDictionary.js b/example/msl/src/RemsDataDictionary.js new file mode 100644 index 0000000000..55c8f90702 --- /dev/null +++ b/example/msl/src/RemsDataDictionary.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 () { + return { + "name": "Mars Science Laboratory", + "identifier": "msl", + "instruments": [ + { + "name":"rems", + "identifier": "rems", + "measurements": [ + { + "name": "Min. Air Temperature", + "identifier": "rems.min_temp", + "units": "degrees", + "type": "float" + }, + { + "name": "Max. Air Temperatyre", + "identifier": "rems.max_temp", + "units": "degrees", + "type": "float" + }, + { + "name": "Atmospheric Pressure", + "identifier": "rems.pressure", + "units": "pascals", + "type": "float" + }, + { + "name": "Min. Ground Temperature", + "identifier": "rems.min_gts_temp", + "units": "degrees", + "type": "float" + }, + { + "name": "Max. Ground Temperature", + "identifier": "rems.max_gts_temp", + "units": "degrees", + "type": "float" + } + ] + } + ] + } + }); \ No newline at end of file diff --git a/example/msl/src/RemsTelemetryInitializer.js b/example/msl/src/RemsTelemetryInitializer.js new file mode 100644 index 0000000000..5bb8990e11 --- /dev/null +++ b/example/msl/src/RemsTelemetryInitializer.js @@ -0,0 +1,58 @@ +/***************************************************************************** + * 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 TAXONOMY_ID = "msl.curiosity", + PREFIX = "msl_tlm:"; + + function RemsTelemetryInitializer(adapter, objectService) { + function makeId(element) { + return PREFIX + element.identifier; + } + + function initializeTaxonomy(dictionary) { + function getTaxonomyObject(domainObjects) { + return domainObjects[TAXONOMY_ID]; + } + + function populateModel (taxonomyObject) { + return taxonomyObject.useCapability( + "mutation", + function (model) { + model.name = dictionary.name; + model.composition = dictionary.instruments.map(makeId); + } + ) + } + + objectService.getObjects([TAXONOMY_ID]) + .then(getTaxonomyObject) + .then(populateModel); + } + initializeTaxonomy(adapter.dictionary); + } + return RemsTelemetryInitializer; + }); \ No newline at end of file diff --git a/example/msl/src/RemsTelemetryModelProvider.js b/example/msl/src/RemsTelemetryModelProvider.js new file mode 100644 index 0000000000..b4aaf7f7e6 --- /dev/null +++ b/example/msl/src/RemsTelemetryModelProvider.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*/ + +define( + function (){ + "use strict"; + + var PREFIX = "msl_tlm:", + FORMAT_MAPPINGS = { + float: "number", + integer: "number", + string: "string" + }; + + function RemsTelemetryModelProvider(adapter){ + + function isRelevant(id) { + return id.indexOf(PREFIX) === 0; + } + + function makeId(element){ + return PREFIX + element.identifier; + } + + function buildTaxonomy(dictionary){ + var models = {}; + + function addMeasurement(measurement){ + var format = FORMAT_MAPPINGS[measurement.type]; + models[makeId(measurement)] = { + type: "msl.measurement", + name: measurement.name, + telemetry: { + key: measurement.identifier, + ranges: [{ + key: "value", + name: "Value", + units: measurement.units, + format: format + }] + } + }; + } + + function addInstrument(subsystem) { + var measurements = (subsystem.measurements || []); + models[makeId(subsystem)] = { + type: "msl.instrument", + name: subsystem.name, + composition: measurements.map(makeId) + }; + measurements.forEach(addMeasurement); + } + + (dictionary.instruments || []).forEach(addInstrument); + return models; + } + + return { + getModels: function (ids) { + return ids.some(isRelevant) ? buildTaxonomy(adapter.dictionary) : {}; + } + }; + } + return RemsTelemetryModelProvider; + }); \ No newline at end of file diff --git a/example/msl/src/RemsTelemetryProvider.js b/example/msl/src/RemsTelemetryProvider.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js new file mode 100644 index 0000000000..6b563791e0 --- /dev/null +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -0,0 +1,40 @@ +/***************************************************************************** + * 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( + ["./RemsDataDictionary"], + function (RemsDataDictionary) { + "use strict"; + + /** + * For now just returns a hard-coded data dictionary, but in future + * could be adapted to provide data from remote source. + * @constructor + */ + function RemsTelemetryServerAdapter(){ + return { + "dictionary": RemsDataDictionary + }; + } + return RemsTelemetryServerAdapter; + }); \ No newline at end of file From 9b11d9543724da263165ebaff4f8a9a7d3a1aac0 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 8 Oct 2015 16:04:14 -0700 Subject: [PATCH 003/138] shuttle --- example/msl/bundle.json | 9 ++- example/msl/src/RemsTelemetryInitializer.js | 2 +- example/msl/src/RemsTelemetryProvider.js | 71 +++++++++++++++++++ example/msl/src/RemsTelemetrySeries.js | 35 +++++++++ example/msl/src/RemsTelemetryServerAdapter.js | 10 ++- 5 files changed, 123 insertions(+), 4 deletions(-) create mode 100644 example/msl/src/RemsTelemetrySeries.js diff --git a/example/msl/bundle.json b/example/msl/bundle.json index eab4efab52..e627aef0b1 100644 --- a/example/msl/bundle.json +++ b/example/msl/bundle.json @@ -43,7 +43,8 @@ "services": [ { "key":"rems.adapter", - "implementation": "RemsTelemetryServerAdapter.js" + "implementation": "RemsTelemetryServerAdapter.js", + "depends": ["$q", "$http"] } ], "runs": [ @@ -58,6 +59,12 @@ "type": "provider", "implementation": "RemsTelemetryModelProvider.js", "depends": ["rems.adapter"] + }, + { + "provides": "telemetryService", + "type": "provider", + "implementation": "RemsTelemetryProvider.js", + "depends": ["rems.adapter", "$q"] } ] } diff --git a/example/msl/src/RemsTelemetryInitializer.js b/example/msl/src/RemsTelemetryInitializer.js index 5bb8990e11..bbe41dfcf6 100644 --- a/example/msl/src/RemsTelemetryInitializer.js +++ b/example/msl/src/RemsTelemetryInitializer.js @@ -25,7 +25,7 @@ define( function (){ "use strict"; - var TAXONOMY_ID = "msl.curiosity", + var TAXONOMY_ID = "msl:curiosity", PREFIX = "msl_tlm:"; function RemsTelemetryInitializer(adapter, objectService) { diff --git a/example/msl/src/RemsTelemetryProvider.js b/example/msl/src/RemsTelemetryProvider.js index e69de29bb2..3ae368ca33 100644 --- a/example/msl/src/RemsTelemetryProvider.js +++ b/example/msl/src/RemsTelemetryProvider.js @@ -0,0 +1,71 @@ +/***************************************************************************** + * 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 ( + ['./RemsTelemetrySeries'], + function (RemsTelemetrySeries) { + "use strict"; + + var SOURCE = "rems.source"; + + function RemsTelemetryProvider(adapter, $q){ + /* + Filters requests for telemetry so that it only handles requests for + this source + */ + function matchesSource(request) { + return (request.source === SOURCE); + } + + return { + requestTelemetry: function(requests) { + var packaged = {}, + relevantReqs = requests.filter(matchesSource); + + function addToPackage(history) { + packaged[SOURCE][history.id] = + new RemsTelemetrySeries(history.value); + } + + function handleRequest(request) { + var key = request.key; + return adapter.history(key).then(addToPackage); + } + packaged[SOURCE] = {}; + return $q.all(relevantReqs.map(handleRequest)) + .then(function () { + return packaged; + }); + }, + subscribe: function (callback, requests) { + return function() {}; + }, + unsubscribe: function (callback, requests) { + return function() {}; + } + } + + } + + return RemsTelemetryProvider; + } +); \ No newline at end of file diff --git a/example/msl/src/RemsTelemetrySeries.js b/example/msl/src/RemsTelemetrySeries.js new file mode 100644 index 0000000000..58292b2bd8 --- /dev/null +++ b/example/msl/src/RemsTelemetrySeries.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. + *****************************************************************************/ + +define( + function () { + "use strict"; + + function ExampleTelemetySeries(data) { + return { + + } + } + + return ExampleTelemetrySeries; + } +) \ No newline at end of file diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index 6b563791e0..efd3db4790 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -31,9 +31,15 @@ define( * could be adapted to provide data from remote source. * @constructor */ - function RemsTelemetryServerAdapter(){ + function RemsTelemetryServerAdapter($q, $http){ + var histories = {}; + return { - "dictionary": RemsDataDictionary + dictionary: RemsDataDictionary, + history: function(id) { + histories[id] = histories[id] || $q.defer(); + return histories[id].promise; + } }; } return RemsTelemetryServerAdapter; From 183468fcbfa96aa30316d3ba0da60499af390598 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Sat, 10 Oct 2015 12:17:30 -0700 Subject: [PATCH 004/138] Trying to figure out why requests have no 'source' property --- example/msl/src/RemsTelemetrySeries.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/example/msl/src/RemsTelemetrySeries.js b/example/msl/src/RemsTelemetrySeries.js index 58292b2bd8..4a5986c5a9 100644 --- a/example/msl/src/RemsTelemetrySeries.js +++ b/example/msl/src/RemsTelemetrySeries.js @@ -24,12 +24,20 @@ define( function () { "use strict"; - function ExampleTelemetySeries(data) { + function RemsTelemetrySeries(data) { return { - + getPointCount: function(){ + return 100; + }, + getDomainValue: function(index) { + return index + 45 * 365 * 24 * 60 * 60 * 1000; + }, + getRangeValue: function(index){ + return index * 10; + } } } - return ExampleTelemetrySeries; + return RemsTelemetrySeries; } ) \ No newline at end of file From 1fcf900271af5c8f76be766522abe247a525d648 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Mon, 12 Oct 2015 10:41:21 -0700 Subject: [PATCH 005/138] Added telemetry request ID prefix --- example/msl/bundle.json | 10 ++++-- example/msl/src/RemsDataDictionary.js | 2 +- example/msl/src/RemsTelemetrySeries.js | 6 ++-- example/msl/src/RemsTelemetryServerAdapter.js | 35 +++++++++++++++---- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/example/msl/bundle.json b/example/msl/bundle.json index e627aef0b1..2a7f5141c7 100644 --- a/example/msl/bundle.json +++ b/example/msl/bundle.json @@ -19,7 +19,7 @@ "glyph": "T", "model": {"telemetry": {}}, "telemetry": { - "source": "msl.source", + "source": "rems.source", "domains": [ { "name": "Time", @@ -29,6 +29,12 @@ } } ], + "constants": [ + { + "key": "REMS_WS_URL", + "value": "http://cab.inta-csic.es/rems/wp-content/plugins/marsweather-widget/api.php" + } + ], "roots": [ { "id": "msl:curiosity", @@ -44,7 +50,7 @@ { "key":"rems.adapter", "implementation": "RemsTelemetryServerAdapter.js", - "depends": ["$q", "$http"] + "depends": ["$q", "$http", "REMS_WS_URL"] } ], "runs": [ diff --git a/example/msl/src/RemsDataDictionary.js b/example/msl/src/RemsDataDictionary.js index 55c8f90702..2890710599 100644 --- a/example/msl/src/RemsDataDictionary.js +++ b/example/msl/src/RemsDataDictionary.js @@ -39,7 +39,7 @@ define( "type": "float" }, { - "name": "Max. Air Temperatyre", + "name": "Max. Air Temperature", "identifier": "rems.max_temp", "units": "degrees", "type": "float" diff --git a/example/msl/src/RemsTelemetrySeries.js b/example/msl/src/RemsTelemetrySeries.js index 4a5986c5a9..dcfbbd2551 100644 --- a/example/msl/src/RemsTelemetrySeries.js +++ b/example/msl/src/RemsTelemetrySeries.js @@ -27,13 +27,13 @@ define( function RemsTelemetrySeries(data) { return { getPointCount: function(){ - return 100; + return data.length; }, getDomainValue: function(index) { - return index + 45 * 365 * 24 * 60 * 60 * 1000; + return data[index].date; }, getRangeValue: function(index){ - return index * 10; + return data[index].value; } } } diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index efd3db4790..ce5d17b7da 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -25,20 +25,43 @@ define( ["./RemsDataDictionary"], function (RemsDataDictionary) { "use strict"; - + + var TERRESTRIAL_DATE = "terrestrial_date", + NO_DATA = "--", + PREFIX = "rems."; + /** * For now just returns a hard-coded data dictionary, but in future * could be adapted to provide data from remote source. * @constructor */ - function RemsTelemetryServerAdapter($q, $http){ - var histories = {}; - + function RemsTelemetryServerAdapter($q, $http, REMS_WS_URL){ + var histories = {}, + deferred; + function requestHistory (id) { + $http.get(REMS_WS_URL).then( + function(response){ + /** + * All history is fetched in one go, cache it all to save round trips to the server on subsequent requests + */ + response.data.soles.forEach(function(solData){ + for (var prop in solData){ + var propName = PREFIX + prop; + histories[propName] = histories[propName] || []; + histories[propName].push({date: Date.parse(solData[TERRESTRIAL_DATE]), value: solData[prop]=== NO_DATA ? undefined : solData[prop]}); + } + }); + deferred.resolve(histories[id]); + }, function (error){ + deferred.reject(error); + }); + } return { dictionary: RemsDataDictionary, history: function(id) { - histories[id] = histories[id] || $q.defer(); - return histories[id].promise; + deferred = deferred || $q.defer(); + requestHistory(id); + return deferred.promise; } }; } From 0538d6e60f82309ee1b07b07c1acb8aa64df749c Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Mon, 12 Oct 2015 19:54:03 -0700 Subject: [PATCH 006/138] Initial working version --- example/msl/src/RemsDataDictionary.js | 10 +++---- example/msl/src/RemsTelemetryProvider.js | 2 +- example/msl/src/RemsTelemetryServerAdapter.js | 27 +++++++++++-------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/example/msl/src/RemsDataDictionary.js b/example/msl/src/RemsDataDictionary.js index 2890710599..53e2f8e0cf 100644 --- a/example/msl/src/RemsDataDictionary.js +++ b/example/msl/src/RemsDataDictionary.js @@ -34,31 +34,31 @@ define( "measurements": [ { "name": "Min. Air Temperature", - "identifier": "rems.min_temp", + "identifier": "min_temp", "units": "degrees", "type": "float" }, { "name": "Max. Air Temperature", - "identifier": "rems.max_temp", + "identifier": "max_temp", "units": "degrees", "type": "float" }, { "name": "Atmospheric Pressure", - "identifier": "rems.pressure", + "identifier": "pressure", "units": "pascals", "type": "float" }, { "name": "Min. Ground Temperature", - "identifier": "rems.min_gts_temp", + "identifier": "min_gts_temp", "units": "degrees", "type": "float" }, { "name": "Max. Ground Temperature", - "identifier": "rems.max_gts_temp", + "identifier": "max_gts_temp", "units": "degrees", "type": "float" } diff --git a/example/msl/src/RemsTelemetryProvider.js b/example/msl/src/RemsTelemetryProvider.js index 3ae368ca33..7b27aef964 100644 --- a/example/msl/src/RemsTelemetryProvider.js +++ b/example/msl/src/RemsTelemetryProvider.js @@ -43,7 +43,7 @@ define ( function addToPackage(history) { packaged[SOURCE][history.id] = - new RemsTelemetrySeries(history.value); + new RemsTelemetrySeries(history.values); } function handleRequest(request) { diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index ce5d17b7da..257e0d37bd 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -27,8 +27,7 @@ define( "use strict"; var TERRESTRIAL_DATE = "terrestrial_date", - NO_DATA = "--", - PREFIX = "rems."; + NO_DATA = "--"; /** * For now just returns a hard-coded data dictionary, but in future @@ -37,31 +36,37 @@ define( */ function RemsTelemetryServerAdapter($q, $http, REMS_WS_URL){ var histories = {}, - deferred; + deferreds = {}; function requestHistory (id) { $http.get(REMS_WS_URL).then( function(response){ /** * All history is fetched in one go, cache it all to save round trips to the server on subsequent requests */ + var lastGoodValue=0; response.data.soles.forEach(function(solData){ for (var prop in solData){ - var propName = PREFIX + prop; - histories[propName] = histories[propName] || []; - histories[propName].push({date: Date.parse(solData[TERRESTRIAL_DATE]), value: solData[prop]=== NO_DATA ? undefined : solData[prop]}); + histories[prop] = histories[prop] || []; + var value = isNaN(solData[prop]) ? lastGoodValue : (lastGoodValue = solData[prop]); + histories[prop].unshift({date: Date.parse(solData[TERRESTRIAL_DATE]), value: value}); } }); - deferred.resolve(histories[id]); + + deferreds[id].resolve({id: id, values: histories[id]}); }, function (error){ - deferred.reject(error); + deferreds[id].reject(error); }); } return { dictionary: RemsDataDictionary, history: function(id) { - deferred = deferred || $q.defer(); - requestHistory(id); - return deferred.promise; + deferreds[id] = deferreds[id] || $q.defer(); + if (histories[id]) { + deferreds[id].resolve({id: id, values: histories[id]}); + } else { + requestHistory(id); + } + return deferreds[id].promise; } }; } From 14722a6ef5135758439b1b3f15b8a89108e12123 Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Fri, 16 Oct 2015 08:32:44 -0700 Subject: [PATCH 007/138] Reset histories before fetching --- example/msl/src/RemsTelemetryServerAdapter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index 257e0d37bd..9aa11bfb07 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -64,6 +64,7 @@ define( if (histories[id]) { deferreds[id].resolve({id: id, values: histories[id]}); } else { + histories = {}; requestHistory(id); } return deferreds[id].promise; From cdc2a407dca4f37f7dd2759bb020a84d3c1ed44d Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Thu, 22 Oct 2015 21:30:13 -0700 Subject: [PATCH 008/138] Fixed erroneous data --- example/msl/src/RemsTelemetryModelProvider.js | 4 +-- example/msl/src/RemsTelemetryServerAdapter.js | 28 ++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/example/msl/src/RemsTelemetryModelProvider.js b/example/msl/src/RemsTelemetryModelProvider.js index b4aaf7f7e6..1c1fbf23cc 100644 --- a/example/msl/src/RemsTelemetryModelProvider.js +++ b/example/msl/src/RemsTelemetryModelProvider.js @@ -30,7 +30,7 @@ define( float: "number", integer: "number", string: "string" - }; + } function RemsTelemetryModelProvider(adapter){ @@ -54,7 +54,7 @@ define( key: measurement.identifier, ranges: [{ key: "value", - name: "Value", + name: measurement.units, units: measurement.units, format: format }] diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index 9aa11bfb07..b0d8beb347 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -37,21 +37,41 @@ define( function RemsTelemetryServerAdapter($q, $http, REMS_WS_URL){ var histories = {}, deferreds = {}; + + function statisticalRejection(values){ + //First, calculate mean + var mean = values.reduce(function(accumulator, value){ + return accumulator += parseInt(value.value); + }, 0) / values.length; + var variance = values.reduce(function(accumulator, value){ + return accumulator+= Math.pow(parseInt(value.value) - mean, 2); + }, 0) / values.length; + var stddev = Math.sqrt(variance); + return values.filter(function(value){ + return mean - stddev < parseInt(value.value) && parseInt(value.value) < mean + stddev; + }) + } + function requestHistory (id) { $http.get(REMS_WS_URL).then( function(response){ + histories = {}; /** * All history is fetched in one go, cache it all to save round trips to the server on subsequent requests */ - var lastGoodValue=0; response.data.soles.forEach(function(solData){ for (var prop in solData){ histories[prop] = histories[prop] || []; - var value = isNaN(solData[prop]) ? lastGoodValue : (lastGoodValue = solData[prop]); - histories[prop].unshift({date: Date.parse(solData[TERRESTRIAL_DATE]), value: value}); + if (!isNaN(solData[prop])) { + //var value = isNaN(solData[prop]) ? lastGoodValue : (lastGoodValue = solData[prop]); + histories[prop].unshift({ + date: Date.parse(solData[TERRESTRIAL_DATE]), + value: solData[prop] + }); + } } }); - + //deferreds[id].resolve({id: id, values: statisticalRejection(histories[id])}); deferreds[id].resolve({id: id, values: histories[id]}); }, function (error){ deferreds[id].reject(error); From c038ccd0d29af721ded23fa01760019d3b0d06b0 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 3 Dec 2015 18:24:38 -0800 Subject: [PATCH 009/138] Removed unused parameter --- platform/entanglement/src/services/CopyTask.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/platform/entanglement/src/services/CopyTask.js b/platform/entanglement/src/services/CopyTask.js index 6ac6bcc6a8..57a98cdf02 100644 --- a/platform/entanglement/src/services/CopyTask.js +++ b/platform/entanglement/src/services/CopyTask.js @@ -132,11 +132,8 @@ define( * cloning objects, and composing them with their child clones * as it goes * @private - * @param originalObject - * @param originalParent - * @returns {*} */ - CopyTask.prototype.copy = function(originalObject, originalParent) { + CopyTask.prototype.copy = function(originalObject) { var self = this, clone; From 461cc59b3e5f1f20e5571f8e49902520f22ead52 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 3 Dec 2015 18:41:13 -0800 Subject: [PATCH 010/138] #338 changed isLink check to check whether location is set --- platform/entanglement/src/services/CopyTask.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/entanglement/src/services/CopyTask.js b/platform/entanglement/src/services/CopyTask.js index 57a98cdf02..770b21f27a 100644 --- a/platform/entanglement/src/services/CopyTask.js +++ b/platform/entanglement/src/services/CopyTask.js @@ -53,8 +53,8 @@ define( parent.getModel().composition.push(child.getId()); - //Check if the object being composed is a link - if (!child.getCapability("location").isLink()) { + //If a location is not specified, set it. + if (!child.getModel().location) { child.getModel().location = parent.getId(); } } From d45c5e2ffbb6401857eafa124d05d79f85e79190 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 3 Dec 2015 18:56:59 -0800 Subject: [PATCH 011/138] Added 'setLocation' flag --- platform/entanglement/src/services/CopyTask.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/platform/entanglement/src/services/CopyTask.js b/platform/entanglement/src/services/CopyTask.js index 770b21f27a..d20c233b42 100644 --- a/platform/entanglement/src/services/CopyTask.js +++ b/platform/entanglement/src/services/CopyTask.js @@ -47,14 +47,14 @@ define( this.clones = []; } - function composeChild(child, parent) { + function composeChild(child, parent, setLocation) { //Once copied, associate each cloned // composee with its parent clone parent.getModel().composition.push(child.getId()); //If a location is not specified, set it. - if (!child.getModel().location) { + if (setLocation && child.getModel().location === undefined) { child.getModel().location = parent.getId(); } } @@ -113,13 +113,16 @@ define( CopyTask.prototype.copyComposees = function(composees, clonedParent, originalParent){ var self = this; - return (composees || []).reduce(function(promise, composee){ + return (composees || []).reduce(function(promise, originalComposee){ //If the composee is composed of other // objects, chain a promise.. return promise.then(function(){ // ...to recursively copy it (and its children) - return self.copy(composee, originalParent).then(function(composee){ - return composeChild(composee, clonedParent); + return self.copy(originalComposee, originalParent).then(function(clonedComposee){ + //Compose the child within its parent. Cloned + // objects will need to also have their location + // set, however linked objects will not. + return composeChild(clonedComposee, clonedParent, clonedComposee !== originalComposee); }); });}, self.$q.when(undefined) ); @@ -132,6 +135,9 @@ define( * cloning objects, and composing them with their child clones * as it goes * @private + * @returns {DomainObject} If the type of the original object allows for + * duplication, then a duplicate of the object, otherwise the object + * itself (to allow linking to non duplicatable objects). */ CopyTask.prototype.copy = function(originalObject) { var self = this, From 5f7f349f29e3e707039501262ab6e1986dca82d7 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 11 Dec 2015 12:31:06 -0800 Subject: [PATCH 012/138] [Browse] Specify default selection in a constant https://github.com/nasa/openmctweb/issues/401 --- platform/commonUI/browse/bundle.json | 10 ++- .../commonUI/browse/src/BrowseController.js | 15 +++- .../browse/test/BrowseControllerSpec.js | 74 +++++++------------ 3 files changed, 45 insertions(+), 54 deletions(-) diff --git a/platform/commonUI/browse/bundle.json b/platform/commonUI/browse/bundle.json index e290f296ff..c74c177769 100644 --- a/platform/commonUI/browse/bundle.json +++ b/platform/commonUI/browse/bundle.json @@ -12,6 +12,13 @@ "reloadOnSearch": false } ], + "constants": [ + { + "key": "DEFAULT_PATH", + "value": "mine", + "priority": "fallback" + } + ], "controllers": [ { "key": "BrowseController", @@ -22,7 +29,8 @@ "$location", "objectService", "navigationService", - "urlService" + "urlService", + "DEFAULT_PATH" ] }, { diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index 8c032f7de3..243ce16e5b 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -30,8 +30,7 @@ define( function () { "use strict"; - var ROOT_ID = "ROOT", - DEFAULT_PATH = "mine"; + var ROOT_ID = "ROOT"; /** * The BrowseController is used to populate the initial scope in Browse @@ -43,9 +42,17 @@ define( * @memberof platform/commonUI/browse * @constructor */ - function BrowseController($scope, $route, $location, objectService, navigationService, urlService) { + function BrowseController( + $scope, + $route, + $location, + objectService, + navigationService, + urlService, + defaultPath + ) { var path = [ROOT_ID].concat( - ($route.current.params.ids || DEFAULT_PATH).split("/") + ($route.current.params.ids || defaultPath).split("/") ); function updateRoute(domainObject) { diff --git a/platform/commonUI/browse/test/BrowseControllerSpec.js b/platform/commonUI/browse/test/BrowseControllerSpec.js index 7b8aab90fa..70447f4a80 100644 --- a/platform/commonUI/browse/test/BrowseControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseControllerSpec.js @@ -39,6 +39,7 @@ define( mockUrlService, mockDomainObject, mockNextObject, + testDefaultRoot, controller; function mockPromise(value) { @@ -49,7 +50,21 @@ define( }; } + function instantiateController() { + controller = new BrowseController( + mockScope, + mockRoute, + mockLocation, + mockObjectService, + mockNavigationService, + mockUrlService, + testDefaultRoot + ); + } + beforeEach(function () { + testDefaultRoot = "some-root-level-domain-object"; + mockScope = jasmine.createSpyObj( "$scope", [ "$on", "$watch" ] @@ -100,41 +115,20 @@ define( ])); mockNextObject.useCapability.andReturn(undefined); mockNextObject.getId.andReturn("next"); - mockDomainObject.getId.andReturn("mine"); + mockDomainObject.getId.andReturn(testDefaultRoot); - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService, - mockUrlService - ); + instantiateController(); }); it("uses composition to set the navigated object, if there is none", function () { - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService, - mockUrlService - ); + instantiateController(); expect(mockNavigationService.setNavigation) .toHaveBeenCalledWith(mockDomainObject); }); it("does not try to override navigation", function () { mockNavigationService.getNavigation.andReturn(mockDomainObject); - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService, - mockUrlService - ); + instantiateController(); expect(mockScope.navigatedObject).toBe(mockDomainObject); }); @@ -161,14 +155,8 @@ define( }); it("uses route parameters to choose initially-navigated object", function () { - mockRoute.current.params.ids = "mine/next"; - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService - ); + mockRoute.current.params.ids = testDefaultRoot + "/next"; + instantiateController(); expect(mockScope.navigatedObject).toBe(mockNextObject); expect(mockNavigationService.setNavigation) .toHaveBeenCalledWith(mockNextObject); @@ -178,14 +166,8 @@ define( // Idea here is that if we get a bad path of IDs, // browse controller should traverse down it until // it hits an invalid ID. - mockRoute.current.params.ids = "mine/junk"; - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService - ); + mockRoute.current.params.ids = testDefaultRoot + "/junk"; + instantiateController(); expect(mockScope.navigatedObject).toBe(mockDomainObject); expect(mockNavigationService.setNavigation) .toHaveBeenCalledWith(mockDomainObject); @@ -195,14 +177,8 @@ define( // Idea here is that if we get a path which passes // through an object without a composition, browse controller // should stop at it since remaining IDs cannot be loaded. - mockRoute.current.params.ids = "mine/next/junk"; - controller = new BrowseController( - mockScope, - mockRoute, - mockLocation, - mockObjectService, - mockNavigationService - ); + mockRoute.current.params.ids = testDefaultRoot + "/next/junk"; + instantiateController(); expect(mockScope.navigatedObject).toBe(mockNextObject); expect(mockNavigationService.setNavigation) .toHaveBeenCalledWith(mockNextObject); From b8206b882465ec26086c52dfd3b16a98a8e8d89f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 11 Dec 2015 13:10:47 -0800 Subject: [PATCH 013/138] [Browse] Ensure selection at startup ...even when domain object identified by default path is not found. --- platform/commonUI/browse/src/BrowseController.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index 243ce16e5b..e6c73b8af4 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -123,6 +123,12 @@ define( } else { doNavigate(nextObject, index + 1); } + } else if (index === 1 && c.length > 0) { + // Roots are in a top-level container that we don't + // want to be selected, so if we couldn't find an + // object at the path we wanted, at least select + // one of its children. + navigateTo(c[c.length - 1]); } else { // Couldn't find the next element of the path // so navigate to the last path object we did find From 43f6981ba1084a8da3b5812caee372280b9b88f7 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 11 Dec 2015 13:21:52 -0800 Subject: [PATCH 014/138] [Browse] Test navigation when path is not found --- platform/commonUI/browse/test/BrowseControllerSpec.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform/commonUI/browse/test/BrowseControllerSpec.js b/platform/commonUI/browse/test/BrowseControllerSpec.js index 70447f4a80..204c8fe85e 100644 --- a/platform/commonUI/browse/test/BrowseControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseControllerSpec.js @@ -126,6 +126,14 @@ define( .toHaveBeenCalledWith(mockDomainObject); }); + it("navigates to a root-level object, even when default path is not found", function () { + mockDomainObject.getId + .andReturn("something-other-than-the-" + testDefaultRoot); + instantiateController(); + expect(mockNavigationService.setNavigation) + .toHaveBeenCalledWith(mockDomainObject); + }); + it("does not try to override navigation", function () { mockNavigationService.getNavigation.andReturn(mockDomainObject); instantiateController(); From 2e65a6a63ea505f6303b2efc3b5a4857f0cd1763 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 11 Dec 2015 15:39:53 -0800 Subject: [PATCH 015/138] Updating code to conform to code style --- ...DataDictionary.js => MSLDataDictionary.js} | 6 + example/msl/src/RemsTelemetryServerAdapter.js | 128 +++++++++--------- 2 files changed, 71 insertions(+), 63 deletions(-) rename example/msl/src/{RemsDataDictionary.js => MSLDataDictionary.js} (91%) diff --git a/example/msl/src/RemsDataDictionary.js b/example/msl/src/MSLDataDictionary.js similarity index 91% rename from example/msl/src/RemsDataDictionary.js rename to example/msl/src/MSLDataDictionary.js index 53e2f8e0cf..6b0791e0af 100644 --- a/example/msl/src/RemsDataDictionary.js +++ b/example/msl/src/MSLDataDictionary.js @@ -23,6 +23,12 @@ define( [], + /** + * A data dictionary describes the telemetry available from a data + * source and its data types. The data dictionary will be parsed by a custom + * server provider for this data source (in this case + * {@link RemsTelemetryServerAdapter}). + */ function () { return { "name": "Mars Science Laboratory", diff --git a/example/msl/src/RemsTelemetryServerAdapter.js b/example/msl/src/RemsTelemetryServerAdapter.js index b0d8beb347..0b1ec64d4d 100644 --- a/example/msl/src/RemsTelemetryServerAdapter.js +++ b/example/msl/src/RemsTelemetryServerAdapter.js @@ -22,74 +22,76 @@ /*global define*/ define( - ["./RemsDataDictionary"], - function (RemsDataDictionary) { + ["./MSLDataDictionary"], + function (MSLDataDictionary) { "use strict"; - var TERRESTRIAL_DATE = "terrestrial_date", - NO_DATA = "--"; - + var TERRESTRIAL_DATE = "terrestrial_date"; + /** - * For now just returns a hard-coded data dictionary, but in future - * could be adapted to provide data from remote source. + * Fetches historical data from the REMS instrument on the Curiosity + * Rover. Exposes two services to client code, one + * @param $q + * @param $http + * @param REMS_WS_URL + * @returns {{dictionary: exports, history: Function}} * @constructor */ - function RemsTelemetryServerAdapter($q, $http, REMS_WS_URL){ - var histories = {}, - deferreds = {}; - - function statisticalRejection(values){ - //First, calculate mean - var mean = values.reduce(function(accumulator, value){ - return accumulator += parseInt(value.value); - }, 0) / values.length; - var variance = values.reduce(function(accumulator, value){ - return accumulator+= Math.pow(parseInt(value.value) - mean, 2); - }, 0) / values.length; - var stddev = Math.sqrt(variance); - return values.filter(function(value){ - return mean - stddev < parseInt(value.value) && parseInt(value.value) < mean + stddev; - }) - } - - function requestHistory (id) { - $http.get(REMS_WS_URL).then( - function(response){ - histories = {}; - /** - * All history is fetched in one go, cache it all to save round trips to the server on subsequent requests - */ - response.data.soles.forEach(function(solData){ - for (var prop in solData){ - histories[prop] = histories[prop] || []; - if (!isNaN(solData[prop])) { - //var value = isNaN(solData[prop]) ? lastGoodValue : (lastGoodValue = solData[prop]); - histories[prop].unshift({ - date: Date.parse(solData[TERRESTRIAL_DATE]), - value: solData[prop] - }); - } - } - }); - //deferreds[id].resolve({id: id, values: statisticalRejection(histories[id])}); - deferreds[id].resolve({id: id, values: histories[id]}); - }, function (error){ - deferreds[id].reject(error); - }); - } - return { - dictionary: RemsDataDictionary, - history: function(id) { - deferreds[id] = deferreds[id] || $q.defer(); - if (histories[id]) { - deferreds[id].resolve({id: id, values: histories[id]}); - } else { - histories = {}; - requestHistory(id); - } - return deferreds[id].promise; - } - }; + function RemsTelemetryServerAdapter($q, $http, REMS_WS_URL) { + this.histories = {}, + this.deferreds = {}; + this.REMS_WS_URL = REMS_WS_URL; + this.$q = $q; + this.$http = $http; } + + /** + * @private + */ + RemsTelemetryServerAdapter.prototype.requestHistory = function(id) { + var self = this; + + return this.$http.get(this.REMS_WS_URL).then(function(response){ + self.histories = {}; + /** + * All history is fetched in one go, cache it all to save round trips to the server on subsequent requests + */ + response.data.soles.forEach(function(solData){ + for (var prop in solData){ + self.histories[prop] = self.histories[prop] || []; + if (!isNaN(solData[prop])) { + self.histories[prop].unshift({ + date: Date.parse(solData[TERRESTRIAL_DATE]), + value: solData[prop] + }); + } + } + }); + self.deferreds[id].resolve({id: id, values: self.histories[id]}); + }); + }; + + /** + * + * @type {exports} + */ + RemsTelemetryServerAdapter.prototype.dictionary = MSLDataDictionary; + + /** + * + * @param id + * @returns {p.promise|{then, fail, end}|performPromise|deferred.promise|{}|*} + */ + RemsTelemetryServerAdapter.prototype.history = function(id) { + this.deferreds[id] = this.deferreds[id] || this.$q.defer(); + if (this.histories[id]) { + this.deferreds[id].resolve({id: id, values: this.histories[id]}); + } else { + this.histories = {}; + this.requestHistory(id); + } + return this.deferreds[id].promise; + }; + return RemsTelemetryServerAdapter; }); \ No newline at end of file From 6fb6761abf6cc1092df6308a23f2b20b46f16dbe Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 27 Jan 2016 13:52:31 -0800 Subject: [PATCH 016/138] [Plots] #638 New plot display options --- main.js | 1 + platform/commonUI/browse/bundle.js | 17 +++- .../templates/browse/inspector-region.html | 30 ++++++ .../templates/browse/object-properties.html | 61 ++++++++++++ .../commonUI/browse/src/InspectorRegion.js | 69 ++++++++++++++ .../browse/src/TypeRegionDecorator.js | 89 ++++++++++++++++++ .../res/templates/object-inspector.html | 47 ++-------- platform/commonUI/regions/bundle.js | 55 +++++++++++ .../regions/src/EditableRegionPolicy.js | 57 +++++++++++ platform/commonUI/regions/src/Region.js | 94 +++++++++++++++++++ .../commonUI/regions/src/RegionController.js | 64 +++++++++++++ .../regions/test/InspectorRegionSpec.js | 45 +++++++++ platform/commonUI/regions/test/suite.json | 3 + platform/features/layout/bundle.js | 48 +++++++++- .../res/templates/plot-options-browse.html | 57 +++++++++++ .../layout/src/PlotOptionsController.js | 87 +++++++++++++++++ 16 files changed, 782 insertions(+), 42 deletions(-) create mode 100644 platform/commonUI/browse/res/templates/browse/inspector-region.html create mode 100644 platform/commonUI/browse/res/templates/browse/object-properties.html create mode 100644 platform/commonUI/browse/src/InspectorRegion.js create mode 100644 platform/commonUI/browse/src/TypeRegionDecorator.js create mode 100644 platform/commonUI/regions/bundle.js create mode 100644 platform/commonUI/regions/src/EditableRegionPolicy.js create mode 100644 platform/commonUI/regions/src/Region.js create mode 100644 platform/commonUI/regions/src/RegionController.js create mode 100644 platform/commonUI/regions/test/InspectorRegionSpec.js create mode 100644 platform/commonUI/regions/test/suite.json create mode 100644 platform/features/layout/res/templates/plot-options-browse.html create mode 100644 platform/features/layout/src/PlotOptionsController.js diff --git a/main.js b/main.js index fd5f4533fb..9964c90a6d 100644 --- a/main.js +++ b/main.js @@ -71,6 +71,7 @@ define([ './platform/entanglement/bundle', './platform/search/bundle', './platform/status/bundle', + './platform/commonUI/regions/bundle', './example/imagery/bundle', './example/eventGenerator/bundle', diff --git a/platform/commonUI/browse/bundle.js b/platform/commonUI/browse/bundle.js index 21aba14b91..bc62a1a36e 100644 --- a/platform/commonUI/browse/bundle.js +++ b/platform/commonUI/browse/bundle.js @@ -36,6 +36,7 @@ define([ "./src/creation/CreateActionProvider", "./src/creation/CreationService", "./src/windowing/WindowTitler", + "./src/TypeRegionDecorator", 'legacyRegistry' ], function ( BrowseController, @@ -52,6 +53,7 @@ define([ CreateActionProvider, CreationService, WindowTitler, + TypeRegionDecorator, legacyRegistry ) { "use strict"; @@ -192,6 +194,14 @@ define([ "context" ], "templateUrl": "templates/back-arrow.html" + }, + { + "key": "object-properties", + "templateUrl": "templates/browse/object-properties.html" + }, + { + "key": "inspector-region", + "templateUrl": "templates/browse/inspector-region.html" } ], "services": [ @@ -280,7 +290,12 @@ define([ "$q", "$log" ] - } + }, + { + "provides": "typeService", + "type": "decorator", + "implementation": TypeRegionDecorator + }, ], "runs": [ { diff --git a/platform/commonUI/browse/res/templates/browse/inspector-region.html b/platform/commonUI/browse/res/templates/browse/inspector-region.html new file mode 100644 index 0000000000..b946c06ab3 --- /dev/null +++ b/platform/commonUI/browse/res/templates/browse/inspector-region.html @@ -0,0 +1,30 @@ + +
+
+ + +
+
diff --git a/platform/commonUI/browse/res/templates/browse/object-properties.html b/platform/commonUI/browse/res/templates/browse/object-properties.html new file mode 100644 index 0000000000..149da6b874 --- /dev/null +++ b/platform/commonUI/browse/res/templates/browse/object-properties.html @@ -0,0 +1,61 @@ + +
+
Inspection
+
    +
  • + Properties +
    +
    {{ data.name }}
    +
    {{ data.value }}
    +
    +
  • +
  • + Location + + + + +
  • +
  • + Original Location + + + + +
  • +
+
\ No newline at end of file diff --git a/platform/commonUI/browse/src/InspectorRegion.js b/platform/commonUI/browse/src/InspectorRegion.js new file mode 100644 index 0000000000..72b71a1e01 --- /dev/null +++ b/platform/commonUI/browse/src/InspectorRegion.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,window*/ + +define( + [ + '../../regions/src/Region' + ], + function (Region) { + "use strict"; + + /** + * Defines the a default Inspector region. Captured in a class to + * allow for modular extension and customization of regions based on + * the typical case. + * @memberOf platform/commonUI/regions + * @constructor + */ + function InspectorRegion() { + Region.call(this); + + this.buildRegion(); + } + + InspectorRegion.prototype = Object.create(Region.prototype); + InspectorRegion.prototype.constructor = Region; + + /** + * @private + */ + InspectorRegion.prototype.buildRegion = function() { + var metadataPart = { + name: 'properties-location', + title: 'Properties and Location', + // Which modes should the region part be visible in? If + // nothing provided here, then assumed that part is visible + // in both. The visibility or otherwise of a region part + // should be decided by a policy. In this case, 'modes' is a + // shortcut that is used by the EditableRegionPolicy. + modes: ['browse', 'edit'], + content: { + key: 'object-properties' + } + }; + this.addPart(metadataPart, 0); + } + + return InspectorRegion; + } +); diff --git a/platform/commonUI/browse/src/TypeRegionDecorator.js b/platform/commonUI/browse/src/TypeRegionDecorator.js new file mode 100644 index 0000000000..60e75cac24 --- /dev/null +++ b/platform/commonUI/browse/src/TypeRegionDecorator.js @@ -0,0 +1,89 @@ +/***************************************************************************** + * 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,window*/ + +define( + [ + './InspectorRegion' + ], + function (InspectorRegion) { + "use strict"; + + /** + * Adds default screen regions to Type definitions. Screen regions + * are sections of the browse and edit view of an object that can be + * customized on a per-type basis. Within {@link Region}s are {@link RegionPart}s. + * Policies can be used to decide which parts are visible or not based on object state. + * @memberOf platform/commonUI/regions + * @see {@link Region}, {@link RegionPart}, {@link EditableRegionPolicy} + * @constructor + */ + function TypeRegionDecorator(typeService) { + this.typeService = typeService + } + + /** + * Read Type bundle definition, and add default region definitions + * if none provided. + * @private + * @param type + * @returns {*} + */ + TypeRegionDecorator.prototype.decorateType = function (type) { + var regions = type.getDefinition().regions || {}; + + regions.inspector = regions.inspector || new InspectorRegion(); + + type.getDefinition().regions = regions; + + return type; + }; + + /** + * Override the provider functions in order to return decorated Type + * objects. + * @returns {Array|*} + */ + TypeRegionDecorator.prototype.listTypes = function() { + var self = this, + types = this.typeService.listTypes(); + + return types.map(function (type) { + return self.decorateType(type); + }); + }; + + /** + * Override the provider function in order to return decorated Type + * objects. + * @param key + */ + TypeRegionDecorator.prototype.getType = function(key) { + var self = this, + type = this.typeService.getType(key); + + return self.decorateType(type); + }; + + return TypeRegionDecorator; + } +); diff --git a/platform/commonUI/general/res/templates/object-inspector.html b/platform/commonUI/general/res/templates/object-inspector.html index 5f3e4d522e..8b13d841c5 100644 --- a/platform/commonUI/general/res/templates/object-inspector.html +++ b/platform/commonUI/general/res/templates/object-inspector.html @@ -19,49 +19,16 @@ this source code distribution or the Licensing information page available at runtime from the About dialog for additional information. --> - +
-
+
-
Inspection
-
    -
  • - Properties -
    -
    {{ data.name }}
    -
    {{ data.value }}
    -
    -
  • -
  • - Location - - - - -
  • -
  • - Original Location - - - - -
  • -
+ +
diff --git a/platform/commonUI/regions/bundle.js b/platform/commonUI/regions/bundle.js new file mode 100644 index 0000000000..dce4543b60 --- /dev/null +++ b/platform/commonUI/regions/bundle.js @@ -0,0 +1,55 @@ +/***************************************************************************** + * 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([ + './src/RegionController', + './src/EditableRegionPolicy', + 'legacyRegistry' +], function ( + RegionController, + EditableRegionPolicy, + legacyRegistry +) { + "use strict"; + + legacyRegistry.register("platform/commonUI/regions", { + "extensions": { + "controllers": [ + { + "key": "RegionController", + "implementation": RegionController, + "depends": [ + "$scope", + "policyService" + ] + } + ], + "policies": [ + { + "category": "region", + "implementation": EditableRegionPolicy + } + ] + } + }); +}); diff --git a/platform/commonUI/regions/src/EditableRegionPolicy.js b/platform/commonUI/regions/src/EditableRegionPolicy.js new file mode 100644 index 0000000000..94825ff550 --- /dev/null +++ b/platform/commonUI/regions/src/EditableRegionPolicy.js @@ -0,0 +1,57 @@ +/***************************************************************************** + * 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"; + + /** + * A policy for determining whether a region part should be visible or + * not, based on its editability and the current state of the domain + * object . + * @constructor + * @implements {Policy} + * @memberof platform/commonUI/regions + */ + function EditableRegionPolicy() { + } + + EditableRegionPolicy.prototype.allow = function (regionPart, domainObject) { + if (!regionPart.modes){ + return true; + } + if (domainObject.getCapability('status').get('editing')){ + //If the domain object is in edit mode, only include a part + // if it is marked editable + return regionPart.modes.indexOf('edit') != -1; + } else { + //If the domain object is not in edit mode, return any parts + // that are not explicitly marked editable + return regionPart.modes.indexOf('browse') != -1; + } + }; + + return EditableRegionPolicy; + } +); \ No newline at end of file diff --git a/platform/commonUI/regions/src/Region.js b/platform/commonUI/regions/src/Region.js new file mode 100644 index 0000000000..b39f53c55f --- /dev/null +++ b/platform/commonUI/regions/src/Region.js @@ -0,0 +1,94 @@ +/***************************************************************************** + * 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,window*/ + +define( + [], + function () { + "use strict"; + + /** + * @typeDef {object} PartContents + * @property {string} key If the part is defined as a + * representation, the key corresponding to the representation. + * @memberOf platform/commonUI/regions + */ + + /** + * @typeDef {object} RegionPart + * @property {string} name A unique name for this region part + * @property {PartContents} content the details of the region part + * being defined + * @property {Array} [modes] the modes that this region part + * should be included in. Options are 'edit' and 'browse'. By + * default, will be included in both. Inclusion of region parts is + * determined by policies of category 'region'. By default, the + * {EditableRegionPolicy} will be applied. + * @memberOf platform/commonUI/regions + */ + + /** + * Defines the interface for a screen region. A screen region is a + * section of the browse an edit screens for an object. Regions are + * declared in object type definitions. + * @memberOf platform/commonUI/regions + * @abstract + * @constructor + */ + function Region() { + this.parts = []; + } + + /** + * Adds a part to this region. + * @param {RegionPart} part the part to add + * @param {number} [index] the position to insert the part. By default + * will add to the end + */ + Region.prototype.addPart = function (part, index){ + if (index) { + this.parts.splice(index, 0, part); + } else { + this.parts.push(part); + } + }; + + /** + * Removes a part from this region. + * @param {RegionPart} part the part to add + * @param {number} [index] the position to insert the part. By default + * will add to the end + */ + Region.prototype.removePart = function (part){ + if (typeof part === 'number') { + this.parts.splice(part, 1); + } else if (typeof part === 'string'){ + this.parts + } + else { + this.parts.splice(this.parts.indexOf(part), 1); + } + }; + + return Region; + } +); diff --git a/platform/commonUI/regions/src/RegionController.js b/platform/commonUI/regions/src/RegionController.js new file mode 100644 index 0000000000..756eb1f5d7 --- /dev/null +++ b/platform/commonUI/regions/src/RegionController.js @@ -0,0 +1,64 @@ +/***************************************************************************** + * 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"; + + /** + * The RegionController adds region data for a domain object's type + * to the scope. + * + * @constructor + */ + function RegionController($scope, policyService) { + var domainObject = $scope.domainObject, + typeCapability = domainObject.getCapability('type'); + + /** + * TODO: Refactor this out, probably to a directive. + * Or, alternatively, could have a regionCapability that returns + * regions and parts filtered for applicability to current + * object state. + * @param regions + * @returns {*} + */ + function filterParts(regions) { + //Dupe so we're not modifying the type definition. + var filteredRegions = {}; + for (var regionName in regions) { + filteredRegions[regionName] = Object.create(regions[regionName]); + filteredRegions[regionName].parts = regions[regionName].parts.filter(function(part){ + return policyService.allow('region', part, domainObject); + }); + } + return filteredRegions; + } + + $scope.regions = filterParts(typeCapability.getDefinition().regions); + } + + return RegionController; + } +); \ No newline at end of file diff --git a/platform/commonUI/regions/test/InspectorRegionSpec.js b/platform/commonUI/regions/test/InspectorRegionSpec.js new file mode 100644 index 0000000000..9192ba3f11 --- /dev/null +++ b/platform/commonUI/regions/test/InspectorRegionSpec.js @@ -0,0 +1,45 @@ +/***************************************************************************** + * 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*/ + +/** + * MCTIncudeSpec. Created by vwoeltje on 11/6/14. + */ +define( + ["../src/InspectorRegion"], + function (InspectorRegion) { + "use strict"; + + describe("The inspector region", function () { + var inspectorRegion; + + beforeEach(function () { + inspectorRegion = new InspectorRegion; + }); + + it("creates default region parts", function () { + expect(inspectorRegion.parts().length).toBe(2); + }); + + }); + } +); \ No newline at end of file diff --git a/platform/commonUI/regions/test/suite.json b/platform/commonUI/regions/test/suite.json new file mode 100644 index 0000000000..56239e1a2b --- /dev/null +++ b/platform/commonUI/regions/test/suite.json @@ -0,0 +1,3 @@ +[ + "InspectorRegion" +] \ No newline at end of file diff --git a/platform/features/layout/bundle.js b/platform/features/layout/bundle.js index 538d456007..4626275211 100644 --- a/platform/features/layout/bundle.js +++ b/platform/features/layout/bundle.js @@ -25,15 +25,45 @@ define([ "./src/LayoutController", "./src/FixedController", "./src/LayoutCompositionPolicy", + "../../commonUI/browse/src/InspectorRegion", + "./src/PlotOptionsController", 'legacyRegistry' ], function ( LayoutController, FixedController, LayoutCompositionPolicy, + InspectorRegion, + PlotOptionsController, legacyRegistry ) { "use strict"; + /** + * Customize and extend the default 'Inspector' region for the panel + * type, to add display options for plots. This should be moved to a + * dedicated type. + * @type {InspectorRegion} + */ + var plotInspector = new InspectorRegion(), + plotOptionsBrowsePart = { + name: "plot-options", + title: "Plot Options", + modes: ['browse'], + content: { + key: "plot-options-browse" + } + }, + plotOptionsEditPart = { + name: "plot-options", + title: "Plot Options", + modes: ['edit'], + content: { + key: "plot-options-browse" + } + }; + plotInspector.addPart(plotOptionsBrowsePart); + plotInspector.addPart(plotOptionsEditPart); + legacyRegistry.register("platform/features/layout", { "name": "Layout components.", "description": "Plug in adding Layout capabilities.", @@ -192,6 +222,10 @@ define([ { "key": "frame", "templateUrl": "templates/frame.html" + }, + { + "key": "plot-options-browse", + "templateUrl": "templates/plot-options-browse.html" } ], "controllers": [ @@ -213,6 +247,13 @@ define([ "telemetryFormatter", "throttle" ] + }, + { + "key": "PlotOptionsController", + "implementation": PlotOptionsController, + "depends": [ + "$scope" + ] } ], "templates": [ @@ -312,7 +353,12 @@ define([ "property": "layoutGrid", "conversion": "number[]" } - ] + ], + "regions": { + "inspector": plotInspector + } + + } ] } diff --git a/platform/features/layout/res/templates/plot-options-browse.html b/platform/features/layout/res/templates/plot-options-browse.html new file mode 100644 index 0000000000..693ad633e4 --- /dev/null +++ b/platform/features/layout/res/templates/plot-options-browse.html @@ -0,0 +1,57 @@ + +
+ Display +
    +
      +
    • + + + + + + + + + +
      + + +
      +
      +
    • +
    +
+
\ No newline at end of file diff --git a/platform/features/layout/src/PlotOptionsController.js b/platform/features/layout/src/PlotOptionsController.js new file mode 100644 index 0000000000..7f74492129 --- /dev/null +++ b/platform/features/layout/src/PlotOptionsController.js @@ -0,0 +1,87 @@ +/***************************************************************************** + * 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*/ + +/** + * This bundle implements object types and associated views for + * display-building. + * @namespace platform/features/layout + */ +define( + [], + function () { + "use strict"; + + /** + * The LayoutController is responsible for supporting the + * Layout view. It arranges frames according to saved configuration + * and provides methods for updating these based on mouse + * movement. + * @memberof platform/features/layout + * @constructor + * @param {Scope} $scope the controller's Angular scope + */ + function PlotOptionsController($scope) { + var self = this, + plotOptionsStructure = { + 'name':'Plot Options', + 'sections': [{ + 'rows':[ + { + 'name': 'Markers', + 'control': 'checkbox', + 'key': 'markers' + }, + { + 'name': 'No Line', + 'control': 'checkbox', + 'key': 'noLine' + }, + { + 'name': 'Step Line', + 'control': 'checkbox', + 'key': 'stepLine' + }, + { + 'name': 'Linear Line', + 'control': 'checkbox', + 'key': 'linearLine' + } + ] + }]}, + plotOptionsModel = {}; + + $scope.plotOptionsStructure = plotOptionsStructure; + $scope.plotOptionsModel = plotOptionsModel; + + $scope.domainObject.useCapability('composition').then(function(children){ + $scope.children = children; + }); + + + + } + + return PlotOptionsController; + } +); + From f1b6d7f749f28078b162ea1f9dad3ff01089e9a0 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 2 Feb 2016 09:39:29 -0800 Subject: [PATCH 017/138] [Frontend] New custom radio mctControl open #638 Markup and initial CSS --- .../general/res/sass/controls/_controls.scss | 7 +- .../espresso/res/css/theme-espresso.css | 218 ++++++++++-------- .../themes/snow/res/css/theme-snow.css | 218 ++++++++++-------- .../forms/res/templates/controls/radio.html | 28 +++ 4 files changed, 265 insertions(+), 206 deletions(-) create mode 100644 platform/forms/res/templates/controls/radio.html diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index d97a153cff..7148a5a054 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -109,7 +109,8 @@ font-size: 0.7rem; } -label.checkbox.custom { +label.checkbox.custom, +label.radio.custom { $bg: pullForward($colorBodyBg, 10%); $d: $formRowCtrlsH; cursor: pointer; @@ -157,11 +158,13 @@ label.checkbox.custom { &:checked ~ em:before { background: $colorCheck; color: lighten($colorCheck, 50%); - content: "2"; } } } +label.checkbox.custom input:checked ~ em:before { content: "\32"; } +label.radio.custom input:checked ~ em:before { content: "\e607"; } + .input-labeled { margin-left: $interiorMargin; label { diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index f0f0e41445..0e5d922945 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -810,7 +810,7 @@ mct-container { .search-results .s-status-editing .search-result-item.t-item-icon:before { color: #0099cc; font-size: inherit; } - /* line 40, ../../../../general/res/sass/_icons.scss */ + /* line 39, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert, .alert.t-item-icon, .icon.alert.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.alert.pager, .l-datetime-picker .l-month-year-pager .alert.pager.t-item-icon, .tree .s-status-editing .icon.alert.tree-item:before, .tree .s-status-editing .alert.tree-item.t-item-icon:before, .tree .s-status-editing .icon.alert.search-result-item:before, .tree .s-status-editing .alert.search-result-item.t-item-icon:before, @@ -819,7 +819,7 @@ mct-container { .search-results .s-status-editing .icon.alert.search-result-item:before, .search-results .s-status-editing .alert.search-result-item.t-item-icon:before { color: #ff3c00; } - /* line 42, ../../../../general/res/sass/_icons.scss */ + /* line 41, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert:hover, .alert.t-item-icon:hover, .icon.alert.s-icon-btn:hover, .l-datetime-picker .l-month-year-pager .icon.alert.pager:hover, .tree .s-status-editing .icon.alert.tree-item:hover:before, .tree .s-status-editing .alert.tree-item.t-item-icon:hover:before, .tree .s-status-editing .icon.alert.search-result-item:hover:before, .tree .s-status-editing .alert.search-result-item.t-item-icon:hover:before, @@ -828,7 +828,7 @@ mct-container { .search-results .s-status-editing .icon.alert.search-result-item:hover:before, .search-results .s-status-editing .alert.search-result-item.t-item-icon:hover:before { color: #ff8a66; } - /* line 46, ../../../../general/res/sass/_icons.scss */ + /* line 45, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.major, .major.t-item-icon, .icon.major.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.major.pager, .l-datetime-picker .l-month-year-pager .major.pager.t-item-icon, .tree .s-status-editing .icon.major.tree-item:before, .tree .s-status-editing .major.tree-item.t-item-icon:before, .tree .s-status-editing .icon.major.search-result-item:before, .tree .s-status-editing .major.search-result-item.t-item-icon:before, @@ -837,11 +837,11 @@ mct-container { .search-results .s-status-editing .icon.major.search-result-item:before, .search-results .s-status-editing .major.search-result-item.t-item-icon:before { font-size: 1.65em; } - /* line 50, ../../../../general/res/sass/_icons.scss */ + /* line 49, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon-calendar:after, .icon-calendar.t-item-icon:after, .icon-calendar.s-icon-btn:after, .l-datetime-picker .l-month-year-pager .icon-calendar.pager:after { content: "\e605"; } -/* line 55, ../../../../general/res/sass/_icons.scss */ +/* line 54, ../../../../general/res/sass/_icons.scss */ .bar .ui-symbol, .bar .t-item-icon, .bar .s-icon-btn, .bar .l-datetime-picker .l-month-year-pager .pager, .l-datetime-picker .l-month-year-pager .bar .pager, .bar .tree .s-status-editing .tree-item:before, .tree .s-status-editing .bar .tree-item:before, .bar .tree .s-status-editing .search-result-item:before, .tree .s-status-editing .bar .search-result-item:before, @@ -851,36 +851,36 @@ mct-container { .search-results .s-status-editing .bar .search-result-item:before { display: inline-block; } -/* line 59, ../../../../general/res/sass/_icons.scss */ +/* line 58, ../../../../general/res/sass/_icons.scss */ .invoke-menu { text-shadow: none; display: inline-block; } -/* line 64, ../../../../general/res/sass/_icons.scss */ +/* line 63, ../../../../general/res/sass/_icons.scss */ .s-menu-btn .invoke-menu, .icon.major .invoke-menu, .major.t-item-icon .invoke-menu { margin-left: 3px; } -/* line 69, ../../../../general/res/sass/_icons.scss */ +/* line 68, ../../../../general/res/sass/_icons.scss */ .menu .type-icon, .tree-item .type-icon, .super-menu.menu .type-icon { position: absolute; } -/* line 75, ../../../../general/res/sass/_icons.scss */ +/* line 74, ../../../../general/res/sass/_icons.scss */ .l-icon-alert { display: none !important; } - /* line 77, ../../../../general/res/sass/_icons.scss */ + /* line 76, ../../../../general/res/sass/_icons.scss */ .l-icon-alert:before { color: #ff3c00; content: "!"; } -/* line 83, ../../../../general/res/sass/_icons.scss */ +/* line 82, ../../../../general/res/sass/_icons.scss */ .t-item-icon { line-height: normal; position: relative; } - /* line 94, ../../../../general/res/sass/_icons.scss */ + /* line 90, ../../../../general/res/sass/_icons.scss */ .t-item-icon.l-icon-link .t-item-icon-glyph:before { color: #49dedb; content: "\f4"; @@ -2294,7 +2294,8 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before { font-size: 0.7rem; } /* line 112, ../../../../general/res/sass/controls/_controls.scss */ -label.checkbox.custom { +label.checkbox.custom, +label.radio.custom { cursor: pointer; display: inline-block; line-height: 14px; @@ -2302,14 +2303,16 @@ label.checkbox.custom { padding-left: 19px; position: relative; vertical-align: middle; } - /* line 122, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em { + /* line 123, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em, + label.radio.custom em { color: #999; display: inline-block; height: 14px; min-width: 14px; } - /* line 127, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em:before { + /* line 128, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em:before, + label.radio.custom em:before { -moz-border-radius: 2.25px; -webkit-border-radius: 2.25px; border-radius: 2.25px; @@ -2329,60 +2332,71 @@ label.checkbox.custom { top: 0; position: absolute; text-align: center; } - /* line 145, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text { + /* line 146, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text, + label.radio.custom.no-text { overflow: hidden; margin-right: 0; padding-left: 0; height: 14px; width: 14px; } - /* line 151, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text em { + /* line 152, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text em, + label.radio.custom.no-text em { overflow: hidden; } - /* line 155, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input { + /* line 156, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input, + label.radio.custom input { display: none; } - /* line 157, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input:checked ~ em:before { + /* line 158, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input:checked ~ em:before, + label.radio.custom input:checked ~ em:before { background: #0099cc; - color: #ccf2ff; - content: "2"; } + color: #ccf2ff; } /* line 165, ../../../../general/res/sass/controls/_controls.scss */ +label.checkbox.custom input:checked ~ em:before { + content: "\32"; } + +/* line 166, ../../../../general/res/sass/controls/_controls.scss */ +label.radio.custom input:checked ~ em:before { + content: "\e607"; } + +/* line 168, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled { margin-left: 5px; } - /* line 167, ../../../../general/res/sass/controls/_controls.scss */ + /* line 170, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled label { display: inline-block; margin-right: 3px; } - /* line 171, ../../../../general/res/sass/controls/_controls.scss */ + /* line 174, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled.inline { display: inline-block; } - /* line 174, ../../../../general/res/sass/controls/_controls.scss */ + /* line 177, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled:first-child { margin-left: 0; } -/* line 179, ../../../../general/res/sass/controls/_controls.scss */ +/* line 182, ../../../../general/res/sass/controls/_controls.scss */ .s-menu-btn label.checkbox.custom { margin-left: 5px; } -/* line 184, ../../../../general/res/sass/controls/_controls.scss */ +/* line 187, ../../../../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 190, ../../../../general/res/sass/controls/_controls.scss */ +/* line 193, ../../../../general/res/sass/controls/_controls.scss */ .context-available, .s-icon-btn { color: #0099cc; } - /* line 194, ../../../../general/res/sass/controls/_controls.scss */ + /* line 197, ../../../../general/res/sass/controls/_controls.scss */ .context-available:hover, .s-icon-btn:hover { color: deepskyblue; } -/* line 199, ../../../../general/res/sass/controls/_controls.scss */ +/* line 202, ../../../../general/res/sass/controls/_controls.scss */ .view-switcher { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2402,22 +2416,22 @@ label.checkbox.custom { transition-delay: 0; } /******************************************************** OBJECT-HEADER */ -/* line 204, ../../../../general/res/sass/controls/_controls.scss */ +/* line 207, ../../../../general/res/sass/controls/_controls.scss */ .object-header { font-size: 1em; } - /* line 207, ../../../../general/res/sass/controls/_controls.scss */ + /* line 210, ../../../../general/res/sass/controls/_controls.scss */ .object-header > .type-icon { color: #cccccc; font-size: 120%; float: left; margin-right: 5px; } - /* line 215, ../../../../general/res/sass/controls/_controls.scss */ + /* line 218, ../../../../general/res/sass/controls/_controls.scss */ .object-header .l-elem-wrapper mct-representation { min-width: 0.7em; } - /* line 223, ../../../../general/res/sass/controls/_controls.scss */ + /* line 226, ../../../../general/res/sass/controls/_controls.scss */ .object-header .action { margin-right: 5px; } - /* line 227, ../../../../general/res/sass/controls/_controls.scss */ + /* line 230, ../../../../general/res/sass/controls/_controls.scss */ .object-header .title-label { color: #999; overflow: hidden; @@ -2426,13 +2440,13 @@ label.checkbox.custom { flex: 0 1 auto; -webkit-flex: 0 1 auto; padding-right: 0.35em; } - /* line 234, ../../../../general/res/sass/controls/_controls.scss */ + /* line 237, ../../../../general/res/sass/controls/_controls.scss */ .object-header .context-available { font-size: 0.7em; flex: 0 0 1; -webkit-flex: 0 0 1; } @media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) { - /* line 240, ../../../../general/res/sass/controls/_controls.scss */ + /* line 243, ../../../../general/res/sass/controls/_controls.scss */ .object-header .context-available { -moz-transition-property: opacity; -o-transition-property: opacity; @@ -2451,7 +2465,7 @@ label.checkbox.custom { -webkit-transition-delay: 0; transition-delay: 0; opacity: 0; } - /* line 245, ../../../../general/res/sass/controls/_controls.scss */ + /* line 248, ../../../../general/res/sass/controls/_controls.scss */ .object-header:hover .context-available { opacity: 1; } } @@ -2465,12 +2479,12 @@ label.checkbox.custom { @keyframes progress { 100% { background-position: 20px center; } } -/* line 267, ../../../../general/res/sass/controls/_controls.scss */ +/* line 270, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar { display: inline-block; overflow: hidden; position: relative; } - /* line 273, ../../../../general/res/sass/controls/_controls.scss */ + /* line 276, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt-holder { overflow: hidden; position: absolute; @@ -2480,7 +2494,7 @@ label.checkbox.custom { left: 1px; width: auto; height: auto; } - /* line 276, ../../../../general/res/sass/controls/_controls.scss */ + /* line 279, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt, .l-progress-bar .progress-amt:before, .l-progress-bar .progress-amt:after { @@ -2494,14 +2508,14 @@ label.checkbox.custom { height: auto; display: block; content: ''; } - /* line 284, ../../../../general/res/sass/controls/_controls.scss */ + /* line 287, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt { right: auto; } - /* line 289, ../../../../general/res/sass/controls/_controls.scss */ + /* line 292, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar.indeterminate .progress-amt { width: 100% !important; } -/* line 295, ../../../../general/res/sass/controls/_controls.scss */ +/* line 298, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar { -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -2510,7 +2524,7 @@ label.checkbox.custom { -webkit-box-shadow: inset rgba(0, 0, 0, 0.3) 0 1px 4px; box-shadow: inset rgba(0, 0, 0, 0.3) 0 1px 4px; background: rgba(0, 0, 0, 0.1); } - /* line 299, ../../../../general/res/sass/controls/_controls.scss */ + /* line 302, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt { -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -2537,10 +2551,10 @@ label.checkbox.custom { -o-transition-delay: 0; -webkit-transition-delay: 0; transition-delay: 0; } - /* line 304, ../../../../general/res/sass/controls/_controls.scss */ + /* line 307, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt:before { background-color: #0099cc; } - /* line 307, ../../../../general/res/sass/controls/_controls.scss */ + /* line 310, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt:after { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjMwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -2548,7 +2562,7 @@ label.checkbox.custom { background-image: -moz-linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); background-image: linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); } - /* line 316, ../../../../general/res/sass/controls/_controls.scss */ + /* line 319, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar:not(.indeterminate) .progress-amt:before { -moz-animation: progress 0.4s linear infinite; -webkit-animation: progress 0.4s linear infinite; @@ -2561,7 +2575,7 @@ label.checkbox.custom { background-position: 0 center; background-repeat: repeat-x; background-size: 20px 40%; } - /* line 324, ../../../../general/res/sass/controls/_controls.scss */ + /* line 327, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar.indeterminate .progress-amt:before { -moz-animation: progress 0.6s linear infinite; -webkit-animation: progress 0.6s linear infinite; @@ -2573,12 +2587,12 @@ label.checkbox.custom { background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); background-repeat: repeat; background-size: 20px 20px; } - /* line 329, ../../../../general/res/sass/controls/_controls.scss */ + /* line 332, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar.indeterminate .progress-amt:after { display: none; } /******************************************************** SLIDERS */ -/* line 337, ../../../../general/res/sass/controls/_controls.scss */ +/* line 340, ../../../../general/res/sass/controls/_controls.scss */ .slider .slot { width: auto; position: absolute; @@ -2586,7 +2600,7 @@ label.checkbox.custom { right: 0; bottom: 0; left: 0; } -/* line 345, ../../../../general/res/sass/controls/_controls.scss */ +/* line 348, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2612,10 +2626,10 @@ label.checkbox.custom { auto: 0; bottom: auto; left: auto; } - /* line 348, ../../../../general/res/sass/controls/_controls.scss */ + /* line 351, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob:hover { background-color: #0099cc; } -/* line 359, ../../../../general/res/sass/controls/_controls.scss */ +/* line 362, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob-l { -moz-border-radius-topleft: 10px; -webkit-border-top-left-radius: 10px; @@ -2624,7 +2638,7 @@ label.checkbox.custom { -webkit-border-bottom-left-radius: 10px; border-bottom-left-radius: 10px; cursor: w-resize; } -/* line 363, ../../../../general/res/sass/controls/_controls.scss */ +/* line 366, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob-r { -moz-border-radius-topright: 10px; -webkit-border-top-right-radius: 10px; @@ -2633,7 +2647,7 @@ label.checkbox.custom { -webkit-border-bottom-right-radius: 10px; border-bottom-right-radius: 10px; cursor: e-resize; } -/* line 367, ../../../../general/res/sass/controls/_controls.scss */ +/* line 370, ../../../../general/res/sass/controls/_controls.scss */ .slider .range { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2660,12 +2674,12 @@ label.checkbox.custom { left: auto; height: auto; width: auto; } - /* line 378, ../../../../general/res/sass/controls/_controls.scss */ + /* line 381, ../../../../general/res/sass/controls/_controls.scss */ .slider .range:hover { background-color: rgba(0, 153, 204, 0.5); } /******************************************************** DATETIME PICKER */ -/* line 385, ../../../../general/res/sass/controls/_controls.scss */ +/* line 388, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker { -moz-user-select: -moz-none; -ms-user-select: none; @@ -2674,65 +2688,65 @@ label.checkbox.custom { font-size: 0.8rem; padding: 10px !important; width: 230px; } - /* line 391, ../../../../general/res/sass/controls/_controls.scss */ + /* line 394, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager { height: 15px; margin-bottom: 5px; position: relative; } - /* line 400, ../../../../general/res/sass/controls/_controls.scss */ + /* line 403, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager { width: 20px; } - /* line 403, ../../../../general/res/sass/controls/_controls.scss */ + /* line 406, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.prev { right: auto; } - /* line 405, ../../../../general/res/sass/controls/_controls.scss */ + /* line 408, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.prev:before { content: "\3c"; } - /* line 409, ../../../../general/res/sass/controls/_controls.scss */ + /* line 412, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.next { left: auto; text-align: right; } - /* line 412, ../../../../general/res/sass/controls/_controls.scss */ + /* line 415, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.next:before { content: "\3e"; } - /* line 417, ../../../../general/res/sass/controls/_controls.scss */ + /* line 420, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .val { text-align: center; left: 25px; right: 25px; } - /* line 423, ../../../../general/res/sass/controls/_controls.scss */ + /* line 426, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-calendar, .l-datetime-picker .l-time-selects { border-top: 1px solid rgba(153, 153, 153, 0.1); } - /* line 427, ../../../../general/res/sass/controls/_controls.scss */ + /* line 430, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-time-selects { line-height: 22px; } /******************************************************** CALENDAR */ -/* line 435, ../../../../general/res/sass/controls/_controls.scss */ +/* line 438, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row { display: -webkit-flex; display: flex; -webkit-flex-flow: row nowrap; flex-flow: row nowrap; margin-top: 1px; } - /* line 439, ../../../../general/res/sass/controls/_controls.scss */ + /* line 442, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row:first-child { margin-top: 0; } - /* line 442, ../../../../general/res/sass/controls/_controls.scss */ + /* line 445, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row li { -webkit-flex: 1 0; flex: 1 0; margin-left: 1px; padding: 5px; text-align: center; } - /* line 447, ../../../../general/res/sass/controls/_controls.scss */ + /* line 450, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row li:first-child { margin-left: 0; } - /* line 451, ../../../../general/res/sass/controls/_controls.scss */ + /* line 454, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-header li { color: #b3b3b3; } - /* line 454, ../../../../general/res/sass/controls/_controls.scss */ + /* line 457, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li { -moz-transition-property: background-color; -o-transition-property: background-color; @@ -2751,31 +2765,31 @@ label.checkbox.custom { -webkit-transition-delay: 0; transition-delay: 0; cursor: pointer; } - /* line 457, ../../../../general/res/sass/controls/_controls.scss */ + /* line 460, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.in-month { background-color: #616161; } - /* line 460, ../../../../general/res/sass/controls/_controls.scss */ + /* line 463, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li .sub { color: #b3b3b3; font-size: 0.8em; } - /* line 464, ../../../../general/res/sass/controls/_controls.scss */ + /* line 467, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.selected { background: #006080; color: #cccccc; } - /* line 467, ../../../../general/res/sass/controls/_controls.scss */ + /* line 470, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.selected .sub { color: inherit; } - /* line 471, ../../../../general/res/sass/controls/_controls.scss */ + /* line 474, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li:hover { background-color: #0099cc; color: #fff; } - /* line 474, ../../../../general/res/sass/controls/_controls.scss */ + /* line 477, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li:hover .sub { color: inherit; } /******************************************************** BROWSER ELEMENTS */ @media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) { - /* line 485, ../../../../general/res/sass/controls/_controls.scss */ + /* line 488, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -2790,7 +2804,7 @@ label.checkbox.custom { height: 10px; width: 10px; } - /* line 494, ../../../../general/res/sass/controls/_controls.scss */ + /* line 497, ../../../../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%; @@ -2804,7 +2818,7 @@ label.checkbox.custom { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - /* line 501, ../../../../general/res/sass/controls/_controls.scss */ + /* line 504, ../../../../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%; @@ -2813,7 +2827,7 @@ label.checkbox.custom { background-image: -webkit-linear-gradient(#5e5e5e, #525252 20px); background-image: linear-gradient(#5e5e5e, #525252 20px); } - /* line 506, ../../../../general/res/sass/controls/_controls.scss */ + /* line 509, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-corner { background: rgba(0, 0, 0, 0.4); } } /***************************************************************************** @@ -4299,10 +4313,10 @@ textarea { .field-hints, .fields { } - - + + .field-hints { - + } */ } /* line 30, ../../../../general/res/sass/forms/_datetime.scss */ @@ -6419,18 +6433,18 @@ mct-representation.s-status-pending .t-object-label .t-item-icon:before { padding: 30%; width: 0; height: 0; } -/* line 55, ../../../../general/res/sass/_object-label.scss */ +/* line 51, ../../../../general/res/sass/_object-label.scss */ mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph { display: none; } -/* line 59, ../../../../general/res/sass/_object-label.scss */ +/* line 55, ../../../../general/res/sass/_object-label.scss */ mct-representation.s-status-pending .t-object-label .t-title-label { font-style: italic; opacity: 0.6; } -/* line 66, ../../../../general/res/sass/_object-label.scss */ +/* line 62, ../../../../general/res/sass/_object-label.scss */ .selected mct-representation.s-status-pending .t-object-label .t-item-icon:before { - border-color: rgba(204, 204, 204, 0.25); - border-top-color: #cccccc; } + border-color: rgba(204, 204, 204, 0.25) !important; + border-top-color: #cccccc !important; } /***************************************************************************** * Open MCT Web, Copyright (c) 2014-2015, United States Government @@ -7336,7 +7350,7 @@ table { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } - /* line 274, ../../../../general/res/sass/plots/_plots-main.scss */ + /* line 276, ../../../../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 { @@ -7347,7 +7361,7 @@ table { width: 20%; margin-left: -10%; text-align: center; } - /* line 284, ../../../../general/res/sass/plots/_plots-main.scss */ + /* line 286, ../../../../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 { @@ -7357,18 +7371,18 @@ table { margin-bottom: -0.5em; text-align: right; } -/* line 295, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 297, ../../../../general/res/sass/plots/_plots-main.scss */ .gl-plot-tick.gl-plot-x-tick-label { top: 5px; } -/* line 298, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 300, ../../../../general/res/sass/plots/_plots-main.scss */ .gl-plot-tick.gl-plot-y-tick-label { right: 5px; left: 5px; } -/* line 305, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 307, ../../../../general/res/sass/plots/_plots-main.scss */ .tick-label.tick-label-x { top: 0; } -/* line 308, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 310, ../../../../general/res/sass/plots/_plots-main.scss */ .tick-label.tick-label-y { right: 0; left: 0; } diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index 2d227a1f87..0d475a1473 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -810,7 +810,7 @@ mct-container { .search-results .s-status-editing .search-result-item.t-item-icon:before { color: #0099cc; font-size: inherit; } - /* line 40, ../../../../general/res/sass/_icons.scss */ + /* line 39, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert, .alert.t-item-icon, .icon.alert.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.alert.pager, .l-datetime-picker .l-month-year-pager .alert.pager.t-item-icon, .tree .s-status-editing .icon.alert.tree-item:before, .tree .s-status-editing .alert.tree-item.t-item-icon:before, .tree .s-status-editing .icon.alert.search-result-item:before, .tree .s-status-editing .alert.search-result-item.t-item-icon:before, @@ -819,7 +819,7 @@ mct-container { .search-results .s-status-editing .icon.alert.search-result-item:before, .search-results .s-status-editing .alert.search-result-item.t-item-icon:before { color: #ff3c00; } - /* line 42, ../../../../general/res/sass/_icons.scss */ + /* line 41, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.alert:hover, .alert.t-item-icon:hover, .icon.alert.s-icon-btn:hover, .l-datetime-picker .l-month-year-pager .icon.alert.pager:hover, .tree .s-status-editing .icon.alert.tree-item:hover:before, .tree .s-status-editing .alert.tree-item.t-item-icon:hover:before, .tree .s-status-editing .icon.alert.search-result-item:hover:before, .tree .s-status-editing .alert.search-result-item.t-item-icon:hover:before, @@ -828,7 +828,7 @@ mct-container { .search-results .s-status-editing .icon.alert.search-result-item:hover:before, .search-results .s-status-editing .alert.search-result-item.t-item-icon:hover:before { color: #ff8a66; } - /* line 46, ../../../../general/res/sass/_icons.scss */ + /* line 45, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon.major, .major.t-item-icon, .icon.major.s-icon-btn, .l-datetime-picker .l-month-year-pager .icon.major.pager, .l-datetime-picker .l-month-year-pager .major.pager.t-item-icon, .tree .s-status-editing .icon.major.tree-item:before, .tree .s-status-editing .major.tree-item.t-item-icon:before, .tree .s-status-editing .icon.major.search-result-item:before, .tree .s-status-editing .major.search-result-item.t-item-icon:before, @@ -837,11 +837,11 @@ mct-container { .search-results .s-status-editing .icon.major.search-result-item:before, .search-results .s-status-editing .major.search-result-item.t-item-icon:before { font-size: 1.65em; } - /* line 50, ../../../../general/res/sass/_icons.scss */ + /* line 49, ../../../../general/res/sass/_icons.scss */ .ui-symbol.icon-calendar:after, .icon-calendar.t-item-icon:after, .icon-calendar.s-icon-btn:after, .l-datetime-picker .l-month-year-pager .icon-calendar.pager:after { content: "\e605"; } -/* line 55, ../../../../general/res/sass/_icons.scss */ +/* line 54, ../../../../general/res/sass/_icons.scss */ .bar .ui-symbol, .bar .t-item-icon, .bar .s-icon-btn, .bar .l-datetime-picker .l-month-year-pager .pager, .l-datetime-picker .l-month-year-pager .bar .pager, .bar .tree .s-status-editing .tree-item:before, .tree .s-status-editing .bar .tree-item:before, .bar .tree .s-status-editing .search-result-item:before, .tree .s-status-editing .bar .search-result-item:before, @@ -851,36 +851,36 @@ mct-container { .search-results .s-status-editing .bar .search-result-item:before { display: inline-block; } -/* line 59, ../../../../general/res/sass/_icons.scss */ +/* line 58, ../../../../general/res/sass/_icons.scss */ .invoke-menu { text-shadow: none; display: inline-block; } -/* line 64, ../../../../general/res/sass/_icons.scss */ +/* line 63, ../../../../general/res/sass/_icons.scss */ .s-menu-btn .invoke-menu, .icon.major .invoke-menu, .major.t-item-icon .invoke-menu { margin-left: 3px; } -/* line 69, ../../../../general/res/sass/_icons.scss */ +/* line 68, ../../../../general/res/sass/_icons.scss */ .menu .type-icon, .tree-item .type-icon, .super-menu.menu .type-icon { position: absolute; } -/* line 75, ../../../../general/res/sass/_icons.scss */ +/* line 74, ../../../../general/res/sass/_icons.scss */ .l-icon-alert { display: none !important; } - /* line 77, ../../../../general/res/sass/_icons.scss */ + /* line 76, ../../../../general/res/sass/_icons.scss */ .l-icon-alert:before { color: #ff3c00; content: "!"; } -/* line 83, ../../../../general/res/sass/_icons.scss */ +/* line 82, ../../../../general/res/sass/_icons.scss */ .t-item-icon { line-height: normal; position: relative; } - /* line 94, ../../../../general/res/sass/_icons.scss */ + /* line 90, ../../../../general/res/sass/_icons.scss */ .t-item-icon.l-icon-link .t-item-icon-glyph:before { color: #49dedb; content: "\f4"; @@ -2219,7 +2219,8 @@ tr[class*="s-limit"].s-limit-lwr td:first-child:before { font-size: 0.7rem; } /* line 112, ../../../../general/res/sass/controls/_controls.scss */ -label.checkbox.custom { +label.checkbox.custom, +label.radio.custom { cursor: pointer; display: inline-block; line-height: 14px; @@ -2227,14 +2228,16 @@ label.checkbox.custom { padding-left: 19px; position: relative; vertical-align: middle; } - /* line 122, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em { + /* line 123, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em, + label.radio.custom em { color: #666; display: inline-block; height: 14px; min-width: 14px; } - /* line 127, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom em:before { + /* line 128, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom em:before, + label.radio.custom em:before { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; @@ -2254,60 +2257,71 @@ label.checkbox.custom { top: 0; position: absolute; text-align: center; } - /* line 145, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text { + /* line 146, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text, + label.radio.custom.no-text { overflow: hidden; margin-right: 0; padding-left: 0; height: 14px; width: 14px; } - /* line 151, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom.no-text em { + /* line 152, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom.no-text em, + label.radio.custom.no-text em { overflow: hidden; } - /* line 155, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input { + /* line 156, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input, + label.radio.custom input { display: none; } - /* line 157, ../../../../general/res/sass/controls/_controls.scss */ - label.checkbox.custom input:checked ~ em:before { + /* line 158, ../../../../general/res/sass/controls/_controls.scss */ + label.checkbox.custom input:checked ~ em:before, + label.radio.custom input:checked ~ em:before { background: #0099cc; - color: #ccf2ff; - content: "2"; } + color: #ccf2ff; } /* line 165, ../../../../general/res/sass/controls/_controls.scss */ +label.checkbox.custom input:checked ~ em:before { + content: "\32"; } + +/* line 166, ../../../../general/res/sass/controls/_controls.scss */ +label.radio.custom input:checked ~ em:before { + content: "\e607"; } + +/* line 168, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled { margin-left: 5px; } - /* line 167, ../../../../general/res/sass/controls/_controls.scss */ + /* line 170, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled label { display: inline-block; margin-right: 3px; } - /* line 171, ../../../../general/res/sass/controls/_controls.scss */ + /* line 174, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled.inline { display: inline-block; } - /* line 174, ../../../../general/res/sass/controls/_controls.scss */ + /* line 177, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled:first-child { margin-left: 0; } -/* line 179, ../../../../general/res/sass/controls/_controls.scss */ +/* line 182, ../../../../general/res/sass/controls/_controls.scss */ .s-menu-btn label.checkbox.custom { margin-left: 5px; } -/* line 184, ../../../../general/res/sass/controls/_controls.scss */ +/* line 187, ../../../../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 190, ../../../../general/res/sass/controls/_controls.scss */ +/* line 193, ../../../../general/res/sass/controls/_controls.scss */ .context-available, .s-icon-btn { color: #0099cc; } - /* line 194, ../../../../general/res/sass/controls/_controls.scss */ + /* line 197, ../../../../general/res/sass/controls/_controls.scss */ .context-available:hover, .s-icon-btn:hover { color: deepskyblue; } -/* line 199, ../../../../general/res/sass/controls/_controls.scss */ +/* line 202, ../../../../general/res/sass/controls/_controls.scss */ .view-switcher { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2327,22 +2341,22 @@ label.checkbox.custom { transition-delay: 0; } /******************************************************** OBJECT-HEADER */ -/* line 204, ../../../../general/res/sass/controls/_controls.scss */ +/* line 207, ../../../../general/res/sass/controls/_controls.scss */ .object-header { font-size: 1em; } - /* line 207, ../../../../general/res/sass/controls/_controls.scss */ + /* line 210, ../../../../general/res/sass/controls/_controls.scss */ .object-header > .type-icon { color: #b3b3b3; font-size: 120%; float: left; margin-right: 5px; } - /* line 215, ../../../../general/res/sass/controls/_controls.scss */ + /* line 218, ../../../../general/res/sass/controls/_controls.scss */ .object-header .l-elem-wrapper mct-representation { min-width: 0.7em; } - /* line 223, ../../../../general/res/sass/controls/_controls.scss */ + /* line 226, ../../../../general/res/sass/controls/_controls.scss */ .object-header .action { margin-right: 5px; } - /* line 227, ../../../../general/res/sass/controls/_controls.scss */ + /* line 230, ../../../../general/res/sass/controls/_controls.scss */ .object-header .title-label { color: #666; overflow: hidden; @@ -2351,13 +2365,13 @@ label.checkbox.custom { flex: 0 1 auto; -webkit-flex: 0 1 auto; padding-right: 0.35em; } - /* line 234, ../../../../general/res/sass/controls/_controls.scss */ + /* line 237, ../../../../general/res/sass/controls/_controls.scss */ .object-header .context-available { font-size: 0.7em; flex: 0 0 1; -webkit-flex: 0 0 1; } @media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) { - /* line 240, ../../../../general/res/sass/controls/_controls.scss */ + /* line 243, ../../../../general/res/sass/controls/_controls.scss */ .object-header .context-available { -moz-transition-property: opacity; -o-transition-property: opacity; @@ -2376,7 +2390,7 @@ label.checkbox.custom { -webkit-transition-delay: 0; transition-delay: 0; opacity: 0; } - /* line 245, ../../../../general/res/sass/controls/_controls.scss */ + /* line 248, ../../../../general/res/sass/controls/_controls.scss */ .object-header:hover .context-available { opacity: 1; } } @@ -2390,12 +2404,12 @@ label.checkbox.custom { @keyframes progress { 100% { background-position: 20px center; } } -/* line 267, ../../../../general/res/sass/controls/_controls.scss */ +/* line 270, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar { display: inline-block; overflow: hidden; position: relative; } - /* line 273, ../../../../general/res/sass/controls/_controls.scss */ + /* line 276, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt-holder { overflow: hidden; position: absolute; @@ -2405,7 +2419,7 @@ label.checkbox.custom { left: 1px; width: auto; height: auto; } - /* line 276, ../../../../general/res/sass/controls/_controls.scss */ + /* line 279, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt, .l-progress-bar .progress-amt:before, .l-progress-bar .progress-amt:after { @@ -2419,14 +2433,14 @@ label.checkbox.custom { height: auto; display: block; content: ''; } - /* line 284, ../../../../general/res/sass/controls/_controls.scss */ + /* line 287, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar .progress-amt { right: auto; } - /* line 289, ../../../../general/res/sass/controls/_controls.scss */ + /* line 292, ../../../../general/res/sass/controls/_controls.scss */ .l-progress-bar.indeterminate .progress-amt { width: 100% !important; } -/* line 295, ../../../../general/res/sass/controls/_controls.scss */ +/* line 298, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar { -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -2435,7 +2449,7 @@ label.checkbox.custom { -webkit-box-shadow: inset rgba(0, 0, 0, 0.3) 0 1px 4px; box-shadow: inset rgba(0, 0, 0, 0.3) 0 1px 4px; background: rgba(0, 0, 0, 0.1); } - /* line 299, ../../../../general/res/sass/controls/_controls.scss */ + /* line 302, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt { -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -2462,10 +2476,10 @@ label.checkbox.custom { -o-transition-delay: 0; -webkit-transition-delay: 0; transition-delay: 0; } - /* line 304, ../../../../general/res/sass/controls/_controls.scss */ + /* line 307, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt:before { background-color: #0a0; } - /* line 307, ../../../../general/res/sass/controls/_controls.scss */ + /* line 310, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar .progress-amt:after { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjMwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjI1Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; @@ -2473,7 +2487,7 @@ label.checkbox.custom { background-image: -moz-linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); background-image: -webkit-linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); background-image: linear-gradient(rgba(0, 0, 0, 0) 5%, rgba(255, 255, 255, 0.25) 30%, rgba(0, 0, 0, 0) 100%); } - /* line 316, ../../../../general/res/sass/controls/_controls.scss */ + /* line 319, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar:not(.indeterminate) .progress-amt:before { -moz-animation: progress 0.4s linear infinite; -webkit-animation: progress 0.4s linear infinite; @@ -2486,7 +2500,7 @@ label.checkbox.custom { background-position: 0 center; background-repeat: repeat-x; background-size: 20px 40%; } - /* line 324, ../../../../general/res/sass/controls/_controls.scss */ + /* line 327, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar.indeterminate .progress-amt:before { -moz-animation: progress 0.6s linear infinite; -webkit-animation: progress 0.6s linear infinite; @@ -2498,12 +2512,12 @@ label.checkbox.custom { background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, rgba(0, 0, 0, 0) 25%, rgba(0, 0, 0, 0) 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, rgba(0, 0, 0, 0) 75%, rgba(0, 0, 0, 0) 100%); background-repeat: repeat; background-size: 20px 20px; } - /* line 329, ../../../../general/res/sass/controls/_controls.scss */ + /* line 332, ../../../../general/res/sass/controls/_controls.scss */ .s-progress-bar.indeterminate .progress-amt:after { display: none; } /******************************************************** SLIDERS */ -/* line 337, ../../../../general/res/sass/controls/_controls.scss */ +/* line 340, ../../../../general/res/sass/controls/_controls.scss */ .slider .slot { width: auto; position: absolute; @@ -2511,7 +2525,7 @@ label.checkbox.custom { right: 0; bottom: 0; left: 0; } -/* line 345, ../../../../general/res/sass/controls/_controls.scss */ +/* line 348, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2537,10 +2551,10 @@ label.checkbox.custom { auto: 0; bottom: auto; left: auto; } - /* line 348, ../../../../general/res/sass/controls/_controls.scss */ + /* line 351, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob:hover { background-color: rgba(0, 153, 204, 0.7); } -/* line 359, ../../../../general/res/sass/controls/_controls.scss */ +/* line 362, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob-l { -moz-border-radius-topleft: 10px; -webkit-border-top-left-radius: 10px; @@ -2549,7 +2563,7 @@ label.checkbox.custom { -webkit-border-bottom-left-radius: 10px; border-bottom-left-radius: 10px; cursor: w-resize; } -/* line 363, ../../../../general/res/sass/controls/_controls.scss */ +/* line 366, ../../../../general/res/sass/controls/_controls.scss */ .slider .knob-r { -moz-border-radius-topright: 10px; -webkit-border-top-right-radius: 10px; @@ -2558,7 +2572,7 @@ label.checkbox.custom { -webkit-border-bottom-right-radius: 10px; border-bottom-right-radius: 10px; cursor: e-resize; } -/* line 367, ../../../../general/res/sass/controls/_controls.scss */ +/* line 370, ../../../../general/res/sass/controls/_controls.scss */ .slider .range { -moz-transition-property: opacity, background-color, border-color, color; -o-transition-property: opacity, background-color, border-color, color; @@ -2585,12 +2599,12 @@ label.checkbox.custom { left: auto; height: auto; width: auto; } - /* line 378, ../../../../general/res/sass/controls/_controls.scss */ + /* line 381, ../../../../general/res/sass/controls/_controls.scss */ .slider .range:hover { background-color: rgba(0, 153, 204, 0.4); } /******************************************************** DATETIME PICKER */ -/* line 385, ../../../../general/res/sass/controls/_controls.scss */ +/* line 388, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker { -moz-user-select: -moz-none; -ms-user-select: none; @@ -2599,65 +2613,65 @@ label.checkbox.custom { font-size: 0.8rem; padding: 10px !important; width: 230px; } - /* line 391, ../../../../general/res/sass/controls/_controls.scss */ + /* line 394, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager { height: 15px; margin-bottom: 5px; position: relative; } - /* line 400, ../../../../general/res/sass/controls/_controls.scss */ + /* line 403, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager { width: 20px; } - /* line 403, ../../../../general/res/sass/controls/_controls.scss */ + /* line 406, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.prev { right: auto; } - /* line 405, ../../../../general/res/sass/controls/_controls.scss */ + /* line 408, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.prev:before { content: "\3c"; } - /* line 409, ../../../../general/res/sass/controls/_controls.scss */ + /* line 412, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.next { left: auto; text-align: right; } - /* line 412, ../../../../general/res/sass/controls/_controls.scss */ + /* line 415, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .pager.next:before { content: "\3e"; } - /* line 417, ../../../../general/res/sass/controls/_controls.scss */ + /* line 420, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-month-year-pager .val { text-align: center; left: 25px; right: 25px; } - /* line 423, ../../../../general/res/sass/controls/_controls.scss */ + /* line 426, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-calendar, .l-datetime-picker .l-time-selects { border-top: 1px solid rgba(102, 102, 102, 0.2); } - /* line 427, ../../../../general/res/sass/controls/_controls.scss */ + /* line 430, ../../../../general/res/sass/controls/_controls.scss */ .l-datetime-picker .l-time-selects { line-height: 22px; } /******************************************************** CALENDAR */ -/* line 435, ../../../../general/res/sass/controls/_controls.scss */ +/* line 438, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row { display: -webkit-flex; display: flex; -webkit-flex-flow: row nowrap; flex-flow: row nowrap; margin-top: 1px; } - /* line 439, ../../../../general/res/sass/controls/_controls.scss */ + /* line 442, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row:first-child { margin-top: 0; } - /* line 442, ../../../../general/res/sass/controls/_controls.scss */ + /* line 445, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row li { -webkit-flex: 1 0; flex: 1 0; margin-left: 1px; padding: 5px; text-align: center; } - /* line 447, ../../../../general/res/sass/controls/_controls.scss */ + /* line 450, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row li:first-child { margin-left: 0; } - /* line 451, ../../../../general/res/sass/controls/_controls.scss */ + /* line 454, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-header li { color: #999999; } - /* line 454, ../../../../general/res/sass/controls/_controls.scss */ + /* line 457, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li { -moz-transition-property: background-color; -o-transition-property: background-color; @@ -2676,31 +2690,31 @@ label.checkbox.custom { -webkit-transition-delay: 0; transition-delay: 0; cursor: pointer; } - /* line 457, ../../../../general/res/sass/controls/_controls.scss */ + /* line 460, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.in-month { background-color: #f2f2f2; } - /* line 460, ../../../../general/res/sass/controls/_controls.scss */ + /* line 463, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li .sub { color: #999999; font-size: 0.8em; } - /* line 464, ../../../../general/res/sass/controls/_controls.scss */ + /* line 467, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.selected { background: #1ac6ff; color: #fcfcfc; } - /* line 467, ../../../../general/res/sass/controls/_controls.scss */ + /* line 470, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li.selected .sub { color: inherit; } - /* line 471, ../../../../general/res/sass/controls/_controls.scss */ + /* line 474, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li:hover { background-color: #0099cc; color: #fff; } - /* line 474, ../../../../general/res/sass/controls/_controls.scss */ + /* line 477, ../../../../general/res/sass/controls/_controls.scss */ .l-calendar ul.l-cal-row.l-body li:hover .sub { color: inherit; } /******************************************************** BROWSER ELEMENTS */ @media only screen and (min-device-width: 1025px) and (-webkit-min-device-pixel-ratio: 1) { - /* line 485, ../../../../general/res/sass/controls/_controls.scss */ + /* line 488, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar { -moz-border-radius: 2px; -webkit-border-radius: 2px; @@ -2715,7 +2729,7 @@ label.checkbox.custom { height: 10px; width: 10px; } - /* line 494, ../../../../general/res/sass/controls/_controls.scss */ + /* line 497, ../../../../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%; @@ -2729,7 +2743,7 @@ label.checkbox.custom { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } - /* line 501, ../../../../general/res/sass/controls/_controls.scss */ + /* line 504, ../../../../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%; @@ -2738,7 +2752,7 @@ label.checkbox.custom { background-image: -webkit-linear-gradient(#00ace6, #0099cc 20px); background-image: linear-gradient(#00ace6, #0099cc 20px); } - /* line 506, ../../../../general/res/sass/controls/_controls.scss */ + /* line 509, ../../../../general/res/sass/controls/_controls.scss */ ::-webkit-scrollbar-corner { background: rgba(0, 0, 0, 0.1); } } /***************************************************************************** @@ -4196,10 +4210,10 @@ textarea { .field-hints, .fields { } - - + + .field-hints { - + } */ } /* line 30, ../../../../general/res/sass/forms/_datetime.scss */ @@ -6292,18 +6306,18 @@ mct-representation.s-status-pending .t-object-label .t-item-icon:before { padding: 30%; width: 0; height: 0; } -/* line 55, ../../../../general/res/sass/_object-label.scss */ +/* line 51, ../../../../general/res/sass/_object-label.scss */ mct-representation.s-status-pending .t-object-label .t-item-icon .t-item-icon-glyph { display: none; } -/* line 59, ../../../../general/res/sass/_object-label.scss */ +/* line 55, ../../../../general/res/sass/_object-label.scss */ mct-representation.s-status-pending .t-object-label .t-title-label { font-style: italic; opacity: 0.6; } -/* line 66, ../../../../general/res/sass/_object-label.scss */ +/* line 62, ../../../../general/res/sass/_object-label.scss */ .selected mct-representation.s-status-pending .t-object-label .t-item-icon:before { - border-color: rgba(252, 252, 252, 0.25); - border-top-color: #fcfcfc; } + border-color: rgba(252, 252, 252, 0.25) !important; + border-top-color: #fcfcfc !important; } /***************************************************************************** * Open MCT Web, Copyright (c) 2014-2015, United States Government @@ -7209,7 +7223,7 @@ table { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } - /* line 274, ../../../../general/res/sass/plots/_plots-main.scss */ + /* line 276, ../../../../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 { @@ -7220,7 +7234,7 @@ table { width: 20%; margin-left: -10%; text-align: center; } - /* line 284, ../../../../general/res/sass/plots/_plots-main.scss */ + /* line 286, ../../../../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 { @@ -7230,18 +7244,18 @@ table { margin-bottom: -0.5em; text-align: right; } -/* line 295, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 297, ../../../../general/res/sass/plots/_plots-main.scss */ .gl-plot-tick.gl-plot-x-tick-label { top: 5px; } -/* line 298, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 300, ../../../../general/res/sass/plots/_plots-main.scss */ .gl-plot-tick.gl-plot-y-tick-label { right: 5px; left: 5px; } -/* line 305, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 307, ../../../../general/res/sass/plots/_plots-main.scss */ .tick-label.tick-label-x { top: 0; } -/* line 308, ../../../../general/res/sass/plots/_plots-main.scss */ +/* line 310, ../../../../general/res/sass/plots/_plots-main.scss */ .tick-label.tick-label-y { right: 0; left: 0; } diff --git a/platform/forms/res/templates/controls/radio.html b/platform/forms/res/templates/controls/radio.html new file mode 100644 index 0000000000..efc1443b76 --- /dev/null +++ b/platform/forms/res/templates/controls/radio.html @@ -0,0 +1,28 @@ + + From 8bb5a47b88734bf5e7213e33b768a0123d979630 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 2 Feb 2016 09:50:30 -0800 Subject: [PATCH 018/138] CSS updated to use new e619 character open #638 --- platform/commonUI/general/res/sass/controls/_controls.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/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index 7148a5a054..415b612155 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -163,7 +163,7 @@ label.radio.custom { } label.checkbox.custom input:checked ~ em:before { content: "\32"; } -label.radio.custom input:checked ~ em:before { content: "\e607"; } +label.radio.custom input:checked ~ em:before { content: "\e619"; } .input-labeled { margin-left: $interiorMargin; diff --git a/platform/commonUI/themes/espresso/res/css/theme-espresso.css b/platform/commonUI/themes/espresso/res/css/theme-espresso.css index 0e5d922945..b936d7992e 100644 --- a/platform/commonUI/themes/espresso/res/css/theme-espresso.css +++ b/platform/commonUI/themes/espresso/res/css/theme-espresso.css @@ -2360,7 +2360,7 @@ label.checkbox.custom input:checked ~ em:before { /* line 166, ../../../../general/res/sass/controls/_controls.scss */ label.radio.custom input:checked ~ em:before { - content: "\e607"; } + content: "\e619"; } /* line 168, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled { diff --git a/platform/commonUI/themes/snow/res/css/theme-snow.css b/platform/commonUI/themes/snow/res/css/theme-snow.css index 0d475a1473..d9f35d4afe 100644 --- a/platform/commonUI/themes/snow/res/css/theme-snow.css +++ b/platform/commonUI/themes/snow/res/css/theme-snow.css @@ -2285,7 +2285,7 @@ label.checkbox.custom input:checked ~ em:before { /* line 166, ../../../../general/res/sass/controls/_controls.scss */ label.radio.custom input:checked ~ em:before { - content: "\e607"; } + content: "\e619"; } /* line 168, ../../../../general/res/sass/controls/_controls.scss */ .input-labeled { From e3a0cae5fdd4a830a2198bbf04bafb9a1570b566 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 2 Feb 2016 17:11:39 -0800 Subject: [PATCH 019/138] [Plot] #638 Fleshing out form structures --- .../res/templates/plot-options-browse.html | 4 +- .../layout/src/PlotOptionsController.js | 123 ++++++++++++++++-- 2 files changed, 114 insertions(+), 13 deletions(-) diff --git a/platform/features/layout/res/templates/plot-options-browse.html b/platform/features/layout/res/templates/plot-options-browse.html index 693ad633e4..a02f7926af 100644 --- a/platform/features/layout/res/templates/plot-options-browse.html +++ b/platform/features/layout/res/templates/plot-options-browse.html @@ -30,8 +30,8 @@ Date: Tue, 2 Feb 2016 10:30:40 -0800 Subject: [PATCH 020/138] [Frontend] Fixes to scrolling and layout in Inspector open #638 In progress; --- .../browse/res/templates/browse/object-properties.html | 3 +-- platform/commonUI/general/res/sass/_inspector.scss | 2 +- .../commonUI/general/res/templates/object-inspector.html | 6 ++++-- .../commonUI/themes/espresso/res/css/theme-espresso.css | 2 +- platform/commonUI/themes/snow/res/css/theme-snow.css | 2 +- .../features/layout/res/templates/plot-options-browse.html | 6 +++--- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/platform/commonUI/browse/res/templates/browse/object-properties.html b/platform/commonUI/browse/res/templates/browse/object-properties.html index 149da6b874..8a837160c6 100644 --- a/platform/commonUI/browse/res/templates/browse/object-properties.html +++ b/platform/commonUI/browse/res/templates/browse/object-properties.html @@ -20,8 +20,7 @@ at runtime from the About dialog for additional information. -->
-
Inspection
-