diff --git a/src/App.js b/src/App.js index 214e0f48..0f3d0f2e 100644 --- a/src/App.js +++ b/src/App.js @@ -8,6 +8,7 @@ import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_pan import ChatPanel from './components/chat_panel/chat_panel.vue' import MediaModal from './components/media_modal/media_modal.vue' import SideDrawer from './components/side_drawer/side_drawer.vue' +import NewStatusButton from './components/new_status_button/new_status_button.vue' import { unseenNotificationsFromStore } from './services/notification_utils/notification_utils' export default { @@ -22,7 +23,8 @@ export default { WhoToFollowPanel, ChatPanel, MediaModal, - SideDrawer + SideDrawer, + NewStatusButton }, data: () => ({ mobileActivePanel: 'timeline', diff --git a/src/App.scss b/src/App.scss index 7c6970c1..f66167b7 100644 --- a/src/App.scss +++ b/src/App.scss @@ -661,6 +661,31 @@ nav { border-radius: var(--inputRadius, $fallback--inputRadius); } +@keyframes modal-background-fadein { + from { + background-color: rgba(0, 0, 0, 0); + } + to { + background-color: rgba(0, 0, 0, 0.5); + } +} + +.modal-view { + z-index: 1000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + overflow: auto; + animation-duration: 0.2s; + background-color: rgba(0, 0, 0, 0.5); + animation-name: modal-background-fadein; +} + @keyframes shakeError { 0% { transform: translateX(0); @@ -723,7 +748,7 @@ nav { .login-hint { text-align: center; - + @media all and (min-width: 801px) { display: none; } diff --git a/src/App.vue b/src/App.vue index acbbeb75..8955ed08 100644 --- a/src/App.vue +++ b/src/App.vue @@ -50,6 +50,7 @@ + diff --git a/src/boot/routes.js b/src/boot/routes.js index cfbcb1fe..7e54a98b 100644 --- a/src/boot/routes.js +++ b/src/boot/routes.js @@ -13,7 +13,6 @@ import FollowRequests from 'components/follow_requests/follow_requests.vue' import OAuthCallback from 'components/oauth_callback/oauth_callback.vue' import UserSearch from 'components/user_search/user_search.vue' import Notifications from 'components/notifications/notifications.vue' -import UserPanel from 'components/user_panel/user_panel.vue' import LoginForm from 'components/login_form/login_form.vue' import ChatPanel from 'components/chat_panel/chat_panel.vue' import WhoToFollow from 'components/who_to_follow/who_to_follow.vue' @@ -43,7 +42,6 @@ export default (store) => { { name: 'friend-requests', path: '/friend-requests', component: FollowRequests }, { name: 'user-settings', path: '/user-settings', component: UserSettings }, { name: 'notifications', path: '/:username/notifications', component: Notifications }, - { name: 'new-status', path: '/:username/new-status', component: UserPanel }, { name: 'login', path: '/login', component: LoginForm }, { name: 'chat', path: '/chat', component: ChatPanel, props: () => ({ floating: false }) }, { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }, diff --git a/src/components/media_modal/media_modal.vue b/src/components/media_modal/media_modal.vue index 427bf12b..7f666603 100644 --- a/src/components/media_modal/media_modal.vue +++ b/src/components/media_modal/media_modal.vue @@ -1,5 +1,5 @@ - + @import '../../_variables.scss'; -.modal-view { - z-index: 1000; - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: flex; - justify-content: center; - align-items: center; - background-color: rgba(0, 0, 0, 0.5); - +.media-modal-view { &:hover { .modal-view-button-arrow { opacity: 0.75; diff --git a/src/components/new_status_button/new_status_button.js b/src/components/new_status_button/new_status_button.js new file mode 100644 index 00000000..8c91d18b --- /dev/null +++ b/src/components/new_status_button/new_status_button.js @@ -0,0 +1,62 @@ +import PostStatusForm from '../post_status_form/post_status_form.vue' +import { throttle } from 'lodash' + +const NewStatusButton = { + components: { + PostStatusForm + }, + data () { + return { + shown: true, + postFormOpen: false, + oldScrollPos: 0, + scrollDirection: -1, + amountScrolled: 0 + } + }, + created () { + console.log('new-status-button') + window.addEventListener('scroll', this.handleScroll) + }, + destroyed () { + window.removeEventListener('scroll', this.handleScroll) + }, + computed: { + currentUser () { + console.log(this.$store.state.users.currentUser) + return this.$store.state.users.currentUser + } + }, + methods: { + openPostForm () { + this.postFormOpen = true + this.shown = false + }, + closePostForm () { + this.postFormOpen = false + this.shown = true + }, + handleScroll: throttle(function () { + const scrollAmount = window.scrollY - this.oldScrollPos + const direction = scrollAmount > 0 ? 1 : -1 + + if (direction !== this.scrollDirection) { + this.amountScrolled = 0 + this.scrollDirection = direction + if (direction === -1) { + this.shown = true + } + } else if (direction === 1) { + this.amountScrolled += scrollAmount + if (this.amountScrolled > 100 && this.shown) { + this.shown = false + } + } + + this.oldScrollPos = window.scrollY + this.scrollDirection = direction + }, 100) + } +} + +export default NewStatusButton diff --git a/src/components/new_status_button/new_status_button.vue b/src/components/new_status_button/new_status_button.vue new file mode 100644 index 00000000..8ebc8583 --- /dev/null +++ b/src/components/new_status_button/new_status_button.vue @@ -0,0 +1,78 @@ + + + + + {{$t('post_status.new_status')}} + + + + + + + + + + + + diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue index 8eca7b8c..d743598d 100644 --- a/src/components/side_drawer/side_drawer.vue +++ b/src/components/side_drawer/side_drawer.vue @@ -15,12 +15,7 @@ - - - {{ $t("post_status.new_status") }} - - - + {{ $t("login.login") }} @@ -119,14 +114,14 @@ } .side-drawer-container-open { - transition-delay: 0.0s; - transition-property: left; + transition: 0.35s; + transition-property: background-color; + background-color: rgba(0, 0, 0, 0.5); } .side-drawer-container-closed { left: -100%; - transition-delay: 0.5s; - transition-property: left; + background-color: rgba(0, 0, 0, 0); } .side-drawer-click-outside {