From 5da1012718c7a69c93ad1cc6a04aa4884902b21a Mon Sep 17 00:00:00 2001 From: Corban-Lee Jones Date: Sun, 27 Oct 2024 00:13:26 +0100 Subject: [PATCH] custom select to replace select-2 it's called 'corbz-select' because I suck at naming things --- apps/home/static/home/js/tabs/subs.js | 12 ++ apps/home/static/home/scss/index.scss | 122 ++++++++++++++ apps/home/templates/home/modals/editSub.html | 8 +- static/js/base.js | 168 ++++++++++++++++++- 4 files changed, 305 insertions(+), 5 deletions(-) diff --git a/apps/home/static/home/js/tabs/subs.js b/apps/home/static/home/js/tabs/subs.js index c4dcce3..515773b 100644 --- a/apps/home/static/home/js/tabs/subs.js +++ b/apps/home/static/home/js/tabs/subs.js @@ -264,6 +264,12 @@ async function loadSubModalOptions($input, url) { // Re-enable input $input.prop("disabled", false); + + // Re-init the component + if ($input.next('.corbz-select-container').length) { + $input.next('.corbz-select-container').remove(); + $input.initCorbzSelect(); + } } // Channel options aren't loaded from an API, like other options. @@ -288,6 +294,12 @@ async function loadChannelOptions() { }) $input.prop("disabled", false); + + // Re-init the component + if ($input.next('.corbz-select-container').length) { + $input.next('.corbz-select-container').remove(); + $input.initCorbzSelect(); + } } diff --git a/apps/home/static/home/scss/index.scss b/apps/home/static/home/scss/index.scss index 73e0136..4c77870 100644 --- a/apps/home/static/home/scss/index.scss +++ b/apps/home/static/home/scss/index.scss @@ -35,3 +35,125 @@ &:disabled, &.disabled { color: var(--bs-secondary-color) } } + + +// Custom Select Component + +.corbz-select { + +} + +.corbz-select-container { + + position: relative; + display: block; + appearance: none; + width: 100%; + font-size: 1rem; + line-height: 1.5; + font-weight: 400; + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius-sm); + + &.active { + border-radius: var(--bs-border-radius-sm) var(--bs-border-radius-sm) 0 0; + } + + .corbz-select-selected { + + width: 100%; + max-width: 100%; + text-wrap: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 100%; + padding: 0.375rem 0.75rem; + cursor: pointer; + + } + + .corbz-select-dropdown { + + display: none; + position: absolute; + top: 100%; + left: 0; + width: calc(100% + 2.25px); + transform: translateX(-1px); + background-color: var(--bs-body-bg); + border: 1px solid var(--bs-border-color); + border-radius: 0 0 var(--bs-border-radius-sm) var(--bs-border-radius-sm); + box-shadow: var(--bs-box-shadow); + max-height: 200px; + overflow-y: auto; + z-index: 1000; + + .corbz-select-search { + + // display: none; // disabled for now + width: 100%; + padding: 0.375rem 0.75rem; + background: none; + border: none; + border-bottom: 1px solid var(--bs-border-color); + outline: none; + + } + + .corbz-select-option { + + padding: 0.375rem 0.75rem; + cursor: pointer; + + &:hover { background-color: var(--bs-tertiary-bg); } + &.active { + + color: var(--bs-white); + background-color: var(--bs-primary); + + } + + // Multi-select versions + > .corbz-option-checkbox { + + --bs-form-check-bg-image: none; + + width: 1rem; + height: 1rem; + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius-sm); + vertical-align: middle; + + &:checked { + + + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); + background-color: var(--bs-primary); + border-color: var(--bs-primary); + + } + + } + + > span { + + display: inline-block; + vertical-align: middle; + margin-left: 0.75rem; + + } + + } + + } + +} diff --git a/apps/home/templates/home/modals/editSub.html b/apps/home/templates/home/modals/editSub.html index 4fc96f1..c9f0624 100644 --- a/apps/home/templates/home/modals/editSub.html +++ b/apps/home/templates/home/modals/editSub.html @@ -29,7 +29,7 @@
-
Appearance of delivered content.
@@ -44,21 +44,21 @@
- +
Send content to these channels.
- +
Filter out unwanted content.
- +
Rules on telling content apart.
diff --git a/static/js/base.js b/static/js/base.js index 2cda09c..2d5d22b 100644 --- a/static/js/base.js +++ b/static/js/base.js @@ -82,6 +82,10 @@ $(document).ready(function() { }); }); + $(".corbz-select").each(function() { + $(this).initCorbzSelect(); + }); + $.notify.addStyle("bootstrap", { html: '