aboutsummaryrefslogtreecommitdiff
path: root/src/components/rich_content/rich_content.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/rich_content/rich_content.jsx')
-rw-r--r--src/components/rich_content/rich_content.jsx25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/components/rich_content/rich_content.jsx b/src/components/rich_content/rich_content.jsx
index ce562f13..cd73f2e5 100644
--- a/src/components/rich_content/rich_content.jsx
+++ b/src/components/rich_content/rich_content.jsx
@@ -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)
@@ -121,14 +129,13 @@ export default Vue.component('RichContent', {
if (emptyText) {
return encounteredText ? item : item.trim()
}
- let unescapedItem = unescape(item)
if (!encounteredText) {
- unescapedItem = unescapedItem.trimStart()
+ item = item.trimStart()
encounteredText = true
}
if (item.includes(':')) {
- unescapedItem = ['', processTextForEmoji(
- unescapedItem,
+ item = ['', processTextForEmoji(
+ item,
this.emoji,
({ shortcode, url }) => {
return <StillImage
@@ -140,7 +147,7 @@ export default Vue.component('RichContent', {
}
)]
}
- return unescapedItem
+ return item
}
// Handle tag nodes
@@ -149,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
@@ -189,7 +196,7 @@ export default Vue.component('RichContent', {
const emptyText = item.trim() === ''
if (emptyText) return item
if (!encounteredTextReverse) encounteredTextReverse = true
- return item
+ return unescape(item)
} else if (Array.isArray(item)) {
// Handle tag nodes
const [opener, children] = item
@@ -203,9 +210,7 @@ export default Vue.component('RichContent', {
return renderHashtag(attrs, children, encounteredTextReverse)
} else {
attrs.target = '_blank'
- html.includes('freenode') && console.log('PASS1', children)
const newChildren = [...children].reverse().map(processItemReverse).reverse()
- html.includes('freenode') && console.log('PASS1b', newChildren)
return <a {...{ attrs }}>
{ newChildren }