From 3cc622876c39ec7e4aef259ffb0ba9810aa56bed Mon Sep 17 00:00:00 2001 From: Maxi Redigonda Date: Wed, 14 Nov 2018 20:39:42 -0300 Subject: [PATCH] Adds mentions-parser lib app, used to parse ticket numbers preceded by a hashtag and transform them to links --- client/src/lib-app/mentions-parser.js | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 client/src/lib-app/mentions-parser.js diff --git a/client/src/lib-app/mentions-parser.js b/client/src/lib-app/mentions-parser.js new file mode 100644 index 00000000..81579c57 --- /dev/null +++ b/client/src/lib-app/mentions-parser.js @@ -0,0 +1,53 @@ +const PARSING_TEXT = 0; +const PARSING_MENTION = 1; + +class MentionsParser { + + parse(text) { + let parsingLink = false; + let parsingType = PARSING_TEXT; + let parsingSegment = ''; + let ans = ''; + + for(let index = 0; index < text.length; ++index){ + let character = text[index]; + + if(character == '#'){ + ans += this.compileSegment(parsingSegment, parsingType); + + parsingLink = true; + parsingType = PARSING_MENTION; + parsingSegment = ''; + } else if(!this.isAlphanumeric(character) && parsingLink){ + ans += this.compileSegment(parsingSegment, parsingType); + + parsingLink = false; + parsingType = PARSING_TEXT; + parsingSegment = character; + } else { + parsingSegment += character; + } + } + + ans += this.compileSegment(parsingSegment, parsingType); + + return ans; + } + + isAlphanumeric(string){ + return /[a-zA-Z0-9]/.test(string); + } + + compileSegment(segment, parsingType){ + switch(parsingType){ + case PARSING_TEXT: + return segment; + case PARSING_MENTION: + return '#' + segment + ''; + default: + return ''; + } + } +}; + +export default new MentionsParser;