回复某人后@username中的username部分自动带链接是怎么实现的?

2010-09-15 23:42:58 +08:00
 paloalto
下面的这两部分代码是怎么实现回复某人后@username中的username部分自动带链接的?我死活没看出来。。

<script type="text/javascript">
// reply a reply
function replyOne(nickname){
replyContent = $("#reply_content");
oldContent = replyContent.val();
prefix = "@" + nickname + " ";
newContent = ''
if(oldContent.length > 0){
if (oldContent != prefix) {
newContent = prefix + oldContent;
}
} else {
newContent = prefix
}
replyContent.focus();
replyContent.val(newContent);
}
</script>

——————————————————————————————————

<img src="/static/img/reply.png" align="absmiddle" border="0" alt="回复 {{ reply.member.username }}" onclick="replyOne('{{ reply.member.username }}')" class="clickable" />
4449 次点击
所在节点    Project Babel
8 条回复
eth2net
2010-09-15 23:46:53 +08:00
在 tpl/portion/topic_replies.html
xinzhi
2010-09-15 23:54:32 +08:00
你看到的js是处理回复部分的。

/v2ex/v2ex/templatetags/filters.py里面还有个处理mentions的函数,发帖后就转换好存到数据库里了,不是后期用js处理的。
paloalto
2010-09-16 00:04:53 +08:00
谢谢解答,我再去研究一下。
dimlau
2010-09-16 00:05:18 +08:00
v2ex/templatetags/filters.py
paloalto
2010-09-16 00:25:31 +08:00
找到了:
# auto convert @username to clickable links
def mentions(value):
ms = re.findall('(@[a-zA-Z0-9\_]+\.?)\s?', value)
if (len(ms) > 0):
for m in ms:
m_id = re.findall('@([a-zA-Z0-9\_]+\.?)', m)
if (len(m_id) > 0):
if (m_id[0].endswith('.') != True):
value = value.replace('@' + m_id[0], '@<a href="/member/' + m_id[0] + '">' + m_id[0] + '</a>')
return value
else:
return value
register.filter(mentions)

——————————————
现在是匹配的英文和数字吧?想让它同时匹配中文、英文、数字的话,该怎么改呢?
eth2net
2010-09-16 00:47:35 +08:00
@paloalto 有点麻烦吧,毕竟要知道中文和id的对应关系啊,而且现在PB也没支持中文ID。
paloalto
2010-09-16 01:30:31 +08:00
@eth2net 我自己乱搞了一个中文的nickname,用个人签名改的
paloalto
2010-09-16 01:31:33 +08:00
我觉得把这个正则匹配去掉就可以实现了。明天再研究吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/2628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX