Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
function p.getSummaryAndImage(frame) | function p.getSummaryAndImage(frame) | ||
local pageName = mw.text.trim(frame.args[1] or "") | local pageName = mw.text.trim(frame.args[1] or "") | ||
| 第71行: | 第9行: | ||
if not content or content == "" then return "" end | if not content or content == "" then return "" end | ||
local rawExcerpt = mw.ustring.sub(content, 1, 500) or "" -- 再加大范围,增加抓图概率 | |||
local rawExcerpt = mw.ustring.sub(content, 1, | |||
-- | -- 提取第一张图片 - 严格匹配,只取文件名部分 | ||
local firstImage = | local firstImage = nil | ||
for _, prefix in ipairs({"File:", "文件:", "Image:", "图像:"}) do | |||
firstImage = mw.ustring.match(rawExcerpt, "%[%[" .. prefix .. "([^|%]]+)") | |||
if firstImage then break end | |||
mw.ustring.match(rawExcerpt, "%[%[ | end | ||
-- | -- 备用匹配:如果上面失败,尝试抓完整链接并验证 | ||
if not firstImage then | if not firstImage then | ||
local | local fullLink = mw.ustring.match(rawExcerpt, "%[%[([^%]]+)%]%]") | ||
if | if fullLink then | ||
local ns, fname = mw.ustring.match( | local ns, fname = mw.ustring.match(fullLink, "^([^:]+):(.+)$") | ||
if ns and (ns == " | if ns and (ns:lower() == "file" or ns == "文件" or ns:lower() == "image" or ns == "图像") then | ||
firstImage = ns .. ":" .. fname | firstImage = ns .. ":" .. fname | ||
end | end | ||
| 第92行: | 第29行: | ||
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, "[%z%s<>\"]+", "") -- 去掉非法字符 | ||
firstImage = mw.ustring. | if firstImage == "" or mw.ustring.len(firstImage) < 3 then | ||
firstImage = nil -- 太短或空,视为无效 | |||
end | |||
end | end | ||
| 第137行: | 第76行: | ||
:css('font-size', '14px') | :css('font-size', '14px') | ||
-- 只在有有效图片时输出 wikitext(避免泄漏参数) | |||
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) | ||
end | end -- 如果没图,就只显示文字摘要 | ||
textDiv:wikitext(summary) | textDiv:wikitext(summary) | ||
| 第146行: | 第86行: | ||
return tostring(container) | return tostring(container) | ||
end | end | ||
2026年2月18日 (三) 00:07的版本
此模块的文档可以在Module:PageSummary/doc创建
function p.getSummaryAndImage(frame)
local pageName = mw.text.trim(frame.args[1] or "")
if pageName == "" then return "" end
local title = mw.title.new(pageName)
if not title or not title.exists then return "" end
local content = title:getContent()
if not content or content == "" then return "" end
local rawExcerpt = mw.ustring.sub(content, 1, 500) or "" -- 再加大范围,增加抓图概率
-- 提取第一张图片 - 严格匹配,只取文件名部分
local firstImage = nil
for _, prefix in ipairs({"File:", "文件:", "Image:", "图像:"}) do
firstImage = mw.ustring.match(rawExcerpt, "%[%[" .. prefix .. "([^|%]]+)")
if firstImage then break end
end
-- 备用匹配:如果上面失败,尝试抓完整链接并验证
if not firstImage then
local fullLink = mw.ustring.match(rawExcerpt, "%[%[([^%]]+)%]%]")
if fullLink then
local ns, fname = mw.ustring.match(fullLink, "^([^:]+):(.+)$")
if ns and (ns:lower() == "file" or ns == "文件" or ns:lower() == "image" or ns == "图像") then
firstImage = ns .. ":" .. fname
end
end
end
-- 清理 & 验证
if firstImage then
firstImage = mw.text.trim(firstImage)
firstImage = mw.ustring.gsub(firstImage, "[%z%s<>\"]+", "") -- 去掉非法字符
if firstImage == "" or mw.ustring.len(firstImage) < 3 then
firstImage = nil -- 太短或空,视为无效
end
end
local step1 = stripImages(rawExcerpt) or ""
local cleanText = cleanFinal(step1) or ""
local targetLen = 120
local summary = cleanText:sub(1, targetLen * 2) or ""
local ulen = mw.ustring.len(summary) or 0
if ulen > targetLen then
summary = mw.ustring.sub(summary, 1, targetLen) or ""
local rev = summary:reverse()
local lastBreak = rev:find("[ %s%p,。!?;:,…]") or 1
if lastBreak > 1 and lastBreak < 20 then
summary = mw.ustring.sub(summary, 1, #summary - lastBreak + 1) or ""
end
summary = mw.text.trim(summary) .. "..."
end
summary = mw.text.trim(summary)
-- HTML 构建
local container = mw.html.create('div')
:css('margin-bottom', '25px')
:css('display', 'flow-root')
container:tag('div')
:css('font-size', '1.3em')
:css('font-weight', 'bold')
:css('margin-bottom', '6px')
:css('border-bottom', '1px solid #eee')
:wikitext('[[' .. pageName .. ']]')
local textDiv = container:tag('div')
:css('line-height', '1.6')
:css('color', '#222')
:css('font-size', '14px')
-- 只在有有效图片时输出 wikitext(避免泄漏参数)
if firstImage and firstImage ~= "" then
local imgWikitext = '[[' .. firstImage .. '|120px|right|link=' .. pageName .. ']]'
textDiv:wikitext(imgWikitext)
end -- 如果没图,就只显示文字摘要
textDiv:wikitext(summary)
return tostring(container)
end