mirror of
https://github.com/nasa/openmct.git
synced 2025-06-15 13:48:12 +00:00
test(e2e): Major refactor and stabilization of e2e tests (#7581)
* fix: update broken locator * update eslint package * first pass of lint fixes * update package * change ruleset * update component tests to match linting rules * driveby * start to factor out bad locators * update gauge component * update notebook snapshot drop area * Update plot aria * add draggable true to tree items * update package * driveby to remove dead code * unneeded * unneeded * tells a screenreader that this is a row and a cell * adds an id for dragondrops * this should be a button * first pass at fixing tooltip selectors * review comments * Updating more tests * update to remove expect expect given our use of check functions * add expand component * move role around * update more locators * force * new local storage * remove choochoo steps * test: do `lint:fix` and also add back accidentally removed code * test: add back more removed code * test: remove `unstable` annotation from tests which are not unstable * test: remove invalid test-- the "new" time conductor doesn't allow for millisecond changes in fixed time * test: fix unstable gauge test * test: remove useless asserts-- this was secretly non-functional. now that we've fixed it, it makes no sense and just fails * test: add back accidentally removed changes * test: revert changes that break test * test: more fixes * Remove all notion of the unstable/stable e2e tests * test: eviscerate the flake with FACTS and LOGIC * test: fix anotha one * lint fixes * test: no need to wait for save dialog * test: fix more tests * lint: fix more warnings * test: fix anotha one * test: use `toHaveLength` instead of `.length).toBe()` * test: stabilize tabs view example imagery test * fix: more tests be fixed * test: more `toHaveCount()`s please * test: revert more accidentally removed fixes * test: fix selector * test: fix anotha one * update lint rules to clean up bad locators in shared fixtures * update and remove bad appActions * test: fix some restricted notebook tests * test: mass find/replace to enforce `toHaveCount()` instead of `.count()).toBe()` * Remove some bad appActions and update text * test: fix da tree tests * test: await not await await * test: fix upload plan appAction and add a11y * Updating externalFixtures with best practice locators and add missing appAction framework tests * test: fix test * test: fix appAction test for plans * test: yum yum fix'em up and get rid of some dragon drops * fix: alas, a `.only()` got my hopes up that i was done fixing tests * test: add `setTimeConductorMode` test "suite" which covers most TC related appActions * test: fix arg * test(couchdb): fix some network tests via expect polling * Stabalize visual test * getCanasPixels * test: stabilize tooltip telemetry table test, better a11y for tooltips * chore: update to use `docker compose` instead of `docker-compose` * New rules, new tests, new me * fix sort order * test: add `waitForPlotsToRender` framework test, passthru timeout override * test: remove `clockOptions` test as we have `page.clock` now * test: refactor out `overrideClock` * test: use `clock.install` instead * test: use `clock.install` instead * time clock fix * test: fix timer tests * remove ever reference to old base fixture * test: stabilize restricted notebook test * lint fixes * test: use clock.install * update timelist * test: update visual tests to use `page.clock()`, update snapshots * test: stabilize tree renaming/reordering test * a11y: add aria-label and role=region to object view * refactor: use `dragTo` * refactor: use `dragTo`, other small fixes * test: use `page.clock()` to stabilize tooltip telemetry table test * test: use web-first assertion to stabilize staleness test * test: knock out a few more `page.click`s * test: destroy all `page.click()`s * refactor: consistently use `'Ok'` instead of `'OK'` and `'Ok'` mixed * test: remove gauge aria label * test: more test fixes * test: more fixes and refactors * docs: add comment * test: refactor all instances of `dragAndDrop` * test: remove redundant test (covered in previous test steps) * test: stabilize imagery operations tests for display layout * chore: remove bad unicorn rule * chore(lint): remove unused disable directives --------- Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
This commit is contained in:
@ -30,6 +30,7 @@
|
||||
>
|
||||
<td
|
||||
ref="tableCell"
|
||||
scope="row"
|
||||
aria-label="lad name"
|
||||
class="js-first-data"
|
||||
@mouseover.ctrl="showToolTip"
|
||||
|
@ -21,16 +21,20 @@
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div class="c-lad-table-wrapper u-style-receiver js-style-receiver" :class="staleClass">
|
||||
<table aria-label="lad table" class="c-table c-lad-table" :class="applyLayoutClass">
|
||||
<div
|
||||
id="lad-table-drop-area"
|
||||
class="c-lad-table-wrapper u-style-receiver js-style-receiver"
|
||||
:class="staleClass"
|
||||
>
|
||||
<table class="c-table c-lad-table" :class="applyLayoutClass">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th v-if="showTimestamp">Timestamp</th>
|
||||
<th>Value</th>
|
||||
<th v-if="hasUnits">Units</th>
|
||||
<th v-if="showType">Type</th>
|
||||
<th v-for="limitColumn in limitColumnNames" :key="limitColumn.key">
|
||||
<th scope="col">Name</th>
|
||||
<th v-if="showTimestamp" scope="col">Timestamp</th>
|
||||
<th scope="col">Value</th>
|
||||
<th v-if="hasUnits" scope="col">Units</th>
|
||||
<th v-if="showType" scope="col">Type</th>
|
||||
<th v-for="limitColumn in limitColumnNames" :key="limitColumn.key" scope="col">
|
||||
{{ limitColumn.label }}
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -268,7 +268,7 @@ export default class DisplayLayoutToolbar {
|
||||
message: `Warning! This action will remove this item from the Display Layout. Do you want to continue?`,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
emphasis: 'true',
|
||||
callback: () => {
|
||||
this.#openmct.objectViews.emit(
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
<template>
|
||||
<div
|
||||
id="display-layout-drop-area"
|
||||
class="l-layout u-style-receiver js-style-receiver"
|
||||
:class="{
|
||||
'is-multi-selected': selectedLayoutItems.length > 1,
|
||||
@ -453,7 +454,7 @@ export default {
|
||||
message: 'This item is already in layout and will not be added again.',
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: function () {
|
||||
prompt.dismiss();
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
class="l-layout__grid-holder"
|
||||
:class="{ 'c-grid': showGrid }"
|
||||
role="grid"
|
||||
:aria-label="'Layout Grid'"
|
||||
aria-label="Layout Grid"
|
||||
:aria-hidden="showGrid ? 'false' : 'true'"
|
||||
:aria-live="showGrid ? 'polite' : 'off'"
|
||||
>
|
||||
|
@ -99,7 +99,7 @@ function ToolbarProvider(openmct) {
|
||||
message: `This action will remove this frame from this Flexible Layout. Do you want to continue?`,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
emphasis: 'true',
|
||||
callback: function () {
|
||||
openmct.objectViews.emit(
|
||||
@ -170,7 +170,7 @@ function ToolbarProvider(openmct) {
|
||||
'This action will permanently delete this container from this Flexible Layout. Do you want to continue?',
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
emphasis: 'true',
|
||||
callback: function () {
|
||||
openmct.objectViews.emit(
|
||||
|
@ -115,7 +115,7 @@ describe('EditPropertiesAction plugin', () => {
|
||||
expect(notes.value).toEqual(domainObject.notes);
|
||||
|
||||
const buttons = form.querySelectorAll('button');
|
||||
expect(buttons[0].textContent.trim()).toEqual('OK');
|
||||
expect(buttons[0].textContent.trim()).toEqual('Ok');
|
||||
expect(buttons[1].textContent.trim()).toEqual('Cancel');
|
||||
|
||||
const clickEvent = createMouseEvent('click');
|
||||
@ -159,7 +159,7 @@ describe('EditPropertiesAction plugin', () => {
|
||||
const notes = form.querySelector('textArea');
|
||||
|
||||
const buttons = form.querySelectorAll('button');
|
||||
expect(buttons[0].textContent.trim()).toEqual('OK');
|
||||
expect(buttons[0].textContent.trim()).toEqual('Ok');
|
||||
expect(buttons[1].textContent.trim()).toEqual('Cancel');
|
||||
|
||||
expect(title.value).toEqual(domainObject.name);
|
||||
|
@ -20,18 +20,23 @@
|
||||
at runtime from the About dialog for additional information.
|
||||
-->
|
||||
<template>
|
||||
<!-- TODO: Better a11y for Gauges. See https://github.com/nasa/openmct/issues/7790 -->
|
||||
<div
|
||||
ref="gaugeWrapper"
|
||||
class="c-gauge__wrapper js-gauge-wrapper"
|
||||
:class="gaugeClasses"
|
||||
:aria-label="gaugeTitle"
|
||||
:title="gaugeTitle"
|
||||
:aria-valuemin="rangeLow"
|
||||
:aria-valuemax="rangeHigh"
|
||||
:aria-valuenow="curVal"
|
||||
:aria-valuetext="`Current value: ${curVal}`"
|
||||
>
|
||||
<template v-if="typeDial">
|
||||
<svg
|
||||
ref="gauge"
|
||||
class="c-gauge c-dial"
|
||||
viewBox="0 0 10 10"
|
||||
role="meter"
|
||||
@mouseover.ctrl="showToolTip"
|
||||
@mouseleave="hideToolTip"
|
||||
>
|
||||
@ -233,7 +238,7 @@
|
||||
</template>
|
||||
|
||||
<template v-if="typeMeter">
|
||||
<div class="c-meter" @mouseover.ctrl="showToolTip" @mouseleave="hideToolTip">
|
||||
<div class="c-meter" role="meter" @mouseover.ctrl="showToolTip" @mouseleave="hideToolTip">
|
||||
<div v-if="displayMinMax" class="c-gauge__range c-meter__range js-gauge-meter-range">
|
||||
<div class="c-meter__range__high">{{ rangeHigh }}</div>
|
||||
<div class="c-meter__range__low">{{ rangeLow }}</div>
|
||||
|
@ -327,10 +327,7 @@ export default {
|
||||
},
|
||||
mounted() {
|
||||
this.debounceResizeSvg = throttle(this.resizeSvg, 100);
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.debounceResizeSvg();
|
||||
});
|
||||
this.debounceResizeSvg();
|
||||
},
|
||||
methods: {
|
||||
resizeSvg() {
|
||||
|
@ -154,7 +154,7 @@ ${font}`;
|
||||
message: message,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: () => {
|
||||
dialog.dismiss();
|
||||
resolve();
|
||||
|
@ -90,7 +90,7 @@ export default {
|
||||
message: message,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: () => {
|
||||
dialog.dismiss();
|
||||
}
|
||||
@ -109,7 +109,7 @@ export default {
|
||||
message: message,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: () => {
|
||||
dialog.dismiss();
|
||||
}
|
||||
|
@ -98,12 +98,14 @@
|
||||
v-if="selectedPage && !selectedPage.isLocked"
|
||||
:aria-disabled="activeTransaction"
|
||||
class="c-notebook__drag-area icon-plus"
|
||||
aria-dropeffect="link"
|
||||
aria-labelledby="newEntryLabel"
|
||||
@click="newEntry(null, $event)"
|
||||
@dragover="dragOver"
|
||||
@drop.capture="dropCapture"
|
||||
@drop="dropOnEntry($event)"
|
||||
>
|
||||
<span class="c-notebook__drag-area__label">
|
||||
<span id="newEntryLabel" class="c-notebook__drag-area__label">
|
||||
To start a new entry, click here or drag and drop any object
|
||||
</span>
|
||||
</div>
|
||||
@ -150,9 +152,10 @@
|
||||
<button
|
||||
class="c-button commit-button icon-lock"
|
||||
title="Commit entries and lock this page from further changes"
|
||||
aria-labelledby="commitEntriesLabel"
|
||||
@click="lockPage()"
|
||||
>
|
||||
<span class="c-button__label">Commit Entries</span>
|
||||
<span id="commitEntriesLabel" class="c-button__label">Commit Entries</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -49,6 +49,7 @@
|
||||
<button
|
||||
class="c-ne__remove c-icon-button c-icon-button--major icon-trash"
|
||||
title="Delete this entry"
|
||||
aria-label="Delete this entry"
|
||||
tabindex="-1"
|
||||
@click.stop.prevent="deleteEntry"
|
||||
></button>
|
||||
|
@ -19,6 +19,7 @@ Get docker compose (or recent version of docker) installed on your machine. We r
|
||||
```sh
|
||||
docker compose -f ./couchdb-compose.yaml up --detach
|
||||
```
|
||||
|
||||
3. Copy `.env.ci` file to file named `.env.local`
|
||||
4. (Optional) Change the values of `.env.local` if desired
|
||||
5. Set the environment variables in bash by sourcing the env file
|
||||
@ -39,6 +40,7 @@ sh ./setup-couchdb.sh
|
||||
```sh
|
||||
sh ./src/plugins/persistence/couch/replace-localstorage-with-couchdb-indexhtml.sh
|
||||
```
|
||||
|
||||
9. ✅ Done!
|
||||
|
||||
Open MCT will now use your local CouchDB container as its persistence store. Access the CouchDB instance manager by visiting <http://localhost:5984/_utils>.
|
||||
@ -53,11 +55,11 @@ docker stop couch-couchdb-1;docker rm couch-couchdb-1;docker volume rm couch_cou
|
||||
|
||||
## macOS
|
||||
|
||||
While we highly recommend using the CouchDB docker-compose installation, it is still possible to install CouchDB through other means.
|
||||
We highly recommend using the CouchDB `docker compose` method of installation, though it is still possible to install CouchDB through other means.
|
||||
|
||||
### Installing CouchDB
|
||||
|
||||
1. Install CouchDB using: `brew install couchdb`.
|
||||
1. Install CouchDB using: `brew install couchdb`.
|
||||
2. Edit `/usr/local/etc/local.ini` and add the following settings:
|
||||
|
||||
```ini
|
||||
@ -81,10 +83,10 @@ While we highly recommend using the CouchDB docker-compose installation, it is s
|
||||
origins = http://localhost:8080
|
||||
```
|
||||
|
||||
|
||||
### Installing CouchDB without admin privileges to your computer
|
||||
|
||||
If `brew` is not available on your mac machine, you'll need to get the CouchDB installed using the official sourcefiles.
|
||||
|
||||
1. Install CouchDB following these instructions: <https://docs.brew.sh/Installation#untar-anywhere>.
|
||||
1. Edit `local.ini` in Homebrew's `/etc/` directory as directed above in the 'Installing with admin privileges to your computer' section.
|
||||
|
||||
@ -97,6 +99,7 @@ Follow the installation instructions from the CouchDB installation guide: <https
|
||||
## Configuration script
|
||||
|
||||
The simplest way to config a CouchDB instance is to use our provided tooling:
|
||||
|
||||
1. Copy `.env.ci` file to file named `.env.local`
|
||||
2. Set the environment variables in bash by sourcing the env file
|
||||
|
||||
@ -120,7 +123,9 @@ sh ./setup-couchdb.sh
|
||||
6. Remove permission restrictions in CouchDB from Open MCT by deleting `_admin` roles for both `Admin` and `Member`.
|
||||
|
||||
## Document Sizes
|
||||
|
||||
CouchDB has size limits on both its internal documents, and its httpd interface. If dealing with larger documents in Open MCT (e.g., users adding images to notebook entries), you may to increase this limit. To do this, add the following to the two sections:
|
||||
|
||||
```ini
|
||||
[couchdb]
|
||||
max_document_size = 4294967296 ; approx 4 GB
|
||||
@ -134,7 +139,9 @@ If not present, add them under proper sections. The values are in bytes, and can
|
||||
# Configuring Open MCT to use CouchDB
|
||||
|
||||
## Configuration script
|
||||
|
||||
The simplest way to config a CouchDB instance is to use our provided tooling:
|
||||
|
||||
1. `cd` to the workspace root directory (the same directory as `index.html`)
|
||||
2. Update `index.html` to use the CouchDB plugin as persistence store:
|
||||
|
||||
@ -200,10 +207,12 @@ openmct.install(
|
||||
```
|
||||
|
||||
Note: If using the `MyItems` plugin, be sure to configure a root for each writable namespace. E.g., if you have two namespaces called `apple-namespace` and `pear-namespace`:
|
||||
|
||||
```js
|
||||
openmct.install(openmct.plugins.MyItems('Apple Items', 'apple-namespace'));
|
||||
openmct.install(openmct.plugins.MyItems('Pear Items', 'pear-namespace'));
|
||||
```
|
||||
|
||||
This will create a root object with the id of `mine` in both namespaces upon load if not already created.
|
||||
|
||||
# Validating a successful Installation
|
||||
@ -217,28 +226,31 @@ This will create a root object with the id of `mine` in both namespaces upon loa
|
||||
# Maintenance
|
||||
|
||||
One can delete annotations by running inside this directory (i.e., `src/plugins/persistence/couch`):
|
||||
```
|
||||
|
||||
```sh
|
||||
npm run deleteAnnotations:openmct:PIXEL_SPATIAL
|
||||
```
|
||||
|
||||
will delete all image tags.
|
||||
|
||||
```
|
||||
```sh
|
||||
npm run deleteAnnotations:openmct
|
||||
```
|
||||
|
||||
will delete all tags.
|
||||
will delete all tags.
|
||||
|
||||
```
|
||||
```sh
|
||||
npm run deleteAnnotations:openmct -- --help
|
||||
```
|
||||
|
||||
will print help options.
|
||||
|
||||
# Search Performance
|
||||
|
||||
For large Open MCT installations, it may be helpful to add additional CouchDB capabilities to bear to improve performance.
|
||||
|
||||
## Indexing
|
||||
|
||||
Indexing the `model.type` field in CouchDB can benefit the performance of queries significantly, particularly if there are a large number of documents in the database. An index can accelerate annotation searches by reducing the number of documents that the database needs to examine.
|
||||
|
||||
To create an index for `model.type`, you can use the following payload [using the API](https://docs.couchdb.org/en/stable/api/database/find.html#post--db-_index):
|
||||
@ -271,10 +283,12 @@ We can also add a design document [through the API](https://docs.couchdb.org/en/
|
||||
}
|
||||
}
|
||||
```
|
||||
and can be retrieved by issuing a `GET` to http://localhost:5984/openmct/_design/annotation_tags_index/_view/by_tags?keys=["TAG_ID_TO_SEARCH_FOR"]&include_docs=true
|
||||
|
||||
and can be retrieved by issuing a `GET` to <http://localhost:5984/openmct/_design/annotation_tags_index/_view/by_tags?keys=["TAG_ID_TO_SEARCH_FOR"]&include_docs=true>
|
||||
where `TAG_ID_TO_SEARCH_FOR` is the tag UUID we're looking for.
|
||||
|
||||
and for targets:
|
||||
|
||||
```javascript
|
||||
{
|
||||
"_id": "_design/annotation_keystring_index",
|
||||
@ -285,7 +299,8 @@ and for targets:
|
||||
}
|
||||
}
|
||||
```
|
||||
and can be retrieved by issuing a `GET` to http://localhost:5984/openmct/_design/annotation_keystring_index/_view/by_keystring?keys=["KEY_STRING_TO_SEARCH_FOR"]&include_docs=true
|
||||
|
||||
and can be retrieved by issuing a `GET` to <http://localhost:5984/openmct/_design/annotation_keystring_index/_view/by_keystring?keys=["KEY_STRING_TO_SEARCH_FOR"]&include_docs=true>
|
||||
where `KEY_STRING_TO_SEARCH_FOR` is the UUID we're looking for.
|
||||
|
||||
To enable them in Open MCT, we need to configure the plugin `useDesignDocuments` like so:
|
||||
|
@ -88,9 +88,15 @@
|
||||
<button
|
||||
class="c-button icon-minus"
|
||||
title="Zoom out"
|
||||
aria-label="Zoom out"
|
||||
@click="zoom('out', 0.2)"
|
||||
></button>
|
||||
<button class="c-button icon-plus" title="Zoom in" @click="zoom('in', 0.2)"></button>
|
||||
<button
|
||||
class="c-button icon-plus"
|
||||
title="Zoom in"
|
||||
aria-label="Zoom in"
|
||||
@click="zoom('in', 0.2)"
|
||||
></button>
|
||||
</div>
|
||||
<div
|
||||
v-if="plotHistory.length && !options.compact"
|
||||
@ -98,12 +104,14 @@
|
||||
>
|
||||
<button
|
||||
class="c-button icon-arrow-left"
|
||||
title="Restore previous pan/zoom"
|
||||
title="Restore previous pan and zoom"
|
||||
aria-label="Restore previous pan and zoom"
|
||||
@click="back()"
|
||||
></button>
|
||||
<button
|
||||
class="c-button icon-reset"
|
||||
title="Reset pan/zoom"
|
||||
title="Reset pan and zoom"
|
||||
aria-label="Reset pan and zoom"
|
||||
@click="resumeRealtimeData()"
|
||||
></button>
|
||||
</div>
|
||||
@ -115,12 +123,14 @@
|
||||
v-if="!isFrozen"
|
||||
class="c-button icon-pause"
|
||||
title="Pause incoming real-time data"
|
||||
aria-label="Pause incoming real-time data"
|
||||
@click="pause()"
|
||||
></button>
|
||||
<button
|
||||
v-if="isFrozen"
|
||||
class="c-button icon-arrow-right pause-play is-paused"
|
||||
title="Resume displaying real-time data"
|
||||
aria-label="Resume displaying real-time data"
|
||||
@click="resumeRealtimeData()"
|
||||
></button>
|
||||
</div>
|
||||
@ -128,6 +138,7 @@
|
||||
<button
|
||||
class="c-button icon-clock"
|
||||
title="Synchronize Time Conductor"
|
||||
aria-label="Synchronize Time Conductor"
|
||||
@click="showSynchronizeDialog()"
|
||||
></button>
|
||||
</div>
|
||||
@ -136,12 +147,14 @@
|
||||
class="c-button icon-crosshair"
|
||||
:class="{ 'is-active': cursorGuide }"
|
||||
title="Toggle cursor guides"
|
||||
aria-label="Toggle cursor guides"
|
||||
@click="toggleCursorGuide"
|
||||
></button>
|
||||
<button
|
||||
class="c-button"
|
||||
:class="{ 'icon-grid-on': gridLines, 'icon-grid-off': !gridLines }"
|
||||
title="Toggle grid lines"
|
||||
aria-label="Toggle grid lines"
|
||||
@click="toggleGridLines"
|
||||
></button>
|
||||
</div>
|
||||
@ -1795,7 +1808,7 @@ export default {
|
||||
message: message,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: () => {
|
||||
dialog.dismiss();
|
||||
this.synchronizeTimeConductor();
|
||||
|
@ -137,9 +137,8 @@ export default {
|
||||
},
|
||||
ariaLabelExpandCollapse() {
|
||||
const name = this.series.domainObject.name ? ` ${this.series.domainObject.name}` : '';
|
||||
const type = this.series.domainObject.type ? ` ${this.series.domainObject.type}` : '';
|
||||
|
||||
return `${this.expanded ? 'Collapse' : 'Expand'}${name}${type}`;
|
||||
return `${this.expanded ? 'Collapse' : 'Expand'}${name} Plot Series Options`;
|
||||
},
|
||||
isAliasClass() {
|
||||
let cssClass = '';
|
||||
|
@ -175,9 +175,8 @@ export default {
|
||||
computed: {
|
||||
ariaLabelValue() {
|
||||
const name = this.series.domainObject.name ? ` ${this.series.domainObject.name}` : '';
|
||||
const type = this.series.domainObject.type ? ` ${this.series.domainObject.type}` : '';
|
||||
|
||||
return `${this.expanded ? 'Collapse' : 'Expand'}${name}${type}`;
|
||||
return `${this.expanded ? 'Collapse' : 'Expand'}${name} Plot Series Options`;
|
||||
},
|
||||
colorPalette() {
|
||||
return this.series.collection.palette.groups();
|
||||
|
@ -27,11 +27,13 @@
|
||||
'is-legend-hidden': isLegendHidden
|
||||
}"
|
||||
>
|
||||
<div
|
||||
<button
|
||||
class="c-plot-legend__view-control gl-plot-legend__view-control c-disclosure-triangle is-enabled"
|
||||
:class="{ 'c-disclosure-triangle--expanded': isLegendExpanded }"
|
||||
:aria-label="ariaLabelValue"
|
||||
tabindex="0"
|
||||
@click="toggleLegend"
|
||||
></div>
|
||||
></button>
|
||||
|
||||
<div class="c-plot-legend__wrapper" :class="{ 'is-cursor-locked': cursorLocked }">
|
||||
<!-- COLLAPSED PLOT LEGEND -->
|
||||
@ -127,6 +129,11 @@ export default {
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
ariaLabelValue() {
|
||||
const name = this.domainObject.name ? ` ${this.domainObject.name}` : '';
|
||||
|
||||
return `${this.isLegendExpanded ? 'Collapse' : 'Expand'}${name} Legend`;
|
||||
},
|
||||
showUnitsWhenExpanded() {
|
||||
return this.loaded && this.legend.get('showUnitsWhenExpanded') === true;
|
||||
},
|
||||
|
@ -75,7 +75,7 @@ class RemoveAction {
|
||||
message,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
callback: () => {
|
||||
dialog.dismiss();
|
||||
resolve();
|
||||
|
@ -253,7 +253,7 @@ export default {
|
||||
message: `This action will remove this tab from the Tabs Layout. Do you want to continue?`,
|
||||
buttons: [
|
||||
{
|
||||
label: 'OK',
|
||||
label: 'Ok',
|
||||
emphasis: 'true',
|
||||
callback: () => {
|
||||
this.composition.remove(childDomainObject);
|
||||
|
Reference in New Issue
Block a user