From e3246cd13b6ee034f5c8e969828332dc9312d449 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Tue, 28 Aug 2018 12:40:19 +0200 Subject: [PATCH] Preserve hashtag casing in threaded mode Inspired by f9b23a5d6247445ea5b70b431c934a4bb99213bc --- app/javascript/flavours/glitch/reducers/compose.js | 6 ++++-- app/javascript/flavours/glitch/util/hashtag.js | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 app/javascript/flavours/glitch/util/hashtag.js diff --git a/app/javascript/flavours/glitch/reducers/compose.js b/app/javascript/flavours/glitch/reducers/compose.js index 8b997bf4d..5ef5d3f5c 100644 --- a/app/javascript/flavours/glitch/reducers/compose.js +++ b/app/javascript/flavours/glitch/reducers/compose.js @@ -39,6 +39,7 @@ import { privacyPreference } from 'flavours/glitch/util/privacy_preference'; import { me } from 'flavours/glitch/util/initial_state'; import { overwrite } from 'flavours/glitch/util/js_helpers'; import { unescapeHTML } from 'flavours/glitch/util/html'; +import { recoverHashtags } from 'flavours/glitch/util/hashtag'; const totalElefriends = 3; @@ -114,8 +115,9 @@ function apiStatusToTextMentions (state, status) { } function apiStatusToTextHashtags (state, status) { - return ImmutableOrderedSet([]).union(status.tags.map( - ({ name }) => `#${name} ` + const text = unescapeHTML(status.content); + return ImmutableOrderedSet([]).union(recoverHashtags(status.tags, text).map( + (name) => `#${name} ` )).join(''); } diff --git a/app/javascript/flavours/glitch/util/hashtag.js b/app/javascript/flavours/glitch/util/hashtag.js new file mode 100644 index 000000000..d5ea57662 --- /dev/null +++ b/app/javascript/flavours/glitch/util/hashtag.js @@ -0,0 +1,8 @@ +export function recoverHashtags (recognizedTags, text) { + return recognizedTags.map(tag => { + const re = new RegExp(`(?:^|[^\/\)\w])#(${tag.name})`, 'i'); + const matched_hashtag = text.match(re); + return matched_hashtag ? matched_hashtag[1] : tag; + } + ); +}