Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- 剥离 [[File:]] [[文件:]] [[Category:]] 等,避免污染摘要文本 | |||
local function stripImages(text) | local function stripImages(text) | ||
if not text or text == "" then return "" end | if not text or text == "" then return "" end | ||
| 第30行: | 第31行: | ||
i = j | i = j | ||
else | else | ||
table.insert(out, text:sub(i, i+1)) | table.insert(out, text:sub(i, i+1)) -- 保留普通 [[ ]] | ||
i = i + 2 | i = i + 2 | ||
end | end | ||
| 第44行: | 第45行: | ||
end | end | ||
-- 清理各种干扰元素 | |||
local function cleanFinal(text) | local function cleanFinal(text) | ||
if not text or text == "" then return "" end | if not text or text == "" then return "" end | ||
| 第69行: | 第71行: | ||
if not content or content == "" then return "" end | if not content or content == "" then return "" end | ||
local rawExcerpt = mw.ustring.sub(content, 1, 400) or "" | -- 取前400字符,提高抓到图片的概率(中文页面首图常在前部) | ||
local rawExcerpt = mw.ustring.sub(content, 1, 400) or "" | |||
-- | -- 提取第一张图片(多写法分开匹配 + 清理) | ||
local firstImage = | local firstImage = | ||
mw.ustring.match(rawExcerpt, "%[%[File:([^|%]]+)") or | |||
mw.ustring.match(rawExcerpt, "%[%[文件:([^|%]]+)") or | |||
mw.ustring.match(rawExcerpt, "%[%[Image:([^|%]]+)") or | |||
mw.ustring.match(rawExcerpt, "%[%[图像:([^|%]]+)") | |||
-- 备用:抓完整 [[...]] 并验证命名空间 | |||
if not firstImage then | |||
local candidate = mw.ustring.match(rawExcerpt, "%[%[([^%]]+)%]%]") | |||
if candidate then | |||
local ns, fname = mw.ustring.match(candidate, "^([^:]+):(.+)$") | |||
if ns and (ns == "File" or ns == "文件" or ns == "Image" or ns == "图像") then | |||
firstImage = ns .. ":" .. fname | |||
end | end | ||
end | end | ||
end | end | ||
-- 清理文件名(去除隐藏字符、空格等) | |||
if firstImage then | if firstImage then | ||
firstImage = mw.text.trim(firstImage) | firstImage = mw.text.trim(firstImage) | ||
firstImage = mw.ustring.gsub(firstImage, "[% | firstImage = mw.ustring.gsub(firstImage, "^[%s%z]+", "") | ||
firstImage = mw.ustring.gsub(firstImage, "[%s%z]+$", "") | |||
end | end | ||
local step1 = stripImages(rawExcerpt) or "" | local step1 = stripImages(rawExcerpt) or "" | ||
local cleanText = cleanFinal(step1) or "" | local cleanText = cleanFinal(step1) or "" | ||
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 | ||
| 第118行: | 第120行: | ||
summary = mw.text.trim(summary) | summary = mw.text.trim(summary) | ||
-- | -- HTML 构建 | ||
local container = mw.html.create('div') | local container = mw.html.create('div') | ||
:css('margin-bottom', '25px') | :css('margin-bottom', '25px') | ||
| 第135行: | 第137行: | ||
:css('font-size', '14px') | :css('font-size', '14px') | ||
if firstImage and firstImage ~= "" then | if firstImage and firstImage ~= "" then | ||
local imgWikitext = '[[' .. firstImage .. '|120px|right|link=' .. pageName .. ']]' | local imgWikitext = '[[' .. firstImage .. '|120px|right|link=' .. pageName .. ']]' | ||
textDiv:wikitext(imgWikitext) | textDiv:wikitext(imgWikitext) | ||