Compare commits

...

8 Commits

Author SHA1 Message Date
371d132bfc Missing/unknown item should appear visually distinct
- Remove unneeded in-progress CSS;
2019-07-01 14:37:17 -07:00
91904ec22d Missing/unknown item should appear visually distinct
- Add missing/unknown styling to browse-bar;
2019-07-01 13:29:02 -07:00
afaee9a483 Missing/unknown item should appear visually distinct
- Apply missing/unknown styling to tabs view;
- Augment `isUnknown` mixin to also target same element with class
icon*;
2019-07-01 13:21:59 -07:00
709e1eb10e Missing/unknown item should appear visually distinct
- 'no-frame' CSS class application only allowed if domainObject.type is
not unknown;
- Show telemetry-view label element if domainObject.type is unknown;
2019-07-01 12:42:43 -07:00
6740677652 Missing/unknown item should appear visually distinct
- Styling applied to telemetry views for type unknown;
2019-06-28 09:42:51 -07:00
ee7521915f Missing/unknown item should appear visually distinct
- New "isUnknown" sass mixin to consolidate styling;
- Refined styling for grid, list-item and object label views;
- Flex and Display Layout frame headers now style properly for
missing/unknown items;
- TODO: visual indication when header is hidden (alphanumerics, summary
widgets, frame hidden manually, etc.)
2019-06-26 16:41:55 -07:00
bc590081b3 Missing/unknown item should appear visually distinct
- Styling for grid and list-item views;
- Refactor of item hover approach to use filters rather than discrete
colors;
2019-06-26 09:52:13 -07:00
854ffb9153 Missing/unknown item should appear visually distinct
- Theme color added;
- Styling for tree items;
- Removed unused tree item hover styling;
2019-06-26 06:12:07 -07:00
17 changed files with 131 additions and 154 deletions

View File

@ -22,7 +22,7 @@
<template> <template>
<layout-frame :item="item" <layout-frame :item="item"
:grid-size="gridSize" :grid-size="gridSize"
:title="domainObject && domainObject.name" :title="domainObject && domainObject.name + ': ' + domainObject.type"
@move="(gridDelta) => $emit('move', gridDelta)" @move="(gridDelta) => $emit('move', gridDelta)"
@endMove="() => $emit('endMove')"> @endMove="() => $emit('endMove')">
<object-frame v-if="domainObject" <object-frame v-if="domainObject"

View File

@ -23,12 +23,14 @@
<template> <template>
<layout-frame :item="item" <layout-frame :item="item"
:grid-size="gridSize" :grid-size="gridSize"
:title="domainObject && domainObject.name + ': ' + domainObject.type"
:class="{'c-telemetry-view--unknown': domainObject.type.indexOf('unknown') !== -1}"
@move="(gridDelta) => $emit('move', gridDelta)" @move="(gridDelta) => $emit('move', gridDelta)"
@endMove="() => $emit('endMove')"> @endMove="() => $emit('endMove')">
<div class="c-telemetry-view" <div class="c-telemetry-view"
:style="styleObject" :style="styleObject"
v-if="domainObject"> v-if="domainObject">
<div v-if="showLabel" <div v-if="showLabel || domainObject.type.indexOf('unknown') !== -1"
class="c-telemetry-view__label"> class="c-telemetry-view__label">
<div class="c-telemetry-view__label-text">{{ domainObject.name }}</div> <div class="c-telemetry-view__label-text">{{ domainObject.name }}</div>
</div> </div>
@ -50,6 +52,21 @@
display: flex; display: flex;
align-items: stretch; align-items: stretch;
&--unknown {
.c-telemetry-view__label-text {
@include isUnknown();
display: flex;
align-items: center;
&:before {
content: $glyph-icon-object-unknown;
font-family: symbolsfont;
font-style: normal;
display: inline-block;
margin-right: $interiorMarginSm;
}
}
}
> * { > * {
// Label and value holders // Label and value holders
flex: 1 1 auto; flex: 1 1 auto;

View File

@ -1,6 +1,6 @@
<template> <template>
<a class="l-grid-view__item c-grid-item" <a class="l-grid-view__item c-grid-item"
:class="{ 'is-alias': item.isAlias === true }" :class="{ 'is-alias': item.isAlias === true, 'c-grid-item--unknown': item.type.cssClass === undefined || item.type.cssClass.indexOf('unknown') !== -1 }"
:href="objectLink"> :href="objectLink">
<div class="c-grid-item__type-icon" <div class="c-grid-item__type-icon"
:class="(item.type.cssClass != undefined) ? 'bg-' + item.type.cssClass : 'bg-icon-object-unknown'"> :class="(item.type.cssClass != undefined) ? 'bg-' + item.type.cssClass : 'bg-icon-object-unknown'">
@ -34,10 +34,13 @@
padding: $interiorMarginLg; padding: $interiorMarginLg;
&__type-icon { &__type-icon {
filter: $colorKeyFilter;
flex: 0 0 $gridItemMobile; flex: 0 0 $gridItemMobile;
font-size: floor($gridItemMobile / 2); font-size: floor($gridItemMobile / 2);
margin-right: $interiorMarginLg; margin-right: $interiorMarginLg;
&:before {
filter: $colorKeyFilter;
height: 100%;
}
} }
&.is-alias { &.is-alias {
@ -48,6 +51,22 @@
} }
} }
&--unknown {
@include isUnknown();
/*[class*='__'] {
opacity: 0.7;
}
[class*='__name'],
[class*='__metadata'] {
font-style: italic;
}*/
[class*='__type-icon__glyph'] {
filter: $filterItemUnknown;
}
}
&__details { &__details {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
@ -93,11 +112,10 @@
transition: background $transOutMs ease-in-out; transition: background $transOutMs ease-in-out;
&:hover { &:hover {
background: $colorItemBgHov; filter: $filterItemHoverFg;
transition: $transIn; //transition: $transIn;
.c-grid-item__type-icon { .c-grid-item__type-icon {
filter: $colorKeyFilterHov;
transform: scale(1); transform: scale(1);
transition: $transInBounce; transition: $transInBounce;
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="l-grid-view"> <div class="l-grid-view foo">
<grid-item v-for="(item, index) in items" <grid-item v-for="(item, index) in items"
:key="index" :key="index"
:item="item" :item="item"
@ -31,129 +31,6 @@
} }
} }
} }
/******************************* GRID ITEMS */
.c-grid-item {
// Mobile-first
@include button($bg: $colorItemBg, $fg: $colorItemFg);
cursor: pointer;
display: flex;
padding: $interiorMarginLg;
&__type-icon {
filter: $colorKeyFilter;
flex: 0 0 $gridItemMobile;
font-size: floor($gridItemMobile / 2);
margin-right: $interiorMarginLg;
}
&.is-alias {
// Object is an alias to an original.
[class*='__type-icon'] {
@include isAlias();
color: $colorIconAliasForKeyFilter;
}
}
&__details {
display: flex;
flex-flow: column nowrap;
flex: 1 1 auto;
}
&__name {
@include ellipsize();
color: $colorItemFg;
font-size: 1.2em;
font-weight: 400;
margin-bottom: $interiorMarginSm;
}
&__metadata {
color: $colorItemFgDetails;
font-size: 0.9em;
body.mobile & {
[class*='__item-count'] {
&:before {
content: ' - ';
}
}
}
}
&__controls {
color: $colorItemFgDetails;
flex: 0 0 64px;
font-size: 1.2em;
display: flex;
align-items: center;
justify-content: flex-end;
> * + * {
margin-left: $interiorMargin;
}
}
body.desktop & {
$transOutMs: 300ms;
flex-flow: column nowrap;
transition: background $transOutMs ease-in-out;
&:hover {
background: $colorItemBgHov;
transition: $transIn;
.c-grid-item__type-icon {
filter: $colorKeyFilterHov;
transform: scale(1);
transition: $transInBounce;
}
}
> * {
margin: 0; // Reset from mobile
}
&__controls {
align-items: start;
flex: 0 0 auto;
order: 1;
.c-info-button,
.c-pointer-icon { display: none; }
}
&__type-icon {
flex: 1 1 auto;
font-size: floor($gridItemDesk / 3);
margin: $interiorMargin 22.5% $interiorMargin * 3 22.5%;
order: 2;
transform: scale(0.9);
transform-origin: center;
transition: all $transOutMs ease-in-out;
}
&__details {
flex: 0 0 auto;
justify-content: flex-end;
order: 3;
}
&__metadata {
display: flex;
&__type {
flex: 1 1 auto;
@include ellipsize();
}
&__item-count {
opacity: 0.7;
flex: 0 0 auto;
}
}
}
}
</style> </style>
<script> <script>

View File

@ -1,6 +1,6 @@
<template> <template>
<tr class="c-list-item" <tr class="c-list-item"
:class="{ 'is-alias': item.isAlias === true }" :class="{ 'is-alias': item.isAlias === true, 'c-list-item--unknown': item.type.cssClass === undefined || item.type.cssClass.indexOf('unknown') !== -1 }"
@click="navigate"> @click="navigate">
<td class="c-list-item__name"> <td class="c-list-item__name">
<a :href="objectLink" ref="objectLink"> <a :href="objectLink" ref="objectLink">
@ -20,6 +20,7 @@
/******************************* LIST ITEM */ /******************************* LIST ITEM */
.c-list-item { .c-list-item {
&__name a { &__name a {
color: $colorItemFg;
display: flex; display: flex;
> * + * { margin-left: $interiorMarginSm; } > * + * { margin-left: $interiorMarginSm; }
@ -53,6 +54,11 @@
} }
} }
} }
&--unknown {
@include isUnknown();
filter: $filterItemUnknown;
}
} }
</style> </style>

View File

@ -62,15 +62,16 @@
tbody tr { tbody tr {
background: $colorListItemBg; background: $colorListItemBg;
transition: $transOut;
} }
body.desktop & { body.desktop & {
tbody tr { tbody tr {
transition: $transOut;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background: $colorListItemBgHov; background: $colorItemTreeHoverBg;
filter: $filterItemHoverFg;
transition: $transIn; transition: $transIn;
} }
} }

View File

@ -16,7 +16,10 @@
v-for="(tab,index) in tabsList" v-for="(tab,index) in tabsList"
:key="index" :key="index"
:class="[ :class="[
{'is-current': isCurrent(tab)}, {
'is-current': isCurrent(tab),
'c-tab--unknown': tab.type.definition.cssClass.indexOf('unknown') !== -1
},
tab.type.definition.cssClass tab.type.definition.cssClass
]" ]"
@click="showTab(tab)"> @click="showTab(tab)">
@ -29,7 +32,12 @@
:class="{'c-tabs-view__object-holder--hidden': !isCurrent(tab)}"> :class="{'c-tabs-view__object-holder--hidden': !isCurrent(tab)}">
<div v-if="currentTab" <div v-if="currentTab"
class="c-tabs-view__object-name l-browse-bar__object-name--w" class="c-tabs-view__object-name l-browse-bar__object-name--w"
:class="currentTab.type.definition.cssClass"> :class="[
{
'c-tabs-view__object--unknown': tab.type.definition.cssClass.indexOf('unknown') !== -1
},
currentTab.type.definition.cssClass
]">
<div class="l-browse-bar__object-name"> <div class="l-browse-bar__object-name">
{{currentTab.domainObject.name}} {{currentTab.domainObject.name}}
</div> </div>
@ -102,6 +110,13 @@
width: 100%; width: 100%;
} }
} }
.c-tab,
.c-tabs-view__object {
&--unknown {
@include isUnknown();
}
}
</style> </style>
<script> <script>

View File

@ -108,6 +108,10 @@
a { a {
color: $colorAboutLink; color: $colorAboutLink;
&:hover {
color: $colorAHov;
}
} }
em { em {

View File

@ -142,6 +142,8 @@ $browseFrameColor: pullForward($colorBodyBg, 10%);
$browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing $browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing
$browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px; $browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px;
$browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4); $browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4);
$filterItemHoverFg: brightness(1.2);
$filterItemUnknown: contrast(0);
/************************************************** EDITING */ /************************************************** EDITING */
$editUIColor: $uiColor; // Base color $editUIColor: $uiColor; // Base color

View File

@ -146,6 +146,8 @@ $browseFrameColor: pullForward($colorBodyBg, 10%);
$browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing $browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing
$browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px; $browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px;
$browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4); $browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4);
$filterItemHoverFg: brightness(1.2);
$filterItemUnknown: contrast(0);
/************************************************** EDITING */ /************************************************** EDITING */
$editUIColor: $uiColor; // Base color $editUIColor: $uiColor; // Base color

View File

@ -142,6 +142,8 @@ $browseFrameColor: pullForward($colorBodyBg, 10%);
$browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing $browseFrameBorder: 1px solid $browseFrameColor; // Frames in Disp and Flex Layouts when frame is showing
$browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px; $browseSelectableShdwHov: rgba($colorBodyFg, 0.3) 0 0 3px;
$browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4); $browseSelectedBorder: 1px solid rgba($colorBodyFg, 0.4);
$filterItemHoverFg: brightness(0.9);
$filterItemUnknown: contrast(0);
/************************************************** EDITING */ /************************************************** EDITING */
$editUIColor: $uiColor; // Base color $editUIColor: $uiColor; // Base color

View File

@ -79,9 +79,6 @@ a {
color: $colorA; color: $colorA;
cursor: pointer; cursor: pointer;
text-decoration: none; text-decoration: none;
&:hover {
color: $colorAHov;
}
} }
body, html { body, html {

View File

@ -36,10 +36,14 @@
} }
@mixin glyphBg($glyphUrl) { @mixin glyphBg($glyphUrl) {
background-image: $glyphUrl; &:before {
background-position: center; content: '';
background-size: contain; display: block;
background-repeat: no-repeat; background-image: $glyphUrl;
background-position: center;
background-size: contain;
background-repeat: no-repeat;
}
} }
[class*="icon-"] { [class*="icon-"] {
@ -97,6 +101,24 @@
} }
} }
@mixin isUnknown() {
// Common styles to be applied to tree items, object labels, grid and list item views
font-style: italic;
opacity: 0.7;
&[class*='icon']:before,
&[class*='icon']:after,
[class*='icon']:before,
[class*='icon']:after {
font-style: normal; // Prevent symbolsfont element from being italicized;
}
[class*='icon']:before {
// Target :before to avoid affecting alias indicator
filter: $filterItemUnknown;
}
}
@mixin bgDiagonalStripes($c: yellow, $a: 0.1, $d: 40px) { @mixin bgDiagonalStripes($c: yellow, $a: 0.1, $d: 40px) {
background-image: linear-gradient(-45deg, background-image: linear-gradient(-45deg,
rgba($c, $a) 25%, transparent 25%, rgba($c, $a) 25%, transparent 25%,

View File

@ -22,11 +22,13 @@
<template> <template>
<div class="c-so-view has-local-controls" <div class="c-so-view has-local-controls"
:class="{ :class="{
'c-so-view--no-frame': !hasFrame, 'c-so-view--no-frame': !hasFrame && cssClass.indexOf('unknown') === -1,
'has-complex-content': complexContent 'has-complex-content': complexContent
}"> }">
<div class="c-so-view__header"> <div class="c-so-view__header"
<div class="c-so-view__header__icon" :class="cssClass"></div> :class="{'c-so-view__header--unknown': cssClass.indexOf('unknown') !== -1}">
<div class="c-so-view__header__icon"
:class="cssClass"></div>
<div class="c-so-view__header__name"> <div class="c-so-view__header__name">
{{ domainObject && domainObject.name }} {{ domainObject && domainObject.name }}
</div> </div>
@ -74,6 +76,10 @@
@include ellipsize(); @include ellipsize();
flex: 0 1 auto; flex: 0 1 auto;
} }
&--unknown {
@include isUnknown();
}
} }
&:not(.c-so-view--no-frame) { &:not(.c-so-view--no-frame) {

View File

@ -1,5 +1,6 @@
<template> <template>
<a class="c-tree__item__label c-object-label" <a class="c-tree__item__label c-object-label"
:class="{'c-object-label--unknown': typeClass.indexOf('icon-object-unknown') !== -1}"
draggable="true" draggable="true"
@dragstart="dragStart" @dragstart="dragStart"
@click="navigateOrPreview" @click="navigateOrPreview"
@ -39,6 +40,10 @@
color: $colorItemTreeIcon; color: $colorItemTreeIcon;
width: $treeTypeIconW; width: $treeTypeIconW;
} }
&--unknown {
@include isUnknown();
}
} }
</style> </style>

View File

@ -5,7 +5,12 @@
class="l-browse-bar__nav-to-parent-button c-icon-button c-icon-button--major icon-pointer-left" class="l-browse-bar__nav-to-parent-button c-icon-button c-icon-button--major icon-pointer-left"
@click="goToParent"></button> @click="goToParent"></button>
<div class="l-browse-bar__object-name--w" <div class="l-browse-bar__object-name--w"
:class="type.cssClass"> :class="[
{
'l-browse-bar--unknown': type.cssClass.indexOf('unknown') !== -1
},
type.cssClass
]">
<span <span
class="l-browse-bar__object-name c-input-inline" class="l-browse-bar__object-name c-input-inline"
@blur="updateName" @blur="updateName"
@ -316,5 +321,9 @@ const PLACEHOLDER_OBJECT = {};
&__object-name { &__object-name {
flex: 0 1 auto; flex: 0 1 auto;
} }
&--unknown {
@include isUnknown();
}
} }
</style> </style>

View File

@ -83,13 +83,7 @@
&:hover { &:hover {
background: $colorItemTreeHoverBg; background: $colorItemTreeHoverBg;
.c-tree__item__type-icon:before { > * { filter: $filterItemHoverFg; }
color: $colorItemTreeIconHover;
}
.c-tree__item__name {
color: $colorItemTreeHoverFg;
}
} }
&.is-navigated-object, &.is-navigated-object,