FIX: user/group/category mention dialects with less strict matchers
This commit is contained in:
parent
1a1f2ff5ee
commit
f654528aa4
|
@ -4,7 +4,7 @@
|
||||||
**/
|
**/
|
||||||
Discourse.Dialect.inlineRegexp({
|
Discourse.Dialect.inlineRegexp({
|
||||||
start: '#',
|
start: '#',
|
||||||
matcher: /^#([A-Za-z0-9][A-Za-z0-9\-]{0,40}[A-Za-z0-9])/,
|
matcher: /^#([\w-]{1,50})/,
|
||||||
spaceOrTagBoundary: true,
|
spaceOrTagBoundary: true,
|
||||||
|
|
||||||
emitter: function(matches) {
|
emitter: function(matches) {
|
||||||
|
|
|
@ -5,22 +5,23 @@
|
||||||
**/
|
**/
|
||||||
Discourse.Dialect.inlineRegexp({
|
Discourse.Dialect.inlineRegexp({
|
||||||
start: '@',
|
start: '@',
|
||||||
// NOTE: we really should be using SiteSettings here, but it loads later in process
|
// NOTE: since we can't use SiteSettings here (they loads later in process)
|
||||||
// also, if we do, we must ensure serverside version works as well
|
// we are being less strict to account for more cases than allowed
|
||||||
matcher: /^(@[A-Za-z0-9][A-Za-z0-9_\.\-]{0,40}[A-Za-z0-9\_])/,
|
matcher: /^@([\w.-]+)/,
|
||||||
wordBoundary: true,
|
wordBoundary: true,
|
||||||
|
|
||||||
emitter: function(matches) {
|
emitter: function(matches) {
|
||||||
var username = matches[1],
|
var mention = matches[0],
|
||||||
|
name = matches[1],
|
||||||
mentionLookup = this.dialect.options.mentionLookup;
|
mentionLookup = this.dialect.options.mentionLookup;
|
||||||
|
|
||||||
var type = mentionLookup && mentionLookup(username.substr(1));
|
var type = mentionLookup && mentionLookup(name);
|
||||||
if (type === "user") {
|
if (type === "user") {
|
||||||
return ['a', {'class': 'mention', href: Discourse.getURL("/users/") + username.substr(1).toLowerCase()}, username];
|
return ['a', {'class': 'mention', href: Discourse.getURL("/users/") + name.toLowerCase()}, mention];
|
||||||
} else if (type === "group") {
|
} else if (type === "group") {
|
||||||
return ['a', {'class': 'mention-group', href: Discourse.getURL("/groups/") + username.substr(1)}, username];
|
return ['a', {'class': 'mention-group', href: Discourse.getURL("/groups/") + name}, mention];
|
||||||
} else {
|
} else {
|
||||||
return ['span', {'class': 'mention'}, username];
|
return ['span', {'class': 'mention'}, mention];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -34,10 +35,10 @@ Discourse.Dialect.on("parseNode", function(event) {
|
||||||
var parent = path[path.length - 1];
|
var parent = path[path.length - 1];
|
||||||
// If the parent is an 'a', remove it
|
// If the parent is an 'a', remove it
|
||||||
if (parent && parent[0] === 'a') {
|
if (parent && parent[0] === 'a') {
|
||||||
var username = node[2];
|
var name = node[2];
|
||||||
node.length = 0;
|
node.length = 0;
|
||||||
node[0] = "__RAW";
|
node[0] = "__RAW";
|
||||||
node[1] = username;
|
node[1] = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ class PostAnalyzer
|
||||||
cooked_stripped.css(".onebox").remove
|
cooked_stripped.css(".onebox").remove
|
||||||
|
|
||||||
results = cooked_stripped.to_html.scan(PrettyText.mention_matcher)
|
results = cooked_stripped.to_html.scan(PrettyText.mention_matcher)
|
||||||
@raw_mentions = results.uniq.map { |un| un.first.downcase.gsub!(/^@/, '') }
|
@raw_mentions = results.uniq.map { |un| un.first.downcase.sub!(/^@/, '') }
|
||||||
end
|
end
|
||||||
|
|
||||||
# from rack ... compat with ruby 2.2
|
# from rack ... compat with ruby 2.2
|
||||||
|
|
Loading…
Reference in New Issue