From 1e606d2f268e796a3efd2a995713c70a000daf62 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 25 May 2020 03:14:41 +0300 Subject: split modal's content into another component, add lazy loading --- .../settings_modal/settings_modal_content.scss | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/components/settings_modal/settings_modal_content.scss (limited to 'src/components/settings_modal/settings_modal_content.scss') diff --git a/src/components/settings_modal/settings_modal_content.scss b/src/components/settings_modal/settings_modal_content.scss new file mode 100644 index 00000000..92e167a2 --- /dev/null +++ b/src/components/settings_modal/settings_modal_content.scss @@ -0,0 +1,73 @@ +@import 'src/_variables.scss'; + +.settings-modal-panel { + overflow: hidden; + transition: transform; + transition-timing-function: ease-in-out; + transition-duration: 300ms; + width: 1000px; + max-width: 90vw; + height: 90vh; + + @media all and (max-width: 800px) { + max-width: 100vw; + height: 100vh; + } + + .settings_tab-switcher { + height: 100%; + } + .panel-body { + height: 100%; + overflow-y: hidden; + + .btn { + min-height: 28px; + min-width: 10em; + padding: 0 2em; + } + } + + .full-height { + height: 100%; + } + + .setting-item { + border-bottom: 2px solid var(--fg, $fallback--fg); + margin: 1em 1em 1.4em; + padding-bottom: 1.4em; + + > div { + margin-bottom: .5em; + &:last-child { + margin-bottom: 0; + } + } + + &:last-child { + border-bottom: none; + padding-bottom: 0; + margin-bottom: 1em; + } + + select { + min-width: 10em; + } + + textarea { + width: 100%; + max-width: 100%; + height: 100px; + } + + .unavailable, + .unavailable i { + color: var(--cRed, $fallback--cRed); + color: $fallback--cRed; + } + + .number-input { + max-width: 6em; + } + } +} -- cgit v1.2.3-70-g09d2 From a8e013bd6517edb3a81eb5001e6ab948cb87bedb Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 26 May 2020 23:58:55 +0300 Subject: Move modal frame parts away from modal-content into modal, improve error handling --- .../async_component_error.vue | 41 +++++ src/components/big_spinner/big_spinner.vue | 16 -- src/components/error_window/error_window.vue | 41 ----- src/components/panel_loading/panel_loading.vue | 29 ++++ src/components/settings_modal/settings_modal.js | 16 +- src/components/settings_modal/settings_modal.scss | 28 +++- src/components/settings_modal/settings_modal.vue | 45 +++++- .../settings_modal/settings_modal_content.js | 8 - .../settings_modal/settings_modal_content.scss | 30 +--- .../settings_modal/settings_modal_content.vue | 166 ++++++++------------- src/i18n/en.json | 2 + 11 files changed, 217 insertions(+), 205 deletions(-) create mode 100644 src/components/async_component_error/async_component_error.vue delete mode 100644 src/components/big_spinner/big_spinner.vue delete mode 100644 src/components/error_window/error_window.vue create mode 100644 src/components/panel_loading/panel_loading.vue (limited to 'src/components/settings_modal/settings_modal_content.scss') diff --git a/src/components/async_component_error/async_component_error.vue b/src/components/async_component_error/async_component_error.vue new file mode 100644 index 00000000..66b3fb53 --- /dev/null +++ b/src/components/async_component_error/async_component_error.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/components/big_spinner/big_spinner.vue b/src/components/big_spinner/big_spinner.vue deleted file mode 100644 index 64f16e4d..00000000 --- a/src/components/big_spinner/big_spinner.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/src/components/error_window/error_window.vue b/src/components/error_window/error_window.vue deleted file mode 100644 index ddb4ba00..00000000 --- a/src/components/error_window/error_window.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/src/components/panel_loading/panel_loading.vue b/src/components/panel_loading/panel_loading.vue new file mode 100644 index 00000000..4efebb3c --- /dev/null +++ b/src/components/panel_loading/panel_loading.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/settings_modal/settings_modal.js b/src/components/settings_modal/settings_modal.js index 84d673a8..32ef38d6 100644 --- a/src/components/settings_modal/settings_modal.js +++ b/src/components/settings_modal/settings_modal.js @@ -1,6 +1,6 @@ import Modal from 'src/components/modal/modal.vue' -import BigSpinner from 'src/components/big_spinner/big_spinner.vue' -import ErrorWindow from 'src/components/error_window/error_window.vue' +import PanelLoading from 'src/components/panel_loading/panel_loading.vue' +import AsyncComponentError from 'src/components/async_component_error/async_component_error.vue' import getResettableAsyncComponent from 'src/services/resettable_async_component.js' const SettingsModal = { @@ -9,12 +9,20 @@ const SettingsModal = { SettingsModalContent: getResettableAsyncComponent( () => import('./settings_modal_content.vue'), { - loading: BigSpinner, - error: ErrorWindow, + loading: PanelLoading, + error: AsyncComponentError, delay: 0 } ) }, + methods: { + closeModal () { + this.$store.dispatch('closeSettingsModal') + }, + peekModal () { + this.$store.dispatch('togglePeekSettingsModal') + } + }, computed: { modalActivated () { return this.$store.state.interface.settingsModalState !== 'hidden' diff --git a/src/components/settings_modal/settings_modal.scss b/src/components/settings_modal/settings_modal.scss index ece96364..833ff89a 100644 --- a/src/components/settings_modal/settings_modal.scss +++ b/src/components/settings_modal/settings_modal.scss @@ -3,7 +3,7 @@ overflow: hidden; &.peek { - .modal-panel { + .settings-modal-panel { /* Explanation: * Modal is positioned vertically centered. * 100vh - 100% = Distance between modal's top+bottom boundaries and screen @@ -15,4 +15,30 @@ transform: translateY(calc(((100vh - 100%) / 2 + 100%) - 50px)); } } + + .settings-modal-panel { + overflow: hidden; + transition: transform; + transition-timing-function: ease-in-out; + transition-duration: 300ms; + width: 1000px; + max-width: 90vw; + height: 90vh; + + @media all and (max-width: 800px) { + max-width: 100vw; + height: 100vh; + } + + .panel-body { + height: 100%; + overflow-y: hidden; + + .btn { + min-height: 28px; + min-width: 10em; + padding: 0 2em; + } + } + } } diff --git a/src/components/settings_modal/settings_modal.vue b/src/components/settings_modal/settings_modal.vue index b6ca5c6b..ded02f4a 100644 --- a/src/components/settings_modal/settings_modal.vue +++ b/src/components/settings_modal/settings_modal.vue @@ -5,10 +5,47 @@ :class="{ peek: modalPeeked }" :no-background="modalPeeked" > - +
+
+ + {{ $t('settings.settings') }} + + + + + + +
+
+ +
+
diff --git a/src/components/settings_modal/settings_modal_content.js b/src/components/settings_modal/settings_modal_content.js index b842ec7d..b27fbd28 100644 --- a/src/components/settings_modal/settings_modal_content.js +++ b/src/components/settings_modal/settings_modal_content.js @@ -31,14 +31,6 @@ const SettingsModalContent = { isLoggedIn () { return !!this.$store.state.users.currentUser } - }, - methods: { - closeModal () { - this.$store.dispatch('closeSettingsModal') - }, - peekModal () { - this.$store.dispatch('togglePeekSettingsModal') - } } } diff --git a/src/components/settings_modal/settings_modal_content.scss b/src/components/settings_modal/settings_modal_content.scss index 92e167a2..f80306c6 100644 --- a/src/components/settings_modal/settings_modal_content.scss +++ b/src/components/settings_modal/settings_modal_content.scss @@ -1,32 +1,6 @@ @import 'src/_variables.scss'; - -.settings-modal-panel { - overflow: hidden; - transition: transform; - transition-timing-function: ease-in-out; - transition-duration: 300ms; - width: 1000px; - max-width: 90vw; - height: 90vh; - - @media all and (max-width: 800px) { - max-width: 100vw; - height: 100vh; - } - - .settings_tab-switcher { - height: 100%; - } - .panel-body { - height: 100%; - overflow-y: hidden; - - .btn { - min-height: 28px; - min-width: 10em; - padding: 0 2em; - } - } +.settings_tab-switcher { + height: 100%; .full-height { height: 100%; diff --git a/src/components/settings_modal/settings_modal_content.vue b/src/components/settings_modal/settings_modal_content.vue index 865a2adf..3e06148f 100644 --- a/src/components/settings_modal/settings_modal_content.vue +++ b/src/components/settings_modal/settings_modal_content.vue @@ -1,112 +1,72 @@ diff --git a/src/i18n/en.json b/src/i18n/en.json index e3dc75d7..062af2c7 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -59,8 +59,10 @@ "apply": "Apply", "submit": "Submit", "more": "More", + "loading": "Loading…", "generic_error": "An error occured", "error_retry": "Please try again", + "retry": "Try again", "optional": "optional", "show_more": "Show more", "show_less": "Show less", -- cgit v1.2.3-70-g09d2 From 9a20a9093287b1835d635398ea900e5dc2ca3484 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 28 May 2020 21:26:33 +0300 Subject: fixed the remaining issues --- src/components/settings_modal/settings_modal_content.scss | 4 ---- src/components/settings_modal/settings_modal_content.vue | 1 - src/components/tab_switcher/tab_switcher.js | 15 ++++++--------- src/components/tab_switcher/tab_switcher.scss | 11 ++++++++++- 4 files changed, 16 insertions(+), 15 deletions(-) (limited to 'src/components/settings_modal/settings_modal_content.scss') diff --git a/src/components/settings_modal/settings_modal_content.scss b/src/components/settings_modal/settings_modal_content.scss index f80306c6..a3fef1cf 100644 --- a/src/components/settings_modal/settings_modal_content.scss +++ b/src/components/settings_modal/settings_modal_content.scss @@ -2,10 +2,6 @@ .settings_tab-switcher { height: 100%; - .full-height { - height: 100%; - } - .setting-item { border-bottom: 2px solid var(--fg, $fallback--fg); margin: 1em 1em 1.4em; diff --git a/src/components/settings_modal/settings_modal_content.vue b/src/components/settings_modal/settings_modal_content.vue index 283b4ef8..2156844f 100644 --- a/src/components/settings_modal/settings_modal_content.vue +++ b/src/components/settings_modal/settings_modal_content.vue @@ -55,7 +55,6 @@ v-if="isLoggedIn" :label="$t('settings.mutes_and_blocks')" :fullHeight="true" - class="full-height" icon="eye-off" > diff --git a/src/components/tab_switcher/tab_switcher.js b/src/components/tab_switcher/tab_switcher.js index 616f1a19..7891cb78 100644 --- a/src/components/tab_switcher/tab_switcher.js +++ b/src/components/tab_switcher/tab_switcher.js @@ -113,23 +113,20 @@ export default Vue.component('tab-switcher', { if (slot.data.attrs.fullHeight) { classes.push('full-height') } - const newSlot = ( + const renderSlot = (!this.renderOnlyFocused || active) + ? slot + : '' + + return (
{ this.sideTabBar ?

{slot.data.attrs.label}

: '' } - {slot} + {renderSlot}
) - - if (this.renderOnlyFocused) { - return active - ?
{newSlot}
- :
- } - return
{newSlot}
}) return ( diff --git a/src/components/tab_switcher/tab_switcher.scss b/src/components/tab_switcher/tab_switcher.scss index db58f4cd..2a364731 100644 --- a/src/components/tab_switcher/tab_switcher.scss +++ b/src/components/tab_switcher/tab_switcher.scss @@ -125,8 +125,9 @@ border-bottom-right-radius: 0; padding-left: 1em; padding-right: calc(1em + 200px); - margin-right: calc(1em - 200px); + margin-right: -200px; margin-left: 1em; + @media all and (max-width: 800px) { padding-left: .25em; padding-right: calc(.25em + 200px); @@ -147,6 +148,14 @@ .hidden { display: none; } + .full-height { + height: 100%; + display: flex; + flex-direction: column; + > *:not(.mobile-label) { + flex: 1; + } + } &.scrollable-tabs { overflow-y: auto; -- cgit v1.2.3-70-g09d2