Compare commits

...

18 Commits

Author SHA1 Message Date
cb8e906f93 Merge branch 'master' of https://github.com/nasa/openmct into regex-search-tables 2020-12-01 14:42:35 -08:00
be746db774 fix lint errors 2020-11-25 09:15:31 -08:00
de9d972cf6 merge with master 2020-11-25 09:10:32 -08:00
5ac43ccf6a Merge branch 'master' into regex-search-tables 2020-07-20 11:16:10 -07:00
d29b4d3b83 Merge branch 'master' into regex-search-tables 2020-07-13 12:44:36 -07:00
541e96a20a Merge branch 'master' into regex-search-tables 2020-05-26 11:13:27 -07:00
1554823416 Merge branch 'master' into regex-search-tables 2020-05-11 14:37:15 -07:00
674a888d80 Merge branch 'master' into regex-search-tables 2020-05-08 10:52:00 -07:00
ec9dbabc46 fixes regression when search string is modified 2020-05-08 10:50:36 -07:00
c148160fa8 Merge branch 'master' into regex-search-tables 2020-05-05 12:14:00 -07:00
8b45dae1f1 use to trigger dom update when clearing input 2020-04-21 21:08:32 -07:00
1ec0274984 Styling for table search regex button
- Polish size of button;
2020-04-21 17:29:56 -07:00
9de1927834 remove unused variable 2020-04-21 16:18:56 -07:00
df3991cbd5 Merge branch 'master' into regex-search-tables 2020-04-21 16:16:11 -07:00
528a2aad8c change title and clear out input on toggle regex 2020-04-21 16:01:43 -07:00
c9a29d0854 Styling for table search regex button
- Allow user input to be retained when toggling regex on/off;
2020-04-20 17:24:14 -07:00
d28c4e8711 Styling for table search regex button
- Hover display/hide and styling for regex button;
2020-04-20 17:23:29 -07:00
ac04983c5b working prototype ready for styling 2020-04-18 14:05:17 -07:00
4 changed files with 105 additions and 4 deletions

View File

@ -46,6 +46,7 @@ define(
filter = filter.trim().toLowerCase(); filter = filter.trim().toLowerCase();
let rowsToFilter = this.getRowsToFilter(columnKey, filter); let rowsToFilter = this.getRowsToFilter(columnKey, filter);
if (filter.length === 0) { if (filter.length === 0) {
delete this.columnFilters[columnKey]; delete this.columnFilters[columnKey];
} else { } else {
@ -56,6 +57,16 @@ define(
this.emit('filter'); this.emit('filter');
} }
setColumnRegexFilter(columnKey, filter) {
filter = filter.trim();
let rowsToFilter = this.masterCollection.getRows();
this.columnFilters[columnKey] = new RegExp(filter);
this.rows = rowsToFilter.filter(this.matchesFilters, this);
this.emit('filter');
}
/** /**
* @private * @private
*/ */
@ -71,6 +82,10 @@ define(
* @private * @private
*/ */
isSubsetOfCurrentFilter(columnKey, filter) { isSubsetOfCurrentFilter(columnKey, filter) {
if (this.columnFilters[columnKey] instanceof RegExp) {
return false;
}
return this.columnFilters[columnKey] return this.columnFilters[columnKey]
&& filter.startsWith(this.columnFilters[columnKey]) && filter.startsWith(this.columnFilters[columnKey])
// startsWith check will otherwise fail when filter cleared // startsWith check will otherwise fail when filter cleared
@ -97,7 +112,11 @@ define(
return false; return false;
} }
doesMatchFilters = formattedValue.toLowerCase().indexOf(this.columnFilters[key]) !== -1; if (this.columnFilters[key] instanceof RegExp) {
doesMatchFilters = this.columnFilters[key].test(formattedValue);
} else {
doesMatchFilters = formattedValue.toLowerCase().indexOf(this.columnFilters[key]) !== -1;
}
}); });
return doesMatchFilters; return doesMatchFilters;

View File

@ -188,7 +188,17 @@
class="c-table__search" class="c-table__search"
@input="filterChanged(key)" @input="filterChanged(key)"
@clear="clearFilter(key)" @clear="clearFilter(key)"
/> >
<button
class="c-search__use-regex"
:class="{ 'is-active': enableRegexSearch[key] }"
title="Click to enable regex: enter a string with slashes, like this: /regex_exp/"
@click="toggleRegex(key)"
>
/R/
</button>
</search>
</table-column-header> </table-column-header>
</tr> </tr>
</thead> </thead>
@ -361,6 +371,7 @@ export default {
paused: false, paused: false,
markedRows: [], markedRows: [],
isShowingMarkedRowsOnly: false, isShowingMarkedRowsOnly: false,
enableRegexSearch: {},
hideHeaders: configuration.hideHeaders, hideHeaders: configuration.hideHeaders,
totalNumberOfRows: 0 totalNumberOfRows: 0
}; };
@ -618,7 +629,16 @@ export default {
this.headersHolderEl.scrollLeft = this.scrollable.scrollLeft; this.headersHolderEl.scrollLeft = this.scrollable.scrollLeft;
}, },
filterChanged(columnKey) { filterChanged(columnKey) {
this.table.filteredRows.setColumnFilter(columnKey, this.filters[columnKey]); if (this.enableRegexSearch[columnKey]) {
if (this.isCompleteRegex(this.filters[columnKey])) {
this.table.filteredRows.setColumnRegexFilter(columnKey, this.filters[columnKey].slice(1, -1));
} else {
return;
}
} else {
this.table.filteredRows.setColumnFilter(columnKey, this.filters[columnKey]);
}
this.setHeight(); this.setHeight();
}, },
clearFilter(columnKey) { clearFilter(columnKey) {
@ -956,6 +976,18 @@ export default {
this.$nextTick().then(this.calculateColumnWidths); this.$nextTick().then(this.calculateColumnWidths);
}, },
toggleRegex(key) {
this.$set(this.filters, key, '');
if (this.enableRegexSearch[key] === undefined) {
this.$set(this.enableRegexSearch, key, true);
} else {
this.$set(this.enableRegexSearch, key, !this.enableRegexSearch[key]);
}
},
isCompleteRegex(string) {
return (string.length > 2 && string[0] === '/' && string[string.length - 1] === '/');
},
getViewContext() { getViewContext() {
return { return {
type: 'telemetry-table', type: 'telemetry-table',

View File

@ -1,6 +1,11 @@
@mixin visibleRegexButton {
opacity: 1;
padding: 1px 3px;
width: 24px;
}
.c-search { .c-search {
@include wrappedInput(); @include wrappedInput();
padding-top: 2px; padding-top: 2px;
padding-bottom: 2px; padding-bottom: 2px;
@ -9,11 +14,46 @@
content: $glyph-icon-magnify; content: $glyph-icon-magnify;
} }
&__use-regex {
// Button
$c: $colorBodyFg;
background: rgba($c, 0.2);
border: 1px solid rgba($c, 0.3);
color: $c;
border-radius: $controlCr;
font-weight: bold;
letter-spacing: 1px;
font-size: 0.8em;
margin-left: $interiorMarginSm;
min-width: 0;
opacity: 0;
order: 2;
overflow: hidden;
padding: 1px 0;
transform-origin: left;
transition: $transOut;
width: 0;
&.is-active {
$c: $colorBtnActiveBg;
@include visibleRegexButton();
background: rgba($c, 0.3);
border-color: $c;
color: $c;
}
}
&__clear-input { &__clear-input {
display: none; display: none;
order: 99;
padding: 1px 0;
} }
&.is-active { &.is-active {
.c-search__use-regex {
margin-left: 0;
}
.c-search__clear-input { .c-search__clear-input {
display: block; display: block;
} }
@ -21,6 +61,15 @@
input[type='text'], input[type='text'],
input[type='search'] { input[type='search'] {
margin-left: $interiorMargin;
order: 3;
text-align: left; text-align: left;
} }
&:hover {
.c-search__use-regex {
@include visibleRegexButton();
transition: $transIn;
}
}
} }

View File

@ -15,6 +15,7 @@
class="c-search__clear-input icon-x-in-circle" class="c-search__clear-input icon-x-in-circle"
@click="clearInput" @click="clearInput"
></a> ></a>
<slot></slot>
</div> </div>
</template> </template>