diff options
Diffstat (limited to 'src/components/rich_content')
| -rw-r--r-- | src/components/rich_content/rich_content.jsx | 25 |
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 } |
