887fac5add
* origin/develop: (59 commits) a11y Use dedicated indicator for non-ascii domain names add a favorites "timeline" shortcut refactor navigation-entry and use them in other nav items Update dependency sinon-chai to v3 Update dependency semver to v7 Update dependency vue-router to v4.1.5 Update dependency eslint to v8.23.0 Update dependency vue-template-compiler to v2.7.10 Update dependency @vue/babel-helper-vue-jsx-merge-props to v1.4.0 Update dependency eslint-plugin-promise to v6.0.1 fix lists edit page change ugly checkbox to a list element that doesn't look too much out of place a11y squeeze/stretch pinned items as long as there's enough space for it, hide items that won't fitc Remove isparta lint fix being unable to edit timeline pins on mobile aria fix mobile side drawer causing issues ...
217 lines
4.6 KiB
Vue
217 lines
4.6 KiB
Vue
<template>
|
|
<div
|
|
class="MobileNav"
|
|
>
|
|
<nav
|
|
id="nav"
|
|
class="mobile-nav"
|
|
@click="scrollToTop()"
|
|
>
|
|
<div class="item">
|
|
<button
|
|
class="button-unstyled mobile-nav-button"
|
|
@click.stop.prevent="toggleMobileSidebar()"
|
|
>
|
|
<FAIcon
|
|
class="fa-scale-110 fa-old-padding"
|
|
icon="bars"
|
|
/>
|
|
<div
|
|
v-if="unreadChatCount && !chatsPinned"
|
|
class="alert-dot"
|
|
/>
|
|
</button>
|
|
<NavigationPins class="pins" />
|
|
</div> <div class="item right">
|
|
<button
|
|
v-if="currentUser"
|
|
class="button-unstyled mobile-nav-button"
|
|
@click.stop.prevent="openMobileNotifications()"
|
|
>
|
|
<FAIcon
|
|
class="fa-scale-110 fa-old-padding"
|
|
icon="bell"
|
|
/>
|
|
<div
|
|
v-if="unseenNotificationsCount"
|
|
class="alert-dot"
|
|
/>
|
|
</button>
|
|
</div>
|
|
</nav>
|
|
<div
|
|
v-if="currentUser"
|
|
class="mobile-notifications-drawer"
|
|
:class="{ '-closed': !notificationsOpen }"
|
|
@touchstart.stop="notificationsTouchStart"
|
|
@touchmove.stop="notificationsTouchMove"
|
|
>
|
|
<div class="mobile-notifications-header">
|
|
<span class="title">{{ $t('notifications.notifications') }}</span>
|
|
<button
|
|
class="button-unstyled mobile-nav-button"
|
|
@click.stop.prevent="closeMobileNotifications(true)"
|
|
>
|
|
<FAIcon
|
|
class="fa-scale-110 fa-old-padding"
|
|
icon="times"
|
|
/>
|
|
</button>
|
|
</div>
|
|
<div
|
|
id="mobile-notifications"
|
|
class="mobile-notifications"
|
|
@scroll="onScroll"
|
|
/>
|
|
</div>
|
|
<SideDrawer
|
|
ref="sideDrawer"
|
|
:logout="logout"
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<script src="./mobile_nav.js"></script>
|
|
|
|
<style lang="scss">
|
|
@import '../../_variables.scss';
|
|
|
|
.MobileNav {
|
|
z-index: var(--ZI_navbar);
|
|
|
|
.mobile-nav {
|
|
display: grid;
|
|
line-height: var(--navbar-height);
|
|
grid-template-rows: 50px;
|
|
grid-template-columns: 2fr auto;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
|
|
a {
|
|
color: var(--topBarLink, $fallback--link);
|
|
}
|
|
}
|
|
|
|
.mobile-inner-nav {
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.mobile-nav-button {
|
|
display: inline-block;
|
|
text-align: center;
|
|
padding: 0 1em;
|
|
position: relative;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.site-name {
|
|
padding: 0 .3em;
|
|
display: inline-block;
|
|
}
|
|
|
|
.item {
|
|
/* moslty just to get rid of extra whitespaces */
|
|
display: flex;
|
|
}
|
|
|
|
.alert-dot {
|
|
border-radius: 100%;
|
|
height: 8px;
|
|
width: 8px;
|
|
position: absolute;
|
|
left: calc(50% - 4px);
|
|
top: calc(50% - 4px);
|
|
margin-left: 6px;
|
|
margin-top: -6px;
|
|
background-color: $fallback--cRed;
|
|
background-color: var(--badgeNotification, $fallback--cRed);
|
|
}
|
|
|
|
.mobile-notifications-drawer {
|
|
width: 100%;
|
|
height: 100vh;
|
|
overflow-x: hidden;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
box-shadow: 1px 1px 4px rgba(0,0,0,.6);
|
|
box-shadow: var(--panelShadow);
|
|
transition-property: transform;
|
|
transition-duration: 0.25s;
|
|
transform: translateX(0);
|
|
z-index: var(--ZI_navbar);
|
|
-webkit-overflow-scrolling: touch;
|
|
|
|
&.-closed {
|
|
transform: translateX(100%);
|
|
box-shadow: none;
|
|
}
|
|
}
|
|
|
|
.mobile-notifications-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
z-index: calc(var(--ZI_navbar) + 100);
|
|
width: 100%;
|
|
height: 50px;
|
|
line-height: 50px;
|
|
position: absolute;
|
|
color: var(--topBarText);
|
|
background-color: $fallback--fg;
|
|
background-color: var(--topBar, $fallback--fg);
|
|
box-shadow: 0px 0px 4px rgba(0,0,0,.6);
|
|
box-shadow: var(--topBarShadow);
|
|
|
|
.title {
|
|
font-size: 1.3em;
|
|
margin-left: 0.6em;
|
|
}
|
|
}
|
|
|
|
.pins {
|
|
flex: 1;
|
|
|
|
.pinned-item {
|
|
flex-grow: 1;
|
|
}
|
|
}
|
|
|
|
.mobile-notifications {
|
|
margin-top: 50px;
|
|
width: 100vw;
|
|
height: calc(100vh - var(--navbar-height));
|
|
overflow-x: hidden;
|
|
overflow-y: scroll;
|
|
color: $fallback--text;
|
|
color: var(--text, $fallback--text);
|
|
background-color: $fallback--bg;
|
|
background-color: var(--bg, $fallback--bg);
|
|
|
|
.notifications {
|
|
padding: 0;
|
|
border-radius: 0;
|
|
box-shadow: none;
|
|
|
|
.panel {
|
|
border-radius: 0;
|
|
margin: 0;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.panel::after {
|
|
border-radius: 0;
|
|
}
|
|
|
|
.panel .panel-heading {
|
|
border-radius: 0;
|
|
box-shadow: none;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
</style>
|