Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 标签:已被回退 |
无编辑摘要 标签:已被回退 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- | -- 核心逻辑:使用简单的索引查找替代昂贵的正则表达式 | ||
function p.getSummaryAndImage(frame) | function p.getSummaryAndImage(frame) | ||
local pageName = frame.args[1] or "" | local pageName = frame.args[1] or "" | ||
| 第48行: | 第8行: | ||
local content = title:getContent() | local content = title:getContent() | ||
if not content then return "" end | |||
-- | -- 1. 预切割:只拿最前面的 400 字符,从源头掐断计算量 | ||
local | local raw = mw.ustring.sub(content, 1, 400) | ||
local | -- 2. 提取图片 (仅提取文件名,不涉及复杂解析) | ||
local firstImage = string.match(raw, "%[%[[Ff]ile:([^|%]%s]+)") or | |||
string.match(raw, "%[%[文件:([^|%]%s]+)") | |||
-- | -- 3. 极速清理:只做简单的字符替换,不做嵌套识别 | ||
local | -- 移除引用、注释、标题符、列表符 | ||
local clean = raw | |||
clean = string.gsub(clean, "<ref.-</ref>", "") | |||
clean = string.gsub(clean, "<ref.->", "") | |||
clean = string.gsub(clean, "<!%-%-.-%-%->", "") | |||
clean = string.gsub(clean, "\n==+.-==+", " ") | |||
clean = string.gsub(clean, "\n%s*[*#:]+", " ") | |||
-- 移除图片和模板(不递归,直接找第一个闭合括号就切断) | |||
-- 这种处理方式虽然可能留下残余的“}}”或“]]”,但绝对保护 CPU | |||
clean = string.gsub(clean, "%[%[[^%]%[]+%]%]", "") | |||
clean = string.gsub(clean, "{{[^{}]+}}", "") | |||
-- 清理换行和空格 | |||
clean = string.gsub(clean, "\n", " ") | |||
clean = string.gsub(clean, "%s+", " ") | |||
clean = mw.text.trim(clean) | |||
-- 4. 强制截断 150 字 | |||
local | local summary = mw.ustring.sub(clean, 1, 150) | ||
summary = | -- 最后的安全阀:清理末尾残留的括号碎片 | ||
if mw.ustring.len( | summary = string.gsub(summary, "[%[%]{}<>]+$", "") | ||
if mw.ustring.len(clean) > 150 then summary = summary .. "..." end | |||
-- 渲染 | -- 5. 渲染 | ||
local container = mw.html.create('div'):css({['margin-bottom']=' | local container = mw.html.create('div'):css({['margin-bottom']='20px', ['display']='flow-root'}) | ||
if firstImage then | if firstImage then | ||
container:wikitext('[[' .. firstImage .. '| | container:wikitext('[[' .. firstImage .. '|130px|right|link=' .. pageName .. ']]') | ||
end | end | ||
container:tag('div') | container:tag('div') | ||
:css({['font-size']='1. | :css({['font-size']='1.2em', ['font-weight']='bold', ['margin-bottom']='4px'}) | ||
:wikitext('[[' .. pageName .. ']]') | :wikitext('[[' .. pageName .. ']]') | ||
container:tag('div') | container:tag('div') | ||
:css({['line-height']='1. | :css({['line-height']='1.5', ['color']='#333', ['font-size']='14px'}) | ||
:wikitext(summary) | :wikitext(summary) | ||