Compare commits
	
		
			75 Commits
		
	
	
		
			code-cover
			...
			maelstrom2
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 25ec6b6943 | ||
|   | b628814f78 | ||
|   | a15ad6fc4c | ||
|   | 767aa78b06 | ||
|   | 43b7efa775 | ||
|   | ac18548b42 | ||
|   | ed3c226909 | ||
|   | 261e8e8759 | ||
|   | cb6a8629d3 | ||
|   | 9eead672d8 | ||
|   | 5da6b2c969 | ||
|   | 4780cde3b5 | ||
|   | 1960215fc1 | ||
|   | d06e3e12fc | ||
|   | 365998ad4f | ||
|   | 15cfa79106 | ||
|   | 6857e15a83 | ||
|   | f1294f3e73 | ||
|   | d4a1f6eb35 | ||
|   | 4c7fb0d3eb | ||
|   | b9017329cd | ||
|   | b08834a53b | ||
|   | eb7330522e | ||
|   | 0c1cdf1d8e | ||
|   | 8dedf52910 | ||
|   | 0420eac159 | ||
|   | 715e3419a0 | ||
|   | e6ab3ccf85 | ||
|   | edf748d4a1 | ||
|   | 84ba444eb5 | ||
|   | 6d9f3f1e3e | ||
|   | ae32b902a7 | ||
|   | 660bf805d0 | ||
|   | 2f58ea9c1f | ||
|   | ba09a17b29 | ||
|   | 5063fa1fb1 | ||
|   | 543b4dab4c | ||
|   | ef310a8777 | ||
|   | 7d07a9e21f | ||
|   | ada18faa98 | ||
|   | 95d40aaeed | ||
|   | b59f5c70dc | ||
|   | 94e7351e22 | ||
|   | 50ee7353b1 | ||
|   | df524c4f48 | ||
|   | aa59692585 | ||
|   | 0bf82956ab | ||
|   | f102158ba0 | ||
|   | 9a51bb71b9 | ||
|   | 12b9aa75a3 | ||
|   | 5bedfc2efd | ||
|   | 212d7c3eae | ||
|   | d7a3510f34 | ||
|   | 9cc44dcc4e | ||
|   | f42a5e19f0 | ||
|   | 102cfc33c4 | ||
|   | 957c7102fe | ||
|   | 0519824109 | ||
|   | 4380f88a08 | ||
|   | 20d5db6e44 | ||
|   | 5978b8e19d | ||
|   | a0b71f92b8 | ||
|   | 7c3f7ff384 | ||
|   | 6f2a567299 | ||
|   | 746badd065 | ||
|   | 7d99877eb9 | ||
|   | 3eac91a6d9 | ||
|   | 4d426580ae | ||
|   | 9270f02ca4 | ||
|   | 815b1449f4 | ||
|   | 0874ada4d2 | ||
|   | 03812437d3 | ||
|   | 2b8272cf05 | ||
|   | 71a2f27e0c | ||
|   | 5460ca2009 | 
							
								
								
									
										487
									
								
								configuration_json/MaelstromDictionary.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										487
									
								
								configuration_json/MaelstromDictionary.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,487 @@ | ||||
| export default { | ||||
|     'telemetry': { | ||||
|         type: 'folder', | ||||
|         name: 'Maelstrom Telemetry', | ||||
|         type: 'folder', | ||||
|         location: 'ROOT', | ||||
|         composition: [ | ||||
|             { | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'velocity' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'acceleration-ms-2' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'acceleration-g' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'distance' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'distance-m' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'roll' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'pitch' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'yaw' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'event-index' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'event-time-str' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'ring' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'next-los' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'evr-1' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'evr-2' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'evr-3' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'evr-4' | ||||
|             },{ | ||||
|                 namespace: 'maelstrom', | ||||
|                 key: 'evr-5' | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     'velocity': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Velocity', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Velocity", | ||||
|                 "units": "ms", | ||||
|                 "format": "float", | ||||
|                 "source": "velocity", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'acceleration-ms-2': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Acceleration (ms^-2)', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Acceleration", | ||||
|                 "units": "ms^-2", | ||||
|                 "format": "float", | ||||
|                 "source": "acceleration-ms-2", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'acceleration-g': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Acceleration (G)', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Acceleration", | ||||
|                 "units": "ms^-2", | ||||
|                 "format": "float", | ||||
|                 "source": "acceleration-g", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'distance': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Distance (km)', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Distance", | ||||
|                 "units": "km", | ||||
|                 "format": "float", | ||||
|                 "source": "distance-km", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'distance-m': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Distance (m)', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Distance Meters", | ||||
|                 "units": "m", | ||||
|                 "format": "float", | ||||
|                 "source": "distance-m", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|             ]} | ||||
|     }, | ||||
|     'roll': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Roll', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Roll", | ||||
|                 "units": "degrees", | ||||
|                 "format": "float", | ||||
|                 "source": "roll", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'pitch': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Pitch', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Pitch", | ||||
|                 "units": "degrees", | ||||
|                 "format": "float", | ||||
|                 "source": "pitch", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'yaw': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Yaw', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Yaw", | ||||
|                 "units": "degrees", | ||||
|                 "format": "float", | ||||
|                 "source": "yaw", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'event-index': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Event Index', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Event Index", | ||||
|                 "units": "i", | ||||
|                 "format": "float", | ||||
|                 "source": "event-index", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'event-time-str': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Event Time Str', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Event Time Str", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "event-time-str", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'ring': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Ring', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Ring", | ||||
|                 "units": "", | ||||
|                 "format": "int", | ||||
|                 "source": "ring", | ||||
|                 "hints": { | ||||
|                     "range": 24 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'next-los': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'Next LOS', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "Next LOS", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "next-los", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'evr-1': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'EVR 1', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "EVR-1", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "evr-1", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'evr-2': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'EVR 2', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "EVR-2", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "evr-2", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'evr-3': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'EVR 3', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "EVR-3", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "evr-3", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'evr-4': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'EVR 4', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "EVR-4", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "evr-4", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     }, | ||||
|     'evr-5': { | ||||
|         type: 'maelstrom-telemetry', | ||||
|         location: 'maelstrom:telemetry', | ||||
|         name: 'EVR 5', | ||||
|         telemetry: { | ||||
|             values: [{ | ||||
|                 "key": "value", | ||||
|                 "name": "EVR-5", | ||||
|                 "units": "", | ||||
|                 "format": "string", | ||||
|                 "source": "evr-5", | ||||
|                 "hints": { | ||||
|                     "range": 1 | ||||
|                 } | ||||
|             }, { | ||||
|                 "key": "utc", | ||||
|                 "source": "event_time", | ||||
|                 "name": "Time", | ||||
|                 "format": "utc-diy", | ||||
|                 "hints": { | ||||
|                     "domain": 1 | ||||
|                 } | ||||
|             } | ||||
|         ]} | ||||
|     } | ||||
| } | ||||
							
								
								
									
										1
									
								
								configuration_json/maelstrom2-final-v1-my-items.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								configuration_json/maelstrom2-final-v1-my-items.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -45,6 +45,8 @@ | ||||
|         ].forEach( | ||||
|             openmct.legacyRegistry.enable.bind(openmct.legacyRegistry) | ||||
|         ); | ||||
|         openmct.install(openmct.plugins.Bignumbers()); | ||||
|         openmct.install(openmct.plugins.Gauge()); | ||||
|         openmct.install(openmct.plugins.MyItems()); | ||||
|         openmct.install(openmct.plugins.LocalStorage()); | ||||
|         openmct.install(openmct.plugins.Generator()); | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|  * | ||||
|  * Open MCT 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 | ||||
|  * You may obtain a copy of the License atw | ||||
|  * http://www.apache.org/licenses/LICENSE-2.0. | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|   | ||||
							
								
								
									
										71
									
								
								src/plugins/bignumbers/bignumbers.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/plugins/bignumbers/bignumbers.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| /***************************************************************************** | ||||
|  * Open MCT, Copyright (c) 2014-2018, United States Government | ||||
|  * as represented by the Administrator of the National Aeronautics and Space | ||||
|  * Administration. All rights reserved. | ||||
|  * | ||||
|  * Open MCT 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 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([ | ||||
|     './components/bignumbers.vue', | ||||
|     'vue' | ||||
| ], function ( | ||||
|     BignumbersComponent, | ||||
|     Vue | ||||
| ) { | ||||
|     function Bignumbers(openmct) { | ||||
|         return { | ||||
|             key: 'bignumbers', | ||||
|             name: 'Bignumbers', | ||||
|             cssClass: 'icon-telemetry', | ||||
|             canView: function (domainObject) { | ||||
|                 return domainObject.type === 'bignumbers'; | ||||
|             }, | ||||
|             canEdit: function (domainObject) { | ||||
|                 return domainObject.type === 'bignumbers'; | ||||
|             }, | ||||
|             view: function (domainObject) { | ||||
|                 let component; | ||||
|  | ||||
|                 return { | ||||
|                     show: function (element) { | ||||
|                         component =  new Vue({ | ||||
|                             components: { | ||||
|                                 BignumbersComponent: BignumbersComponent.default | ||||
|                             }, | ||||
|                             provide: { | ||||
|                                 openmct, | ||||
|                                 domainObject, | ||||
|                                 composition: openmct.composition.get(domainObject) | ||||
|                             }, | ||||
|                             el: element, | ||||
|                             template: '<bignumbers-component></bignumbers-component>' | ||||
|                         }); | ||||
|                     }, | ||||
|                     destroy: function (element) { | ||||
|                         component.$destroy(); | ||||
|                         component = undefined; | ||||
|                     } | ||||
|                 }; | ||||
|             }, | ||||
|             priority: function () { | ||||
|                 return 1; | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|     return Bignumbers; | ||||
| }); | ||||
							
								
								
									
										131
									
								
								src/plugins/bignumbers/components/bignumbers.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								src/plugins/bignumbers/components/bignumbers.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,131 @@ | ||||
| <template> | ||||
|     <div class="c-bignumbers"> | ||||
|         <svg class="c-bignumbers__int" viewBox="0 0 52 32"> | ||||
|             <text textLength=100% lengthAdjust=spacingAndGlyphs x="0" y="32">{{ this.curValInt }}</text> | ||||
|         </svg> | ||||
|         <svg class="c-bignumbers__dec" viewBox="0 0 40 20"> | ||||
|             <text textLength=100% lengthAdjust=spacing x="0" y="20">.{{ this.curValDec }}</text> | ||||
|         </svg> | ||||
|         <svg class="c-bignumbers__units" viewBox="0 0 45 11"> | ||||
|             <text textLength=100% lengthAdjust=spacingAndGlyphs x="0" y="11">{{ this.units }}</text> | ||||
|         </svg> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <style lang="scss"> | ||||
|     @import "~styles/sass-base"; | ||||
|  | ||||
|     .c-bignumbers { | ||||
|         $w1: 53%; | ||||
|  | ||||
|         @include abs(); | ||||
|         bottom: auto; | ||||
|         padding-bottom: 33%; | ||||
|  | ||||
|         &__int, | ||||
|         &__dec, | ||||
|         &__units { | ||||
|             position: absolute; | ||||
|             fill: #fff; | ||||
|         } | ||||
|  | ||||
|         &__int, | ||||
|         &__dec { | ||||
|             font-family: $heroFont; | ||||
|         } | ||||
|  | ||||
|         &__int { | ||||
|             font-size: 51px; | ||||
|             opacity: 0.8; | ||||
|             width: $w1; | ||||
|         } | ||||
|  | ||||
|         &__dec { | ||||
|             left: $w1; | ||||
|             font-size: 32px; | ||||
|             opacity: 0.4; | ||||
|             width: 100% - $w1; | ||||
|         } | ||||
|  | ||||
|         &__units { | ||||
|             font-size: 9px; | ||||
|             font-family: $headerFont; | ||||
|             left: $w1; | ||||
|             bottom: 0; | ||||
|             opacity: 0.2; | ||||
|             width: 99% - $w1; // Font has different char spacing, so use reduced width | ||||
|         } | ||||
|     } | ||||
|  | ||||
| </style> | ||||
|  | ||||
| <script> | ||||
|     export default { | ||||
|         name: "bignumbers", | ||||
|         inject: ['openmct', 'domainObject', 'composition'], | ||||
|         data: function () { | ||||
|             let config = this.domainObject.configuration, | ||||
|                 units = config.units; | ||||
|             console.log(config); | ||||
|             return { | ||||
|                 curValInt: 0, | ||||
|                 curValDec: 0, | ||||
|                 units: units | ||||
|  | ||||
|             } | ||||
|         }, | ||||
|         methods: { | ||||
|             getInt: function(val, digits) { | ||||
|                 // Extract integer portion of val and zero-pad it if its length < digits | ||||
|                 return this.zeroPad(Math.floor(val), digits); | ||||
|             }, | ||||
|             getDec: function(val, digits) { | ||||
|                 // Extract decimal portion of val to the specified number of digits | ||||
|                 return Number.parseFloat(val).toFixed(digits).split('.')[1]; | ||||
|             }, | ||||
|             zeroPad: function(val, length) { | ||||
|                 // Zero pads an integer and returns it as a string | ||||
|                 let s = Math.abs(val).toString(); | ||||
|                 if (s.length < length) { | ||||
|                     for (let i = 0; i <= (length - s.length); i++) { | ||||
|                         s = '0' + s; | ||||
|                     } | ||||
|                 } | ||||
|                 if (val < 0) { | ||||
|                     s = '-' + s; | ||||
|                 } | ||||
|                 return s; | ||||
|             }, | ||||
|             updateValue(datum) { | ||||
|                 let cv = this.formats[this.valueKey].format(datum); | ||||
|                 this.curValInt = this.getInt(cv, 3); | ||||
|                 this.curValDec = this.getDec(cv, 3); | ||||
|             }, | ||||
|             subscribe(domainObject) { | ||||
|                 this.metadata = this.openmct.telemetry.getMetadata(domainObject); | ||||
|                 this.formats = this.openmct.telemetry.getFormatMap(this.metadata); | ||||
|  | ||||
|                 this.valueKey = this | ||||
|                     .metadata | ||||
|                     .valuesForHints(['range'])[0].key; | ||||
|                 this.unsubscribe = this.openmct | ||||
|                     .telemetry | ||||
|                     .subscribe(domainObject, this.updateValue.bind(this), {}); | ||||
|                 this.openmct | ||||
|                     .telemetry | ||||
|                     .request(domainObject, {strategy: 'latest'}) | ||||
|                     .then((values) => values.forEach(this.updateValue)); | ||||
|             } | ||||
|         }, | ||||
|         computed: { | ||||
|         }, | ||||
|         mounted() { | ||||
|             this.composition.on('add', this.subscribe); | ||||
|             this.composition.load(); | ||||
|         }, | ||||
|         destroyed() { | ||||
|             this.composition.off('add', this.subscribe); | ||||
|             this.unsubscribe(); | ||||
|         } | ||||
|     } | ||||
| </script> | ||||
							
								
								
									
										58
									
								
								src/plugins/bignumbers/plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/plugins/bignumbers/plugin.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| /***************************************************************************** | ||||
|  * Open MCT, Copyright (c) 2014-2018, United States Government | ||||
|  * as represented by the Administrator of the National Aeronautics and Space | ||||
|  * Administration. All rights reserved. | ||||
|  * | ||||
|  * Open MCT 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 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([ | ||||
|     './bignumbers' | ||||
| ], function ( | ||||
|     Bignumbers | ||||
| ) { | ||||
|     return function plugin() { | ||||
|         return function install(openmct) { | ||||
|             openmct.objectViews.addProvider(new Bignumbers(openmct)); | ||||
|  | ||||
|             openmct.types.addType('bignumbers', { | ||||
|                 name: "Big Numbers", | ||||
|                 creatable: true, | ||||
|                 description: "Display the value of a telemetry element with units in a stylized numeric view.", | ||||
|                 cssClass: 'icon-telemetry', | ||||
|                 initialize(domainObject) { | ||||
|                     domainObject.composition = []; | ||||
|                     domainObject.configuration = { | ||||
|                         units: '' | ||||
|                     }; | ||||
|                 }, | ||||
|                 form: [ | ||||
|                     { | ||||
|                         name: "Units", | ||||
|                         control: "textfield", | ||||
|                         cssClass: "", | ||||
|                         key: "units", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "units" | ||||
|                         ] | ||||
|                     } | ||||
|                 ] | ||||
|             }); | ||||
|         }; | ||||
|     }; | ||||
| }); | ||||
							
								
								
									
										202
									
								
								src/plugins/gauge/components/gaugeRadial.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								src/plugins/gauge/components/gaugeRadial.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,202 @@ | ||||
| <template> | ||||
|     <div class="c-gauge"> | ||||
|         <div class="c-gauge__wrapper"> | ||||
|             <svg class="c-gauge__range" viewBox="0 0 512 512"> | ||||
|                 <text class="c-gauge__curval" transform="translate(256 310)" text-anchor="middle">{{ this.curVal }}</text> | ||||
|                 <text font-size="35" transform="translate(105 455) rotate(-45)" | ||||
|                       v-if="displayMinMax">{{ this.rangeLow }}</text> | ||||
|                 <text font-size="35" transform="translate(407 455) rotate(45)" text-anchor="end" | ||||
|                       v-if="displayMinMax">{{ this.rangeHigh }}</text> | ||||
|             </svg> | ||||
|  | ||||
|             <div class="c-dial"> | ||||
|                 <svg class="c-dial__bg" viewBox="0 0 512 512"> | ||||
|                     <g> | ||||
|                         <path d="M256,0C114.6,0,0,114.6,0,256S114.6,512,256,512,512,397.4,512,256,397.4,0,256,0Zm0,412A156,156,0,1,1,412,256,155.9,155.9,0,0,1,256,412Z"/> | ||||
|                     </g> | ||||
|                 </svg> | ||||
|  | ||||
|                 <svg class="c-dial__limit" viewBox="0 0 512 512" | ||||
|                      v-if="degLimit < 270" | ||||
|                      :class="{ | ||||
|                         'c-limit-clip--90': this.degLimit > 90, | ||||
|                         'c-limit-clip--180': this.degLimit >= 180 | ||||
|                      }"> | ||||
|                     <path d="M100,256A156,156,0,1,1,366.3,366.3L437,437a255.2,255.2,0,0,0,75-181C512,114.6,397.4,0,256,0S0,114.6,0,256A255.2,255.2,0,0,0,75,437l70.7-70.7A155.5,155.5,0,0,1,100,256Z" | ||||
|                           :style="`transform: rotate(${this.degLimit}deg)`"/> | ||||
|                 </svg> | ||||
|  | ||||
|                 <svg class="c-dial__value" viewBox="0 0 512 512" | ||||
|                      v-if="this.degValue > 0" | ||||
|                      :class="{ | ||||
|                         'c-dial-clip--90': this.degValue < 90, | ||||
|                         'c-dial-clip--180': this.degValue >= 90 && this.degValue < 180 | ||||
|                      }"> | ||||
|                     <path d="M256,31A224.3,224.3,0,0,0,98.3,95.5l48.4,49.2a156,156,0,1,1-1,221.6L96.9,415.1A224.4,224.4,0,0,0,256,481c124.3,0,225-100.7,225-225S380.3,31,256,31Z" | ||||
|                           :style="`transform: rotate(${this.degValue}deg)`"/> | ||||
|                 </svg> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </template> | ||||
|  | ||||
| <style lang="scss"> | ||||
|     @import "~styles/sass-base"; | ||||
|  | ||||
|     .c-gauge { | ||||
|         @include abs(); | ||||
|         overflow: hidden; | ||||
|  | ||||
|         &__wrapper { | ||||
|             position: absolute; | ||||
|             width: 100%; | ||||
|             padding-bottom: 100%; | ||||
|             overflow: hidden; | ||||
|         } | ||||
|  | ||||
|         &__value { | ||||
|             position: absolute; | ||||
|             top: 50%; left: 50%; | ||||
|             transform: translate(-50%, -50%); | ||||
|             font-size: 3vw; | ||||
|         } | ||||
|  | ||||
|         &__range { | ||||
|             $o: 21%; | ||||
|             position: absolute; | ||||
|             fill: rgba(#fff, 0.8); | ||||
|         } | ||||
|  | ||||
|         &__curval { | ||||
|             font-family: $heroFont; | ||||
|             font-size: 170px; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     .c-dial { | ||||
|         // Dial elements | ||||
|         @include abs(); | ||||
|         clip-path: polygon(0 0, 100% 0, 100% 100%, 50% 50%, 0 100%); | ||||
|  | ||||
|         svg, | ||||
|         &__ticks, | ||||
|         &__bg, | ||||
|         &__limit, | ||||
|         &__value { | ||||
|             @include abs(); | ||||
|         } | ||||
|  | ||||
|         svg { | ||||
|             path { | ||||
|                 transform-origin: center; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         &__limit { | ||||
|             &.c-limit-clip--90 { | ||||
|                 clip-path: polygon(0 0, 100% 0, 100% 100%); | ||||
|             } | ||||
|  | ||||
|             &.c-limit-clip--180 { | ||||
|                 clip-path: polygon(100% 0, 100% 100%, 0 100%); | ||||
|             } | ||||
|  | ||||
|             path { | ||||
|                 fill: rgba(orange, 0.4); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         &__value { | ||||
|             &.c-dial-clip--90 { | ||||
|                 clip-path: polygon(0 0, 50% 50%, 0 100%); | ||||
|             } | ||||
|  | ||||
|             &.c-dial-clip--180 { | ||||
|                 clip-path: polygon(0 0, 100% 0, 0 100%); | ||||
|             } | ||||
|  | ||||
|             path { | ||||
|                 fill: rgba(#fff, 0.8); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         &__bg { | ||||
|             g { | ||||
|                 fill: rgba(#fff, 0.1); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| </style> | ||||
|  | ||||
| <script> | ||||
|     export default { | ||||
|         name: "gaugeRadial", | ||||
|         inject: ['openmct', 'domainObject', 'composition'], | ||||
|         data: function () { | ||||
|             let config = this.domainObject.configuration, | ||||
|                 rangeLow = config.min, | ||||
|                 rangeHigh = config.max, | ||||
|                 displayMinMax = config.displayMinMax, | ||||
|                 limit = config.limit, | ||||
|                 decimals = config.decimals; | ||||
|  | ||||
|             return { | ||||
|                 rangeLow, | ||||
|                 rangeHigh, | ||||
|                 displayMinMax: displayMinMax.indexOf('Yes') !== -1, | ||||
|                 limit1: limit, | ||||
|                 decimals, | ||||
|                 curVal: 0 | ||||
|             } | ||||
|         }, | ||||
|         methods: { | ||||
|             round: function(val, decimals) { | ||||
|                 let precision = Math.pow(10, decimals); | ||||
|                 return Math.round(val * precision)/precision; | ||||
|             }, | ||||
|             valToPercent: function(vValue) { | ||||
|                 // Don't let the current value exceed the high range, or the dial won't display right | ||||
|                 if (vValue >= this.rangeHigh) { return 100; } | ||||
|                 return ((vValue - this.rangeLow) / (this.rangeHigh - this.rangeLow)) * 100; | ||||
|             }, | ||||
|             percentToDegrees: function(vPercent) { | ||||
|                 return this.round((vPercent/100)*270, 2); | ||||
|             }, | ||||
|             updateValue(datum) { | ||||
|                 this.curVal = this.round(this.formats[this.valueKey].format(datum), this.decimals); | ||||
|             }, | ||||
|             subscribe(domainObject) { | ||||
|                 this.metadata = this.openmct.telemetry.getMetadata(domainObject); | ||||
|                 this.formats = this.openmct.telemetry.getFormatMap(this.metadata); | ||||
|  | ||||
|                 this.valueKey = this | ||||
|                     .metadata | ||||
|                     .valuesForHints(['range'])[0].key; | ||||
|                 this.unsubscribe = this.openmct | ||||
|                     .telemetry | ||||
|                     .subscribe(domainObject, this.updateValue.bind(this), {}); | ||||
|                 this.openmct | ||||
|                     .telemetry | ||||
|                     .request(domainObject, {strategy: 'latest'}) | ||||
|                     .then((values) => values.forEach(this.updateValue)); | ||||
|             } | ||||
|         }, | ||||
|         computed: { | ||||
|             degValue: function() { | ||||
|                 return this.percentToDegrees(this.valToPercent(this.curVal)); | ||||
|             }, | ||||
|             degLimit: function() { | ||||
|                 return this.percentToDegrees(this.valToPercent(this.limit1)); | ||||
|             } | ||||
|         }, | ||||
|         mounted() { | ||||
|             this.composition.on('add', this.subscribe); | ||||
|             this.composition.load(); | ||||
|         }, | ||||
|         destroyed() { | ||||
|             this.composition.off('add', this.subscribe); | ||||
|             this.unsubscribe(); | ||||
|         } | ||||
|     } | ||||
| </script> | ||||
							
								
								
									
										71
									
								
								src/plugins/gauge/gauge.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/plugins/gauge/gauge.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| /***************************************************************************** | ||||
|  * Open MCT, Copyright (c) 2014-2018, United States Government | ||||
|  * as represented by the Administrator of the National Aeronautics and Space | ||||
|  * Administration. All rights reserved. | ||||
|  * | ||||
|  * Open MCT 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 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([ | ||||
|     './components/gaugeRadial.vue', | ||||
|     'vue' | ||||
| ], function ( | ||||
|     GaugeComponent, | ||||
|     Vue | ||||
| ) { | ||||
|     function Gauge(openmct) { | ||||
|         return { | ||||
|             key: 'gauge', | ||||
|             name: 'Gauge', | ||||
|             cssClass: 'icon-gauge', | ||||
|             canView: function (domainObject) { | ||||
|                 return domainObject.type === 'gauge'; | ||||
|             }, | ||||
|             canEdit: function (domainObject) { | ||||
|                 return domainObject.type === 'gauge'; | ||||
|             }, | ||||
|             view: function (domainObject) { | ||||
|                 let component; | ||||
|  | ||||
|                 return { | ||||
|                     show: function (element) { | ||||
|                         component =  new Vue({ | ||||
|                             components: { | ||||
|                                 GaugeComponent: GaugeComponent.default | ||||
|                             }, | ||||
|                             provide: { | ||||
|                                 openmct, | ||||
|                                 domainObject, | ||||
|                                 composition: openmct.composition.get(domainObject) | ||||
|                             }, | ||||
|                             el: element, | ||||
|                             template: '<gauge-component></gauge-component>' | ||||
|                         }); | ||||
|                     }, | ||||
|                     destroy: function (element) { | ||||
|                         component.$destroy(); | ||||
|                         component = undefined; | ||||
|                     } | ||||
|                 }; | ||||
|             }, | ||||
|             priority: function () { | ||||
|                 return 1; | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|     return Gauge; | ||||
| }); | ||||
							
								
								
									
										102
									
								
								src/plugins/gauge/plugin.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								src/plugins/gauge/plugin.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| /***************************************************************************** | ||||
|  * Open MCT, Copyright (c) 2014-2018, United States Government | ||||
|  * as represented by the Administrator of the National Aeronautics and Space | ||||
|  * Administration. All rights reserved. | ||||
|  * | ||||
|  * Open MCT 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 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([ | ||||
|     './gauge' | ||||
| ], function ( | ||||
|     Gauge | ||||
| ) { | ||||
|     return function plugin() { | ||||
|         return function install(openmct) { | ||||
|             openmct.objectViews.addProvider(new Gauge(openmct)); | ||||
|  | ||||
|             openmct.types.addType('gauge', { | ||||
|                 name: "Gauge", | ||||
|                 creatable: true, | ||||
|                 description: "Graphically visualize a telemetry element's current value between a minimum and maximum.", | ||||
|                 cssClass: 'icon-gauge', | ||||
|                 initialize(domainObject) { | ||||
|                     domainObject.composition = []; | ||||
|                     domainObject.configuration = { | ||||
|                         min: 0, | ||||
|                         max: 100, | ||||
|                         displayMinMax: 'Yes', | ||||
|                         limit: 90, | ||||
|                         decimals: 1 | ||||
|                     }; | ||||
|                 }, | ||||
|                 form: [ | ||||
|                     { | ||||
|                         name: "Minimum Value", | ||||
|                         control: "numberfield", | ||||
|                         cssClass: "l-input-sm l-numeric", | ||||
|                         key: "min", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "min" | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "Maximum Value", | ||||
|                         control: "numberfield", | ||||
|                         cssClass: "l-input-sm l-numeric", | ||||
|                         key: "max", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "max" | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "Display Min/Max", | ||||
|                         control: "textfield", | ||||
|                         cssClass: "l-input-sm", | ||||
|                         key: "displayMinMax", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "displayMinMax" | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "Limit", | ||||
|                         control: "numberfield", | ||||
|                         cssClass: "l-input-sm l-numeric", | ||||
|                         key: "min", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "limit" | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         name: "Decimals", | ||||
|                         control: "numberfield", | ||||
|                         cssClass: "l-input-sm l-numeric", | ||||
|                         key: "decimals", | ||||
|                         property: [ | ||||
|                             "configuration", | ||||
|                             "decimals" | ||||
|                         ] | ||||
|                     } | ||||
|                 ] | ||||
|             }); | ||||
|         }; | ||||
|     }; | ||||
| }); | ||||
| @@ -44,7 +44,9 @@ define([ | ||||
|     './filters/plugin', | ||||
|     './objectMigration/plugin', | ||||
|     './goToOriginalAction/plugin', | ||||
|     './clearData/plugin' | ||||
|     './clearData/plugin', | ||||
|     './gauge/plugin', | ||||
|     './bignumbers/plugin' | ||||
| ], function ( | ||||
|     _, | ||||
|     UTCTimeSystem, | ||||
| @@ -69,7 +71,9 @@ define([ | ||||
|     Filters, | ||||
|     ObjectMigration, | ||||
|     GoToOriginalAction, | ||||
|     ClearData | ||||
|     ClearData, | ||||
|     Gauge, | ||||
|     Bignumbers | ||||
| ) { | ||||
|     var bundleMap = { | ||||
|         LocalStorage: 'platform/persistence/local', | ||||
| @@ -101,7 +105,6 @@ define([ | ||||
|      * to exclusively. | ||||
|      */ | ||||
|     plugins.AutoflowView = AutoflowPlugin; | ||||
|  | ||||
|     plugins.Conductor = TimeConductorPlugin.default; | ||||
|  | ||||
|     plugins.CouchDB = function (url) { | ||||
| @@ -169,6 +172,8 @@ define([ | ||||
|     plugins.ObjectMigration = ObjectMigration.default; | ||||
|     plugins.GoToOriginalAction = GoToOriginalAction.default; | ||||
|     plugins.ClearData = ClearData; | ||||
|     plugins.Gauge = Gauge; | ||||
|     plugins.Bignumbers = Bignumbers; | ||||
|  | ||||
|     return plugins; | ||||
| }); | ||||
|   | ||||
| @@ -36,9 +36,10 @@ $bodyFont: 'Chakra Petch', sans-serif; | ||||
|  | ||||
| @mixin headerFont($size: 1em) { | ||||
|     font-family: $headerFont; | ||||
|     font-size: $size * 0.8; // This font is comparatively large, so reduce it a bit | ||||
|     font-size: $size; | ||||
|     line-height: $size; | ||||
|     text-transform: uppercase; | ||||
|     word-spacing: 0.25em; | ||||
|     word-spacing: 0.4em; | ||||
| } | ||||
|  | ||||
| @mixin bodyFont($size: 1em) { | ||||
| @@ -68,12 +69,15 @@ $shdwBtns: rgba(black, 0.2) 0 1px 2px; | ||||
| $shdwBtnsOverlay: rgba(black, 0.5) 0 1px 5px; | ||||
|  | ||||
| // Base colors | ||||
| $colorBodyBg: #393939; | ||||
| $colorBodyBg: #000000; | ||||
| $colorBodyFg: #ccc; | ||||
| $colorBodyFgEm: #fff; | ||||
| $colorGenBg: #222; | ||||
| $colorHeadBg: #262626; | ||||
| $colorHeadBg: transparent; | ||||
| $colorHeadFg: $colorBodyFg; | ||||
| $colorStatusBarBg: $colorHeadBg; | ||||
| $colorStatusBarFg: rgba(white, 0.5); | ||||
| $colorStatusBarFgHov: #aaa; | ||||
| $colorKey: #0099cc; | ||||
| $colorKeyFg: #fff; | ||||
| $colorKeyHov: #26d8ff; | ||||
| @@ -185,7 +189,7 @@ $colorIconAliasForKeyFilter: #aaa; | ||||
| $colorTabsHolderBg: rgba(black, 0.2); | ||||
|  | ||||
| // Buttons and Controls | ||||
| $colorBtnBg: pullForward($colorBodyBg, 10%); | ||||
| $colorBtnBg: pullForward($colorBodyBg, 30%); | ||||
| $colorBtnBgHov: pullForward($colorBtnBg, 10%); | ||||
| $colorBtnFg: pullForward($colorBodyFg, 10%); | ||||
| $colorBtnReverseFg: pullForward($colorBtnFg, 10%); | ||||
|   | ||||
| @@ -42,6 +42,31 @@ $bodyFont: $heroFont; | ||||
|     font-size: $size; | ||||
| } | ||||
|  | ||||
| // FONTS | ||||
| @import url('https://fonts.googleapis.com/css?family=Chakra+Petch:400,600,700|Michroma|Teko:400,700'); | ||||
|  | ||||
| $heroFont: "Helvetica Neue", Helvetica, Arial, sans-serif; | ||||
| $headerFont: $heroFont; | ||||
| $bodyFont: $heroFont; | ||||
|  | ||||
| @mixin heroFont($size: 1em) { | ||||
|     $mult: 1; | ||||
|     font-family: $heroFont; | ||||
|     font-size: $size * $mult; | ||||
| } | ||||
|  | ||||
| @mixin headerFont($size: 1em) { | ||||
|     $mult: 1; | ||||
|     font-family: $headerFont; | ||||
|     font-size: $size * $mult; | ||||
| } | ||||
|  | ||||
| @mixin bodyFont($size: 1em) { | ||||
|     $mult: 1; | ||||
|     font-family: $bodyFont; | ||||
|     font-size: $size * $mult; | ||||
| } | ||||
|  | ||||
| // Functions | ||||
| @function buttonBg($c: $colorBtnBg) { | ||||
|     @return $c; | ||||
|   | ||||
| @@ -50,14 +50,14 @@ | ||||
| } | ||||
|  | ||||
| /************************** EFFECTS */ | ||||
| @mixin pulse($animName: pulse, $dur: 500ms, $iteration: infinite, $opacity0: 0.5, $opacity100: 1) { | ||||
|     @keyframes pulse { | ||||
|         0%   { opacity: $opacity0; } | ||||
|         100% { opacity: $opacity100; } | ||||
| @mixin pulse($animName: 'pulse', $dur: 500ms, $iteration: infinite, $prop: opacity, $val0: 0, $val100: 1, $direction: alternate) { | ||||
|     @keyframes #{$animName} { | ||||
|         0%   { #{$prop}: $val0; } | ||||
|         100% { #{$prop}: $val100; } | ||||
|     } | ||||
|     animation-name: $animName; | ||||
|     animation-duration: $dur; | ||||
|     animation-direction: alternate; | ||||
|     animation-direction: $direction; | ||||
|     animation-iteration-count: $iteration; | ||||
|     animation-timing-function: ease-in-out; | ||||
| } | ||||
|   | ||||
							
								
								
									
										447
									
								
								src/styles-new/_movie-maelstrom.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										447
									
								
								src/styles-new/_movie-maelstrom.scss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,447 @@ | ||||
| /**************************************************** CONSTANTS, MIXINS */ | ||||
| $bgKey: #222632; | ||||
| $redKeyBg: #990000; | ||||
| $redKeyBrdr: #ff0000; | ||||
| $redKeyFg: rgba(white, 0.8); | ||||
| $ylwKeyBg: #cc6b36; | ||||
| $ylwKeyBrdr: #ffbf1a; | ||||
| $ylwKeyFg: rgba(white, 0.8); | ||||
|  | ||||
| @mixin widgetOk() { | ||||
|     background-color: #bbb !important; | ||||
|     border-color: #fff !important; | ||||
|     color: #333 !important; | ||||
| } | ||||
|  | ||||
| @mixin widgetRed() { | ||||
|     background-color: $redKeyBg !important; | ||||
|     border-color: $redKeyBrdr !important; | ||||
|     color: $redKeyFg !important; | ||||
| } | ||||
|  | ||||
| @mixin widgetYellow() { | ||||
|     $c: $ylwKeyFg; | ||||
|     background-color: $ylwKeyBg !important; | ||||
|     border-color: $ylwKeyBrdr !important; | ||||
|     color: $ylwKeyFg !important; | ||||
| } | ||||
|  | ||||
| /**************************************************** OVERRIDES */ | ||||
| body { | ||||
|     font-size: 1em; | ||||
| } | ||||
|  | ||||
| .c-telemetry-view__value { | ||||
|     justify-content: center; | ||||
|     &[class*='is-limit'] { | ||||
|         background: transparent !important; | ||||
|         color: inherit !important; | ||||
|         &:before { display: none; } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /**************************************************** CONVENIENCE */ | ||||
| .u-inspectable[s-selected] { | ||||
|     border: none !important; | ||||
| } | ||||
|  | ||||
| .c-table.c-telemetry-table { | ||||
|     font-size: 0.7em; | ||||
| } | ||||
|  | ||||
| .widget-rule-content .t-rule-message-input { | ||||
|     width: 100%; | ||||
| } | ||||
|  | ||||
| /**************************************************** TIME CONDUCTOR */ | ||||
| .c-conductor { | ||||
|     &__controls { | ||||
|         display: none !important; | ||||
|     } | ||||
|  | ||||
|     &:hover { | ||||
|         .c-conductor__controls { display: flex !important; } | ||||
|     } | ||||
|  | ||||
|     [class*='__label'] { | ||||
|         display: none; | ||||
|     } | ||||
|  | ||||
|     &__end-fixed { | ||||
|         display: none; | ||||
|     } | ||||
|  | ||||
|     &__end-delta { | ||||
|         &:after { | ||||
|             content: ''; | ||||
|             display: block; | ||||
|             background: url('../ui/layout/assets/images/logo-app.svg') center no-repeat; | ||||
|             background-size: contain; | ||||
|             width: 100px; | ||||
|             height: 24px; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     &-input { | ||||
|         input { | ||||
|             &.c-input--datetime, | ||||
|             &.c-input--hrs-min-sec { | ||||
|                 color: $colorTime; | ||||
|                 width: 200px; | ||||
|             } | ||||
|  | ||||
|             &.c-input--hrs-min-sec { | ||||
|                 width: 80px; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /**************************************************** MAIN LAYOUT */ | ||||
| .l-shell { | ||||
|     &:not(.is-editing) { | ||||
|         .l-shell__head, | ||||
|         .l-shell__main-view-browse-bar { | ||||
|             background: none !important; | ||||
|             height: $interiorMargin; | ||||
|             overflow: hidden; | ||||
|             padding: 0 !important; | ||||
|             position: absolute; | ||||
|             width: 30%; | ||||
|             z-index: 100; | ||||
|  | ||||
|             * { opacity: 0; } | ||||
|  | ||||
|             &:hover { | ||||
|                 background: #666 !important; | ||||
|                 height: auto; | ||||
|                 overflow: visible; | ||||
|                 padding: $interiorMargin !important; | ||||
|  | ||||
|                 * { opacity: 1; } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         .l-shell__pane-main .l-pane__contents > * + * { | ||||
|             margin-top: 0; | ||||
|         } | ||||
|  | ||||
|         .l-shell__main-container { | ||||
|             margin-top: 0 !important; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     .l-shell__main-view-browse-bar { | ||||
|         top: -3px; right: 0; | ||||
|     } | ||||
|  | ||||
|     &__main > .l-pane { | ||||
|         padding-left: $interiorMargin !important; | ||||
|         padding-right: $interiorMargin !important; | ||||
|     } | ||||
|  | ||||
|     &__status { display: none !important; } | ||||
| } | ||||
|  | ||||
| .l-pane { | ||||
|     &__contents { | ||||
|         overflow: visible !important; | ||||
|     } | ||||
|  | ||||
|     &--collapsed { | ||||
|         $d: 5px; | ||||
|         flex-basis: $d !important; | ||||
|         min-width: $d !important; | ||||
|         min-height: $d !important; | ||||
|  | ||||
|         .l-pane__label { | ||||
|             display: none !important; | ||||
|         } | ||||
|  | ||||
|         .l-pane__collapse-button { | ||||
|             &:before { display: none !important; } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /**************************************************** STYLING BY TITLE */ | ||||
| *[title*='font-euro'] { | ||||
|     @include headerFont(); | ||||
| } | ||||
|  | ||||
| *[title*='key-widget'] { | ||||
|     font-size: 24px; | ||||
| } | ||||
|  | ||||
| *[title*='alert-red'] { | ||||
|     .c-sw__icon { | ||||
|         color: red !important; | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='alert-yellow'] { | ||||
|     .c-sw__icon { | ||||
|         color: $ylwKeyBg !important; | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='widget-ok'] { | ||||
|     @include widgetOk(); | ||||
| } | ||||
|  | ||||
| *[title*='widget-yellow'] { | ||||
|     @include widgetYellow(); | ||||
| } | ||||
|  | ||||
| *[title*='widget-red'] { | ||||
|     @include widgetRed(); | ||||
| } | ||||
|  | ||||
| *[title*='pulse-slow'] { | ||||
|     @include pulse($animName: pulseSlow, $dur: 1000ms, $prop: filter, $val0: brightness(1.2), $val100: brightness(0.6), $direction: normal); | ||||
|     .c-sw__icon { | ||||
|         @include pulse($animName: pulseWarningIcon, $dur: 500ms, $prop: opacity, $val0: 0.1, $val100: 1, $direction: normal); | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='pulse-fast'] { | ||||
|     @include pulse($animName: pulseSlow, $dur: 250ms, $prop: filter, $val0: brightness(1.5), $val100: brightness(0.9), $direction: normal); | ||||
| } | ||||
|  | ||||
| *[title*='pulse-warning'] { | ||||
|     @include pulse($animName: pulseWarning, $dur: 1500ms, $prop: filter, $val0: brightness(1.2), $val100: brightness(0.7), $direction: normal); | ||||
| } | ||||
|  | ||||
| *[title*='Bg Widget'] { | ||||
|     // Widgets that provide a flashing red bg for components | ||||
|     .c-summary-widget { | ||||
|         $b: 5px; | ||||
|         border: none !important; | ||||
|         border-radius: $b * 4; | ||||
|         &[title*='widget-yellow'] { | ||||
|             opacity: 0.3; | ||||
|             box-shadow: $ylwKeyBg 0px 0px $b $b; | ||||
|         } | ||||
|  | ||||
|         &[title*='widget-red'] { | ||||
|             opacity: 0.4; | ||||
|             box-shadow: $redKeyBg 0px 0px $b $b; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| /**************************************************** SECTIONS */ | ||||
| /************* SYS OVW WIDGETS */ | ||||
| *[title*='Sys Ovw'] { | ||||
|     *[title*='Widget'] { | ||||
|         font-size: 1.4em; | ||||
|     } | ||||
|  | ||||
|     *[title*='sys-ok'] { | ||||
|         @include widgetOk(); | ||||
|     } | ||||
|  | ||||
|     *[title*='post-ring'] { | ||||
|         @include widgetRed(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /************* ATTITUDE */ | ||||
| *[title*='Attitude'] { | ||||
|     *[title*='RPY'] { | ||||
|         background: black; | ||||
|         padding: 3px; | ||||
|         border-radius: 5px; | ||||
|  | ||||
|         .l-control-bar { | ||||
|             display: none; | ||||
|         } | ||||
|  | ||||
|         .l-view-section { | ||||
|             top: 0; | ||||
|         } | ||||
|  | ||||
|         .gl-plot-axis-area.gl-plot-y { | ||||
|             width: 22px !important; | ||||
|         } | ||||
|  | ||||
|         .gl-plot-wrapper-display-area-and-x-axis { | ||||
|             left: 24px !important; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| /************* VELOCITY COMPONENT */ | ||||
| *[title*='-not-attained'] { | ||||
|     @include widgetRed(); | ||||
| } | ||||
|  | ||||
| /************* ACCELERATION COMPONENT */ | ||||
|  | ||||
| /************* BOOST PHASE WIDGETS */ | ||||
| *[title*='boost-phase-widget'] { | ||||
|     .c-summary-widget { | ||||
|         border-width: 2px; | ||||
|         padding: 5px 0; | ||||
|  | ||||
|         &:before, | ||||
|         &:after { | ||||
|             content: ''; | ||||
|             display: block; | ||||
|             position: absolute; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='boost-phase-widget-left'] { | ||||
|     .c-summary-widget { | ||||
|         $c: #999; | ||||
|         align-items: start; | ||||
|         background: rgba($c, 0.1) !important; | ||||
|         border-left: none; | ||||
|         border-top-left-radius: 0; | ||||
|         border-bottom-left-radius: 0; | ||||
|  | ||||
|         &:before, | ||||
|         &:after { | ||||
|             top: 25px; right: 0; bottom: 3%; left: 40%; | ||||
|         } | ||||
|  | ||||
|         &:before { | ||||
|             @include bgStripes($c: $c, $a: 0.1, $bgsize: 20px, $angle: 0deg); | ||||
|         } | ||||
|  | ||||
|         &:after { | ||||
|             @include bgStripes($c: $c, $a: 0.1, $bgsize: 63px, $angle: 0deg); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='boost-phase-widget-right'] { | ||||
|     .c-summary-widget { | ||||
|         $c: #555; | ||||
|         border-right: none; | ||||
|         border-top-right-radius: 0; | ||||
|         border-bottom-right-radius: 0; | ||||
|  | ||||
|         &:before { | ||||
|             //background: deeppink; | ||||
|             @include bgTicks($c: $c, $repeatDir: 'y'); | ||||
|             background-size: 100% 45px; | ||||
|             top: 0px; right: 0; bottom: 0; left: 2px; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*='Boost Phase Ring Widgets'] { | ||||
|     *[title*='Ring Widget'] { | ||||
|         //filter: saturate(0.7); | ||||
|     } | ||||
|  | ||||
|     *[title*='ring-ok'] { | ||||
|         @include widgetOk(); | ||||
|     } | ||||
|  | ||||
|     *[title*='bad-ring'] { | ||||
|         @include widgetRed(); | ||||
|     } | ||||
|  | ||||
|     *[title*='post-ring'] { | ||||
|         @include widgetYellow(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /************* BOTTOM SYSTEM WIDGETS */ | ||||
| *[title*='system-widget'] { | ||||
|     background: $bgKey !important; | ||||
|     border-width: 2px !important; | ||||
|     justify-content: left !important; | ||||
|  | ||||
|     .c-sw__icon { | ||||
|         $m: $interiorMarginSm; | ||||
|         position: absolute; | ||||
|         bottom: $m; | ||||
|         right: $m; | ||||
|     } | ||||
| } | ||||
|  | ||||
| *[title*="Bottom System Widgets"] { | ||||
|     transform: translateY(-2px); | ||||
| } | ||||
|  | ||||
| *[title*='system-widget--hero'] { | ||||
|     // Current "tab" in interface | ||||
|     border-top-left-radius: 0; | ||||
|     border-top-right-radius: 0; | ||||
|     border-top: none; | ||||
| } | ||||
|  | ||||
| *[title*='system-widget--subtle'] { | ||||
|     opacity: 0.7; | ||||
| } | ||||
|  | ||||
| /**************************************************** INDIVIDUAL ELEMENTS */ | ||||
| /************* PASSENGER NOTICE */ | ||||
| *[title*='passenger-notice'] { | ||||
|     font-size: 1.4em; | ||||
|     .c-sw__icon { | ||||
|         font-size: 2.1em; | ||||
|         margin-right: $interiorMarginLg; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| *[title*='pulse-passenger-notice--nominal'] { | ||||
|     @include pulse($animName: pulseNominal, $dur: 1000ms, $prop: filter, $val0: brightness(1.4), $val100:brightness(1.0), $direction: alternate); | ||||
| } | ||||
|  | ||||
| *[title*='pulse-passenger-notice--warning'] { | ||||
|     @include pulse($animName: pulseWarning, $dur: 750ms, $prop: background-color, $val0: #aa0000, $val100: #340000, $direction: normal); | ||||
| } | ||||
|  | ||||
| *[title*='Main Console'] { | ||||
|     $r: $basicCr; | ||||
|     background: $bgKey; | ||||
|     border-radius: $r; | ||||
|     border-bottom: 2px solid rgb(102,102,102); | ||||
| } | ||||
|  | ||||
| *[title*='Event Time Str'] { | ||||
|     @include heroFont(1.2em); | ||||
|     line-height: .8em; | ||||
| } | ||||
|  | ||||
|  | ||||
| *[title*="Sys Ovw LAD Table"] { | ||||
|     .c-lad-table { | ||||
|         tr { | ||||
|             background-color: black; | ||||
|             color: rgba(white, 0.3); | ||||
|             display: block; | ||||
|             font-weight: bold; | ||||
|             align-items: center; | ||||
|             height: 41px; | ||||
|             border-radius: 5px; | ||||
|             font-size: 0.75em; | ||||
|             margin-bottom: 4px; | ||||
|             overflow: hidden; | ||||
|             padding: 3px; | ||||
|             text-transform: uppercase; | ||||
|         } | ||||
|         thead, | ||||
|         tr td:nth-child(1), | ||||
|         tr td:nth-child(2) { | ||||
|             display: none; | ||||
|         } | ||||
|  | ||||
|         td { | ||||
|             display: block; | ||||
|             width: auto; | ||||
|             white-space: normal; | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -34,3 +34,5 @@ | ||||
| @import "legacy"; | ||||
| @import "legacy-plots"; | ||||
| @import "legacy-messages"; | ||||
| @import "theme-maelstrom"; | ||||
| @import "movie-maelstrom"; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
| @import "constants"; | ||||
| @import "constants-mobile.scss"; | ||||
| //@import "constants-espresso"; // TEMP | ||||
| @import "constants-snow"; // TEMP | ||||
| //@import "constants-maelstrom"; | ||||
| //@import "constants-snow"; // TEMP | ||||
| @import "constants-maelstrom"; | ||||
| @import "mixins"; | ||||
| @import "animations"; | ||||
							
								
								
									
										19
									
								
								src/styles-new/theme-maelstrom.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/styles-new/theme-maelstrom.scss
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| /************* FRAMES */ | ||||
| .c-so-view { | ||||
|     &__header { | ||||
|         transform: translateY(3px); | ||||
|     } | ||||
|  | ||||
|     &__header__name { | ||||
|         transform: translateY(-2px); | ||||
|     } | ||||
|  | ||||
|     &:not(.c-so-view--no-frame) { | ||||
|         $bc: #666; | ||||
|         $bLR: 3px solid transparent; | ||||
|         $br: 20px; | ||||
|         background: none !important; | ||||
|         border: none !important; | ||||
|         padding: 0 !important; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user