From 40b875e21e20717370fdaeca03fd4d1bc29bbb75 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 30 Jul 2023 04:04:49 -0600 Subject: [PATCH] Update Timeline component --- .../components/partials/post/PostHeader.vue | 622 +++++++++--------- .../assets/components/sections/Timeline.vue | 124 +++- resources/assets/sass/spa.scss | 428 ++++++------ 3 files changed, 658 insertions(+), 516 deletions(-) diff --git a/resources/assets/components/partials/post/PostHeader.vue b/resources/assets/components/partials/post/PostHeader.vue index ddbbf740c..afa20b10a 100644 --- a/resources/assets/components/partials/post/PostHeader.vue +++ b/resources/assets/components/partials/post/PostHeader.vue @@ -1,348 +1,382 @@ diff --git a/resources/assets/components/sections/Timeline.vue b/resources/assets/components/sections/Timeline.vue index 2f222096a..731dbdca7 100644 --- a/resources/assets/components/sections/Timeline.vue +++ b/resources/assets/components/sections/Timeline.vue @@ -8,6 +8,30 @@
+ +
+
+
+

Introducing Reblogs in feeds

+
+

+ See reblogs from accounts you follow in your home feed! +

+

+ You can disable reblogs in feeds on the Timeline Settings page. +

+
+
+ + +
+
+
+
+
{ + this.settings = res.data; + + if(!res.data) { + this.showReblogBanner = true; + } else { + if(res.data.hasOwnProperty('hide_reblog_banner')) { + } else if(res.data.hasOwnProperty('enable_reblogs')) { + if(!res.data.enable_reblogs) { + this.showReblogBanner = true; + } + } else { + this.showReblogBanner = true; + } } + }) + .finally(() => { + this.fetchTimeline(); + }) + }, + + fetchTimeline(scrollToTop = false) { + let url, params; + if(this.getScope() === 'home' && this.settings && this.settings.hasOwnProperty('enable_reblogs') && this.settings.enable_reblogs) { + url = `/api/v1/timelines/home`; + params = { + '_pe': 1, + max_id: this.max_id, + limit: 6, + include_reblogs: true, + } + } else { + url = `/api/pixelfed/v1/timelines/${this.getScope()}`; + params = { + max_id: this.max_id, + limit: 6, + } + } + axios.get(url, { + params: params }).then(res => { let ids = res.data.map(p => { if(p && p.hasOwnProperty('relationship')) { @@ -242,12 +304,24 @@ this.isFetchingMore = true; - let url = `/api/pixelfed/v1/timelines/${this.getScope()}`; - axios.get(url, { - params: { + let url, params; + if(this.getScope() === 'home' && this.settings && this.settings.hasOwnProperty('enable_reblogs') && this.settings.enable_reblogs) { + url = `/api/v1/timelines/home`; + params = { + '_pe': 1, max_id: this.max_id, - limit: 6 + limit: 6, + include_reblogs: true, } + } else { + url = `/api/pixelfed/v1/timelines/${this.getScope()}`; + params = { + max_id: this.max_id, + limit: 6, + } + } + axios.get(url, { + params: params }).then(res => { if(!res.data.length) { this.endFeedReached = true; @@ -568,7 +642,31 @@ this.$nextTick(() => { this.forceUpdateIdx++; }); - } + }, + + enableReblogs() { + this.enablingReblogs = true; + + axios.post('/api/pixelfed/v1/web/settings', { + field: 'enable_reblogs', + value: true + }) + .then(res => { + setTimeout(() => { + window.location.reload(); + }, 1000); + }) + }, + + hideReblogs() { + this.showReblogBanner = false; + axios.post('/api/pixelfed/v1/web/settings', { + field: 'hide_reblog_banner', + value: true + }) + .then(res => { + }) + }, }, watch: { diff --git a/resources/assets/sass/spa.scss b/resources/assets/sass/spa.scss index e2ed0e054..72e08e16b 100644 --- a/resources/assets/sass/spa.scss +++ b/resources/assets/sass/spa.scss @@ -1,166 +1,172 @@ @import "lib/ibmplexsans"; :root { - --light: #fff; - --dark: #000; - --body-bg: rgba(243,244,246,1); - --body-color: #212529; - --nav-bg: #fff; - --bg-light: #f8f9fa; + --light: #fff; + --dark: #000; + --body-bg: rgba(243,244,246,1); + --body-color: #212529; + --nav-bg: #fff; + --bg-light: #f8f9fa; - --primary: #3B82F6; - --light-gray: #f8f9fa; - --text-lighter: #94a3b8; + --primary: #3B82F6; + --light-gray: #f8f9fa; + --text-lighter: #94a3b8; - --card-bg: #fff; - --light-hover-bg: #f9fafb; - --btn-light-border: #fff; - --input-border: #e2e8f0; - --comment-bg: #eff2f5; - --border-color: #dee2e6; - --card-header-accent: #f9fafb; + --card-bg: #fff; + --light-hover-bg: #f9fafb; + --btn-light-border: #fff; + --input-border: #e2e8f0; + --comment-bg: #eff2f5; + --border-color: #dee2e6; + --card-header-accent: #f9fafb; - --dropdown-item-hover-bg: #e9ecef; - --dropdown-item-hover-color: #16181b; - --dropdown-item-color: #64748b; - --dropdown-item-active-color: #334155; + --dropdown-item-hover-bg: #e9ecef; + --dropdown-item-hover-color: #16181b; + --dropdown-item-color: #64748b; + --dropdown-item-active-color: #334155; } @media (prefers-color-scheme: dark) { - :root { - --light: #000; - --dark: #fff; - --body-bg: #000; - --body-color: #9ca3af; - --nav-bg: #000; - --bg-light: #212124; + :root { + --light: #000; + --dark: #fff; + --body-bg: #000; + --body-color: #9ca3af; + --nav-bg: #000; + --bg-light: #212124; - --light-gray: #212124; - --text-lighter: #818181; + --light-gray: #212124; + --text-lighter: #818181; - --card-bg: #161618; - --light-hover-bg: #212124; - --btn-light-border: #161618; - --input-border: #161618; - --comment-bg: #212124; - --border-color: #212124; - --card-header-accent: #212124; + --card-bg: #161618; + --light-hover-bg: #212124; + --btn-light-border: #161618; + --input-border: #161618; + --comment-bg: #212124; + --border-color: #212124; + --card-header-accent: #212124; - --dropdown-item-hover-bg: #000; - --dropdown-item-hover-color: #818181; - --dropdown-item-color: #64748b; - --dropdown-item-active-color: #fff; - } + --dropdown-item-hover-bg: #000; + --dropdown-item-hover-color: #818181; + --dropdown-item-color: #64748b; + --dropdown-item-active-color: #fff; + } } .force-light-mode { - --light: #fff; - --dark: #000; - --body-bg: rgba(243,244,246,1); - --body-color: #212529; - --nav-bg: #fff; - --bg-light: #f8f9fa; + --light: #fff; + --dark: #000; + --body-bg: rgba(243,244,246,1); + --body-color: #212529; + --nav-bg: #fff; + --bg-light: #f8f9fa; - --primary: #3B82F6; - --light-gray: #f8f9fa; - --text-lighter: #94a3b8; + --primary: #3B82F6; + --light-gray: #f8f9fa; + --text-lighter: #94a3b8; - --card-bg: #fff; - --light-hover-bg: #f9fafb; - --btn-light-border: #fff; - --input-border: #e2e8f0; - --comment-bg: #eff2f5; - --border-color: #dee2e6; - --card-header-accent: #f9fafb; + --card-bg: #fff; + --light-hover-bg: #f9fafb; + --btn-light-border: #fff; + --input-border: #e2e8f0; + --comment-bg: #eff2f5; + --border-color: #dee2e6; + --card-header-accent: #f9fafb; - --dropdown-item-hover-bg: #e9ecef; - --dropdown-item-hover-color: #16181b; - --dropdown-item-color: #64748b; - --dropdown-item-active-color: #334155; + --dropdown-item-hover-bg: #e9ecef; + --dropdown-item-hover-color: #16181b; + --dropdown-item-color: #64748b; + --dropdown-item-active-color: #334155; } .force-dark-mode { - --light: #000; - --dark: #fff; - --body-bg: #000; - --body-color: #9ca3af; - --nav-bg: #000; - --bg-light: #212124; + --light: #000; + --dark: #fff; + --body-bg: #000; + --body-color: #9ca3af; + --nav-bg: #000; + --bg-light: #212124; - --light-gray: #212124; - --text-lighter: #818181; + --light-gray: #212124; + --text-lighter: #818181; - --card-bg: #161618; - --light-hover-bg: #212124; - --btn-light-border: #161618; - --input-border: #161618; - --comment-bg: #212124; - --border-color: #212124; - --card-header-accent: #212124; + --card-bg: #161618; + --light-hover-bg: #212124; + --btn-light-border: #161618; + --input-border: #161618; + --comment-bg: #212124; + --border-color: #212124; + --card-header-accent: #212124; - --dropdown-item-hover-bg: #000; - --dropdown-item-hover-color: #818181; - --dropdown-item-color: #64748b; - --dropdown-item-active-color: #b3b3b3; + --dropdown-item-hover-bg: #000; + --dropdown-item-hover-color: #818181; + --dropdown-item-color: #64748b; + --dropdown-item-active-color: #b3b3b3; } body { - background: var(--body-bg); - font-family: 'IBM Plex Sans', sans-serif; - color: var(--body-color); + background: var(--body-bg); + font-family: 'IBM Plex Sans', sans-serif; + color: var(--body-color); } .web-wrapper { - margin-bottom: 10rem; + margin-bottom: 10rem; } .container-fluid { - max-width: 1440px !important; + max-width: 1440px !important; } .jumbotron { - border-radius: 18px; + border-radius: 18px; } .rounded-px { - border-radius: 18px; + border-radius: 18px; } .doc-body { - p:last-child { - margin-bottom: 0; - } + p:last-child { + margin-bottom: 0; + } } .navbar-laravel { - background-color: var(--nav-bg); + background-color: var(--nav-bg); } .sticky-top { - z-index: 2; + z-index: 2; } .navbar-light .navbar-brand { - color: var(--dark); + color: var(--dark); - &:hover { - color: var(--dark); - } + &:hover { + color: var(--dark); + } } .primary { - color: var(--primary); + color: var(--primary); +} + +.bg-g-amin { + background: #8E2DE2; + background: -webkit-linear-gradient(to right, #4A00E0, #8E2DE2); + background: linear-gradient(to left, #4A00E0, #8E2DE2); } .text-lighter { - color: var(--text-lighter) !important; + color: var(--text-lighter) !important; } .text-dark { color: var(--body-color) !important; &:hover { - color: var(--dark) !important; + color: var(--dark) !important; } } @@ -169,16 +175,16 @@ a.text-dark:hover { } .badge-primary { - background-color: var(--primary); + background-color: var(--primary); } .btn-primary { - background-color: var(--primary); - color: #fff !important; + background-color: var(--primary); + color: #fff !important; } .btn-outline-light { - border-color: var(--light-gray); + border-color: var(--light-gray); } .border { @@ -187,51 +193,51 @@ a.text-dark:hover { .bg-white, .bg-light { - background-color: var(--bg-light) !important; - border-color: var(--bg-light) !important; + background-color: var(--bg-light) !important; + border-color: var(--bg-light) !important; } .btn-light { - background-color: var(--light-gray); - border-color: var(--btn-light-border); - color: var(--body-color); + background-color: var(--light-gray); + border-color: var(--btn-light-border); + color: var(--body-color); - &:hover { - color: var(--body-color); - background-color: var(--card-bg); - border-color: var(--btn-light-border); - } + &:hover { + color: var(--body-color); + background-color: var(--card-bg); + border-color: var(--btn-light-border); + } } .autocomplete-input { - border: 1px solid var(--light-gray) !important; - color: var(--body-color); + border: 1px solid var(--light-gray) !important; + color: var(--body-color); } .autocomplete-result-list { - background: var(--light) !important; - z-index: 2 !important; + background: var(--light) !important; + z-index: 2 !important; } .dropdown-menu, span.twitter-typeahead .tt-menu, .form-control { - border: 1px solid var(--border-color) !important; - color: var(--body-color); - background-color: var(--card-bg); + border: 1px solid var(--border-color) !important; + color: var(--body-color); + background-color: var(--card-bg); } .tribute-container li, .dropdown-item, span.twitter-typeahead .tt-suggestion { - color: var(--body-color); + color: var(--body-color); } .dropdown-item:hover, span.twitter-typeahead .tt-suggestion:hover, .dropdown-item:focus, span.twitter-typeahead .tt-suggestion:focus { - color: var(--dropdown-item-hover-color); + color: var(--dropdown-item-hover-color); background-color: var(--dropdown-item-hover-bg); text-decoration: none; } @@ -245,7 +251,7 @@ span.twitter-typeahead .tt-suggestion:focus { .card-header, .card-footer, .ph-item { - background-color: var(--card-bg); + background-color: var(--card-bg); } .badge-light, @@ -253,143 +259,147 @@ span.twitter-typeahead .tt-suggestion:focus { .ph-avatar, .ph-picture, .ph-row div { - background-color: var(--light-gray); + background-color: var(--light-gray); } .card-header, .border-top, .border-bottom { - border-color: var(--border-color) !important; + border-color: var(--border-color) !important; } .modal-header, .modal-footer { - border-color: var(--border-color); + border-color: var(--border-color); } .compose-action:hover { - background-color: var(--light-gray) !important; + background-color: var(--light-gray) !important; } .dropdown-divider { - border-color: var(--dropdown-item-hover-bg); + border-color: var(--dropdown-item-hover-bg); } .metro-nav { - &.flex-column { - background-color: var(--card-bg); + &.flex-column { + background-color: var(--card-bg); - .nav-item { - .nav-link:hover { - background-color: var(--light-hover-bg); - } - } - } + .nav-item { + .nav-link:hover { + background-color: var(--light-hover-bg); + } + } + } } .child-reply-form { - .form-control { - border-color: var(--input-border); - color: var(--body-color); - } + .form-control { + border-color: var(--input-border); + color: var(--body-color); + } } .ui-menu { - .btn-group { - .btn:first-child { - border-top-left-radius: 50rem; - border-bottom-left-radius: 50rem; - } + .btn-group { + .btn:first-child { + border-top-left-radius: 50rem; + border-bottom-left-radius: 50rem; + } - .btn:last-child { - border-top-right-radius: 50rem; - border-bottom-right-radius: 50rem; - } + .btn:last-child { + border-top-right-radius: 50rem; + border-bottom-right-radius: 50rem; + } - .btn-primary { - font-weight: bold; - } - } + .btn-primary { + font-weight: bold; + } + } - .b-custom-control-lg { - padding-bottom: 8px; - } + .b-custom-control-lg { + padding-bottom: 8px; + } } .content-label { - &-wrapper { - div:not(.content-label) { - height: 100%; - } - } + &-wrapper { + div:not(.content-label) { + height: 100%; + } + } - &-text { - width: 80%; - @media (min-width: 768px) { - width: 50%; - } - } + &-text { + width: 80%; + @media (min-width: 768px) { + width: 50%; + } + } } .compose-modal-component { - .form-control:focus { - color: var(--body-color); + .form-control:focus { + color: var(--body-color); } } .modal-body { - .nav-tabs .nav-link.active, - .nav-tabs .nav-item.show .nav-link { - background-color: transparent; - border-color: var(--border-color); - } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + background-color: transparent; + border-color: var(--border-color); + } - .nav-tabs .nav-link:hover, - .nav-tabs .nav-link:focus { - border-color: var(--border-color); - } + .nav-tabs .nav-link:hover, + .nav-tabs .nav-link:focus { + border-color: var(--border-color); + } - .form-control:focus { - color: var(--body-color); + .form-control:focus { + color: var(--body-color); } } .tribute-container { - border: 0; + border: 0; - ul { - margin-top: 0; - border-color: var(--border-color); - } + ul { + margin-top: 0; + border-color: var(--border-color); + } - li { - padding: 0.5rem 1rem; - border-top: 0; - border-left: 0; - border-right: 0; - font-size: 13px; + li { + padding: 0.5rem 1rem; + border-top: 0; + border-left: 0; + border-right: 0; + font-size: 13px; - &:not(:last-child) { - border-bottom: 1px solid var(--border-color); - } + &:not(:last-child) { + border-bottom: 1px solid var(--border-color); + } - &.highlight, - &:hover { - color: var(--body-color); - font-weight: bold; - background: rgba(44, 120, 191, 0.25); - } - } + &.highlight, + &:hover { + color: var(--body-color); + font-weight: bold; + background: rgba(44, 120, 191, 0.25); + } + } +} + +.ft-std { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .timeline-status-component { - .username { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; - margin-bottom: -3px; - word-break: break-word; + .username { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + margin-bottom: -3px; + word-break: break-word; - @media (min-width: 768px) { - font-size: 17px; - } - } + @media (min-width: 768px) { + font-size: 17px; + } + } }