Module:AnotherTool:修订间差异
(template 2 module) |
小无编辑摘要 |
||
(未显示同一用户的3个中间版本) | |||
第1行: | 第1行: | ||
-- 合并了若干个基本没有环境变量的en wikipedia模块 | |||
local lang = mw.language.getContentLanguage() | local lang = mw.language.getContentLanguage() | ||
local getArgs = require 'Module:Arguments'.getArgs | local getArgs = require 'Module:Arguments'.getArgs | ||
local p = {} | local p = {} | ||
-- [*[https://en.wikipedia.org/wiki/Module:Purge, 供养{{Purge}}]*] | |||
local function purge(args) | local function purge(args) | ||
-- Make the URL | -- Make the URL | ||
第42行: | 第44行: | ||
root | root | ||
:addClass 'noprint' | :addClass 'noprint' | ||
:addClass 'plainlinks' | -- :addClass 'plainlinks' | ||
:addClass 'purgelink' | -- :addClass 'purgelink' | ||
:wikitext(('[%s %s]'):format(url, display)) | :wikitext(('[%s %s]'):format(url, display)) | ||
第49行: | 第51行: | ||
end | end | ||
-- [*[https://en.wikipedia.org/wiki/Module:Countdown, 供养{{倒计时}}]*] | |||
local function formatMessage(secondsLeft, event, color) | local function formatMessage(secondsLeft, event, color) | ||
local | local chosenIntervals | ||
if secondsLeft >= 86400 then | |||
chosenIntervals = {'days', 'hours'} | |||
elseif secondsLeft >= 3600 then | |||
chosenIntervals = {'hours'} | |||
else | |||
chosenIntervals = {'minutes', 'seconds'} | |||
end | |||
local timeLeft = lang:formatDuration(secondsLeft, chosenIntervals) | |||
-- Color and bold the numbers, because it makes them look important. | -- Color and bold the numbers, because it makes them look important. | ||
timeLeft = string.gsub(timeLeft, '(%d+)', '<span style="color: ' .. (color or '#66F') .. '; font-weight: bold;">%1</span>') | timeLeft = string.gsub(timeLeft, '(%d+)', '<span style="color: ' .. (color or '#66F') .. '; font-weight: bold;">%1</span>') | ||
第96行: | 第107行: | ||
local refreshLink | local refreshLink | ||
if args. | if args.purge then | ||
refreshLink = '<small>' .. purge '更新' .. '</small>' | |||
else | |||
refreshLink = '' | refreshLink = '' | ||
end | end | ||
return text .. refreshLink | return text .. refreshLink | ||
end | |||
-- [*[https://en.wikipedia.org/wiki/Module:Separated_entries, 供养{{多行分离}}]*] | |||
local function separatedEntries(args) | |||
local compressSparseArray = require 'Module:TableTools'.compressSparseArray | |||
local separator = args.separator | |||
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space. | |||
and mw.text.decode(args.separator) or '' | |||
-- Discard values before the starting parameter. | |||
local start = tonumber(args.start) | |||
if start then | |||
for i = 1, start - 1 do args[i] = nil end | |||
end | |||
-- Discard named parameters. | |||
local values = compressSparseArray(args) | |||
return mw.text.listToText(values, separator, separator) | |||
end | end | ||
第112行: | 第139行: | ||
p.countdown = makeInvokeFunc(countdown) | p.countdown = makeInvokeFunc(countdown) | ||
p.purge = makeInvokeFunc(purge, {parentOnly = true}) | p.purge = makeInvokeFunc(purge, {parentOnly = true}) | ||
p.separatedEntries = makeInvokeFunc(separatedEntries) | |||
return p | return p |
2024年10月11日 (五) 03:17的最新版本
可在Module:AnotherTool/doc创建此模块的帮助文档
-- 合并了若干个基本没有环境变量的en wikipedia模块
local lang = mw.language.getContentLanguage()
local getArgs = require 'Module:Arguments'.getArgs
local p = {}
-- [*[https://en.wikipedia.org/wiki/Module:Purge, 供养{{Purge}}]*]
local function purge(args)
-- Make the URL
local url
do
local title
if args.page then
title = mw.title.new(args.page)
if not title then
error(string.format(
"'%s'不是有效的页面名称",
args.page
), 2)
end
else
title = mw.title.getCurrentTitle()
end
if args.jumpto then
title.fragment = args.jumpto
end
url = title:fullUrl {action = 'purge'}
-- &_={{CURRENTTIMESTAMP}}
end
-- Make the display
local purgeText, purgeTitle = args[1] or '清除缓存', args[2] or '更新服务器所缓存的页面数据'
local display
if args.page then
display = purgeText
else
display = tostring(mw.html.create 'span'
:attr('title', purgeTitle)
:wikitext(purgeText)
)
end
-- Output the HTML
local root = mw.html.create 'span'
root
:addClass 'noprint'
-- :addClass 'plainlinks'
-- :addClass 'purgelink'
:wikitext(('[%s %s]'):format(url, display))
return tostring(root)
end
-- [*[https://en.wikipedia.org/wiki/Module:Countdown, 供养{{倒计时}}]*]
local function formatMessage(secondsLeft, event, color)
local chosenIntervals
if secondsLeft >= 86400 then
chosenIntervals = {'days', 'hours'}
elseif secondsLeft >= 3600 then
chosenIntervals = {'hours'}
else
chosenIntervals = {'minutes', 'seconds'}
end
local timeLeft = lang:formatDuration(secondsLeft, chosenIntervals)
-- Color and bold the numbers, because it makes them look important.
timeLeft = string.gsub(timeLeft, '(%d+)', '<span style="color: ' .. (color or '#66F') .. '; font-weight: bold;">%1</span>')
return string.format('距离%s尚余%s', event, timeLeft)
end
local function countdown(args)
if not (args.month and args.day) then
return '<strong class="error">错误:必须指定 month 和 day</strong>'
end
local timeArgs = {year = args.year or os.date '*t'.year, month = args.month, day = args.day, hour = args.hour, min = args.minute, sec = args.second}
for k, v in pairs(timeArgs) do
if not tonumber(v) then
error('参数' .. k .. '无法解析为数字:' .. v)
end
end
local eventTime = os.time(timeArgs)
local timeToStart = os.difftime(eventTime, os.time()) -- (future time - current time)
local text
if timeToStart > 0 then
-- Event has not begun yet
text = formatMessage(timeToStart, args.event or '这次事件', args.color)
elseif args.duration then
local timeToEnd
if args['duration unit'] then
-- Duration is in unit other than seconds, use formatDate to add
timeToEnd = tonumber(lang:formatDate('U', '@' .. tostring(timeToStart) .. ' +' .. tostring(args.duration) .. ' ' .. args['duration unit']))
else
timeToEnd = timeToStart + (tonumber(args.duration) or error('args.duration应该是秒数', 0))
end
if timeToEnd > 0 then
-- Event is in progress
text = args.eventstart or formatMessage(timeToEnd, (args.event or '这次事件') .. '完结', args.color)
else
-- Event had a duration and has now ended
text = args.eventend or ((args.event or '这次事件') .. '已完结')
end
else
-- Event had no duration and has begun
-- 已经开始?
text = args.eventend or ((args.event or '这次事件') .. '已完结')
end
local refreshLink
if args.purge then
refreshLink = '<small>' .. purge '更新' .. '</small>'
else
refreshLink = ''
end
return text .. refreshLink
end
-- [*[https://en.wikipedia.org/wiki/Module:Separated_entries, 供养{{多行分离}}]*]
local function separatedEntries(args)
local compressSparseArray = require 'Module:TableTools'.compressSparseArray
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
and mw.text.decode(args.separator) or ''
-- Discard values before the starting parameter.
local start = tonumber(args.start)
if start then
for i = 1, start - 1 do args[i] = nil end
end
-- Discard named parameters.
local values = compressSparseArray(args)
return mw.text.listToText(values, separator, separator)
end
local function makeInvokeFunc(func, opt)
return function(frame)
local args = getArgs(frame, opt)
return func(args)
end
end
p.countdown = makeInvokeFunc(countdown)
p.purge = makeInvokeFunc(purge, {parentOnly = true})
p.separatedEntries = makeInvokeFunc(separatedEntries)
return p