Resolved merge conflict with index.html
This commit is contained in:
commit
f271d4417c
|
@ -10,7 +10,7 @@
|
|||
<link rel="stylesheet" href="/static/font/css/fontello.css">
|
||||
<link rel="stylesheet" href="/static/font/css/animation.css">
|
||||
</head>
|
||||
<body>
|
||||
<body class="hidden">
|
||||
<noscript>
|
||||
This tale begins nine months ago. I just graduated college with a degree in journalism.
|
||||
<br>
|
||||
|
@ -432,7 +432,6 @@
|
|||
<br>
|
||||
<br>
|
||||
The moral of the story is in order to access the H.M.S. Neckbeard, you need to enable JavaScript.</noscript>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
"@chenfengyuan/vue-qrcode": "^1.0.0",
|
||||
"babel-plugin-add-module-exports": "^0.2.1",
|
||||
"babel-plugin-lodash": "^3.2.11",
|
||||
"body-scroll-lock": "^2.6.4",
|
||||
"chromatism": "^3.0.0",
|
||||
"cropperjs": "^1.4.3",
|
||||
"diff": "^3.0.1",
|
||||
|
|
|
@ -8,9 +8,10 @@ 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 MobilePostStatusModal from './components/mobile_post_status_modal/mobile_post_status_modal.vue'
|
||||
import MobilePostStatusButton from './components/mobile_post_status_button/mobile_post_status_button.vue'
|
||||
import MobileNav from './components/mobile_nav/mobile_nav.vue'
|
||||
import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'
|
||||
import PostStatusModal from './components/post_status_modal/post_status_modal.vue'
|
||||
import { windowWidth } from './services/window_utils/window_utils'
|
||||
|
||||
export default {
|
||||
|
@ -26,9 +27,10 @@ export default {
|
|||
ChatPanel,
|
||||
MediaModal,
|
||||
SideDrawer,
|
||||
MobilePostStatusModal,
|
||||
MobilePostStatusButton,
|
||||
MobileNav,
|
||||
UserReportingModal
|
||||
UserReportingModal,
|
||||
PostStatusModal
|
||||
},
|
||||
data: () => ({
|
||||
mobileActivePanel: 'timeline',
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
position: fixed;
|
||||
z-index: -1;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
right: -20px;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 50%;
|
||||
|
@ -347,6 +348,7 @@ i[class*=icon-] {
|
|||
align-items: center;
|
||||
position: fixed;
|
||||
height: 50px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.logo {
|
||||
display: flex;
|
||||
|
@ -386,6 +388,7 @@ i[class*=icon-] {
|
|||
}
|
||||
|
||||
.inner-nav {
|
||||
position: relative;
|
||||
margin: auto;
|
||||
box-sizing: border-box;
|
||||
padding-left: 10px;
|
||||
|
|
30
src/App.vue
30
src/App.vue
|
@ -4,6 +4,7 @@
|
|||
:style="bgAppStyle"
|
||||
>
|
||||
<div
|
||||
id="app_bg_wrapper"
|
||||
class="app-bg-wrapper"
|
||||
:style="bgStyle"
|
||||
/>
|
||||
|
@ -14,20 +15,20 @@
|
|||
class="nav-bar container"
|
||||
@click="scrollToTop()"
|
||||
>
|
||||
<div
|
||||
class="logo"
|
||||
:style="logoBgStyle"
|
||||
>
|
||||
<div
|
||||
class="mask"
|
||||
:style="logoMaskStyle"
|
||||
/>
|
||||
<img
|
||||
:src="logo"
|
||||
:style="logoStyle"
|
||||
>
|
||||
</div>
|
||||
<div class="inner-nav">
|
||||
<div
|
||||
class="logo"
|
||||
:style="logoBgStyle"
|
||||
>
|
||||
<div
|
||||
class="mask"
|
||||
:style="logoMaskStyle"
|
||||
/>
|
||||
<img
|
||||
:src="logo"
|
||||
:style="logoStyle"
|
||||
>
|
||||
</div>
|
||||
<div class="item">
|
||||
<router-link
|
||||
class="site-name"
|
||||
|
@ -107,8 +108,9 @@
|
|||
:floating="true"
|
||||
class="floating-chat mobile-hidden"
|
||||
/>
|
||||
<MobilePostStatusModal />
|
||||
<MobilePostStatusButton />
|
||||
<UserReportingModal />
|
||||
<PostStatusModal />
|
||||
<portal-target name="modal" />
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<div
|
||||
v-if="showing"
|
||||
v-body-scroll-lock="showing"
|
||||
class="modal-view media-modal-view"
|
||||
@click.prevent="hide"
|
||||
>
|
||||
|
@ -43,6 +44,10 @@
|
|||
.media-modal-view {
|
||||
z-index: 1001;
|
||||
|
||||
body:not(.scroll-locked) & {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.modal-view-button-arrow {
|
||||
opacity: 0.75;
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
import PostStatusForm from '../post_status_form/post_status_form.vue'
|
||||
import { debounce } from 'lodash'
|
||||
|
||||
const MobilePostStatusModal = {
|
||||
components: {
|
||||
PostStatusForm
|
||||
},
|
||||
const MobilePostStatusButton = {
|
||||
data () {
|
||||
return {
|
||||
hidden: false,
|
||||
postFormOpen: false,
|
||||
scrollingDown: false,
|
||||
inputActive: false,
|
||||
oldScrollPos: 0,
|
||||
|
@ -28,8 +23,8 @@ const MobilePostStatusModal = {
|
|||
window.removeEventListener('resize', this.handleOSK)
|
||||
},
|
||||
computed: {
|
||||
currentUser () {
|
||||
return this.$store.state.users.currentUser
|
||||
isLoggedIn () {
|
||||
return !!this.$store.state.users.currentUser
|
||||
},
|
||||
isHidden () {
|
||||
return this.autohideFloatingPostButton && (this.hidden || this.inputActive)
|
||||
|
@ -57,17 +52,7 @@ const MobilePostStatusModal = {
|
|||
window.removeEventListener('scroll', this.handleScrollEnd)
|
||||
},
|
||||
openPostForm () {
|
||||
this.postFormOpen = true
|
||||
this.hidden = true
|
||||
|
||||
const el = this.$el.querySelector('textarea')
|
||||
this.$nextTick(function () {
|
||||
el.focus()
|
||||
})
|
||||
},
|
||||
closePostForm () {
|
||||
this.postFormOpen = false
|
||||
this.hidden = false
|
||||
this.$store.dispatch('openPostStatusModal')
|
||||
},
|
||||
handleOSK () {
|
||||
// This is a big hack: we're guessing from changed window sizes if the
|
||||
|
@ -105,4 +90,4 @@ const MobilePostStatusModal = {
|
|||
}
|
||||
}
|
||||
|
||||
export default MobilePostStatusModal
|
||||
export default MobilePostStatusButton
|
|
@ -1,23 +1,5 @@
|
|||
<template>
|
||||
<div v-if="currentUser">
|
||||
<div
|
||||
v-show="postFormOpen"
|
||||
class="post-form-modal-view modal-view"
|
||||
@click="closePostForm"
|
||||
>
|
||||
<div
|
||||
class="post-form-modal-panel panel"
|
||||
@click.stop=""
|
||||
>
|
||||
<div class="panel-heading">
|
||||
{{ $t('post_status.new_status') }}
|
||||
</div>
|
||||
<PostStatusForm
|
||||
class="panel-body"
|
||||
@posted="closePostForm"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isLoggedIn">
|
||||
<button
|
||||
class="new-status-button"
|
||||
:class="{ 'hidden': isHidden }"
|
||||
|
@ -28,27 +10,11 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<script src="./mobile_post_status_modal.js"></script>
|
||||
<script src="./mobile_post_status_button.js"></script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '../../_variables.scss';
|
||||
|
||||
.post-form-modal-view {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.post-form-modal-panel {
|
||||
flex-shrink: 0;
|
||||
margin-top: 25%;
|
||||
margin-bottom: 2em;
|
||||
width: 100%;
|
||||
max-width: 700px;
|
||||
|
||||
@media (orientation: landscape) {
|
||||
margin-top: 8%;
|
||||
}
|
||||
}
|
||||
|
||||
.new-status-button {
|
||||
width: 5em;
|
||||
height: 5em;
|
|
@ -9,7 +9,8 @@ const Notification = {
|
|||
data () {
|
||||
return {
|
||||
userExpanded: false,
|
||||
betterShadow: this.$store.state.interface.browserSupport.cssFilter
|
||||
betterShadow: this.$store.state.interface.browserSupport.cssFilter,
|
||||
unmuted: false
|
||||
}
|
||||
},
|
||||
props: [ 'notification' ],
|
||||
|
@ -23,11 +24,14 @@ const Notification = {
|
|||
toggleUserExpanded () {
|
||||
this.userExpanded = !this.userExpanded
|
||||
},
|
||||
userProfileLink (user) {
|
||||
generateUserProfileLink (user) {
|
||||
return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)
|
||||
},
|
||||
getUser (notification) {
|
||||
return this.$store.state.users.usersObject[notification.from_profile.id]
|
||||
},
|
||||
toggleMute () {
|
||||
this.unmuted = !this.unmuted
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -47,6 +51,12 @@ const Notification = {
|
|||
return this.userInStore
|
||||
}
|
||||
return this.notification.from_profile
|
||||
},
|
||||
userProfileLink () {
|
||||
return this.generateUserProfileLink(this.user)
|
||||
},
|
||||
needMute () {
|
||||
return this.user.muted
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,104 +4,126 @@
|
|||
:compact="true"
|
||||
:statusoid="notification.status"
|
||||
/>
|
||||
<div
|
||||
v-else
|
||||
class="non-mention"
|
||||
:class="[userClass, { highlighted: userStyle }]"
|
||||
:style="[ userStyle ]"
|
||||
>
|
||||
<a
|
||||
class="avatar-container"
|
||||
:href="notification.from_profile.statusnet_profile_url"
|
||||
@click.stop.prevent.capture="toggleUserExpanded"
|
||||
<div v-else>
|
||||
<div
|
||||
v-if="needMute && !unmuted"
|
||||
class="container muted"
|
||||
>
|
||||
<UserAvatar
|
||||
:compact="true"
|
||||
:better-shadow="betterShadow"
|
||||
:user="notification.from_profile"
|
||||
/>
|
||||
</a>
|
||||
<div class="notification-right">
|
||||
<UserCard
|
||||
v-if="userExpanded"
|
||||
:user="getUser(notification)"
|
||||
:rounded="true"
|
||||
:bordered="true"
|
||||
/>
|
||||
<span class="notification-details">
|
||||
<div class="name-and-action">
|
||||
<!-- eslint-disable vue/no-v-html -->
|
||||
<span
|
||||
v-if="!!notification.from_profile.name_html"
|
||||
class="username"
|
||||
:title="'@'+notification.from_profile.screen_name"
|
||||
v-html="notification.from_profile.name_html"
|
||||
/>
|
||||
<!-- eslint-enable vue/no-v-html -->
|
||||
<span
|
||||
v-else
|
||||
class="username"
|
||||
:title="'@'+notification.from_profile.screen_name"
|
||||
>{{ notification.from_profile.name }}</span>
|
||||
<span v-if="notification.type === 'like'">
|
||||
<i class="fa icon-star lit" />
|
||||
<small>{{ $t('notifications.favorited_you') }}</small>
|
||||
</span>
|
||||
<span v-if="notification.type === 'repeat'">
|
||||
<i
|
||||
class="fa icon-retweet lit"
|
||||
:title="$t('tool_tip.repeat')"
|
||||
<small>
|
||||
<router-link :to="userProfileLink">
|
||||
{{ notification.from_profile.screen_name }}
|
||||
</router-link>
|
||||
</small>
|
||||
<a
|
||||
href="#"
|
||||
class="unmute"
|
||||
@click.prevent="toggleMute"
|
||||
><i class="button-icon icon-eye-off" /></a>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="non-mention"
|
||||
:class="[userClass, { highlighted: userStyle }]"
|
||||
:style="[ userStyle ]"
|
||||
>
|
||||
<a
|
||||
class="avatar-container"
|
||||
:href="notification.from_profile.statusnet_profile_url"
|
||||
@click.stop.prevent.capture="toggleUserExpanded"
|
||||
>
|
||||
<UserAvatar
|
||||
:compact="true"
|
||||
:better-shadow="betterShadow"
|
||||
:user="notification.from_profile"
|
||||
/>
|
||||
</a>
|
||||
<div class="notification-right">
|
||||
<UserCard
|
||||
v-if="userExpanded"
|
||||
:user="getUser(notification)"
|
||||
:rounded="true"
|
||||
:bordered="true"
|
||||
/>
|
||||
<span class="notification-details">
|
||||
<div class="name-and-action">
|
||||
<!-- eslint-disable vue/no-v-html -->
|
||||
<span
|
||||
v-if="!!notification.from_profile.name_html"
|
||||
class="username"
|
||||
:title="'@'+notification.from_profile.screen_name"
|
||||
v-html="notification.from_profile.name_html"
|
||||
/>
|
||||
<small>{{ $t('notifications.repeated_you') }}</small>
|
||||
</span>
|
||||
<span v-if="notification.type === 'follow'">
|
||||
<i class="fa icon-user-plus lit" />
|
||||
<small>{{ $t('notifications.followed_you') }}</small>
|
||||
</span>
|
||||
</div>
|
||||
<!-- eslint-enable vue/no-v-html -->
|
||||
<span
|
||||
v-else
|
||||
class="username"
|
||||
:title="'@'+notification.from_profile.screen_name"
|
||||
>{{ notification.from_profile.name }}</span>
|
||||
<span v-if="notification.type === 'like'">
|
||||
<i class="fa icon-star lit" />
|
||||
<small>{{ $t('notifications.favorited_you') }}</small>
|
||||
</span>
|
||||
<span v-if="notification.type === 'repeat'">
|
||||
<i
|
||||
class="fa icon-retweet lit"
|
||||
:title="$t('tool_tip.repeat')"
|
||||
/>
|
||||
<small>{{ $t('notifications.repeated_you') }}</small>
|
||||
</span>
|
||||
<span v-if="notification.type === 'follow'">
|
||||
<i class="fa icon-user-plus lit" />
|
||||
<small>{{ $t('notifications.followed_you') }}</small>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="notification.type === 'follow'"
|
||||
class="timeago"
|
||||
>
|
||||
<span class="faint">
|
||||
<Timeago
|
||||
:time="notification.created_at"
|
||||
:auto-update="240"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="timeago"
|
||||
>
|
||||
<router-link
|
||||
v-if="notification.status"
|
||||
:to="{ name: 'conversation', params: { id: notification.status.id } }"
|
||||
class="faint-link"
|
||||
>
|
||||
<Timeago
|
||||
:time="notification.created_at"
|
||||
:auto-update="240"
|
||||
/>
|
||||
</router-link>
|
||||
</div>
|
||||
<a
|
||||
v-if="needMute"
|
||||
href="#"
|
||||
@click.prevent="toggleMute"
|
||||
><i class="button-icon icon-eye-off" /></a>
|
||||
</span>
|
||||
<div
|
||||
v-if="notification.type === 'follow'"
|
||||
class="timeago"
|
||||
class="follow-text"
|
||||
>
|
||||
<span class="faint">
|
||||
<Timeago
|
||||
:time="notification.created_at"
|
||||
:auto-update="240"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="timeago"
|
||||
>
|
||||
<router-link
|
||||
v-if="notification.status"
|
||||
:to="{ name: 'conversation', params: { id: notification.status.id } }"
|
||||
class="faint-link"
|
||||
>
|
||||
<Timeago
|
||||
:time="notification.created_at"
|
||||
:auto-update="240"
|
||||
/>
|
||||
<router-link :to="userProfileLink">
|
||||
@{{ notification.from_profile.screen_name }}
|
||||
</router-link>
|
||||
</div>
|
||||
</span>
|
||||
<div
|
||||
v-if="notification.type === 'follow'"
|
||||
class="follow-text"
|
||||
>
|
||||
<router-link :to="userProfileLink(notification.from_profile)">
|
||||
@{{ notification.from_profile.screen_name }}
|
||||
</router-link>
|
||||
<template v-else>
|
||||
<status
|
||||
class="faint"
|
||||
:compact="true"
|
||||
:statusoid="notification.action"
|
||||
:no-heading="true"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
<template v-else>
|
||||
<status
|
||||
class="faint"
|
||||
:compact="true"
|
||||
:statusoid="notification.action"
|
||||
:no-heading="true"
|
||||
/>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
|
||||
.notification {
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
border-bottom: 1px solid;
|
||||
border-color: $fallback--border;
|
||||
border-color: var(--border, $fallback--border);
|
||||
|
@ -47,6 +46,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
.muted {
|
||||
padding: .25em .6em;
|
||||
}
|
||||
|
||||
.non-mention {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
|
|
|
@ -8,7 +8,7 @@ import fileTypeService from '../../services/file_type/file_type.service.js'
|
|||
import { reject, map, uniqBy } from 'lodash'
|
||||
import suggestor from '../emoji-input/suggestor.js'
|
||||
|
||||
const buildMentionsString = ({ user, attentions }, currentUser) => {
|
||||
const buildMentionsString = ({ user, attentions = [] }, currentUser) => {
|
||||
let allAttentions = [...attentions]
|
||||
|
||||
allAttentions.unshift(user)
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
import PostStatusForm from '../post_status_form/post_status_form.vue'
|
||||
|
||||
const PostStatusModal = {
|
||||
components: {
|
||||
PostStatusForm
|
||||
},
|
||||
computed: {
|
||||
isLoggedIn () {
|
||||
return !!this.$store.state.users.currentUser
|
||||
},
|
||||
isOpen () {
|
||||
return this.isLoggedIn && this.$store.state.postStatus.modalActivated
|
||||
},
|
||||
params () {
|
||||
return this.$store.state.postStatus.params || {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
isOpen (val) {
|
||||
if (val) {
|
||||
this.$nextTick(() => this.$el.querySelector('textarea').focus())
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closeModal () {
|
||||
this.$store.dispatch('closePostStatusModal')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default PostStatusModal
|
|
@ -0,0 +1,43 @@
|
|||
<template>
|
||||
<div
|
||||
v-if="isOpen"
|
||||
class="post-form-modal-view modal-view"
|
||||
@click="closeModal"
|
||||
>
|
||||
<div
|
||||
class="post-form-modal-panel panel"
|
||||
@click.stop=""
|
||||
>
|
||||
<div class="panel-heading">
|
||||
{{ $t('post_status.new_status') }}
|
||||
</div>
|
||||
<PostStatusForm
|
||||
class="panel-body"
|
||||
v-bind="params"
|
||||
@posted="closeModal"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script src="./post_status_modal.js"></script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '../../_variables.scss';
|
||||
|
||||
.post-form-modal-view {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.post-form-modal-panel {
|
||||
flex-shrink: 0;
|
||||
margin-top: 25%;
|
||||
margin-bottom: 2em;
|
||||
width: 100%;
|
||||
max-width: 700px;
|
||||
|
||||
@media (orientation: landscape) {
|
||||
margin-top: 8%;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -168,6 +168,9 @@ export default {
|
|||
}
|
||||
this.$store.dispatch('setMedia', [attachment])
|
||||
this.$store.dispatch('setCurrent', attachment)
|
||||
},
|
||||
mentionUser () {
|
||||
this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -188,6 +188,15 @@
|
|||
</ProgressButton>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-default btn-block"
|
||||
@click="mentionUser"
|
||||
>
|
||||
{{ $t('user_card.mention') }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button
|
||||
v-if="user.muted"
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
rounded="top"
|
||||
/>
|
||||
<div class="panel-footer">
|
||||
<post-status-form v-if="user" />
|
||||
<post-status-form />
|
||||
</div>
|
||||
</div>
|
||||
<auth-form
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
import * as bodyScrollLock from 'body-scroll-lock'
|
||||
|
||||
let previousNavPaddingRight
|
||||
let previousAppBgWrapperRight
|
||||
|
||||
const disableBodyScroll = (el) => {
|
||||
const scrollBarGap = window.innerWidth - document.documentElement.clientWidth
|
||||
bodyScrollLock.disableBodyScroll(el, {
|
||||
reserveScrollBarGap: true
|
||||
})
|
||||
setTimeout(() => {
|
||||
// If previousNavPaddingRight is already set, don't set it again.
|
||||
if (previousNavPaddingRight === undefined) {
|
||||
const navEl = document.getElementById('nav')
|
||||
previousNavPaddingRight = window.getComputedStyle(navEl).getPropertyValue('padding-right')
|
||||
navEl.style.paddingRight = previousNavPaddingRight ? `calc(${previousNavPaddingRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`
|
||||
}
|
||||
// If previousAppBgWrapeprRight is already set, don't set it again.
|
||||
if (previousAppBgWrapperRight === undefined) {
|
||||
const appBgWrapperEl = document.getElementById('app_bg_wrapper')
|
||||
previousAppBgWrapperRight = window.getComputedStyle(appBgWrapperEl).getPropertyValue('right')
|
||||
appBgWrapperEl.style.right = previousAppBgWrapperRight ? `calc(${previousAppBgWrapperRight} + ${scrollBarGap}px)` : `${scrollBarGap}px`
|
||||
}
|
||||
document.body.classList.add('scroll-locked')
|
||||
})
|
||||
}
|
||||
|
||||
const enableBodyScroll = (el) => {
|
||||
setTimeout(() => {
|
||||
if (previousNavPaddingRight !== undefined) {
|
||||
document.getElementById('nav').style.paddingRight = previousNavPaddingRight
|
||||
// Restore previousNavPaddingRight to undefined so disableBodyScroll knows it can be set again.
|
||||
previousNavPaddingRight = undefined
|
||||
}
|
||||
if (previousAppBgWrapperRight !== undefined) {
|
||||
document.getElementById('app_bg_wrapper').style.right = previousAppBgWrapperRight
|
||||
// Restore previousAppBgWrapperRight to undefined so disableBodyScroll knows it can be set again.
|
||||
previousAppBgWrapperRight = undefined
|
||||
}
|
||||
document.body.classList.remove('scroll-locked')
|
||||
})
|
||||
bodyScrollLock.enableBodyScroll(el)
|
||||
}
|
||||
|
||||
const directive = {
|
||||
inserted: (el, binding) => {
|
||||
if (binding.value) {
|
||||
disableBodyScroll(el)
|
||||
}
|
||||
},
|
||||
componentUpdated: (el, binding) => {
|
||||
if (binding.oldValue === binding.value) {
|
||||
return
|
||||
}
|
||||
|
||||
if (binding.value) {
|
||||
disableBodyScroll(el)
|
||||
} else {
|
||||
enableBodyScroll(el)
|
||||
}
|
||||
},
|
||||
unbind: (el) => {
|
||||
enableBodyScroll(el)
|
||||
}
|
||||
}
|
||||
|
||||
export default (Vue) => {
|
||||
Vue.directive('body-scroll-lock', directive)
|
||||
}
|
|
@ -529,6 +529,7 @@
|
|||
"follows_you": "Follows you!",
|
||||
"its_you": "It's you!",
|
||||
"media": "Media",
|
||||
"mention": "Mention",
|
||||
"mute": "Mute",
|
||||
"muted": "Muted",
|
||||
"per_day": "per day",
|
||||
|
|
|
@ -508,7 +508,9 @@
|
|||
"pinned": "Fijado",
|
||||
"delete_confirm": "¿Realmente quieres borrar la publicación?",
|
||||
"reply_to": "Respondiendo a",
|
||||
"replies_list": "Respuestas:"
|
||||
"replies_list": "Respuestas:",
|
||||
"mute_conversation": "Silenciar la conversación",
|
||||
"unmute_conversation": "Mostrar la conversación"
|
||||
},
|
||||
"user_card": {
|
||||
"approve": "Aprobar",
|
||||
|
@ -606,5 +608,16 @@
|
|||
"person_talking": "{count} personas hablando",
|
||||
"people_talking": "{count} gente hablando",
|
||||
"no_results": "Sin resultados"
|
||||
},
|
||||
"password_reset": {
|
||||
"forgot_password": "¿Contraseña olvidada?",
|
||||
"password_reset": "Restablecer la contraseña",
|
||||
"instruction": "Ingrese su dirección de correo electrónico o nombre de usuario. Le enviaremos un enlace para restablecer su contraseña.",
|
||||
"placeholder": "Su correo electrónico o nombre de usuario",
|
||||
"check_email": "Revise su correo electrónico para obtener un enlace para restablecer su contraseña.",
|
||||
"return_home": "Volver a la página de inicio",
|
||||
"not_found": "No pudimos encontrar ese correo electrónico o nombre de usuario.",
|
||||
"too_many_requests": "Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.",
|
||||
"password_reset_disabled": "El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia."
|
||||
}
|
||||
}
|
|
@ -88,7 +88,7 @@
|
|||
"followed_you": "Zu jarraitzen zaitu",
|
||||
"load_older": "Kargatu jakinarazpen zaharragoak",
|
||||
"notifications": "Jakinarazpenak",
|
||||
"read": "Irakurri!",
|
||||
"read": "Irakurrita!",
|
||||
"repeated_you": "zure mezua errepikatu du",
|
||||
"no_more_notifications": "Ez dago jakinarazpen gehiago"
|
||||
},
|
||||
|
@ -116,7 +116,7 @@
|
|||
},
|
||||
"post_status": {
|
||||
"new_status": "Mezu berri bat idatzi",
|
||||
"account_not_locked_warning": "Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur dezake.",
|
||||
"account_not_locked_warning": "Zure kontua ez dago {0}. Edozeinek jarraitzen hastearekin, zure mezuak irakur ditzake.",
|
||||
"account_not_locked_warning_link": "Blokeatuta",
|
||||
"attachments_sensitive": "Nabarmendu eranskinak hunkigarri gisa ",
|
||||
"content_type": {
|
||||
|
@ -136,10 +136,10 @@
|
|||
"unlisted": "Mezu hau ez da argitaratuko Denbora-lerro Publikoan ezta Ezagutzen den Sarean"
|
||||
},
|
||||
"scope": {
|
||||
"direct": "Zuzena - Bidali aipatutako erabiltzaileei besterik ez",
|
||||
"private": "Jarraitzaileentzako bakarrik- Bidali jarraitzaileentzat bakarrik",
|
||||
"public": "Publickoa - Bistaratu denbora-lerro publikoetan",
|
||||
"unlisted": "Zerrendatu gabea - ez bidali denbora-lerro publikoetan"
|
||||
"direct": "Zuzena: Bidali aipatutako erabiltzaileei besterik ez",
|
||||
"private": "Jarraitzaileentzako bakarrik: Bidali jarraitzaileentzat bakarrik",
|
||||
"public": "Publikoa: Bistaratu denbora-lerro publikoetan",
|
||||
"unlisted": "Zerrendatu gabea: ez bidali denbora-lerro publikoetara"
|
||||
}
|
||||
},
|
||||
"registration": {
|
||||
|
@ -228,7 +228,7 @@
|
|||
"avatar_size_instruction": "Avatar irudien gomendatutako gutxieneko tamaina 150x150 pixel dira.",
|
||||
"export_theme": "Gorde aurre-ezarpena",
|
||||
"filtering": "Iragazten",
|
||||
"filtering_explanation": "Hitz hauek dituzten muzu guztiak isilduak izango dira. Lerro bakoitzeko bat",
|
||||
"filtering_explanation": "Hitz hauek dituzten mezu guztiak isilduak izango dira. Lerro bakoitzeko bat",
|
||||
"follow_export": "Jarraitzen dituzunak esportatu",
|
||||
"follow_export_button": "Esportatu zure jarraitzaileak csv fitxategi batean",
|
||||
"follow_import": "Jarraitzen dituzunak inportatu",
|
||||
|
@ -276,7 +276,7 @@
|
|||
"no_blocks": "Ez daude erabiltzaile blokeatutak",
|
||||
"no_mutes": "Ez daude erabiltzaile mututuak",
|
||||
"hide_follows_description": "Ez erakutsi nor jarraitzen ari naizen",
|
||||
"hide_followers_description": "Ez erakutsi nor ari de ni jarraitzen",
|
||||
"hide_followers_description": "Ez erakutsi nor ari den ni jarraitzen",
|
||||
"show_admin_badge": "Erakutsi Administratzaile etiketa nire profilan",
|
||||
"show_moderator_badge": "Erakutsi Moderatzaile etiketa nire profilan",
|
||||
"nsfw_clickthrough": "Gaitu klika hunkigarri eranskinak ezkutatzeko",
|
||||
|
@ -456,8 +456,8 @@
|
|||
"time": {
|
||||
"day": "{0} egun",
|
||||
"days": "{0} egun",
|
||||
"day_short": "{0}d",
|
||||
"days_short": "{0}d",
|
||||
"day_short": "{0}e",
|
||||
"days_short": "{0}e",
|
||||
"hour": "{0} ordu",
|
||||
"hours": "{0} ordu",
|
||||
"hour_short": "{0}o",
|
||||
|
@ -492,7 +492,7 @@
|
|||
"conversation": "Elkarrizketa",
|
||||
"error_fetching": "Errorea eguneraketak eskuratzen",
|
||||
"load_older": "Kargatu mezu zaharragoak",
|
||||
"no_retweet_hint": "Mezu hau jarraitzailentzko bakarrik markatuta dago eta ezin da errepikatu",
|
||||
"no_retweet_hint": "Mezu hau jarraitzailentzako bakarrik markatuta dago eta ezin da errepikatu",
|
||||
"repeated": "Errepikatuta",
|
||||
"show_new": "Berriena erakutsi",
|
||||
"up_to_date": "Eguneratuta",
|
||||
|
@ -507,8 +507,10 @@
|
|||
"unpin": "Aingura ezeztatu profilatik",
|
||||
"pinned": "Ainguratuta",
|
||||
"delete_confirm": "Mezu hau benetan ezabatu nahi duzu?",
|
||||
"reply_to": "Erantzun",
|
||||
"replies_list": "Erantzunak:"
|
||||
"reply_to": "Erantzuten",
|
||||
"replies_list": "Erantzunak:",
|
||||
"mute_conversation": "Elkarrizketa isilarazi",
|
||||
"unmute_conversation": "Elkarrizketa aktibatu"
|
||||
},
|
||||
"user_card": {
|
||||
"approve": "Onartu",
|
||||
|
@ -581,7 +583,7 @@
|
|||
},
|
||||
"tool_tip": {
|
||||
"media_upload": "Multimedia igo",
|
||||
"repeat": "Erreplikatu",
|
||||
"repeat": "Errepikatu",
|
||||
"reply": "Erantzun",
|
||||
"favorite": "Gogokoa",
|
||||
"user_settings": "Erabiltzaile ezarpenak"
|
||||
|
@ -601,10 +603,21 @@
|
|||
}
|
||||
},
|
||||
"search": {
|
||||
"people": "Gendea",
|
||||
"people": "Erabiltzaileak",
|
||||
"hashtags": "Traolak",
|
||||
"person_talking": "{count} pertsona hitzegiten",
|
||||
"people_talking": "{count} gende hitzegiten",
|
||||
"people_talking": "{count} jende hitzegiten",
|
||||
"no_results": "Emaitzarik ez"
|
||||
},
|
||||
"password_reset": {
|
||||
"forgot_password": "Pasahitza ahaztua?",
|
||||
"password_reset": "Pasahitza berrezarri",
|
||||
"instruction": "Idatzi zure helbide elektronikoa edo erabiltzaile izena. Pasahitza berrezartzeko esteka bidaliko dizugu.",
|
||||
"placeholder": "Zure e-posta edo erabiltzaile izena",
|
||||
"check_email": "Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.",
|
||||
"return_home": "Itzuli hasierara",
|
||||
"not_found": "Ezin izan dugu helbide elektroniko edo erabiltzaile hori aurkitu.",
|
||||
"too_many_requests": "Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.",
|
||||
"password_reset_disabled": "Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin."
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
"exporter": {
|
||||
"export": "Exportar",
|
||||
"processing": "Tractament, vos demandarem lèu de telecargar lo fichièr"
|
||||
},
|
||||
},
|
||||
"features_panel": {
|
||||
"chat": "Chat",
|
||||
"gopher": "Gopher",
|
||||
|
@ -30,12 +30,12 @@
|
|||
"cancel": "Anullar"
|
||||
},
|
||||
"image_cropper": {
|
||||
"crop_picture": "Talhar l’imatge",
|
||||
"save": "Salvar",
|
||||
"save_without_cropping": "Salvar sens talhada",
|
||||
"cancel": "Anullar"
|
||||
"crop_picture": "Talhar l’imatge",
|
||||
"save": "Salvar",
|
||||
"save_without_cropping": "Salvar sens talhada",
|
||||
"cancel": "Anullar"
|
||||
},
|
||||
"importer": {
|
||||
"importer": {
|
||||
"submit": "Mandar",
|
||||
"success": "Corrèctament importat.",
|
||||
"error": "Una error s’es producha pendent l’importacion d’aqueste fichièr."
|
||||
|
@ -65,6 +65,7 @@
|
|||
"timeline": "Flux d’actualitat",
|
||||
"twkn": "Lo malhum conegut",
|
||||
"user_search": "Cèrca d’utilizaires",
|
||||
"search": "Cercar",
|
||||
"who_to_follow": "Qual seguir",
|
||||
"preferences": "Preferéncias"
|
||||
},
|
||||
|
@ -79,19 +80,27 @@
|
|||
"no_more_notifications": "Pas mai de notificacions"
|
||||
},
|
||||
"polls": {
|
||||
"add_poll": "Ajustar un sondatge",
|
||||
"add_poll": "Ajustar un sondatge",
|
||||
"add_option": "Ajustar d’opcions",
|
||||
"option": "Opcion",
|
||||
"votes": "vòtes",
|
||||
"vote": "Votar",
|
||||
"type": "Tipe de sondatge",
|
||||
"single_choice": "Causida unica",
|
||||
"multiple_choices": "Causida multipla",
|
||||
"expiry": "Durada del sondatge",
|
||||
"expires_in": "Lo sondatge s’acabarà {0}",
|
||||
"expired": "Sondatge acabat {0}",
|
||||
"not_enough_options": "I a pas pro d’opcions"
|
||||
},
|
||||
"option": "Opcion",
|
||||
"votes": "vòtes",
|
||||
"vote": "Votar",
|
||||
"type": "Tipe de sondatge",
|
||||
"single_choice": "Causida unica",
|
||||
"multiple_choices": "Causida multipla",
|
||||
"expiry": "Durada del sondatge",
|
||||
"expires_in": "Lo sondatge s’acabarà {0}",
|
||||
"expired": "Sondatge acabat {0}",
|
||||
"not_enough_options": "I a pas pro d’opcions"
|
||||
},
|
||||
"stickers": {
|
||||
"add_sticker": "Ajustar un pegasolet"
|
||||
},
|
||||
"interactions": {
|
||||
"favs_repeats": "Repeticions e favorits",
|
||||
"follows": "Nòus seguidors",
|
||||
"load_older": "Cargar d’interaccions anterioras"
|
||||
},
|
||||
"post_status": {
|
||||
"new_status": "Publicar d’estatuts novèls",
|
||||
"account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu’a vòstres seguidors.",
|
||||
|
@ -137,8 +146,8 @@
|
|||
}
|
||||
},
|
||||
"selectable_list": {
|
||||
"select_all": "O seleccionar tot"
|
||||
},
|
||||
"select_all": "O seleccionar tot"
|
||||
},
|
||||
"settings": {
|
||||
"app_name": "Nom de l’aplicacion",
|
||||
"attachmentRadius": "Pèças juntas",
|
||||
|
@ -216,7 +225,6 @@
|
|||
"use_contain_fit": "Talhar pas las pèças juntas per las vinhetas",
|
||||
"name": "Nom",
|
||||
"name_bio": "Nom & Bio",
|
||||
|
||||
"new_password": "Nòu senhal",
|
||||
"notification_visibility_follows": "Abonaments",
|
||||
"notification_visibility_likes": "Aimar",
|
||||
|
@ -264,12 +272,12 @@
|
|||
"subject_line_email": "Coma los corrièls : \"re: subjècte\"",
|
||||
"subject_line_mastodon": "Coma mastodon : copiar tal coma es",
|
||||
"subject_line_noop": "Copiar pas",
|
||||
"post_status_content_type": "Publicar lo tipe de contengut dels estatuts",
|
||||
"post_status_content_type": "Publicar lo tipe de contengut dels estatuts",
|
||||
"stop_gifs": "Lançar los GIFs al subrevòl",
|
||||
"streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
|
||||
"text": "Tèxte",
|
||||
"theme": "Tèma",
|
||||
"theme_help_v2_1": "You can also override certain component's colors and opacity by toggling the checkbox, use \"Clear all\" button to clear all overrides.",
|
||||
"theme_help_v2_1": "Podètz tanben remplaçar la color d’unes compausants en clicant la case, utilizatz lo boton \"O escafar tot\" per escafar totes las subrecargadas.",
|
||||
"theme_help_v2_2": "Icons underneath some entries are background/text contrast indicators, hover over for detailed info. Please keep in mind that when using transparency contrast indicators show the worst possible case.",
|
||||
"theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
|
||||
"tooltipRadius": "Astúcias/alèrtas",
|
||||
|
@ -280,14 +288,14 @@
|
|||
"true": "òc"
|
||||
},
|
||||
"notifications": "Notificacions",
|
||||
"notification_setting": "Receber las notificacions de :",
|
||||
"notification_setting": "Recebre las notificacions de :",
|
||||
"notification_setting_follows": "Utilizaires que seguissètz",
|
||||
"notification_setting_non_follows": "Utilizaires que seguissètz pas",
|
||||
"notification_setting_followers": "Utilizaires que vos seguisson",
|
||||
"notification_setting_non_followers": "Utilizaires que vos seguisson pas",
|
||||
"notification_mutes": "Per receber pas mai d’un utilizaire en particular, botatz-lo en silenci.",
|
||||
"notification_mutes": "Per recebre pas mai d’un utilizaire en particular, botatz-lo en silenci.",
|
||||
"notification_blocks": "Blocar un utilizaire arrèsta totas las notificacions tan coma quitar de los seguir.",
|
||||
"enable_web_push_notifications": "Activar las notificacions web push",
|
||||
"enable_web_push_notifications": "Activar las notificacions web push",
|
||||
"style": {
|
||||
"switcher": {
|
||||
"keep_color": "Gardar las colors",
|
||||
|
@ -442,7 +450,7 @@
|
|||
"conversation": "Conversacion",
|
||||
"error_fetching": "Error en cercant de mesas a jorn",
|
||||
"load_older": "Ne veire mai",
|
||||
"no_retweet_hint": "Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir",
|
||||
"no_retweet_hint": "Las publicacions marcadas pels seguidors solament o dirèctas se pòdon pas repetir",
|
||||
"repeated": "repetit",
|
||||
"show_new": "Ne veire mai",
|
||||
"up_to_date": "A jorn",
|
||||
|
@ -477,6 +485,8 @@
|
|||
"per_day": "per jorn",
|
||||
"remote_follow": "Seguir a distància",
|
||||
"statuses": "Estatuts",
|
||||
"subscribe": "S’abonar",
|
||||
"unsubscribe": "Se desabonar",
|
||||
"unblock": "Desblocar",
|
||||
"unblock_progress": "Desblocatge...",
|
||||
"block_progress": "Blocatge...",
|
||||
|
@ -501,7 +511,7 @@
|
|||
"quarantine": "Defendre la federacion de las publicacions de l’utilizaire",
|
||||
"delete_user": "Suprimir l’utilizaire",
|
||||
"delete_user_confirmation": "Volètz vertadièrament far aquò ? Aquesta accion se pòt pas anullar."
|
||||
}
|
||||
}
|
||||
},
|
||||
"user_profile": {
|
||||
"timeline_title": "Flux utilizaire",
|
||||
|
@ -532,5 +542,12 @@
|
|||
"GiB": "Gio",
|
||||
"TiB": "Tio"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"people": "Gent",
|
||||
"hashtags": "Etiquetas",
|
||||
"person_talking": "{count} persona ne parla",
|
||||
"people_talking": "{count} personas ne parlan",
|
||||
"no_results": "Cap de resultats"
|
||||
}
|
||||
}
|
|
@ -15,6 +15,7 @@ import mediaViewerModule from './modules/media_viewer.js'
|
|||
import oauthTokensModule from './modules/oauth_tokens.js'
|
||||
import reportsModule from './modules/reports.js'
|
||||
import pollsModule from './modules/polls.js'
|
||||
import postStatusModule from './modules/postStatus.js'
|
||||
|
||||
import VueI18n from 'vue-i18n'
|
||||
|
||||
|
@ -26,6 +27,7 @@ import messages from './i18n/messages.js'
|
|||
import VueChatScroll from 'vue-chat-scroll'
|
||||
import VueClickOutside from 'v-click-outside'
|
||||
import PortalVue from 'portal-vue'
|
||||
import VBodyScrollLock from './directives/body_scroll_lock'
|
||||
import VTooltip from 'v-tooltip'
|
||||
|
||||
import afterStoreSetup from './boot/after_store.js'
|
||||
|
@ -38,6 +40,7 @@ Vue.use(VueI18n)
|
|||
Vue.use(VueChatScroll)
|
||||
Vue.use(VueClickOutside)
|
||||
Vue.use(PortalVue)
|
||||
Vue.use(VBodyScrollLock)
|
||||
Vue.use(VTooltip)
|
||||
|
||||
const i18n = new VueI18n({
|
||||
|
@ -76,7 +79,8 @@ const persistedStateOptions = {
|
|||
mediaViewer: mediaViewerModule,
|
||||
oauthTokens: oauthTokensModule,
|
||||
reports: reportsModule,
|
||||
polls: pollsModule
|
||||
polls: pollsModule,
|
||||
postStatus: postStatusModule
|
||||
},
|
||||
plugins: [persistedState, pushNotifications],
|
||||
strict: false // Socket modifies itself, let's ignore this for now.
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
const postStatus = {
|
||||
state: {
|
||||
params: null,
|
||||
modalActivated: false
|
||||
},
|
||||
mutations: {
|
||||
openPostStatusModal (state, params) {
|
||||
state.params = params
|
||||
state.modalActivated = true
|
||||
},
|
||||
closePostStatusModal (state) {
|
||||
state.modalActivated = false
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
openPostStatusModal ({ commit }, params) {
|
||||
commit('openPostStatusModal', params)
|
||||
},
|
||||
closePostStatusModal ({ commit }) {
|
||||
commit('closePostStatusModal')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default postStatus
|
|
@ -1196,6 +1196,11 @@ body-parser@1.18.3, body-parser@^1.16.1:
|
|||
raw-body "2.3.3"
|
||||
type-is "~1.6.16"
|
||||
|
||||
body-scroll-lock@^2.6.4:
|
||||
version "2.6.4"
|
||||
resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-2.6.4.tgz#567abc60ef4d656a79156781771398ef40462e94"
|
||||
integrity sha512-NP08WsovlmxEoZP9pdlqrE+AhNaivlTrz9a0FF37BQsnOrpN48eNqivKkE7SYpM9N+YIPjsdVzfLAUQDBm6OQw==
|
||||
|
||||
boolbase@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
|
||||
|
|
Loading…
Reference in New Issue