diff options
author | Corey Hulen <corey@hulen.com> | 2015-06-30 19:46:25 -0800 |
---|---|---|
committer | Corey Hulen <corey@hulen.com> | 2015-06-30 19:46:25 -0800 |
commit | 75c19380776e9ebf30345a922bd3a0e2df0711f4 (patch) | |
tree | c4d2128772fb279b5d2c2641162e6304a98a163a | |
parent | 1200f764842ec11557b686ca9226b357ff5b0c93 (diff) | |
parent | bcc31b714b19ff3817c96c801028e23ace8cc55b (diff) | |
download | chat-75c19380776e9ebf30345a922bd3a0e2df0711f4.tar.gz chat-75c19380776e9ebf30345a922bd3a0e2df0711f4.tar.bz2 chat-75c19380776e9ebf30345a922bd3a0e2df0711f4.zip |
Merge pull request #110 from nickago/MM-1430
MM-1430 Added the ability to have hashtags with dashes in them
-rw-r--r-- | model/utils.go | 2 | ||||
-rw-r--r-- | store/sql_post_store.go | 16 | ||||
-rw-r--r-- | web/react/utils/utils.jsx | 4 |
3 files changed, 19 insertions, 3 deletions
diff --git a/model/utils.go b/model/utils.go index cc51dfe47..50e427694 100644 --- a/model/utils.go +++ b/model/utils.go @@ -260,7 +260,7 @@ func Etag(parts ...interface{}) string { return etag } -var validHashtag = regexp.MustCompile(`^(#[A-Za-z]+[A-Za-z0-9_]*[A-Za-z0-9])$`) +var validHashtag = regexp.MustCompile(`^(#[A-Za-z]+[A-Za-z0-9_\-]*[A-Za-z0-9])$`) var puncStart = regexp.MustCompile(`^[.,()&$!\[\]{}"':;\\]+`) var puncEnd = regexp.MustCompile(`[.,()&$#!\[\]{}"':;\\]+$`) diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 0ceebc02f..01900023f 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -356,9 +356,14 @@ func (s SqlPostStore) Search(teamId string, userId string, terms string, isHasht go func() { result := StoreResult{} + termMap := map[string]bool{} + searchType := "Message" if isHashtagSearch { searchType = "Hashtags" + for _,term := range strings.Split(terms, " ") { + termMap[term] = true; + } } // @ has a speical meaning in INNODB FULLTEXT indexes and @@ -394,6 +399,17 @@ func (s SqlPostStore) Search(teamId string, userId string, terms string, isHasht list := &model.PostList{Order: make([]string, 0, len(posts))} for _, p := range posts { + if searchType == "Hashtags" { + exactMatch := false + for _, tag := range strings.Split(p.Hashtags, " ") { + if termMap[tag] { + exactMatch = true + } + } + if !exactMatch { + continue + } + } list.AddPost(p) list.AddOrder(p.Id) } diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx index 08b83d084..70a47742f 100644 --- a/web/react/utils/utils.jsx +++ b/web/react/utils/utils.jsx @@ -395,8 +395,8 @@ module.exports.textToJsx = function(text, options) { var inner = []; - // Function specific regexes - var hashRegex = /^href="#[^"]+"|(#[A-Za-z]+[A-Za-z0-9_]*[A-Za-z0-9])$/g; + // Function specific regex + var hashRegex = /^href="#[^"]+"|(#[A-Za-z]+[A-Za-z0-9_\-]*[A-Za-z0-9])$/g; var implicitKeywords = UserStore.getCurrentMentionKeys(); |