123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- <template>
- <div class="web-wrapper">
- <div v-if="isLoaded" class="container-fluid mt-3">
- <div class="row">
- <div class="col-md-4 col-lg-3">
- <sidebar :user="profile" />
- </div>
- <div v-if="tab == 'index'" class="col-md-8 col-lg-9 mt-n4">
- <div v-if="profile.is_admin" class="d-md-flex my-md-3">
- <grid-card
- :dark="true"
- :title="'Hello ' + profile.username"
- subtitle="Welcome to the new Discover experience! Only admins can see this"
- button-text="Manage Discover Settings"
- button-link="/i/web/discover/settings"
- icon-class="fal fa-cog"
- :small="true" />
- </div>
- <!-- <section class="mb-1 mb-md-3 mb-lg-4">
- <news-slider />
- </section> -->
- <!-- <discover-spotlight /> -->
- <!-- <div class="d-md-flex my-md-3">
- <grid-card
- :dark="true"
- title="The Not So Trending"
- subtitle="Explore the posts that deserve more attention"
- button-text="Explore posts"
- icon-class="fal fa-analytics"
- button-link="/i/web/discover/future-trending"
- :button-event="true"
- v-on:btn-click="toggleTab('trending')"
- :small="true" />
- <grid-card
- title="Behind The Posts"
- subtitle="Discover the people"
- button-text="Discover People"
- button-link="/i/web/discover/people"
- icon-class="fal fa-user-friends"
- :small="true" />
- </div> -->
- <daily-trending v-on:btn-click="toggleTab('trending')"/>
- <!-- <div class="d-md-flex my-md-3">
- <grid-card
- title="Explore Loops"
- subtitle="Loops are short, looping videos"
- button-text="Explore Loops"
- icon-class="fal fa-camcorder"
- button-link="/i/web/discover/loops"
- :small="false" />
- <grid-card
- :dark="true"
- title="Popular Places"
- subtitle="Explore posts by popular locations"
- button-text="Explore Popular Places"
- icon-class="fal fa-map"
- :button-event="true"
- v-on:btn-click="toggleTab('popular-places')"
- button-link="/i/web/discover/popular-places"
- :small="false" />
- </div> -->
- <div class="d-md-flex my-md-3">
- <grid-card
- v-if="config.hashtags.enabled"
- :dark="true"
- title="My Hashtags"
- subtitle="Explore posts tagged with hashtags you follow"
- button-text="Explore Posts"
- button-link="/i/web/discover/my-hashtags"
- icon-class="fal fa-hashtag"
- :small="false" />
- <grid-card
- v-if="config.memories.enabled"
- title="My Memories"
- subtitle="A distant look back"
- button-text="View Memories"
- button-link="/i/web/discover/my-memories"
- icon-class="fal fa-history"
- :small="false" />
- </div>
- <div class="d-md-flex my-md-3">
- <grid-card
- v-if="config.insights.enabled"
- title="Account Insights"
- subtitle="Get a rich overview of your account activity and interactions"
- button-text="View Account Insights"
- icon-class="fal fa-user-circle"
- button-link="/i/web/discover/account-insights"
- :small="false" />
- <grid-card
- v-if="config.friends.enabled"
- :dark="true"
- title="Find Friends"
- subtitle="Find accounts to follow based on common interests"
- button-text="Find Friends & Followers"
- button-link="/i/web/discover/find-friends"
- icon-class="fal fa-user-plus"
- :small="false" />
- </div>
- <div class="d-md-flex my-md-3">
- <grid-card
- v-if="config.server.enabled && config.server.domains && config.server.domains.length"
- :dark="true"
- title="Server Timelines"
- subtitle="Browse timelines of a specific remote instance"
- button-text="Browse Server Feeds"
- icon-class="fal fa-list"
- button-link="/i/web/discover/server-timelines"
- :small="false" />
- <!-- <grid-card
- title="Curate the Spotlight"
- subtitle="Apply to curate the spotlight for one week"
- button-text="Apply to Curate Spotlight"
- button-link="/i/web/discover/spotlight/curate/apply"
- icon-class="fal fa-thumbs-up"
- :small="false" /> -->
- </div>
- </div>
- <div v-else-if="tab == 'trending'" class="col-md-8 col-lg-9 mt-n4">
- <discover :profile="profile" />
- </div>
- <div v-else-if="tab == 'popular-places'" class="col-md-8 col-lg-9 mt-n4">
- <section class="mt-3 mb-5 section-explore">
- <div class="profile-timeline">
- <div class="row p-0 mt-5">
- <div class="col-12 mb-4 d-flex justify-content-between align-items-center">
- <p class="d-block d-md-none h1 font-weight-bold mb-0 font-default">Popular Places</p>
- <p class="d-none d-md-block display-4 font-weight-bold mb-0 font-default">Popular Places</p>
- </div>
- </div>
- </div>
- <div class="row mt-5">
- <div class="col-12 col-md-12 mb-3">
- <div class="card-img big">
- <img src="/img/places/nyc.jpg">
- <div class="title font-default">New York City</div>
- </div>
- </div>
- <div class="col-12 col-md-6 mb-3">
- <div class="card-img">
- <img src="/img/places/edmonton.jpg">
- <div class="title font-default">Edmonton</div>
- </div>
- </div>
- <div class="col-12 col-md-6 mb-3">
- <div class="card-img">
- <img src="/img/places/paris.jpg">
- <div class="title font-default">Paris</div>
- </div>
- </div>
- <div class="col-12 col-md-4 mb-3">
- <div class="card-img">
- <img src="/img/places/london.jpg">
- <div class="title font-default">London</div>
- </div>
- </div>
- <div class="col-12 col-md-4 mb-3">
- <div class="card-img">
- <img src="/img/places/vancouver.jpg">
- <div class="title font-default">Vancouver</div>
- </div>
- </div>
- <div class="col-12 col-md-4 mb-3">
- <div class="card-img">
- <img src="/img/places/toronto.jpg">
- <div class="title font-default">Toronto</div>
- </div>
- </div>
- </div>
- </section>
- </div>
- </div>
- <drawer />
- </div>
- </div>
- </template>
- <script type="text/javascript">
- import Drawer from './partials/drawer.vue';
- import Sidebar from './partials/sidebar.vue';
- import Rightbar from './partials/rightbar.vue';
- import Discover from './sections/DiscoverFeed.vue';
- import DiscoverNewsSlider from './partials/discover/news-slider.vue';
- import DiscoverSpotlight from './partials/discover/discover-spotlight.vue';
- import DailyTrending from './partials/discover/daily-trending.vue';
- import DiscoverGridCard from './partials/discover/grid-card.vue';
- export default {
- components: {
- "drawer": Drawer,
- "sidebar": Sidebar,
- "rightbar": Rightbar,
- "discover": Discover,
- "news-slider": DiscoverNewsSlider,
- "discover-spotlight": DiscoverSpotlight,
- "daily-trending": DailyTrending,
- "grid-card": DiscoverGridCard
- },
- data() {
- return {
- isLoaded: false,
- profile: undefined,
- config: {},
- tab: 'index',
- popularAccounts: [],
- followingIndex: undefined
- }
- },
- updated() {
- // let u = new URLSearchParams(window.location.search);
- // if(u.has('ft') && u.get('ft') == '1') {
- // this.tab = 'index';
- // }
- },
- mounted() {
- this.profile = window._sharedData.user;
- this.fetchConfig();
- },
- methods: {
- fetchConfig() {
- axios.get('/api/pixelfed/v2/discover/meta')
- .then(res => {
- this.config = res.data;
- this.isLoaded = true;
- window._sharedData.discoverMeta = res.data;
- // this.fetchPopularAccounts();
- })
- },
- fetchPopularAccounts() {
- // axios.get('/api/pixelfed/discover/accounts/popular')
- // .then(res => {
- // this.popularAccounts = res.data;
- // })
- },
- followProfile(index) {
- event.currentTarget.blur();
- this.followingIndex = index;
- let id = this.popularAccounts[index].id;
- axios.post('/api/v1/accounts/' + id + '/follow')
- .then(res => {
- this.followingIndex = undefined;
- this.popularAccounts.splice(index, 1);
- }).catch(err => {
- this.followingIndex = undefined;
- swal('Oops!', 'An error occured when attempting to follow this account.', 'error');
- });
- },
- goToProfile(account) {
- this.$router.push({
- path: `/i/web/profile/${account.id}`,
- params: {
- id: account.id,
- cachedProfile: account,
- cachedUser: this.profile
- }
- })
- },
- toggleTab(index) {
- this.tab = index;
- setTimeout(() => {
- window.scrollTo({top: 0, behavior: 'smooth'});
- }, 300);
- },
- openManageModal() {
- event.currentTarget.blur();
- swal('Settings', 'Discover settings here', 'info');
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .card-img {
- position: relative;
- img {
- object-fit: cover;
- width: 100%;
- height: 200px;
- border-radius: 10px;
- }
- &:before,
- &:after {
- content: "";
- background: rgba(0,0,0,0.2);
- z-index: 2;
- width: 100%;
- height: 100%;
- position: absolute;
- left: 0;
- top: 0;
- border-radius: 10px;
- }
- .title {
- position: absolute;
- bottom: 5px;
- left: 10px;
- font-size: 40px;
- color: #fff;
- z-index: 3;
- font-weight: 700;
- }
- &.big {
- img {
- height: 300px;
- }
- }
- }
- .font-default {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
- letter-spacing: -0.7px;
- }
- .bg-stellar {
- background: #7474BF;
- background: -webkit-linear-gradient(to right, #348AC7, #7474BF);
- background: linear-gradient(to right, #348AC7, #7474BF);
- }
- .bg-berry {
- background: #5433FF;
- background: -webkit-linear-gradient(to right, #acb6e5, #86fde8);
- background: linear-gradient(to right, #acb6e5, #86fde8);
- }
- .bg-midnight {
- background: #232526;
- background: -webkit-linear-gradient(to right, #414345, #232526);
- background: linear-gradient(to right, #414345, #232526);
- }
- .media-body {
- margin-right: 0.5rem;
- }
- .avatar {
- border-radius: 15px;
- }
- .username {
- font-size: 14px;
- line-height: 14px;
- margin-bottom: 2px;
- word-break: break-word !important;
- word-wrap: break-word !important;
- }
- .display-name {
- margin-bottom: 0;
- font-size: 12px;
- word-break: break-word !important;
- word-wrap: break-word !important;
- }
- .follower-count {
- margin-bottom: 0;
- font-size: 10px;
- word-break: break-word !important;
- word-wrap: break-word !important;
- }
- .follow {
- background-color: var(--primary);
- border-radius: 18px;
- font-weight: 600;
- padding: 5px 15px;
- }
- </style>
|