diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index 83d9b5ce6..5ebd6ed92 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -3,7 +3,9 @@ import loadScript from 'discourse/lib/load-script'; import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators'; import { showSelector } from "discourse/lib/emoji/emoji-toolbar"; import Category from 'discourse/models/category'; -import { SEPARATOR as categoryHashtagSeparator } from 'discourse/lib/category-hashtags'; +import { SEPARATOR as categoryHashtagSeparator, + categoryHashtagTriggerRule + } from 'discourse/lib/category-hashtags'; // Our head can be a static string or a function that returns a string // based on input (like for numbered lists). @@ -262,25 +264,7 @@ export default Ember.Component.extend({ return Category.search(term); }, triggerRule(textarea, opts) { - const result = Discourse.Utilities.caretRowCol(textarea); - const row = result.rowNum; - var col = result.colNum; - var line = textarea.value.split("\n")[row - 1]; - - if (opts && opts.backSpace) { - col = col - 1; - line = line.slice(0, line.length - 1); - - // Don't trigger autocomplete when backspacing into a `#category |` => `#category|` - if (/^#{1}\w+/.test(line)) return false; - } - - if (col < 6) { - // Don't trigger autocomplete when ATX-style headers are used - return (line.slice(0, col) !== "#".repeat(col)); - } else { - return true; - } + return categoryHashtagTriggerRule(textarea, opts); } }); }, diff --git a/app/assets/javascripts/discourse/lib/category-hashtags.js.es6 b/app/assets/javascripts/discourse/lib/category-hashtags.js.es6 index da2be1209..7e0bed1ff 100644 --- a/app/assets/javascripts/discourse/lib/category-hashtags.js.es6 +++ b/app/assets/javascripts/discourse/lib/category-hashtags.js.es6 @@ -3,3 +3,25 @@ export const SEPARATOR = ":"; export function replaceSpan($elem, categorySlug, categoryLink) { $elem.replaceWith(`#${categorySlug}`); }; + +export function categoryHashtagTriggerRule(textarea, opts) { + const result = Discourse.Utilities.caretRowCol(textarea); + const row = result.rowNum; + var col = result.colNum; + var line = textarea.value.split("\n")[row - 1]; + + if (opts && opts.backSpace) { + col = col - 1; + line = line.slice(0, line.length - 1); + + // Don't trigger autocomplete when backspacing into a `#category |` => `#category|` + if (/^#{1}\w+/.test(line)) return false; + } + + if (col < 6) { + // Don't trigger autocomplete when ATX-style headers are used + return (line.slice(0, col) !== "#".repeat(col)); + } else { + return true; + } +}