fix non-notifying mentions and original mention display

This commit is contained in:
Henry Jameson 2021-06-22 20:16:26 +03:00 committed by Sam Therapy
parent c139c8110c
commit 5f17e914a4
Signed by: sam
GPG key ID: 4D8B07C18F31ACBD
4 changed files with 28 additions and 4 deletions

View file

@ -5,8 +5,9 @@
<!-- eslint-disable vue/no-v-html -->
<a
v-if="!user"
href="url"
:href="url"
class="original"
target="_blank"
v-html="content"
/>
<!-- eslint-enable vue/no-v-html -->

View file

@ -36,6 +36,10 @@ export default Vue.component('RichContent', {
required: true,
type: String
},
attentions: {
required: false,
default: () => []
},
// Emoji object, as in status.emojis, note the "s" at the end...
emoji: {
required: true,
@ -91,8 +95,12 @@ export default Vue.component('RichContent', {
</a>
}
const renderMention = (attrs, children, encounteredText) => {
const renderMention = (attrs, children) => {
const linkData = getLinkData(attrs, children, mentionIndex++)
linkData.notifying = this.attentions.some(a => a.statusnet_profile_url === linkData.url)
if (!linkData.notifying) {
encounteredText = true
}
writtenMentions.push(linkData)
if (!encounteredText) {
firstMentions.push(linkData)
@ -148,7 +156,7 @@ export default Vue.component('RichContent', {
const Tag = getTagName(opener)
const attrs = getAttrs(opener)
switch (Tag) {
case 'span': // replace images with StillImage
case 'span': // Replace last mentions class with mentionsline
if (attrs['class'] && attrs['class'].includes('lastMentions')) {
if (firstMentions.length > 1 && lastMentions.length > 1) {
break

View file

@ -85,6 +85,20 @@ const StatusContent = {
})
},
methods: {
onParseReady (event) {
this.$emit('parseReady', event)
const { writtenMentions } = event
writtenMentions
.filter(mention => !mention.notifying)
.forEach(mention => {
const { content, url } = mention
const cleanedString = content.replace(/<[^>]+?>/gi, '') // remove all tags
if (!cleanedString.startsWith('@')) return
const handle = cleanedString.slice(1)
const host = url.replace(/^https?:\/\//, '').replace(/\/.+?$/, '')
this.$store.dispatch('fetchUserIfMissing', `${handle}@${host}`)
})
},
toggleShowMore () {
if (this.mightHideBecauseTall) {
this.showingTall = !this.showingTall

View file

@ -47,7 +47,8 @@
:handle-links="true"
:hide-mentions="hideMentions"
:greentext="mergedConfig.greentext"
@parseReady="$emit('parseReady', $event)"
:attentions="status.attentions"
@parseReady="onParseReady"
/>
<button