aboutsummaryrefslogtreecommitdiff
path: root/src/components/timeline_menu
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2022-08-11 14:30:58 +0300
committerHenry Jameson <me@hjkos.com>2022-08-11 14:30:58 +0300
commit6df99133548fb209bf365b77665931be477f0a30 (patch)
tree5633b44a4080cc8f86ac39b2300fa88d7a5b6832 /src/components/timeline_menu
parent732733f115a863408a339e164ff88f1022c46101 (diff)
ability to pin items in navigation menu, initial draft version
Diffstat (limited to 'src/components/timeline_menu')
-rw-r--r--src/components/timeline_menu/timeline_menu.vue2
-rw-r--r--src/components/timeline_menu/timeline_menu_content.js27
-rw-r--r--src/components/timeline_menu/timeline_menu_content.vue69
3 files changed, 43 insertions, 55 deletions
diff --git a/src/components/timeline_menu/timeline_menu.vue b/src/components/timeline_menu/timeline_menu.vue
index c24b9d72..5ef96328 100644
--- a/src/components/timeline_menu/timeline_menu.vue
+++ b/src/components/timeline_menu/timeline_menu.vue
@@ -10,7 +10,7 @@
@close="() => isOpen = false"
>
<template #content>
- <TimelineMenuContent />
+ <TimelineMenuContent :content="timelinesList" />
</template>
<template #trigger>
<span class="button-unstyled title timeline-menu-title">
diff --git a/src/components/timeline_menu/timeline_menu_content.js b/src/components/timeline_menu/timeline_menu_content.js
index 671570dd..c5b1cff2 100644
--- a/src/components/timeline_menu/timeline_menu_content.js
+++ b/src/components/timeline_menu/timeline_menu_content.js
@@ -17,12 +17,35 @@ library.add(
)
const TimelineMenuContent = {
+ props: ['content'],
+ methods: {
+ isPinned (item) {
+ return this.pinnedItems.has(item)
+ },
+ togglePin (item) {
+ if (this.isPinned(item)) {
+ this.$store.commit('removeCollectionPreference', { path: 'collections.pinnedNavItems', value: item })
+ } else {
+ this.$store.commit('addCollectionPreference', { path: 'collections.pinnedNavItems', value: item })
+ }
+ }
+ },
computed: {
...mapState({
currentUser: state => state.users.currentUser,
privateMode: state => state.instance.private,
- federating: state => state.instance.federating
- })
+ federating: state => state.instance.federating,
+ pinnedItems: state => new Set(state.serverSideStorage.prefsStorage.collections.pinnedNavItems)
+ }),
+ list () {
+ return (this.content || []).filter(({ criteria, anon, anonRoute }) => {
+ const set = new Set(criteria || [])
+ if (!this.federating && set.has('federating')) return false
+ if (this.private && set.has('!private')) return false
+ if (!this.currentUser && !(anon || anonRoute)) return false
+ return true
+ })
+ }
}
}
diff --git a/src/components/timeline_menu/timeline_menu_content.vue b/src/components/timeline_menu/timeline_menu_content.vue
index 59e9e43c..7dc76b62 100644
--- a/src/components/timeline_menu/timeline_menu_content.vue
+++ b/src/components/timeline_menu/timeline_menu_content.vue
@@ -1,63 +1,28 @@
<template>
<ul>
- <li v-if="currentUser">
+ <li v-for="item in list" :key="item.name">
<router-link
class="menu-item"
- :to="{ name: 'friends' }"
+ :to="{ name: (currentUser || item.anon) ? item.route : item.anonRoute, params: { username: currentUser.screen_name } }"
>
<FAIcon
fixed-width
class="fa-scale-110 fa-old-padding "
- icon="home"
- />{{ $t("nav.home_timeline") }}
- </router-link>
- </li>
- <li v-if="currentUser || !privateMode">
- <router-link
- class="menu-item"
- :to="{ name: 'public-timeline' }"
- >
- <FAIcon
- fixed-width
- class="fa-scale-110 fa-old-padding "
- icon="users"
- />{{ $t("nav.public_tl") }}
- </router-link>
- </li>
- <li v-if="federating && (currentUser || !privateMode)">
- <router-link
- class="menu-item"
- :to="{ name: 'public-external-timeline' }"
- >
- <FAIcon
- fixed-width
- class="fa-scale-110 fa-old-padding "
- icon="globe"
- />{{ $t("nav.twkn") }}
- </router-link>
- </li>
- <li v-if="currentUser">
- <router-link
- class="menu-item"
- :to="{ name: 'bookmarks'}"
- >
- <FAIcon
- fixed-width
- class="fa-scale-110 fa-old-padding "
- icon="bookmark"
- />{{ $t("nav.bookmarks") }}
- </router-link>
- </li>
- <li v-if="currentUser">
- <router-link
- class="menu-item"
- :to="{ name: 'dms', params: { username: currentUser.screen_name } }"
- >
- <FAIcon
- fixed-width
- class="fa-scale-110 fa-old-padding "
- icon="envelope"
- />{{ $t("nav.dms") }}
+ :icon="item.icon"
+ />{{ $t(item.label) }}
+ <button
+ type="button"
+ class="button-unstyled"
+ @click.stop.prevent="togglePin(item.name)"
+ >
+ <FAIcon
+ fixed-width
+ class="fa-scale-110 fa-old-padding "
+ :class="{ 'veryfaint': !isPinned(item.name) }"
+ :transform="!isPinned(item.name) ? 'rotate-45' : ''"
+ icon="thumbtack"
+ />
+ </button>
</router-link>
</li>
</ul>