<template> <Popover trigger="click" class="timeline-menu" :class="{ 'open': isOpen }" :margin="{ left: -15, right: -200 }" :bound-to="{ x: 'container' }" popover-class="timeline-menu-popover-wrap" @show="openMenu" @close="() => isOpen = false" > <div slot="content" class="timeline-menu-popover panel panel-default" > <ul> <li v-if="currentUser"> <router-link :to="{ name: 'friends' }"> <i class="button-icon icon-home-2" />{{ $t("nav.timeline") }} </router-link> </li> <li v-if="currentUser"> <router-link :to="{ name: 'bookmarks'}"> <i class="button-icon icon-bookmark" />{{ $t("nav.bookmarks") }} </router-link> </li> <li v-if="currentUser"> <router-link :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> <i class="button-icon icon-mail-alt" />{{ $t("nav.dms") }} </router-link> </li> <li v-if="currentUser || !privateMode"> <router-link :to="{ name: 'public-timeline' }"> <i class="button-icon icon-users" />{{ $t("nav.public_tl") }} </router-link> </li> <li v-if="federating && (currentUser || !privateMode)"> <router-link :to="{ name: 'public-external-timeline' }"> <i class="button-icon icon-globe" />{{ $t("nav.twkn") }} </router-link> </li> </ul> </div> <div slot="trigger" class="title timeline-menu-title" > <span>{{ timelineName() }}</span> <i class="icon-down-open" /> </div> </Popover> </template> <script src="./timeline_menu.js" ></script> <style lang="scss"> @import '../../_variables.scss'; .timeline-menu { flex-shrink: 1; margin-right: auto; min-width: 0; width: 24rem; .timeline-menu-popover-wrap { overflow: hidden; // Match panel heading padding to line up menu with bottom of heading margin-top: 0.6rem 0.65em; padding: 0 15px 15px 15px; } .timeline-menu-popover { width: 24rem; max-width: 100vw; margin: 0; font-size: 1rem; border-top-right-radius: 0; border-top-left-radius: 0; transform: translateY(-100%); transition: transform 100ms; } .panel::after { border-top-right-radius: 0; border-top-left-radius: 0; } &.open .timeline-menu-popover { transform: translateY(0); } .timeline-menu-title { margin: 0; cursor: pointer; display: flex; user-select: none; width: 100%; span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } i { margin-left: 0.6em; flex-shrink: 0; font-size: 1rem; transition: transform 100ms; } } &.open .timeline-menu-title i { color: $fallback--text; color: var(--panelText, $fallback--text); transform: rotate(180deg); } .panel { box-shadow: var(--popoverShadow); } ul { list-style: none; margin: 0; padding: 0; } li { border-bottom: 1px solid; border-color: $fallback--border; border-color: var(--border, $fallback--border); padding: 0; &:last-child a { border-bottom-right-radius: $fallback--panelRadius; border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius); border-bottom-left-radius: $fallback--panelRadius; border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius); } &:last-child { border: none; } } a { display: block; padding: 0.6em 0; &:hover { background-color: $fallback--lightBg; background-color: var(--selectedMenu, $fallback--lightBg); color: $fallback--link; color: var(--selectedMenuText, $fallback--link); --faint: var(--selectedMenuFaintText, $fallback--faint); --faintLink: var(--selectedMenuFaintLink, $fallback--faint); --lightText: var(--selectedMenuLightText, $fallback--lightText); --icon: var(--selectedMenuIcon, $fallback--icon); } &.router-link-active { font-weight: bolder; background-color: $fallback--lightBg; background-color: var(--selectedMenu, $fallback--lightBg); color: $fallback--text; color: var(--selectedMenuText, $fallback--text); --faint: var(--selectedMenuFaintText, $fallback--faint); --faintLink: var(--selectedMenuFaintLink, $fallback--faint); --lightText: var(--selectedMenuLightText, $fallback--lightText); --icon: var(--selectedMenuIcon, $fallback--icon); &:hover { text-decoration: underline; } } } } </style>