diff --git a/src/components/update_notification/update_notification.js b/src/components/update_notification/update_notification.js index 399b8d46..ba008d81 100644 --- a/src/components/update_notification/update_notification.js +++ b/src/components/update_notification/update_notification.js @@ -29,6 +29,11 @@ const UpdateNotification = { 'shape-outside': 'url(' + this.pleromaTanVariant + ')' } }, + dynamicStyles () { + return { + '--____extraInfoGroupHeight': this.contentHeight + 'px' + } + }, shouldShow () { return !this.$store.state.instance.disableUpdateNotification && this.$store.state.users.currentUser && @@ -53,8 +58,8 @@ const UpdateNotification = { }, mounted () { setTimeout(() => { - this.contentHeight = this.$refs.content.offsetHeight - }, 10) + this.contentHeight = this.$refs.animatedText.scrollHeight + }, 1000) } } diff --git a/src/components/update_notification/update_notification.scss b/src/components/update_notification/update_notification.scss index 43a82f16..c3b1bc13 100644 --- a/src/components/update_notification/update_notification.scss +++ b/src/components/update_notification/update_notification.scss @@ -2,27 +2,20 @@ .UpdateNotification { overflow: hidden; } + .UpdateNotificationModal { --__top-fringe: 18em; // how much pleroma-tan should stick her head above --__bottom-fringe: 80em; // just reserving as much as we can, number is mostly irrelevant --__right-fringe: 8em; font-size: 15px; - /* Explanation: - * Modal is positioned vertically centered. - * 100vh - 100% = Distance between modal's top+bottom boundaries and screen - * (100vh - 100%) / 2 = Distance between bottom (or top) boundary and screen - * + 10% - we move modal completely off-screen, it's top boundary touches - * bottom of the screen - * - 50px - leaving tiny amount of space so that titlebar + tiny amount of modal is visible - */ position: relative; transition: transform; transition-timing-function: ease-in-out; transition-duration: 500ms; .text { - width: 40em; + max-width: 40em; padding-left: 1em; } @@ -80,15 +73,21 @@ min-height: var(--__bottom-fringe); } - .extra-info { + .extra-info-group { transition: max-height, padding, height; transition-timing-function: ease-in-out; transition-duration: 500ms; - max-height: auto; - height: auto; + max-height: calc(var(--____extraInfoGroupHeight) + 1em); // include bottom padding + mask: + linear-gradient(to top, white, transparent) bottom/100% 2px no-repeat, + linear-gradient(to top, white, white); } &.-peek { + /* Explanation: + * 100vh - 100% = Distance between modal's top+bottom boundaries and screen + * (100vh - 100%) / 2 = Distance between bottom (or top) boundary and screen + */ transform: translateY(calc(((100vh - 100%) / 2))); .pleroma-tan { @@ -97,11 +96,8 @@ shape-image-threshold: 0.7; } - .extra-info { + .extra-info-group { max-height: 0; - height: 0; - display: none; - overflow: hidden; } } } diff --git a/src/components/update_notification/update_notification.vue b/src/components/update_notification/update_notification.vue index 54cb686b..60cf189d 100644 --- a/src/components/update_notification/update_notification.vue +++ b/src/components/update_notification/update_notification.vue @@ -7,6 +7,7 @@