From 5538fc76e50e2a977c1cae1bec9b46f9172a51aa Mon Sep 17 00:00:00 2001 From: Bram Wiepjes <bramw@protonmail.com> Date: Wed, 10 Apr 2019 21:46:28 +0200 Subject: [PATCH] moved select context to a separate component --- web-frontend/public/grid.html | 148 ++++++++++++++--- .../src/scss/components/_context.scss | 44 ----- web-frontend/src/scss/components/_menu.scss | 37 ++--- web-frontend/src/scss/components/_select.scss | 151 ++++++++++++++++++ .../src/scss/components/fields/_boolean.scss | 2 + web-frontend/src/scss/default.scss | 1 + 6 files changed, 294 insertions(+), 89 deletions(-) create mode 100644 web-frontend/src/scss/components/_select.scss diff --git a/web-frontend/public/grid.html b/web-frontend/public/grid.html index 62e98e745..e87a2b95a 100644 --- a/web-frontend/public/grid.html +++ b/web-frontend/public/grid.html @@ -12,30 +12,84 @@ <div class="layout"> <div class="layout-col-1 menu"> <ul class="menu-items"> - <li> - <a href="#" class="menu-item active"> + <li class="menu-item"> + <a href="#" class="menu-link active"> <i class="fas fa-tachometer-alt"></i> - <span class="menu-item-text">Dashboard</span> + <span class="menu-link-text">Dashboard</span> </a> </li> - <li> - <a href="#" class="menu-item"> + <li class="menu-item"> + <a href="#" class="menu-link" data-context=".select"> <i class="fas fa-layer-group"></i> - <span class="menu-item-text">Groups</span> + <span class="menu-link-text">Groups</span> </a> + <div class="select hidden"> + <div class="select-search"> + <i class="select-search-icon fas fa-search"></i> + <input type="text" class="select-search-input" placeholder="Search views" /> + </div> + <ul class="select-items"> + <li class="select-item active"> + <a href="#" class="select-item-link">Group name 1</a> + <a href="#" class="select-item-options" data-context=".context"> + <i class="fas fa-ellipsis-v"></i> + </a> + <div class="context hidden"> + <ul class="context-menu"> + <li> + <a href="#"> + <i class="context-menu-icon fas fa-fw fa-pen"></i> + Rename group + </a> + </li> + <li> + <a href="#"> + <i class="context-menu-icon fas fa-fw fa-trash"></i> + Delete group + </a> + </li> + </ul> + </div> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Group name 2</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Group name 3</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Group name 4</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + </ul> + <div class="select-footer"> + <a href="#" class="select-footer-button"> + <i class="fas fa-plus"></i> + Do something + </a> + </div> + </div> </li> </ul> <ul class="menu-items"> - <li class="layout-uncollapse"> - <a href="#" class="menu-item" data-toggle-layout-collapse> - <i class="fas fa-angle-double-right"></i> - <span class="menu-item-text">Uncollapse</span> + <li class="menu-item layout-uncollapse"> + <a href="#" class="menu-link" data-toggle-layout-collapse> + <i class="menu-item-icon fas fa-angle-double-right"></i> + <span class="menu-link-text">Uncollapse</span> </a> </li> - <li> - <a href="#" class="user-item"> + <li class="menu-item"> + <a href="#" class="menu-link user-item"> B - <span class="menu-item-text">Full Name</span> + <span class="menu-link-text">Full Name</span> </a> </li> </ul> @@ -69,7 +123,7 @@ <li> <a href="#"> <i class="context-menu-icon fas fa-fw fa-trash"></i> - Rename table + Delete table </a> </li> </ul> @@ -183,21 +237,65 @@ <header class="layout-col-3-1 header"> <ul class="header-filter"> <li class="header-filter-item"> - <a href="#" class="header-filter-link" data-context=".context"> + <a href="#" class="header-filter-link" data-context=".select"> <i class="header-filter-icon fas fa-th"></i> Grid view name </a> - <div class="context"> - <div class="context-search"> - <i class="context-search-icon fas fa-search"></i> - <input type="text" class="context-search-input" placeholder="Search views" /> + <div class="select"> + <div class="select-search"> + <i class="select-search-icon fas fa-search"></i> + <input type="text" class="select-search-input" placeholder="Search views" /> </div> - @TODO - <div class="context-footer"> - <a href="#" class="context-footer-button"> - <i class="fas fa-plus"></i> - Do something - </a> + <ul class="select-items"> + <li class="select-item active"> + <a href="#" class="select-item-link">Grid view name</a> + <a href="#" class="select-item-options" data-context=".context"> + <i class="fas fa-ellipsis-v"></i> + </a> + <div class="context hidden"> + <ul class="context-menu"> + <li> + <a href="#"> + <i class="context-menu-icon fas fa-fw fa-pen"></i> + Rename + </a> + </li> + <li> + <a href="#"> + <i class="context-menu-icon fas fa-fw fa-trash"></i> + Delete + </a> + </li> + </ul> + </div> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Grid view option 2.</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Grid view 2</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + <li class="select-item"> + <a href="#" class="select-item-link">Grid view 3</a> + <a href="#" class="select-item-options"> + <i class="fas fa-ellipsis-v"></i> + </a> + </li> + </ul> + <div class="select-footer"> + <div class="select-footer-multiple"> + <div class="select-footer-multiple-label">Add a view:</div> + <a href="#" class="select-footer-multiple-item"> + <i class="select-footer-multiple-icon fas fa-th"></i> + Grid + </a> + </div> </div> </div> </li> diff --git a/web-frontend/src/scss/components/_context.scss b/web-frontend/src/scss/components/_context.scss index c8a55dc66..f013286f3 100644 --- a/web-frontend/src/scss/components/_context.scss +++ b/web-frontend/src/scss/components/_context.scss @@ -15,50 +15,6 @@ margin-bottom: 10px; } -.context-search { - position: relative; - border-bottom: 1px solid $color-neutral-200; -} - -.context-search-icon { - @include absolute(0, auto, auto, 0); - @include center-text(32px, 14px, 36px); - - color: $color-neutral-300; -} - -.context-search-input { - display: block; - width: 100%; - border: none; - padding: 0 12px 0 36px; - border-top-left-radius: 6px; - border-top-right-radius: 6px; - - @include fixed-height(36px, 14px); -} - -.context-footer { - border-top: 1px solid $color-neutral-200; -} - -.context-footer-button { - display: block; - padding: 0 12px; - color: $color-neutral-600; - - @include fixed-height(36px, 14px); - - .fas { - margin-right: 6px; - } - - &:hover { - background-color: $color-neutral-100; - text-decoration: none; - } -} - .context-menu { list-style: none; padding: 0; diff --git a/web-frontend/src/scss/components/_menu.scss b/web-frontend/src/scss/components/_menu.scss index 5ae9cbf6b..14a5bcf54 100644 --- a/web-frontend/src/scss/components/_menu.scss +++ b/web-frontend/src/scss/components/_menu.scss @@ -10,19 +10,16 @@ list-style: none; padding: 0; margin: 0; - - li { - margin: 10px; - } - - a { - position: relative; - display: block; - text-decoration: none; - } } .menu-item { + margin: 10px; +} + +.menu-link { + position: relative; + display: block; + text-decoration: none; border-radius: 3px; color: $white; @@ -37,16 +34,7 @@ } } -.user-item { - border-radius: 100%; - background-color: $color-primary-500; - color: $white; - font-weight: 700; - - @include center-text(32px, 18px); -} - -.menu-item-text { +.menu-link-text { display: none; position: absolute; left: 36px; @@ -64,3 +52,12 @@ display: block; } } + +.user-item { + border-radius: 100%; + background-color: $color-primary-500; + color: $white; + font-weight: 700; + + @include center-text(32px, 18px); +} diff --git a/web-frontend/src/scss/components/_select.scss b/web-frontend/src/scss/components/_select.scss new file mode 100644 index 000000000..ab2994762 --- /dev/null +++ b/web-frontend/src/scss/components/_select.scss @@ -0,0 +1,151 @@ +.select { + @extend .context; + + max-width: 360px; +} + +.select-search { + position: relative; + border-bottom: 1px solid $color-neutral-200; +} + +.select-search-icon { + color: $color-neutral-300; + + @include absolute(0, auto, auto, 0); + @include center-text(32px, 14px, 36px); +} + +.select-search-input { + display: block; + width: 100%; + border: none; + padding: 0 12px 0 36px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; + + @include fixed-height(36px, 14px); +} + +.select-items { + list-style: none; + padding: 0; + margin: 10px 0; +} + +%select-item-size { + @include fixed-height(32px, 14px); +} + +.select-item { + @extend %select-item-size; + + position: relative; + margin: 0 8px 4px 8px; + padding: 0 32px 0 10px; + border-radius: 3px; + + &:hover { + background-color: $color-neutral-100; + } + + &.active { + background-color: $color-primary-100; + + &::after { + @extend .fas; + @extend %select-item-size; + + content: fa-content($fa-var-check-circle); + width: 32px; + text-align: center; + color: $color-success-500; + + @include absolute(0, 0, auto, auto); + } + + &:hover::after { + display: none; + } + } +} + +.select-item-link { + @extend %ellipsis; + @extend %select-item-size; + + display: block; + color: $color-primary-900; + + &:hover { + text-decoration: none; + } +} + +.select-item-options { + @extend %select-item-size; + + display: none; + text-align: center; + width: 32px; + color: $color-neutral-300; + + @include absolute(0, 0, auto, auto); + + &:hover { + color: $color-neutral-700; + } + + :hover > & { + display: block; + } +} + +.select-footer { + border-top: 1px solid $color-neutral-200; +} + +.select-footer-button { + display: block; + padding: 0 12px; + color: $color-neutral-600; + + @include fixed-height(36px, 14px); + + .fas { + margin-right: 6px; + } + + &:hover { + background-color: $color-neutral-100; + text-decoration: none; + } +} + +.select-footer-multiple { + display: flex; + padding: 8px 12px; +} + +.select-footer-multiple-label { + @extend %select-item-size; +} + +.select-footer-multiple-item { + @extend %select-item-size; + + margin-left: 8px; + padding: 0 10px; + color: $color-primary-900; + border-radius: 3px; + + &:hover { + text-decoration: none; + background-color: $color-neutral-100; + } +} + +.select-footer-multiple-icon { + color: $color-neutral-300; + margin-right: 4px; +} diff --git a/web-frontend/src/scss/components/fields/_boolean.scss b/web-frontend/src/scss/components/fields/_boolean.scss index bb5af7f23..3ea65634c 100644 --- a/web-frontend/src/scss/components/fields/_boolean.scss +++ b/web-frontend/src/scss/components/fields/_boolean.scss @@ -18,3 +18,5 @@ visibility: visible; } } + +// @TODO add the to use a checkbox input here. diff --git a/web-frontend/src/scss/default.scss b/web-frontend/src/scss/default.scss index 1a1bbe02b..dea134cf5 100755 --- a/web-frontend/src/scss/default.scss +++ b/web-frontend/src/scss/default.scss @@ -20,6 +20,7 @@ @import "components/scrollbar"; @import "components/modal"; @import "components/context"; +@import "components/select"; @import "components/fields/boolean"; @import "components/fields/number";