Fix issues which are blocking rendering

This commit is contained in:
AkiraFukushima 2022-04-20 00:57:25 +09:00
parent 6f307cd298
commit 85ef5e5f01
No known key found for this signature in database
GPG Key ID: B6E51BAC4DE1A957
35 changed files with 363 additions and 1041 deletions

1
.npmrc Normal file
View File

@ -0,0 +1 @@
@h3poteto:registry=https://npm.pkg.github.com

View File

@ -109,8 +109,7 @@
"vue-popperjs": "^2.3.0", "vue-popperjs": "^2.3.0",
"vue-resize": "^2.0.0-alpha.1", "vue-resize": "^2.0.0-alpha.1",
"vue-router": "^4.0.14", "vue-router": "^4.0.14",
"vue-shortkey": "^3.1.7", "@h3poteto/vue-virtual-scroller": "2.0.0-alpha.1",
"vue-virtual-scroller": "^2.0.0-alpha.1",
"vuex": "^4.0.2", "vuex": "^4.0.2",
"vuex-router-sync": "^6.0.0-rc.1" "vuex-router-sync": "^6.0.0-rc.1"
}, },

View File

@ -10,7 +10,7 @@
</el-row> </el-row>
</el-header> </el-header>
<el-container> <el-container>
<div v-shortkey="['esc']" @shortkey="close"></div> <div></div>
<login-form></login-form> <login-form></login-form>
</el-container> </el-container>
</el-container> </el-container>

View File

@ -9,7 +9,7 @@
:model="form" :model="form"
> >
<el-form-item :label="$t('login.domain_name_label')" prop="domainName"> <el-form-item :label="$t('login.domain_name_label')" prop="domainName">
<el-input v-model="form.domainName" placeholder="mastodon.social" v-shortkey="['enter']" @shortkey="handleKey"></el-input> <el-input v-model="form.domainName" placeholder="mastodon.social"></el-input>
</el-form-item> </el-form-item>
<p class="proxy-info"> <p class="proxy-info">
{{ $t('login.proxy_info') }}<router-link to="/preferences/network">{{ $t('login.proxy_here') }}</router-link> {{ $t('login.proxy_info') }}<router-link to="/preferences/network">{{ $t('login.proxy_here') }}</router-link>

View File

@ -13,7 +13,7 @@
</el-row> </el-row>
</el-header> </el-header>
<el-container> <el-container>
<div v-shortkey="['esc']" @shortkey="close"></div> <div></div>
<el-aside width="240px" class="menu"> <el-aside width="240px" class="menu">
<el-menu <el-menu
:default-active="activeRoute()" :default-active="activeRoute()"

View File

@ -13,7 +13,7 @@
</el-row> </el-row>
</el-header> </el-header>
<el-container> <el-container>
<div v-shortkey="['esc']" @shortkey="close"></div> <div></div>
<el-aside width="240px" class="menu"> <el-aside width="240px" class="menu">
<el-menu <el-menu
:default-active="activeRoute()" :default-active="activeRoute()"

View File

@ -5,8 +5,6 @@
:element-loading-text="$t('message.loading')" :element-loading-text="$t('message.loading')"
element-loading-spinner="el-icon-loading" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)" element-loading-background="rgba(0, 0, 0, 0.8)"
v-shortkey="shortcutEnabled ? { help: ['shift', '?'] } : {}"
@shortkey="handleKey"
> >
<side-menu></side-menu> <side-menu></side-menu>
<div :class="collapse ? 'page-narrow' : 'page'"> <div :class="collapse ? 'page-narrow' : 'page'">
@ -39,18 +37,18 @@ export default {
data() { data() {
return { return {
dropTarget: null, dropTarget: null,
droppableVisible: false, droppableVisible: false
} }
}, },
computed: { computed: {
...mapState({ ...mapState({
loading: (state) => state.TimelineSpace.loading, loading: state => state.TimelineSpace.loading,
collapse: (state) => state.TimelineSpace.SideMenu.collapse, collapse: state => state.TimelineSpace.SideMenu.collapse
}), }),
...mapGetters('TimelineSpace/Modals', ['modalOpened']), ...mapGetters('TimelineSpace/Modals', ['modalOpened']),
shortcutEnabled: function () { shortcutEnabled: function () {
return !this.modalOpened return !this.modalOpened
}, }
}, },
async created() { async created() {
this.$store.dispatch('TimelineSpace/Contents/SideBar/close') this.$store.dispatch('TimelineSpace/Contents/SideBar/close')
@ -88,20 +86,17 @@ export default {
await this.clear() await this.clear()
try { try {
await this.$store.dispatch( await this.$store.dispatch('TimelineSpace/initLoad', this.$route.params.id)
'TimelineSpace/initLoad',
this.$route.params.id
)
} catch (err) { } catch (err) {
if (err instanceof AccountLoadError) { if (err instanceof AccountLoadError) {
this.$message({ this.$message({
message: this.$t('message.account_load_error'), message: this.$t('message.account_load_error'),
type: 'error', type: 'error'
}) })
} else if (err instanceof TimelineFetchError) { } else if (err instanceof TimelineFetchError) {
this.$message({ this.$message({
message: this.$t('message.timeline_fetch_error'), message: this.$t('message.timeline_fetch_error'),
type: 'error', type: 'error'
}) })
} }
} }
@ -112,17 +107,14 @@ export default {
e.preventDefault() e.preventDefault()
e.stopPropagation() e.stopPropagation()
this.droppableVisible = false this.droppableVisible = false
if ( if (e.dataTransfer.files.item(0) === null || e.dataTransfer.files.item(0) === undefined) {
e.dataTransfer.files.item(0) === null ||
e.dataTransfer.files.item(0) === undefined
) {
return false return false
} }
const file = e.dataTransfer.files.item(0) const file = e.dataTransfer.files.item(0)
if (!file.type.includes('image') && !file.type.includes('video')) { if (!file.type.includes('image') && !file.type.includes('video')) {
this.$message({ this.$message({
message: this.$t('validation.new_toot.attach_image'), message: this.$t('validation.new_toot.attach_image'),
type: 'error', type: 'error'
}) })
return false return false
} }
@ -133,16 +125,16 @@ export default {
.then(() => { .then(() => {
Event.$emit('image-uploaded') Event.$emit('image-uploaded')
}) })
.catch((err) => { .catch(err => {
if (err instanceof NewTootAttachLength) { if (err instanceof NewTootAttachLength) {
this.$message({ this.$message({
message: this.$t('validation.new_toot.attach_length', { max: 4 }), message: this.$t('validation.new_toot.attach_length', { max: 4 }),
type: 'error', type: 'error'
}) })
} else { } else {
this.$message({ this.$message({
message: this.$t('message.attach_error'), message: this.$t('message.attach_error'),
type: 'error', type: 'error'
}) })
} }
}) })
@ -168,8 +160,8 @@ export default {
this.$store.commit('TimelineSpace/Modals/Shortcut/changeModal', true) this.$store.commit('TimelineSpace/Modals/Shortcut/changeModal', true)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="bookmarks" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="bookmarks">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="bookmarks" :min-item-size="60" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="bookmarks" :min-item-size="60" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="directmessages" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="directmessages">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="favourites" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="favourites">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="favourites" :min-item-size="60" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="favourites" :min-item-size="60" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -9,21 +9,10 @@
</el-button> </el-button>
</div> </div>
<div class="form-item input"> <div class="form-item input">
<input <input v-model="tag" :placeholder="$t('hashtag.tag_name')" class="search-keyword" v-on:keyup.enter="search" autofocus />
v-model="tag"
:placeholder="$t('hashtag.tag_name')"
class="search-keyword"
v-shortkey.avoid
v-on:keyup.enter="search"
autofocus
/>
</div> </div>
<div class="form-item" v-show="tagPage()"> <div class="form-item" v-show="tagPage()">
<el-button <el-button type="text" @click="save" :title="$t('hashtag.save_tag')">
type="text"
@click="save"
:title="$t('hashtag.save_tag')"
>
<font-awesome-icon icon="thumbtack" /> <font-awesome-icon icon="thumbtack" />
</el-button> </el-button>
</div> </div>
@ -39,7 +28,7 @@ export default {
name: 'hashtag', name: 'hashtag',
data() { data() {
return { return {
tag: '', tag: ''
} }
}, },
mounted() { mounted() {
@ -52,7 +41,7 @@ export default {
if (route.name === 'tag') { if (route.name === 'tag') {
this.tag = route.params.tag this.tag = route.params.tag
} }
}, }
}, },
methods: { methods: {
id() { id() {
@ -69,8 +58,8 @@ export default {
}, },
save() { save() {
this.$store.dispatch('TimelineSpace/Contents/Hashtag/saveTag', this.tag) this.$store.dispatch('TimelineSpace/Contents/Hashtag/saveTag', this.tag)
}, }
}, }
} }
</script> </script>

View File

@ -1,6 +1,6 @@
<template> <template>
<div name="tag" class="tag-timeline" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div name="tag" class="tag-timeline">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -1,6 +1,6 @@
<template> <template>
<div name="list" class="list-timeline" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div name="list" class="list-timeline">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="local" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="local">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="mentions" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="mentions">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="mentions" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="mentions" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<template v-if="item.id === 'loading-card'"> <template v-if="item.id === 'loading-card'">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="notifications" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="notifications">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="handledNotifications" :min-item-size="20" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="handledNotifications" :min-item-size="20" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<template v-if="item.id === 'loading-card'"> <template v-if="item.id === 'loading-card'">

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="public" v-shortkey="shortcutEnabled ? { next: ['j'] } : {}" @shortkey="handleKey"> <div id="public">
<div v-shortkey="{ linux: ['ctrl', 'r'], mac: ['meta', 'r'] }" @shortkey="reload()"></div> <div></div>
<DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller"> <DynamicScroller :items="timeline" :min-item-size="86" id="scroller" class="scroller" ref="scroller">
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index" :watchData="true">

View File

@ -2,27 +2,10 @@
<div id="search"> <div id="search">
<div class="search-header"> <div class="search-header">
<el-form :inline="true"> <el-form :inline="true">
<el-select <el-select v-model="target" :placeholder="$t('search.search')" class="search-target">
v-model="target" <el-option v-for="item in searchTargets" :key="item.target" :label="item.label" :value="item.target"> </el-option>
:placeholder="$t('search.search')"
class="search-target"
>
<el-option
v-for="item in searchTargets"
:key="item.target"
:label="item.label"
:value="item.target"
>
</el-option>
</el-select> </el-select>
<input <input v-model="query" :placeholder="$t('search.keyword')" class="search-keyword" v-on:keyup.enter="search" autofocus />
v-model="query"
:placeholder="$t('search.keyword')"
class="search-keyword"
v-shortkey.avoid
v-on:keyup.enter="search"
autofocus
/>
<div class="clearfix"></div> <div class="clearfix"></div>
</el-form> </el-form>
</div> </div>
@ -45,7 +28,7 @@ export default {
data() { data() {
return { return {
target: 'account', target: 'account',
query: '', query: ''
} }
}, },
computed: { computed: {
@ -54,64 +37,52 @@ export default {
return [ return [
{ {
target: 'account', target: 'account',
label: this.$t('search.account'), label: this.$t('search.account')
}, },
{ {
target: 'tag', target: 'tag',
label: this.$t('search.tag'), label: this.$t('search.tag')
}, },
{ {
target: 'toot', target: 'toot',
label: this.$t('search.toot'), label: this.$t('search.toot')
}, }
] ]
}, }
}, }
}, },
methods: { methods: {
search() { search() {
switch (this.target) { switch (this.target) {
case 'account': case 'account':
this.$store this.$store.dispatch('TimelineSpace/Contents/Search/Account/search', this.query).catch(() => {
.dispatch( this.$message({
'TimelineSpace/Contents/Search/Account/search', message: this.$t('message.search_error'),
this.query type: 'error'
)
.catch(() => {
this.$message({
message: this.$t('message.search_error'),
type: 'error',
})
}) })
})
break break
case 'tag': case 'tag':
this.$store this.$store.dispatch('TimelineSpace/Contents/Search/Tag/search', `#${this.query}`).catch(() => {
.dispatch( this.$message({
'TimelineSpace/Contents/Search/Tag/search', message: this.$t('message.search_error'),
`#${this.query}` type: 'error'
)
.catch(() => {
this.$message({
message: this.$t('message.search_error'),
type: 'error',
})
}) })
})
break break
case 'toot': case 'toot':
this.$store this.$store.dispatch('TimelineSpace/Contents/Search/Toots/search', this.query).catch(() => {
.dispatch('TimelineSpace/Contents/Search/Toots/search', this.query) this.$message({
.catch(() => { message: this.$t('message.search_error'),
this.$message({ type: 'error'
message: this.$t('message.search_error'),
type: 'error',
})
}) })
})
break break
default: default:
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="side-bar" v-if="openSideBar" v-shortkey="shortcutEnabled ? { close: ['esc'] } : {}" @shortkey="handleKey"> <div class="side-bar" v-if="openSideBar">
<div class="header"> <div class="header">
<font-awesome-icon icon="spinner" /> <font-awesome-icon icon="spinner" />
<font-awesome-icon icon="rotate" /> <font-awesome-icon icon="rotate" />

View File

@ -2,7 +2,7 @@
<el-dialog :title="$t('modals.add_list_member.title')" v-model="addListMemberModal" width="400px" class="add-member"> <el-dialog :title="$t('modals.add_list_member.title')" v-model="addListMemberModal" width="400px" class="add-member">
<div class="search-account" :element-loading-background="loadingBackground"> <div class="search-account" :element-loading-background="loadingBackground">
<el-form :inline="true"> <el-form :inline="true">
<input v-model="name" placeholder="Account name" class="account-name" v-shortkey="['enter']" @shortkey="search" autofocus /> <input v-model="name" placeholder="Account name" class="account-name" autofocus />
<el-button type="text" class="search" @click="search"> <el-button type="text" class="search" @click="search">
<font-awesome-icon icon="magnifying-glass" /> <font-awesome-icon icon="magnifying-glass" />
</el-button> </el-button>

View File

@ -1,7 +1,7 @@
<template> <template>
<transition name="image-viewer"> <transition name="image-viewer">
<div id="image" v-show="modalOpen" @click="close" :aria-hidden="!modalOpen" aria-modal="true" role="dialog"> <div id="image" v-show="modalOpen" @click="close" :aria-hidden="!modalOpen" aria-modal="true" role="dialog">
<div class="image-wrapper" v-shortkey="modalOpen ? { close: ['esc'] } : {}" @shortkey="closeHandle"> <div class="image-wrapper">
<div class="image-header"> <div class="image-header">
<el-button type="text" @click="close" class="close-button"> <el-button type="text" @click="close" class="close-button">
<font-awesome-icon icon="xmark" /> <font-awesome-icon icon="xmark" />
@ -9,13 +9,11 @@
</div> </div>
<div class="image-content" role="presentation"> <div class="image-content" role="presentation">
<span class="button-area" <span class="button-area"
><el-button type="text" v-show="showLeft" v-shortkey="['arrowleft']" @shortkey="decrementIndex()"> ><el-button type="text"> <font-awesome-icon icon="arrow-left" /> </el-button
<font-awesome-icon icon="arrow-left" /> </el-button
></span> ></span>
<Media :src="imageURL" :type="imageType"></Media> <Media :src="imageURL" :type="imageType"></Media>
<span class="button-area" <span class="button-area"
><el-button type="text" v-show="showRight" v-shortkey="['arrowright']" @shortkey="incrementIndex()"> ><el-button type="text"> <font-awesome-icon icon="arrow-right" /> </el-button
<font-awesome-icon icon="arrow-right" /> </el-button
></span> ></span>
</div> </div>
</div> </div>

View File

@ -2,14 +2,7 @@
<el-dialog v-model="jumpModal" width="440px" class="jump-modal"> <el-dialog v-model="jumpModal" width="440px" class="jump-modal">
<el-form class="jump-form" v-on:submit.prevent="jump"> <el-form class="jump-form" v-on:submit.prevent="jump">
<div class="channel"> <div class="channel">
<input <input type="text" v-model="channel" :placeholder="$t('modals.jump.jump_to')" ref="channel" />
type="text"
v-model="channel"
:placeholder="$t('modals.jump.jump_to')"
ref="channel"
v-shortkey="shortcutEnabled ? { next: ['arrowdown'], prev: ['arrowup'], select: ['enter'] } : {}"
@shortkey="handleKey"
/>
<ul class="channel-list"> <ul class="channel-list">
<li <li
v-for="c in filterdChannel" v-for="c in filterdChannel"

View File

@ -12,7 +12,7 @@
<Quote :message="quoteToMessage" :displayNameStyle="displayNameStyle" v-if="quoteToMessage !== null" ref="quote"></Quote> <Quote :message="quoteToMessage" :displayNameStyle="displayNameStyle" v-if="quoteToMessage !== null" ref="quote"></Quote>
<div class="spoiler" v-if="showContentWarning" ref="spoiler"> <div class="spoiler" v-if="showContentWarning" ref="spoiler">
<div class="el-input"> <div class="el-input">
<input type="text" class="el-input__inner" :placeholder="$t('modals.new_toot.cw')" v-model="spoiler" v-shortkey.avoid /> <input type="text" class="el-input__inner" :placeholder="$t('modals.new_toot.cw')" v-model="spoiler" />
</div> </div>
</div> </div>
<Status <Status
@ -45,7 +45,6 @@
:placeholder="$t('modals.new_toot.description')" :placeholder="$t('modals.new_toot.description')"
:value="mediaDescriptions[media.id]" :value="mediaDescriptions[media.id]"
@input="updateDescription(media.id, $event.target.value)" @input="updateDescription(media.id, $event.target.value)"
v-shortkey.avoid
role="textbox" role="textbox"
contenteditable="true" contenteditable="true"
aria-multiline="true" aria-multiline="true"

View File

@ -3,22 +3,6 @@
<textarea <textarea
v-model="status" v-model="status"
ref="status" ref="status"
v-shortkey="
openSuggest
? {
up: ['arrowup'],
down: ['arrowdown'],
enter: ['enter'],
esc: ['esc']
}
: {
linux: ['ctrl', 'enter'],
mac: ['meta', 'enter'],
left: ['arrowleft'],
right: ['arrowright']
}
"
@shortkey="handleKey"
@paste="onPaste" @paste="onPaste"
v-on:input="startSuggest" v-on:input="startSuggest"
:placeholder="$t('modals.new_toot.status')" :placeholder="$t('modals.new_toot.status')"
@ -35,7 +19,6 @@
v-for="(item, index) in filteredSuggestion" v-for="(item, index) in filteredSuggestion"
:key="index" :key="index"
@click="insertItem(item)" @click="insertItem(item)"
@shortkey="insertItem(item)"
@mouseover="highlightedIndex = index" @mouseover="highlightedIndex = index"
:class="{ highlighted: highlightedIndex === index }" :class="{ highlighted: highlightedIndex === index }"
> >

View File

@ -14,11 +14,13 @@
<span class="el-dropdown-link"> <span class="el-dropdown-link">
<font-awesome-icon icon="arrow-up" class="el-icon--right" /> <font-awesome-icon icon="arrow-up" class="el-icon--right" />
</span> </span>
<el-dropdown-menu slot="dropdown"> <template #dropdown>
<el-dropdown-item command="show">{{ $t('side_menu.show_profile') }}</el-dropdown-item> <el-dropdown-menu>
<el-dropdown-item command="edit">{{ $t('side_menu.edit_profile') }}</el-dropdown-item> <el-dropdown-item command="show">{{ $t('side_menu.show_profile') }}</el-dropdown-item>
<el-dropdown-item command="settings">{{ $t('side_menu.settings') }}</el-dropdown-item> <el-dropdown-item command="edit">{{ $t('side_menu.edit_profile') }}</el-dropdown-item>
</el-dropdown-menu> <el-dropdown-item command="settings">{{ $t('side_menu.settings') }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
@ -184,7 +186,7 @@
<span>{{ $t('side_menu.hashtag') }}</span> <span>{{ $t('side_menu.hashtag') }}</span>
</div> </div>
</el-menu-item> </el-menu-item>
<template v-if="enabledTemplates.tag"> <template v-if="enabledTimelines.tag">
<template v-for="tag in tags" :key="tag.tagName"> <template v-for="tag in tags" :key="tag.tagName">
<el-menu-item <el-menu-item
:index="`/${id()}/hashtag/${tag.tagName}`" :index="`/${id()}/hashtag/${tag.tagName}`"

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="favourited toot">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="favourited toot"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="favourite"> <div v-show="!filtered(message)" class="favourite">
<div class="action"> <div class="action">
@ -32,34 +12,25 @@
v-html=" v-html="
$t('notification.favourite.body', { $t('notification.favourite.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div class="icon" @click="openUser(message.status.account)"> <div class="icon" @click="openUser(message.status.account)">
<FailoverImg <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" role="presentation" />
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
role="presentation"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
<div class="user" @click="openUser(message.status.account)"> <div class="user" @click="openUser(message.status.account)">
<span class="display-name" <span class="display-name"><bdi v-html="username(message.status.account)"></bdi></span>
><bdi v-html="username(message.status.account)"></bdi
></span>
</div> </div>
<div class="timestamp"> <div class="timestamp">
{{ parseDatetime(message.status.created_at) }} {{ parseDatetime(message.status.created_at) }}
@ -79,14 +50,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -99,9 +63,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -110,9 +72,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -120,28 +80,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -175,42 +117,42 @@ export default {
name: 'favourite', name: 'favourite',
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
displayNameStyle: (state) => state.displayNameStyle, displayNameStyle: state => state.displayNameStyle,
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -228,7 +170,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -256,31 +198,17 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'favourite') const parsedAccount = findAccount(e.target, 'favourite')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch((err) => { .catch(err => {
console.error(err) console.error(err)
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount.acct return parsedAccount.acct
} }
@ -293,28 +221,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -329,10 +243,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -364,8 +275,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,18 +1,5 @@
<template> <template>
<div <div class="relationship" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="follow event">
class="relationship"
tabIndex="0"
v-shortkey="
shortcutEnabled
? { next: ['j'], prev: ['k'], right: ['l'], profile: ['p'] }
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="follow event"
>
<div class="follow"> <div class="follow">
<div class="action"> <div class="action">
<div class="action-mark"> <div class="action-mark">
@ -24,7 +11,7 @@
v-html=" v-html="
$t('notification.follow.body', { $t('notification.follow.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
@ -47,26 +34,26 @@ import emojify from '~/src/renderer/utils/emojify'
export default { export default {
name: 'follow', name: 'follow',
components: { components: {
FailoverImg, FailoverImg
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
computed: { computed: {
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -84,7 +71,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -95,17 +82,9 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
handleStatusControl(event) { handleStatusControl(event) {
switch (event.srcKey) { switch (event.srcKey) {
@ -122,8 +101,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,18 +1,5 @@
<template> <template>
<div <div class="relationship" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="follow event">
class="relationship"
tabIndex="0"
v-shortkey="
shortcutEnabled
? { next: ['j'], prev: ['k'], right: ['l'], profile: ['p'] }
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="follow event"
>
<div class="follow-request"> <div class="follow-request">
<div class="action"> <div class="action">
<div class="action-mark"> <div class="action-mark">
@ -24,7 +11,7 @@
v-html=" v-html="
$t('notification.follow_request.body', { $t('notification.follow_request.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
@ -47,26 +34,26 @@ import emojify from '~/src/renderer/utils/emojify'
export default { export default {
name: 'follow-request', name: 'follow-request',
components: { components: {
FailoverImg, FailoverImg
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
computed: { computed: {
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -84,7 +71,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -95,17 +82,9 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
handleStatusControl(event) { handleStatusControl(event) {
switch (event.srcKey) { switch (event.srcKey) {
@ -122,8 +101,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="poll expired">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="poll expired"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="poll-expired"> <div v-show="!filtered(message)" class="poll-expired">
<div class="action"> <div class="action">
@ -32,34 +12,25 @@
v-html=" v-html="
$t('notification.poll_expired.body', { $t('notification.poll_expired.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div class="icon" @click="openUser(message.status.account)"> <div class="icon" @click="openUser(message.status.account)">
<FailoverImg <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" role="presentation" />
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
role="presentation"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
<div class="user" @click="openUser(message.status.account)"> <div class="user" @click="openUser(message.status.account)">
<span class="display-name" <span class="display-name"><bdi v-html="username(message.status.account)"></bdi></span>
><bdi v-html="username(message.status.account)"></bdi
></span>
</div> </div>
<div class="timestamp"> <div class="timestamp">
{{ parseDatetime(message.status.created_at) }} {{ parseDatetime(message.status.created_at) }}
@ -79,14 +50,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -99,9 +63,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -110,9 +72,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -120,28 +80,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -175,42 +117,42 @@ export default {
name: 'poll-expired', name: 'poll-expired',
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
displayNameStyle: (state) => state.displayNameStyle, displayNameStyle: state => state.displayNameStyle,
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -228,7 +170,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -256,31 +198,17 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'poll-expired') const parsedAccount = findAccount(e.target, 'poll-expired')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch((err) => { .catch(err => {
console.error(err) console.error(err)
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount.acct return parsedAccount.acct
} }
@ -293,28 +221,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -329,10 +243,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -364,8 +275,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="poll vote">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="poll vote"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="poll-vote"> <div v-show="!filtered(message)" class="poll-vote">
<div class="action"> <div class="action">
@ -32,34 +12,25 @@
v-html=" v-html="
$t('notification.poll_vote.body', { $t('notification.poll_vote.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div class="icon" @click="openUser(message.status.account)"> <div class="icon" @click="openUser(message.status.account)">
<FailoverImg <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" role="presentation" />
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
role="presentation"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
<div class="user" @click="openUser(message.status.account)"> <div class="user" @click="openUser(message.status.account)">
<span class="display-name" <span class="display-name"><bdi v-html="username(message.status.account)"></bdi></span>
><bdi v-html="username(message.status.account)"></bdi
></span>
</div> </div>
<div class="timestamp"> <div class="timestamp">
{{ parseDatetime(message.status.created_at) }} {{ parseDatetime(message.status.created_at) }}
@ -79,14 +50,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -99,9 +63,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -110,9 +72,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -120,28 +80,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -175,42 +117,42 @@ export default {
name: 'poll-vote', name: 'poll-vote',
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
displayNameStyle: (state) => state.displayNameStyle, displayNameStyle: state => state.displayNameStyle,
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -228,7 +170,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -256,31 +198,17 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'poll-vote') const parsedAccount = findAccount(e.target, 'poll-vote')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch((err) => { .catch(err => {
console.error(err) console.error(err)
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount.acct return parsedAccount.acct
} }
@ -293,28 +221,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -329,10 +243,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -364,8 +275,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="quoted toot">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="quoted toot"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="quoted"> <div v-show="!filtered(message)" class="quoted">
<div class="action"> <div class="action">
@ -32,30 +12,20 @@
v-html=" v-html="
$t('notification.quote.body', { $t('notification.quote.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div <div class="icon" @click="openUser(message.status.account)" role="presentation">
class="icon" <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" />
@click="openUser(message.status.account)"
role="presentation"
>
<FailoverImg
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
@ -71,11 +41,7 @@
</div> </div>
<div class="content-wrapper"> <div class="content-wrapper">
<div class="spoiler" v-show="spoilered(message.status)"> <div class="spoiler" v-show="spoilered(message.status)">
<span <span v-html="emojiText(message.status.spoiler_text, message.status.emojis)"></span>
v-html="
emojiText(message.status.spoiler_text, message.status.emojis)
"
></span>
<el-button <el-button
v-if="!isShowContent(message.status)" v-if="!isShowContent(message.status)"
plain plain
@ -86,14 +52,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -106,9 +65,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -117,9 +74,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -127,28 +82,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -158,12 +95,7 @@
:icon="message.status.reblog.account.avatar" :icon="message.status.reblog.account.avatar"
:username="username(message.status.reblog.account)" :username="username(message.status.reblog.account)"
:accountName="''" :accountName="''"
:body=" :body="emojiText(message.status.reblog.content, message.status.reblog.emojis)"
emojiText(
message.status.reblog.content,
message.status.reblog.emojis
)
"
@select="openDetail(message.status.reblog)" @select="openDetail(message.status.reblog)"
/> />
<LinkPreview <LinkPreview
@ -197,41 +129,41 @@ export default {
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview,
Quote, Quote
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -249,7 +181,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -277,30 +209,16 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'quoted') const parsedAccount = findAccount(e.target, 'quoted')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch(() => { .catch(() => {
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount return parsedAccount
} }
@ -313,28 +231,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -349,10 +253,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -381,8 +282,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="reacted toot">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="reacted toot"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="favourite"> <div v-show="!filtered(message)" class="favourite">
<div class="action"> <div class="action">
@ -32,34 +12,25 @@
v-html=" v-html="
$t('notification.reaction.body', { $t('notification.reaction.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div class="icon" @click="openUser(message.status.account)"> <div class="icon" @click="openUser(message.status.account)">
<FailoverImg <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" role="presentation" />
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
role="presentation"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
<div class="user" @click="openUser(message.status.account)"> <div class="user" @click="openUser(message.status.account)">
<span class="display-name" <span class="display-name"><bdi v-html="username(message.status.account)"></bdi></span>
><bdi v-html="username(message.status.account)"></bdi
></span>
</div> </div>
<div class="timestamp"> <div class="timestamp">
{{ parseDatetime(message.status.created_at) }} {{ parseDatetime(message.status.created_at) }}
@ -79,14 +50,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -99,9 +63,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -110,9 +72,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -120,28 +80,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -175,42 +117,42 @@ export default {
name: 'reaction', name: 'reaction',
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
displayNameStyle: (state) => state.displayNameStyle, displayNameStyle: state => state.displayNameStyle,
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -228,7 +170,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -256,31 +198,17 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'favourite') const parsedAccount = findAccount(e.target, 'favourite')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch((err) => { .catch(err => {
console.error(err) console.error(err)
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount.acct return parsedAccount.acct
} }
@ -293,28 +221,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -329,10 +243,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -364,8 +275,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -1,25 +1,5 @@
<template> <template>
<div <div class="status" tabIndex="0" ref="status" @click="$emit('select')" role="article" aria-label="reblogged toot">
class="status"
tabIndex="0"
v-shortkey="
shortcutEnabled
? {
next: ['j'],
prev: ['k'],
right: ['l'],
left: ['h'],
open: ['o'],
profile: ['p'],
}
: {}
"
@shortkey="handleStatusControl"
ref="status"
@click="$emit('select')"
role="article"
aria-label="reblogged toot"
>
<div v-show="filtered(message)" class="filtered">Filtered</div> <div v-show="filtered(message)" class="filtered">Filtered</div>
<div v-show="!filtered(message)" class="reblog"> <div v-show="!filtered(message)" class="reblog">
<div class="action"> <div class="action">
@ -32,30 +12,20 @@
v-html=" v-html="
$t('notification.reblog.body', { $t('notification.reblog.body', {
username: username(message.account), username: username(message.account),
interpolation: { escapeValue: false }, interpolation: { escapeValue: false }
}) })
" "
></bdi> ></bdi>
</span> </span>
</div> </div>
<div class="action-icon" role="presentation"> <div class="action-icon" role="presentation">
<FailoverImg <FailoverImg :src="message.account.avatar" :alt="`Avatar of ${message.account.username}`" />
:src="message.account.avatar"
:alt="`Avatar of ${message.account.username}`"
/>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="target" v-on:dblclick="openDetail(message.status)"> <div class="target" v-on:dblclick="openDetail(message.status)">
<div <div class="icon" @click="openUser(message.status.account)" role="presentation">
class="icon" <FailoverImg :src="message.status.account.avatar" :alt="`Avatar of ${message.status.account.username}`" />
@click="openUser(message.status.account)"
role="presentation"
>
<FailoverImg
:src="message.status.account.avatar"
:alt="`Avatar of ${message.status.account.username}`"
/>
</div> </div>
<div class="detail"> <div class="detail">
<div class="toot-header"> <div class="toot-header">
@ -82,14 +52,7 @@
> >
{{ $t('cards.toot.show_more') }} {{ $t('cards.toot.show_more') }}
</el-button> </el-button>
<el-button <el-button v-else plain type="primary" size="medium" class="spoil-button" @click="showContent = false">
v-else
plain
type="primary"
size="medium"
class="spoil-button"
@click="showContent = false"
>
{{ $t('cards.toot.hide') }} {{ $t('cards.toot.hide') }}
</el-button> </el-button>
</div> </div>
@ -102,9 +65,7 @@
</div> </div>
<div class="attachments"> <div class="attachments">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && !isShowAttachments(message.status)"
sensitive(message.status) && !isShowAttachments(message.status)
"
class="show-sensitive" class="show-sensitive"
type="info" type="info"
@click="showAttachments = true" @click="showAttachments = true"
@ -113,9 +74,7 @@
</el-button> </el-button>
<div v-show="isShowAttachments(message.status)"> <div v-show="isShowAttachments(message.status)">
<el-button <el-button
v-show=" v-show="sensitive(message.status) && isShowAttachments(message.status)"
sensitive(message.status) && isShowAttachments(message.status)
"
class="hide-sensitive" class="hide-sensitive"
type="text" type="text"
@click="showAttachments = false" @click="showAttachments = false"
@ -123,28 +82,10 @@
> >
<font-awesome-icon icon="eye" class="hide" /> <font-awesome-icon icon="eye" class="hide" />
</el-button> </el-button>
<div <div class="media" v-bind:key="media.preview_url" v-for="media in mediaAttachments(message.status)">
class="media" <FailoverImg :src="media.preview_url" :title="media.description" :readExif="true" />
v-bind:key="media.preview_url" <el-tag class="media-label" size="mini" v-if="media.type == 'gifv'">GIF</el-tag>
v-for="media in mediaAttachments(message.status)" <el-tag class="media-label" size="mini" v-else-if="media.type == 'video'">VIDEO</el-tag>
>
<FailoverImg
:src="media.preview_url"
:title="media.description"
:readExif="true"
/>
<el-tag
class="media-label"
size="mini"
v-if="media.type == 'gifv'"
>GIF</el-tag
>
<el-tag
class="media-label"
size="mini"
v-else-if="media.type == 'video'"
>VIDEO</el-tag
>
</div> </div>
</div> </div>
<div class="clearfix"></div> <div class="clearfix"></div>
@ -178,41 +119,41 @@ export default {
name: 'reblog', name: 'reblog',
components: { components: {
FailoverImg, FailoverImg,
LinkPreview, LinkPreview
}, },
props: { props: {
message: { message: {
type: Object, type: Object,
default: {}, default: {}
}, },
filters: { filters: {
type: Array, type: Array,
default: [], default: []
}, },
focused: { focused: {
type: Boolean, type: Boolean,
default: false, default: false
}, },
overlaid: { overlaid: {
type: Boolean, type: Boolean,
default: false, default: false
}, }
}, },
data() { data() {
return { return {
showContent: false, showContent: false,
showAttachments: false, showAttachments: false
} }
}, },
computed: { computed: {
...mapState('App', { ...mapState('App', {
timeFormat: (state) => state.timeFormat, timeFormat: state => state.timeFormat,
language: (state) => state.language, language: state => state.language,
hideAllAttachments: (state) => state.hideAllAttachments, hideAllAttachments: state => state.hideAllAttachments
}), }),
shortcutEnabled: function () { shortcutEnabled: function () {
return this.focused && !this.overlaid return this.focused && !this.overlaid
}, }
}, },
mounted() { mounted() {
if (this.focused) { if (this.focused) {
@ -230,7 +171,7 @@ export default {
this.$refs.status.blur() this.$refs.status.blur()
}) })
} }
}, }
}, },
methods: { methods: {
username(account) { username(account) {
@ -258,30 +199,16 @@ export default {
} }
const parsedAccount = findAccount(e.target, 'reblog') const parsedAccount = findAccount(e.target, 'reblog')
if (parsedAccount !== null) { if (parsedAccount !== null) {
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
this.$store this.$store
.dispatch( .dispatch('TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', parsedAccount)
'TimelineSpace/Contents/SideBar/AccountProfile/searchAccount', .then(account => {
parsedAccount this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
) this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
.then((account) => {
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/openAccountComponent'
)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
}) })
.catch(() => { .catch(() => {
this.openLink(e) this.openLink(e)
this.$store.commit( this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', false)
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
false
)
}) })
return parsedAccount return parsedAccount
} }
@ -294,28 +221,14 @@ export default {
} }
}, },
openUser(account) { openUser(account) {
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/openAccountComponent')
'TimelineSpace/Contents/SideBar/openAccountComponent' this.$store.dispatch('TimelineSpace/Contents/SideBar/AccountProfile/changeAccount', account)
) this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
this.$store.dispatch(
'TimelineSpace/Contents/SideBar/AccountProfile/changeAccount',
account
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
openDetail(message) { openDetail(message) {
this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent') this.$store.dispatch('TimelineSpace/Contents/SideBar/openTootComponent')
this.$store.dispatch( this.$store.dispatch('TimelineSpace/Contents/SideBar/TootDetail/changeToot', message)
'TimelineSpace/Contents/SideBar/TootDetail/changeToot', this.$store.commit('TimelineSpace/Contents/SideBar/changeOpenSideBar', true)
message
)
this.$store.commit(
'TimelineSpace/Contents/SideBar/changeOpenSideBar',
true
)
}, },
mediaAttachments(message) { mediaAttachments(message) {
return message.media_attachments return message.media_attachments
@ -330,10 +243,7 @@ export default {
return !this.spoilered(message) || this.showContent return !this.spoilered(message) || this.showContent
}, },
sensitive(message) { sensitive(message) {
return ( return (this.hideAllAttachments || message.sensitive) && this.mediaAttachments(message).length > 0
(this.hideAllAttachments || message.sensitive) &&
this.mediaAttachments(message).length > 0
)
}, },
isShowAttachments(message) { isShowAttachments(message) {
return !this.sensitive(message) || this.showAttachments return !this.sensitive(message) || this.showAttachments
@ -365,8 +275,8 @@ export default {
this.openUser(this.message.account) this.openUser(this.message.account)
break break
} }
}, }
}, }
} }
</script> </script>

View File

@ -70,8 +70,8 @@ import { sync } from 'vuex-router-sync'
import { createI18n } from 'vue-i18n' import { createI18n } from 'vue-i18n'
import 'vue-resize/dist/vue-resize.css' import 'vue-resize/dist/vue-resize.css'
import VueResize from 'vue-resize' import VueResize from 'vue-resize'
import VueVirtualScroller from 'vue-virtual-scroller' import VueVirtualScroller from '@h3poteto/vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' import '@h3poteto/vue-virtual-scroller/dist/vue-virtual-scroller.css'
import './assets/fonts/fonts.css' import './assets/fonts/fonts.css'
import App from './App.vue' import App from './App.vue'

View File

@ -1143,6 +1143,15 @@
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
"@h3poteto/vue-virtual-scroller@2.0.0-alpha.1":
version "2.0.0-alpha.1"
resolved "https://npm.pkg.github.com/download/@h3poteto/vue-virtual-scroller/2.0.0-alpha.1/202991053ed05fd7f919ac4451e35a6e8a8f2d5297f042c3f2a7c5de34b05288#793c1b17f3515cd29dc267e67d1a61a90aeec9f1"
integrity sha512-gfSCGPGAEBuk6znAsFb/0vj6FiCbvEPXhipAojWECyFPtnFF3XH36So37CfHT7i7+96Mq+e1GfV8HfO6SQaaVg==
dependencies:
mitt "^2.1.0"
vue-observe-visibility "^2.0.0-alpha.1"
vue-resize "^2.0.0-alpha.1"
"@humanwhocodes/config-array@^0.5.0": "@humanwhocodes/config-array@^0.5.0":
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
@ -4391,11 +4400,6 @@ csstype@^2.6.8:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
custom-event-polyfill@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz#9bc993ddda937c1a30ccd335614c6c58c4f87aee"
integrity sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==
dashdash@^1.12.0: dashdash@^1.12.0:
version "1.14.1" version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@ -5073,11 +5077,6 @@ elegant-spinner@^1.0.1:
resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
element-matches@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/element-matches/-/element-matches-0.1.2.tgz#7345cb71e965bd2b12f725e524591c102198361a"
integrity sha512-yWh1otcs3OKUWDvu/IxyI36ZI3WNaRZlI0uG/DK6fu0pap0VYZ0J5pEGTk1zakme+hT0OKHwhlHc0N5TJhY6yQ==
element-plus@^2.1.9: element-plus@^2.1.9:
version "2.1.9" version "2.1.9"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.1.9.tgz#8779b041f32f871eef2f903ee4c0da16dfb13024" resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.1.9.tgz#8779b041f32f871eef2f903ee4c0da16dfb13024"
@ -12420,14 +12419,6 @@ vue-router@^4.0.14:
dependencies: dependencies:
"@vue/devtools-api" "^6.0.0" "@vue/devtools-api" "^6.0.0"
vue-shortkey@^3.1.7:
version "3.1.7"
resolved "https://registry.yarnpkg.com/vue-shortkey/-/vue-shortkey-3.1.7.tgz#31c09a99ed597331a6a49a45eeff894a78a19eef"
integrity sha512-Wm/vPXXS+4Wl/LoYpD+cZc0J0HIoVlY8Ep0JLIqqswmAya3XUBtsqKbhzEf9sXo+3rZ5p1YsUyZfXas8XD7YjQ==
dependencies:
custom-event-polyfill "^1.0.7"
element-matches "^0.1.2"
vue-style-loader@^4.1.3: vue-style-loader@^4.1.3:
version "4.1.3" version "4.1.3"
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"
@ -12445,15 +12436,6 @@ vue-virtual-scroller@^1.0.10:
vue-observe-visibility "^0.4.4" vue-observe-visibility "^0.4.4"
vue-resize "^0.4.5" vue-resize "^0.4.5"
vue-virtual-scroller@^2.0.0-alpha.1:
version "2.0.0-alpha.1"
resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-alpha.1.tgz#5b5410105b8e60ca57bbd5f2faf5ad1d8108d046"
integrity sha512-Mn5w3Qe06t7c3Imm2RHD43RACab1CCWplpdgzq+/FWJcpQtcGKd5vDep8i+nIwFtzFLsWAqEK0RzM7KrfAcBng==
dependencies:
mitt "^2.1.0"
vue-observe-visibility "^2.0.0-alpha.1"
vue-resize "^2.0.0-alpha.1"
vue@^3.2.31: vue@^3.2.31:
version "3.2.33" version "3.2.33"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2" resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2"