Compare commits
	
		
			15 Commits
		
	
	
		
			5233-legen
			...
			khalid-pre
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | fd1f2fa303 | ||
|   | 51d4ad58c7 | ||
|   | 36fc4929fc | ||
|   | 0f848d9f4c | ||
|   | b6cc1924aa | ||
|   | 3e97f32dba | ||
|   | 558b802228 | ||
|   | de13f67ae5 | ||
|   | 0256cc4830 | ||
|   | 8422add614 | ||
|   | 2114697d6f | ||
|   | 412eaf599e | ||
|   | 0691a35dab | ||
|   | f57191fd89 | ||
|   | 14066b5c4d | 
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "openmct", | ||||
|   "version": "1.7.4", | ||||
|   "version": "1.7.5", | ||||
|   "description": "The Open MCT core platform", | ||||
|   "dependencies": {}, | ||||
|   "devDependencies": { | ||||
|   | ||||
| @@ -181,7 +181,7 @@ define([ | ||||
|                         ], | ||||
|                         "category": "contextual", | ||||
|                         "name": "Stop", | ||||
|                         "cssClass": "icon-box", | ||||
|                         "cssClass": "icon-box-round-corners", | ||||
|                         "priority": "preferred" | ||||
|                     } | ||||
|                 ], | ||||
|   | ||||
| @@ -101,7 +101,7 @@ define( | ||||
|                     name: "Pause" | ||||
|                 }); | ||||
|                 mockStop.getMetadata.and.returnValue({ | ||||
|                     cssClass: "icon-box", | ||||
|                     cssClass: "icon-box-round-corners", | ||||
|                     name: "Stop" | ||||
|                 }); | ||||
|                 mockScope.domainObject = mockDomainObject; | ||||
|   | ||||
| @@ -45,6 +45,7 @@ export default class URLTimeSettingsSynchronizer { | ||||
|     } | ||||
|  | ||||
|     initialize() { | ||||
|         this.updateTimeSettings(); | ||||
|         this.openmct.router.on('change:params', this.updateTimeSettings); | ||||
|  | ||||
|         TIME_EVENTS.forEach(event => { | ||||
|   | ||||
| @@ -138,7 +138,7 @@ export default class Condition extends EventEmitter { | ||||
|     } | ||||
|  | ||||
|     updateCriteria(criterionConfigurations) { | ||||
|         this.destroyCriteria(); | ||||
|         this.destroyCriteria(true); | ||||
|         this.createCriteria(criterionConfigurations); | ||||
|     } | ||||
|  | ||||
| @@ -204,7 +204,7 @@ export default class Condition extends EventEmitter { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     destroyCriterion(id) { | ||||
|     destroyCriterion(id, isRemoved) { | ||||
|         let found = this.findCriterion(id); | ||||
|         if (found) { | ||||
|             let criterion = found.item; | ||||
| @@ -216,7 +216,9 @@ export default class Condition extends EventEmitter { | ||||
|             }); | ||||
|             criterion.destroy(); | ||||
|             this.criteria.splice(found.index, 1); | ||||
|             this.updateDescription(); | ||||
|             if (isRemoved) { | ||||
|                 this.updateDescription(); | ||||
|             } | ||||
|  | ||||
|             return true; | ||||
|         } | ||||
| @@ -309,17 +311,17 @@ export default class Condition extends EventEmitter { | ||||
|         return this.criteria; | ||||
|     } | ||||
|  | ||||
|     destroyCriteria() { | ||||
|     destroyCriteria(isRemoved) { | ||||
|         let success = true; | ||||
|         //looping through the array backwards since destroyCriterion modifies the criteria array | ||||
|         for (let i = this.criteria.length - 1; i >= 0; i--) { | ||||
|             success = success && this.destroyCriterion(this.criteria[i].id); | ||||
|             success = success && this.destroyCriterion(this.criteria[i].id, isRemoved); | ||||
|         } | ||||
|  | ||||
|         return success; | ||||
|     } | ||||
|  | ||||
|     destroy() { | ||||
|         this.destroyCriteria(); | ||||
|     destroy(isRemoved) { | ||||
|         this.destroyCriteria(isRemoved); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -41,7 +41,7 @@ export default class ConditionManager extends EventEmitter { | ||||
|         this.subscriptions = {}; | ||||
|         this.telemetryObjects = {}; | ||||
|         this.testData = { | ||||
|             conditionTestData: [], | ||||
|             conditionTestInputs: this.conditionSetDomainObject.configuration.conditionTestData, | ||||
|             applied: false | ||||
|         }; | ||||
|         this.initialize(); | ||||
| @@ -154,8 +154,10 @@ export default class ConditionManager extends EventEmitter { | ||||
|  | ||||
|     updateConditionDescription(condition) { | ||||
|         const found = this.conditionSetDomainObject.configuration.conditionCollection.find(conditionConfiguration => (conditionConfiguration.id === condition.id)); | ||||
|         found.summary = condition.description; | ||||
|         this.persistConditions(); | ||||
|         if (found.summary !== condition.description) { | ||||
|             found.summary = condition.description; | ||||
|             this.persistConditions(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     initCondition(conditionConfiguration, index) { | ||||
| @@ -225,7 +227,7 @@ export default class ConditionManager extends EventEmitter { | ||||
|     removeCondition(id) { | ||||
|         let index = this.conditions.findIndex(item => item.id === id); | ||||
|         if (index > -1) { | ||||
|             this.conditions[index].destroy(); | ||||
|             this.conditions[index].destroy(true); | ||||
|             this.conditions.splice(index, 1); | ||||
|         } | ||||
|  | ||||
| @@ -414,8 +416,10 @@ export default class ConditionManager extends EventEmitter { | ||||
|     } | ||||
|  | ||||
|     updateTestData(testData) { | ||||
|         this.testData = testData; | ||||
|         this.openmct.objects.mutate(this.conditionSetDomainObject, 'configuration.conditionTestData', this.testData.conditionTestInputs); | ||||
|         if (!_.isEqual(testData, this.testData)) { | ||||
|             this.testData = testData; | ||||
|             this.openmct.objects.mutate(this.conditionSetDomainObject, 'configuration.conditionTestData', this.testData.conditionTestInputs); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     persistConditions() { | ||||
| @@ -433,7 +437,7 @@ export default class ConditionManager extends EventEmitter { | ||||
|         } | ||||
|  | ||||
|         this.conditions.forEach((condition) => { | ||||
|             condition.destroy(); | ||||
|             condition.destroy(false); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -101,7 +101,6 @@ export default { | ||||
|                 buttons: [ | ||||
|                     { | ||||
|                         label: 'Cancel', | ||||
|                         emphasis: true, | ||||
|                         callback: () => { | ||||
|                             painterroInstance.dismiss(); | ||||
|                             annotateOverlay.dismiss(); | ||||
| @@ -109,6 +108,7 @@ export default { | ||||
|                     }, | ||||
|                     { | ||||
|                         label: 'Save', | ||||
|                         emphasis: true, | ||||
|                         callback: () => { | ||||
|                             painterroInstance.save((snapshotObject) => { | ||||
|                                 annotateOverlay.dismiss(); | ||||
|   | ||||
| @@ -7,10 +7,10 @@ | ||||
|                     <div class="c-object-label__type-icon icon-camera"></div> | ||||
|                     <div class="c-object-label__name"> | ||||
|                         Notebook Snapshots | ||||
|                         <span v-if="snapshots.length" | ||||
|                               class="l-browse-bar__object-details" | ||||
|                         > {{ snapshots.length }} of {{ getNotebookSnapshotMaxCount() }} | ||||
|                         </span> | ||||
|                     </div> | ||||
|                     <div v-if="snapshots.length" | ||||
|                          class="l-browse-bar__object-details" | ||||
|                     >{{ snapshots.length }} of {{ getNotebookSnapshotMaxCount() }} | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <PopupMenu v-if="snapshots.length > 0" | ||||
|   | ||||
| @@ -4,8 +4,10 @@ | ||||
|         <div class="l-browse-bar__start"> | ||||
|             <div class="l-browse-bar__object-name--w"> | ||||
|                 <span class="c-object-label l-browse-bar__object-name" | ||||
|                     v-bind:class="cssClass" | ||||
|                 > | ||||
|                     <span class="c-object-label__type-icon" | ||||
|                           v-bind:class="cssClass" | ||||
|                     ></span> | ||||
|                     <span class="c-object-label__name">{{ name }}</span> | ||||
|                 </span> | ||||
|             </div> | ||||
|   | ||||
| @@ -49,10 +49,6 @@ describe('the plugin', function () { | ||||
|         child.style.height = '480px'; | ||||
|         element.appendChild(child); | ||||
|  | ||||
|         openmct.time.timeSystem('utc', { | ||||
|             start: 1597160002854, | ||||
|             end: 1597181232854 | ||||
|         }); | ||||
|         openmct.on('start', done); | ||||
|         openmct.start(appHolder); | ||||
|     }); | ||||
| @@ -105,6 +101,11 @@ describe('the plugin', function () { | ||||
|         let planView; | ||||
|  | ||||
|         beforeEach(() => { | ||||
|             openmct.time.timeSystem('utc', { | ||||
|                 start: 1597160002854, | ||||
|                 end: 1597181232854 | ||||
|             }); | ||||
|  | ||||
|             planDomainObject = { | ||||
|                 identifier: { | ||||
|                     key: 'test-object', | ||||
|   | ||||
| @@ -427,9 +427,12 @@ export default { | ||||
|                 this.skipReloadOnInteraction = false; | ||||
|                 this.loadMoreData(newRange, true); | ||||
|             } else { | ||||
|                 // If we're not panning or zooming (time conductor and plot x-axis times are not out of sync) | ||||
|                 // Drop any data that is more than 1x (max-min) before min. | ||||
|                 // Limit these purges to once a second. | ||||
|                 if (!this.nextPurge || this.nextPurge < Date.now()) { | ||||
|                 const isPanningOrZooming = this.isTimeOutOfSync; | ||||
|                 const purgeRecords = !isPanningOrZooming && (!this.nextPurge || (this.nextPurge < Date.now())); | ||||
|                 if (purgeRecords) { | ||||
|                     const keepRange = { | ||||
|                         min: newRange.min - (newRange.max - newRange.min), | ||||
|                         max: newRange.max | ||||
|   | ||||
| @@ -279,6 +279,10 @@ describe("the plugin", function () { | ||||
|         let plotView; | ||||
|  | ||||
|         beforeEach(() => { | ||||
|             openmct.time.timeSystem("utc", { | ||||
|                 start: 0, | ||||
|                 end: 4 | ||||
|             }); | ||||
|             const getFunc = openmct.$injector.get; | ||||
|             spyOn(openmct.$injector, "get") | ||||
|                 .withArgs("exportImageService").and.returnValue({ | ||||
|   | ||||
| @@ -121,6 +121,11 @@ describe("the plugin", () => { | ||||
|         let tableInstance; | ||||
|  | ||||
|         beforeEach(() => { | ||||
|             openmct.time.timeSystem('utc', { | ||||
|                 start: 0, | ||||
|                 end: 4 | ||||
|             }); | ||||
|  | ||||
|             testTelemetryObject = { | ||||
|                 identifier: { | ||||
|                     namespace: "", | ||||
|   | ||||
| @@ -85,7 +85,7 @@ | ||||
|                 <button | ||||
|                     ref="startOffset" | ||||
|                     class="c-button c-conductor__delta-button" | ||||
|                     @click="showTimePopupStart" | ||||
|                     @click.prevent="showTimePopupStart" | ||||
|                 > | ||||
|                     {{ offsets.start }} | ||||
|                 </button> | ||||
| @@ -133,7 +133,7 @@ | ||||
|                 <button | ||||
|                     ref="endOffset" | ||||
|                     class="c-button c-conductor__delta-button" | ||||
|                     @click="showTimePopupEnd" | ||||
|                     @click.prevent="showTimePopupEnd" | ||||
|                 > | ||||
|                     {{ offsets.end }} | ||||
|                 </button> | ||||
|   | ||||
| @@ -237,7 +237,6 @@ | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Prototype | ||||
| [class^='pr-tc-input-menu'] { | ||||
|     // Uses ^= here to target both start and end menus | ||||
|     background: $colorBodyBg; | ||||
| @@ -247,8 +246,7 @@ | ||||
|     grid-column-gap: 3px; | ||||
|     grid-row-gap: 4px; | ||||
|     align-items: start; | ||||
|  | ||||
|     filter: brightness(1.4); | ||||
|     filter: $filterMenu; | ||||
|     box-shadow: $shdwMenu; | ||||
|     padding: $interiorMargin; | ||||
|     position: absolute; | ||||
|   | ||||
| @@ -237,11 +237,12 @@ $shdwSelect: rgba(black, 0.5) 0 0.5px 3px; | ||||
| $controlDisabledOpacity: 0.2; | ||||
|  | ||||
| // Menus | ||||
| $colorMenuBg: pullForward($colorBodyBg, 15%); | ||||
| $colorMenuFg: pullForward($colorBodyFg, 30%); | ||||
| $colorMenuIc: pullForward($colorKey, 15%); | ||||
| $colorMenuHovBg: $colorMenuIc; | ||||
| $colorMenuHovFg: pullForward($colorMenuFg, 10%); | ||||
| $colorMenuBg: $colorBodyBg; | ||||
| $colorMenuFg: $colorBodyFg; | ||||
| $colorMenuIc: $colorKey; | ||||
| $filterMenu:  brightness(1.4); | ||||
| $colorMenuHovBg: rgba($colorKey, 0.5); | ||||
| $colorMenuHovFg: $colorBodyFgEm; | ||||
| $colorMenuHovIc: $colorMenuHovFg; | ||||
| $colorMenuElementHilite: pullForward($colorMenuBg, 10%); | ||||
| $shdwMenu: rgba(black, 0.5) 0 1px 5px; | ||||
|   | ||||
| @@ -241,11 +241,12 @@ $shdwSelect: rgba(black, 0.5) 0 0.5px 3px; | ||||
| $controlDisabledOpacity: 0.2; | ||||
|  | ||||
| // Menus | ||||
| $colorMenuBg: pullForward($colorBodyBg, 15%); | ||||
| $colorMenuFg: pullForward($colorBodyFg, 30%); | ||||
| $colorMenuIc: pullForward($colorKey, 15%); | ||||
| $colorMenuHovBg: $colorMenuIc; | ||||
| $colorMenuHovFg: pullForward($colorMenuFg, 10%); | ||||
| $colorMenuBg: $colorBodyBg; | ||||
| $colorMenuFg: $colorBodyFg; | ||||
| $colorMenuIc: $colorKey; | ||||
| $filterMenu:  brightness(1.4); | ||||
| $colorMenuHovBg: rgba($colorKey, 0.5); | ||||
| $colorMenuHovFg: $colorBodyFgEm; | ||||
| $colorMenuHovIc: $colorMenuHovFg; | ||||
| $colorMenuElementHilite: pullForward($colorMenuBg, 10%); | ||||
| $shdwMenu: rgba(black, 0.5) 0 1px 5px; | ||||
|   | ||||
| @@ -237,9 +237,10 @@ $shdwSelect: none; | ||||
| $controlDisabledOpacity: 0.3; | ||||
|  | ||||
| // Menus | ||||
| $colorMenuBg: pushBack($colorBodyBg, 10%); | ||||
| $colorMenuFg: pullForward($colorMenuBg, 70%); | ||||
| $colorMenuBg: $colorBodyBg; | ||||
| $colorMenuFg: $colorBodyFg; | ||||
| $colorMenuIc: $colorKey; | ||||
| $filterMenu: brightness(0.95); | ||||
| $colorMenuHovBg: $colorMenuIc; | ||||
| $colorMenuHovFg: $colorMenuBg; | ||||
| $colorMenuHovIc: $colorMenuBg; | ||||
|   | ||||
| @@ -458,6 +458,7 @@ select { | ||||
| @mixin menuOuter() { | ||||
|     border-radius: $basicCr; | ||||
|     background: $colorMenuBg; | ||||
|     filter: $filterMenu; | ||||
|     text-shadow: $shdwMenuText; | ||||
|     padding: $interiorMarginSm; | ||||
|     box-shadow: $shdwMenu; | ||||
|   | ||||
| @@ -490,7 +490,7 @@ | ||||
| } | ||||
|  | ||||
| #snap-annotation { | ||||
|     $m: $interiorMargin; | ||||
|     $m: 0; //$interiorMargin; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     position: absolute; | ||||
| @@ -514,21 +514,32 @@ | ||||
|     // Holds tool buttons, color selectors, etc. | ||||
|     $h: 22px; | ||||
|     $fs: 0.8rem; | ||||
|     $m: $interiorMarginSm; | ||||
|  | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     height: $h + ($m * 2) !important; | ||||
|     margin-bottom: $interiorMarginLg; | ||||
|     order: 1; | ||||
|     flex: 0 0 auto; | ||||
|     height: auto; | ||||
|     background-color: transparent !important; | ||||
|     margin-bottom: $interiorMargin; | ||||
|     padding: $interiorMarginSm; | ||||
|  | ||||
|     > div > span { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         font-size: $fs; | ||||
|     > div { | ||||
|         display: contents; | ||||
|  | ||||
|         > * + * { margin-left: $interiorMargin !important; } | ||||
|     } | ||||
|  | ||||
|     .ptro-tool-controls { | ||||
|         display: flex; | ||||
|         margin-left: $interiorMarginLg !important; | ||||
|  | ||||
|         > * + * { | ||||
|             margin-left: $interiorMargin !important; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     > div, | ||||
|     > div > span, | ||||
|     .ptro-icon-btn, | ||||
|     .ptro-named-btn, | ||||
|     .ptro-color-btn, | ||||
| @@ -538,27 +549,18 @@ | ||||
|     .tool-controls, | ||||
|     .ptro-input { | ||||
|         // Lot of resets for crappy CSS in Painterro | ||||
|         &:first-child { | ||||
|             margin-left: 0 !important; | ||||
|         } | ||||
|         display: inline-block; | ||||
|         font-family: inherit; | ||||
|         font-size: $fs !important; | ||||
|         height: $h !important; | ||||
|         margin: 0 0 0 5px; | ||||
|         margin: 0; | ||||
|         position: relative; | ||||
|         width: auto !important; | ||||
|         line-height: $h !important; | ||||
|         top: auto; | ||||
|         right: auto; | ||||
|         bottom: auto; | ||||
|         left: auto; | ||||
|         vertical-align: top; | ||||
|     } | ||||
|  | ||||
|     .ptro-tool-ctl-name { | ||||
|         border-radius: 0; | ||||
|         background: none; | ||||
|         color: $colorBodyFg; | ||||
|         top: auto; | ||||
|         font-family: inherit; | ||||
|         padding: 0; | ||||
| @@ -568,13 +570,15 @@ | ||||
|         width: $h !important; | ||||
|     } | ||||
|  | ||||
|     .ptro-check, | ||||
|     .ptro-color-control, | ||||
|     .ptro-icon-btn, | ||||
|     .ptro-named-btn { | ||||
|         // Buttons in toolbar. Why the f* they're named like this is a mystery | ||||
|         background-color: $colorBtnBg; | ||||
|         color: $colorBtnFg; | ||||
|         padding: 0 $interiorMargin; | ||||
|         // Buttons in toolbar | ||||
|         border-radius: $smallCr; | ||||
|         box-shadow: rgba($colorBtnFg, 0.3) 0 0 0 1px; | ||||
|         color: $colorBtnFg !important; | ||||
|         padding: 1px $interiorMargin; | ||||
|  | ||||
|         &:hover { | ||||
|             background: $colorBtnBgHov; | ||||
| @@ -588,6 +592,13 @@ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     .ptro-color-control, | ||||
|     .ptro-icon-btn, | ||||
|     .ptro-named-btn { | ||||
|         // Buttons in toolbar | ||||
|         background-color: $colorBtnBg; | ||||
|     } | ||||
|  | ||||
|     .ptro-color-active-control { | ||||
|         background: $colorBtnMajorBg  !important; | ||||
|         color: $colorBtnMajorFg !important; | ||||
|   | ||||
| @@ -17,15 +17,7 @@ | ||||
|         <div v-if="singleSelectNonObject" | ||||
|              class="c-inspector__selected c-inspector__selected--non-domain-object  c-object-label" | ||||
|         > | ||||
|             <span class="c-object-label__type-icon" | ||||
|                   :class="typeCssClass" | ||||
|             ></span> | ||||
|             <span v-if="!activity" | ||||
|                   class="c-object-label__name" | ||||
|             >Layout Object</span> | ||||
|             <span v-else | ||||
|                   class="c-object-label__name" | ||||
|             >{{ activity.name }}</span> | ||||
|             <span class="c-object-label__name">Layout Object</span> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div v-if="multiSelect" | ||||
|   | ||||
| @@ -32,6 +32,7 @@ | ||||
|  | ||||
|         &__scrollable { | ||||
|             overflow: auto; | ||||
|             padding-right: $interiorMargin; | ||||
|         } | ||||
|  | ||||
|         &__item--empty { | ||||
|   | ||||
| @@ -113,7 +113,7 @@ import search from '../components/search.vue'; | ||||
| const ITEM_BUFFER = 25; | ||||
| const LOCAL_STORAGE_KEY__TREE_EXPANDED = 'mct-tree-expanded'; | ||||
| const RETURN_ALL_DESCDNDANTS = true; | ||||
| const TREE_ITEM_INDENT_PX = 15; | ||||
| const TREE_ITEM_INDENT_PX = 18; | ||||
|  | ||||
| export default { | ||||
|     name: 'MctTree', | ||||
|   | ||||
| @@ -103,10 +103,16 @@ export default { | ||||
|     }, | ||||
|     mounted() { | ||||
|         if (this.actionCollection) { | ||||
|             this.actionCollection.hide(HIDDEN_ACTIONS); | ||||
|             this.actionCollection.on('update', this.updateActionItems); | ||||
|             this.updateActionItems(this.actionCollection.getActionsObject()); | ||||
|         } | ||||
|     }, | ||||
|     destroyed() { | ||||
|         if (this.actionCollection) { | ||||
|             this.actionCollection.off('update', this.updateActionItems); | ||||
|         } | ||||
|     }, | ||||
|     methods: { | ||||
|         setView(view) { | ||||
|             this.$emit('setView', view); | ||||
| @@ -116,7 +122,6 @@ export default { | ||||
|             delete this.actionCollection; | ||||
|         }, | ||||
|         updateActionItems() { | ||||
|             this.actionCollection.hide(HIDDEN_ACTIONS); | ||||
|             this.statusBarItems = this.actionCollection.getStatusBarActions(); | ||||
|             this.menuActionItems = this.actionCollection.getVisibleActions(); | ||||
|         }, | ||||
|   | ||||
| @@ -8,7 +8,7 @@ let resolveFunction; | ||||
|  | ||||
| let initialHash = ''; | ||||
|  | ||||
| describe('Application router utility functions', () => { | ||||
| xdescribe('Application router utility functions', () => { | ||||
|     beforeAll(done => { | ||||
|         appHolder = document.createElement('div'); | ||||
|         appHolder.style.width = '640px'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user