diff --git a/src/Common.js b/src/Common.js index 54f5bffc..e3ad0d57 100644 --- a/src/Common.js +++ b/src/Common.js @@ -8,14 +8,9 @@ import buildFormatter from 'react-timeago/lib/formatters/buildFormatter'; import './Common.css'; const chinese_format=buildFormatter(chineseStrings); -const PID_RE_TEXT=/(?:^|[^\d])(\d{5,6})(?!\d)/g; -linkify.add('#', { - validate: /^(\d{5,6})/, - normalize: (match) => { - match.url='#'+match.url; - }, -}); +const PID_RE=/(^|[^\d])([1-9]\d{4,5})(?!\d)/g; +const NICKNAME_RE=/((?:(?:Angry|Baby|Crazy|Diligent|Excited|Fat|Greedy|Hungry|Interesting|Japanese|Kind|Little|Magic|Naïve|Old|Powerful|Quiet|Rich|Superman|THU|Undefined|Valuable|Wifeless|Xiangbuchulai|Young|Zombie)\s)?(?:Alice|Bob|Carol|Dave|Eve|Francis|Grace|Hans|Isabella|Jason|Kate|Louis|Margaret|Nathan|Olivia|Paul|Queen|Richard|Susan|Thomas|Uma|Vivian|Winnie|Xander|Yasmine|Zach)|You Win|洞主)/gi; function pad2(x) { return x<10 ? '0'+x : ''+x; @@ -41,10 +36,19 @@ export function TitleLine(props) { ) } -export function AutoLink(props) { +export function HighlightedText(props) { + let parts=[].concat.apply([], props.text.split(PID_RE).map((p)=>p.split(NICKNAME_RE))); return ( -
{props.text.replace(new RegExp(PID_RE_TEXT,'g'),' #$1 ')}
+
+                {parts.map((p,idx)=>(
+                    {
+                        PID_RE.test(p) ? {p} :
+                        NICKNAME_RE.test(p) ? {p} :
+                        p
+                    }
+                ))}
+            
) } \ No newline at end of file diff --git a/src/Flows.js b/src/Flows.js index 0a3133f7..334b70f3 100644 --- a/src/Flows.js +++ b/src/Flows.js @@ -1,6 +1,6 @@ import React, {Component} from 'react'; import {ColorPicker} from './color_picker'; -import {Time, TitleLine, AutoLink} from './Common.js'; +import {Time, TitleLine, HighlightedText} from './Common.js'; import './Flows.css'; import LazyLoad from 'react-lazyload'; import {AudioWidget} from './AudioWidget.js'; @@ -22,7 +22,7 @@ function Reply(props) { #{props.info.cid}