打开/关闭搜索
搜索
打开/关闭菜单
60
73
29
1.1K
武外梗百科
导航
首页
最近更改
随机页面
站务
其他
友链
特殊页面
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
讨论
贡献
创建账号
登录
编辑“︁
Module:PageSummary
”︁
武外梗百科 爱国好学自强图新的百科全书
查看
阅读
编辑源代码
查看历史
associated-pages
模块
讨论
更多操作
240d:c010:132:2::a6
(
留言
)
2026年2月18日 (三) 12:07的版本
(
差异
)
←上一版本
|
最后版本
(
差异
) |
下一版本→
(
差异
)
警告:您正在编辑该页面的旧版本。
如果您发布该更改,该版本后的所有更改都会丢失。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
local p = {} -- 供其他 Lua 模块调用的内部函数 function p._getSummary(pageName) if not pageName or pageName == "" then return "<span class='error'>请输入有效的条目名称。</span>" end local title = mw.title.new(pageName) if not title or not title.exists then return "<span class='error'>条目“" .. pageName .. "”不存在。</span>" end local content = title:getContent() if not content then return "<span class='error'>无法获取条目内容。</span>" end -- 1. 提取首张图片 (匹配常用图片命名空间) -- 注意:不区分大小写,使用简单的正则匹配查找最早出现的文件 local firstImage = mw.ustring.match(content, "%[%[%s*[Ff][Ii][Ll][Ee]%s*:([^|%]]+)") or mw.ustring.match(content, "%[%[%s*[Ii][Mm][Aa][Gg][Ee]%s*:([^|%]]+)") or mw.ustring.match(content, "%[%[%s*文件%s*:([^|%]]+)") or mw.ustring.match(content, "%[%[%s*檔案%s*:([^|%]]+)") or mw.ustring.match(content, "%[%[%s*图片%s*:([^|%]]+)") or mw.ustring.match(content, "%[%[%s*图像%s*:([^|%]]+)") -- 2. 纯文本清理流程 local text = content -- 屏蔽重定向页面 if mw.ustring.match(text, "^%s*#REDIRECT") or mw.ustring.match(text, "^%s*#重定向") then return "该页面是一个重定向页面。" end -- 去除 HTML 注释 text = mw.ustring.gsub(text, "<!%-%-.-%-%->", "") -- 去除部分可能干扰正文的 HTML 标签及其内容 text = mw.ustring.gsub(text, "<ref[^>]*>.-</ref>", "") text = mw.ustring.gsub(text, "<ref[^>]-/>", "") text = mw.ustring.gsub(text, "<math[^>]*>.-</math>", "") text = mw.ustring.gsub(text, "<gallery[^>]*>.-</gallery>", "") text = mw.ustring.gsub(text, "<div[^>]*>.-</div>", "") text = mw.ustring.gsub(text, "<table[^>]*>.-</table>", "") -- 循环去除模板 {{ ... }} (添加计数器防死循环) local prev, count count = 0 repeat prev = text text = mw.ustring.gsub(text, "{{[^{}]-}}", "") count = count + 1 until text == prev or count > 50 -- 循环去除表格 {| ... |} count = 0 repeat prev = text text = mw.ustring.gsub(text, "{|.-|}", "") count = count + 1 until text == prev or count > 30 -- 去除章节标题 == 标题 == text = mw.ustring.gsub(text, "==+.-==+", "") -- 核心逻辑:由内向外剥离中括号 [[ ... ]] -- 这样可以安全处理诸如 [[File:xx.jpg|thumb|这是一个[[内链]]]] 的嵌套情况 count = 0 repeat prev = text text = mw.ustring.gsub(text, "%[%[([^%[%]]-)%]%]", function(inner) local upperInner = mw.ustring.upper(inner) -- 如果是文件、图片或分类,直接整块抹除 if mw.ustring.match(upperInner, "^%s*FILE%s*:") or mw.ustring.match(upperInner, "^%s*IMAGE%s*:") or mw.ustring.match(inner, "^%s*文件%s*:") or mw.ustring.match(inner, "^%s*檔案%s*:") or mw.ustring.match(inner, "^%s*图片%s*:") or mw.ustring.match(inner, "^%s*图像%s*:") or mw.ustring.match(upperInner, "^%s*CATEGORY%s*:") or mw.ustring.match(inner, "^%s*分类%s*:") or mw.ustring.match(inner, "^%s*分類%s*:") then return "" end -- 如果是普通内链 [[链接|显示文本]],保留最后的显示文本 local parts = mw.text.split(inner, "|") return parts[#parts] end) count = count + 1 until text == prev or count > 50 -- 去除粗体和斜体 (''' 和 '') text = mw.ustring.gsub(text, "''+", "") -- 去除残留的单层 HTML 标签 (如 <br>, <span>) text = mw.ustring.gsub(text, "<[^>]+>", "") -- 合并多余的换行和空格 text = mw.ustring.gsub(text, "%s+", " ") -- 去除开头可能残留的乱码标点(因为移除了前面的信息框,这里容易留下逗号或右括号) text = mw.ustring.gsub(text, "^[%s,%.:;%?!)]】」》”’>|]+", "") text = mw.ustring.gsub(text, "^[,。、;:?!]+", "") text = mw.text.trim(text) -- 3. 截取前约 100 个字符 (由于使用的是 mw.ustring,完美支持中文字符计算) local summary = mw.ustring.sub(text, 1, 100) if mw.ustring.len(text) > 100 then summary = summary .. "..." end -- 4. 使用 mw.html 组装最终输出的 UI local container = mw.html.create('div') :cssText('display: flex; gap: 15px; align-items: flex-start; padding: 15px; border: 1px solid #eaecf0; border-radius: 6px; background: #f8f9fa; margin-bottom: 1em;') if firstImage then container:tag('div') :cssText('flex: 0 0 120px; border-radius: 4px; overflow: hidden;') :wikitext("[[File:" .. firstImage .. "|120px|frameless]]") end container:tag('div') :cssText('flex-grow: 1; font-size: 0.95em; line-height: 1.6; color: #202122;') :wikitext(summary) return tostring(container) end -- 供 Wikitext 中 {{#invoke:}} 调用的主函数 function p.main(frame) -- 优先获取模板传递的参数,如果没有,再尝试获取直接 Invoke 传递的参数 local args = frame:getParent().args if not args[1] or args[1] == "" then args = frame.args end return p._getSummary(args[1]) end return p
摘要:
请注意,所有对武外梗百科的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
武外梗百科:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
预览使用本模板的页面
该页面使用的模板:
Module:PageSummary/doc
(
编辑
)
编辑“︁
Module:PageSummary
”︁
武外梗百科 爱国好学自强图新的百科全书