跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
社群首页
帮助
希顶相关网站
希顶社区官网
(原作)希顶翻译器
〇改希顶转写器
希顶模组服务器
搜索
搜索
创建账号
登录
个人工具
创建账号
登录
查看“Module:讨论统计”的源代码
模块
讨论
English
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
←
Module:讨论统计
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
-- 原作者为 Minecraft 中文 Wiki 用户 star00 -- 以 CC BY-NC-SA 3.0 授权使用 local p = {} function table.unique(t, bArray) local check = {} local n = {} local idx = 1 for k, v in pairs(t) do if not check[v] then if bArray then n[idx] = v idx = idx + 1 else n[k] = v end check[v] = true end end return n end function getTimeStyle(time) local _, _, year, month, day, hour, min = time:find '(%d+)年(%d+)月(%d+)日%s%(.-%)%s(%d+):(%d+)' -- divided by 86400 is to convert seconds to days local diff = os.difftime(os.time(), os.time {year = year, month = month, day = day, hour = hour, min = min}) / 86400 if diff >= 30 then return 'background-color: #bbb;' end if diff >= 7 then return 'background-color: #ddd;' end if diff >= 1 then return '' end return 'background-color: #efe;' end function close(text, defaultStyle) if text:match 'closed%-topic%-yes' then return 'background-color: #efe;' end if text:match 'closed%-topic%-no' then return 'background-color: #fee;' end return defaultStyle end function conv(talk) -- 关键词替换 -- 如有字符导致生成错误,请在这里添加转换 talk = talk :gsub('===(.-)===', '%1') :gsub('Special:用户贡献/', 'User:ip:') -- ip user handle first :gsub('用户', 'User') :gsub('user', 'User') return talk end function trim(text) -- remove special strip markers and spaces text = mw.text.killMarkers(text):gsub('^[\t\r\n\f]*(.-)[\t\r\n\f]*$', '%1') return text end function makeUserLink(text) -- 输入用户名以及带有ip:前缀的ip用户。 if text == nil then return '不详' end local ipUser = text:match 'ip:(.*)' if ipUser then return '[[Special:用户贡献/' .. ipUser .. '|' .. ipUser .. ']]' else return '[[User:' .. text .. '|' .. text .. ']]' end end function getTalkList(pageName) -- 输入页面名,返回一个包含文本的讨论信息表 -- 例如:talklist[1][text] local talk = conv(mw.getCurrentFrame():expandTemplate {title = ':' .. pageName}) .. '==' local talkList = {} for topic in talk:gmatch '==\n(.-)==' do talkList[#talkList + 1] = topic end return talkList end function getTitleList(pageName) local talk = conv(mw.getCurrentFrame():expandTemplate {title = ':' .. pageName}) local titleList = {} for title in talk:gmatch '==(.-)==' do titleList[#titleList + 1] = title end return titleList end function getTalkTime(talk) local result = talk:match '[%s%S]*(%d%d%d%d.*) %(UTC%)' or talk:match '[%s%S]*(%d%d%d%d.*) %(CST%)' return result end function getUserInfo(text) -- 输入讨论的文本,输出和User有关的转换部分table local userList = {} for user, _ in text:gmatch 'User:([^\n]-)%|[^\n]-UTC' do userList[#userList + 1] = user end for user, _ in text:gmatch 'User:([^\n]-)%|[^\n]-CST' do userList[#userList + 1] = user end local userNum = #userList local uniqueUserNum = #(table.unique(userList)) return {userNum = userNum, uniqueUserNum = uniqueUserNum, firstUser = userList[1], lastUser = userList[#userList]} end function generateTable(talkTitle, talkText) local body = { '{| class="wikitable sortable collapsible" style="text-align: center;"', '|-', '! # !! 话题 !! 发言条数 !! 参与人数 !! 发起者 !! 最后发言者 !! 最后发言时间' } local userInfo, time local userStyle, uniqueUserStyle, timeStyle for i = 1, #talkText do time, userInfo = getTalkTime(talkText[i]), getUserInfo(talkText[i]) -- 对表格添加样式 userStyle = userInfo.userNum == 1 and 'background-color: #fcc;' or '' uniqueUserStyle = userInfo.uniqueUserNum == 1 and 'background-color: #fcc;' or '' timeStyle = close(talkText[i], getTimeStyle(time)) -- 组装表格一个话题的部分 table.insert( body, table.concat( { '|-', '! ' .. i, '| ' .. trim(talkTitle[i]), '| style="' .. userStyle .. '" | ' .. userInfo.userNum, '| style="' .. uniqueUserStyle .. '" | ' .. userInfo.uniqueUserNum, '| ' .. makeUserLink(userInfo.firstUser), '| style="' .. timeStyle .. '" | ' .. makeUserLink(userInfo.lastUser), '| style="' .. timeStyle .. '" | ' .. time }, '\n' ) ) end table.insert(body, '|}') return table.concat(body, '\n') end function p.main() local args = require([[Module:ProcessArgs]]).merge(true) local f = mw.getCurrentFrame() local talkTitle, talkText = getTitleList(args[1]), getTalkList(args[1]) for i = 1, #talkTitle do talkTitle[i] = f:preprocess(talkTitle[i]) end local result = generateTable(talkTitle, talkText) if #talkTitle == #talkText then return result else return error 'Topic list获取错误。' end end return p
该页面使用的模板:
Module:讨论统计/doc
(
查看源代码
)
返回
Module:讨论统计
。
开关有限宽度模式