Fix issues with tags and mentions

Fix issue where leading @ or # of a mention/hashtag get duplicated
Fix issue where normal tags were being overwritten by hashtags
This commit is contained in:
Trinity Pointard 2018-12-06 15:10:07 +01:00
parent d6e220cc8d
commit 5f059c3e98
3 changed files with 5 additions and 4 deletions

View file

@ -85,7 +85,6 @@ pub fn md_to_html(md: &str) -> (String, HashSet<String>, HashSet<String>) {
}
}
State::Ready => {
text_acc.push(c);
if c == '@' {
events.push(Event::Text(text_acc.into()));
(events, State::Mention, String::new(), n + 1, mentions, hashtags)
@ -93,11 +92,13 @@ pub fn md_to_html(md: &str) -> (String, HashSet<String>, HashSet<String>) {
events.push(Event::Text(text_acc.into()));
(events, State::Hashtag, String::new(), n + 1, mentions, hashtags)
} else if c.is_alphanumeric() {
text_acc.push(c);
if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention.
events.push(Event::Text(text_acc.clone().into()))
}
(events, State::Word, text_acc, n + 1, mentions, hashtags)
} else {
text_acc.push(c);
if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention.
events.push(Event::Text(text_acc.clone().into()))
}

View file

@ -719,7 +719,7 @@ impl Post {
}
}
for ot in old_tags {
for ot in old_tags.iter().filter(|t| !t.is_hashtag) {
if !tags_name.contains(&ot.tag) {
ot.delete(conn);
}
@ -756,7 +756,7 @@ impl Post {
}
}
for ot in old_tags {
for ot in old_tags.into_iter().filter(|t| t.is_hashtag) {
if !tags_name.contains(&ot.tag) {
ot.delete(conn);
}

View file

@ -231,7 +231,7 @@ fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientFor
let hashtags = hashtags.into_iter().map(|h| h.to_camel_case()).collect::<HashSet<_>>()
.into_iter().map(|t| Tag::build_activity(&conn, t)).collect::<Vec<_>>();
post.update_tags(&conn, hashtags);
post.update_hashtags(&conn, hashtags);
if post.published {
if newly_published {