diff --git a/package-lock.json b/package-lock.json index 1e9b493ec1..215a7201c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1701,7 +1701,7 @@ "dependencies": { "sax": { "version": "1.2.1", - "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "uuid": { @@ -17240,7 +17240,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -21931,7 +21931,7 @@ "dependencies": { "css-select": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { "boolbase": "~1.0.0", @@ -24684,6 +24684,11 @@ "punycode": "^1.4.1" } }, + "tributejs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-3.4.0.tgz", + "integrity": "sha512-BWB2YvfKpa6hZgcP9hKN5/tH3P/Guspn4r+ePgwNpftnQwMb6GVWTUgBpkMtVXkR5dwLLcP/iW87i9C1mp21zQ==" + }, "trim-leading-lines": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/trim-leading-lines/-/trim-leading-lines-0.1.1.tgz", @@ -26042,6 +26047,11 @@ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==" }, + "vue-tribute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vue-tribute/-/vue-tribute-1.0.1.tgz", + "integrity": "sha1-ThJfdoEjxUBd4izjQ4NqmaCVRz0=" + }, "vuedraggable": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.16.0.tgz", diff --git a/package.json b/package.json index 1203e1731c..9c354eca47 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ "svg-url-loader": "^2.3.2", "svgo": "^1.0.5", "svgo-loader": "^2.1.0", + "tributejs": "^3.4.0", "universal-analytics": "^0.4.16", "update": "^0.7.4", "upgrade": "^1.1.0", @@ -104,6 +105,7 @@ "vue-router": "^3.0.0", "vue-style-loader": "^4.1.0", "vue-template-compiler": "^2.5.16", + "vue-tribute": "^1.0.1", "vuedraggable": "^2.15.0", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec", "webpack": "^3.12.0", diff --git a/website/client/components/chat/chatCard.vue b/website/client/components/chat/chatCard.vue index f992148b26..e574c44cf8 100644 --- a/website/client/components/chat/chatCard.vue +++ b/website/client/components/chat/chatCard.vue @@ -16,7 +16,7 @@ div span.mr-1(v-if="msg.username") @{{ msg.username }} span.mr-1(v-if="msg.username") • span(v-b-tooltip="", :title="msg.timestamp | date") {{ msg.timestamp | timeAgo }} - .text(v-html='atHighlight(parseMarkdown(msg.text))') + .text(v-html='atHighlight(parseMarkdown(msg.text))', ref='markdownContainer') hr .d-flex(v-if='msg.id') .action.d-flex.align-items-center(v-if='!inbox', @click='copyAsTodo(msg)') @@ -244,6 +244,16 @@ export default { return achievementsLib.getContribText(message.contributor, message.backer) || ''; }, }, + mounted () { + const links = this.$refs.markdownContainer.getElementsByTagName('a'); + for (var i = 0; i < links.length; i++) { + const link = links[i]; + links[i].onclick = (event) => { + event.preventDefault(); + this.$router.push({ path: link.getAttribute('href')}); + }; + } + }, methods: { async like () { let message = cloneDeep(this.msg); @@ -299,7 +309,8 @@ export default { }); }, parseMarkdown (text) { - return habiticaMarkdown.render(text); + const mdText = habiticaMarkdown.render(text); + return mdText; }, }, }; diff --git a/website/client/components/groups/chat.vue b/website/client/components/groups/chat.vue index 0f6b23164c..df0ccde591 100644 --- a/website/client/components/groups/chat.vue +++ b/website/client/components/groups/chat.vue @@ -4,23 +4,17 @@ h3(v-once) {{ label }} .row - textarea(:placeholder='placeholder', - v-model='newMessage', - ref='user-entry', - :class='{"user-entry": newMessage}', - @keydown='updateCarretPosition', - @keyup.ctrl.enter='sendMessageShortcut()', - @paste='disableMessageSendShortcut()', - maxlength='3000' - ) + vue-tribute(:options="autocompleteOptions") + textarea(:placeholder='placeholder', + v-model='newMessage', + ref='user-entry', + :class='{"user-entry": newMessage}', + @keydown='updateCarretPosition', + @keyup.ctrl.enter='sendMessageShortcut()', + @paste='disableMessageSendShortcut()', + maxlength='3000' + ) span {{ currentLength }} / 3000 - autocomplete( - :text='newMessage', - v-on:select="selectedAutocomplete", - :textbox='textbox', - :coords='coords', - :caretPosition = 'caretPosition', - :chat='group.chat') .row.chat-actions .col-6.chat-receive-actions @@ -42,17 +36,29 @@