Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- | -- stripImages 函数保持不变(已使用字节级,但对图片提取影响小) | ||
-- | -- cleanFinal 函数保持不变 | ||
function p.getSummaryAndImage(frame) | function p.getSummaryAndImage(frame) | ||
| 第75行: | 第15行: | ||
if not content or content == "" then return "" end | if not content or content == "" then return "" end | ||
-- | -- 用 mw.ustring 安全截取(避免字节切割中文) | ||
local rawExcerpt = | local rawExcerpt = mw.ustring.sub(content, 1, 300) -- 字符级 300 个字符,够用 | ||
-- | -- 改用 mw.ustring 的模式匹配,更安全处理中文文件名 | ||
local firstImage = | local firstImage | ||
-- 尝试匹配 File: 或 文件: 开头的 | |||
firstImage = mw.ustring.match(rawExcerpt, "%[%[(File|文件|Image|图像):([^|%]]+)") | |||
-- 如果没匹配到,再试更宽松的(但优先上面) | |||
if not firstImage then | |||
firstImage = mw.ustring.match(rawExcerpt, "%[%[([^|%]]+)%]") | |||
if firstImage and not (firstImage:find("File:") or firstImage:find("文件:") | |||
or firstImage:find("Image:") or firstImage:find("图像:")) then | |||
firstImage = nil -- 不是文件就丢掉 | |||
end | |||
end | |||
local step1 = stripImages(rawExcerpt) or "" | local step1 = stripImages(rawExcerpt) or "" | ||
| 第85行: | 第36行: | ||
local targetLen = 120 | local targetLen = 120 | ||
local summary = cleanText:sub(1, targetLen * 2) or "" | local summary = cleanText:sub(1, targetLen * 2) or "" | ||
local ulen = mw.ustring.len(summary) or 0 | local ulen = mw.ustring.len(summary) or 0 | ||
if ulen > targetLen then | if ulen > targetLen then | ||
summary = mw.ustring.sub(summary, 1, targetLen) or "" | summary = mw.ustring.sub(summary, 1, targetLen) or "" | ||
local rev = summary:reverse() | local rev = summary:reverse() | ||
local lastBreak = rev:find("[ %s%p,。!?;:]") or 1 | local lastBreak = rev:find("[ %s%p,。!?;:]") or 1 | ||
| 第106行: | 第53行: | ||
summary = mw.text.trim(summary) | summary = mw.text.trim(summary) | ||
-- HTML | -- HTML 构建 | ||
local container = mw.html.create('div') | local container = mw.html.create('div') | ||
:css('margin-bottom', '25px') | :css('margin-bottom', '25px') | ||
:css('display', 'flow-root') | :css('display', 'flow-root') | ||
container:tag('div') | container:tag('div') | ||
:css('font-size', '1.3em') | :css('font-size', '1.3em') | ||
| 第119行: | 第65行: | ||
:wikitext('[[' .. pageName .. ']]') | :wikitext('[[' .. pageName .. ']]') | ||
local textDiv = container:tag('div') | local textDiv = container:tag('div') | ||
:css('line-height', '1.6') | :css('line-height', '1.6') | ||
| 第125行: | 第70行: | ||
:css('font-size', '14px') | :css('font-size', '14px') | ||
-- 关键修复:如果有图片名,确保用 mw.ustring 处理 | |||
if firstImage and firstImage ~= "" then | if firstImage and firstImage ~= "" then | ||
-- 额外清理:去掉可能的前后空格(虽然 match 已捕获干净) | |||
firstImage = mw.text.trim(firstImage) | |||
) | |||
-- 用 [[File:xxx|...]] 格式,确保 MediaWiki 正确解析 | |||
local imgWikitext = '[[' .. firstImage .. '|120px|right|link=' .. pageName .. ']]' | |||
textDiv:wikitext(imgWikitext) | |||
end | end | ||