diff options
author | Thibaut Girka <thib@sitedethib.com> | 2018-08-28 12:40:19 +0200 |
---|---|---|
committer | ThibG <thib@sitedethib.com> | 2018-08-28 19:52:28 +0200 |
commit | e3246cd13b6ee034f5c8e969828332dc9312d449 (patch) | |
tree | 7027e2c853fab81a0bf80cfb35c83da3080cae36 /app | |
parent | 14563f51674aa601b7684dc62a394469a9634c4d (diff) |
Preserve hashtag casing in threaded mode
Inspired by f9b23a5d6247445ea5b70b431c934a4bb99213bc
Diffstat (limited to 'app')
-rw-r--r-- | app/javascript/flavours/glitch/reducers/compose.js | 6 | ||||
-rw-r--r-- | app/javascript/flavours/glitch/util/hashtag.js | 8 |
2 files changed, 12 insertions, 2 deletions
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; + } + ); +} |