模块:EditState
此模块被引用于约696,000个页面。 为了避免造成大规模的影响,所有对此模块的编辑应先于沙盒或测试样例上测试。 测试后无误的版本可以一次性地加入此模块中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
本模块提供一些能侦测页面被编辑之状况的函数。
函数说明
isPreview
用来侦测页面是否处于预览状态。
previewNotice
提供在页面预览状态添加警告以提醒编者的功能。
isCreating
用来侦测页面是否处于“创建中”的状态。
hasParent
检查模板呼叫是否存在外层。
getTitle
获得当下模板呼叫的标题。
nextSubst
让替换引用延迟运行的函数。
local p={}
local lib_arg={};
local yesno = {}
function p.isPreview()
local frame = mw.getCurrentFrame()
local check_str = '{{REVISIONID}}'
if mw.isSubsting() then check_str = "{{safesubst:REVISIONID}}" end
local Preview_mode = frame:preprocess(check_str); -- use magic word to get revision id
return (Preview_mode == nil or mw.text.trim(Preview_mode or '') == '') -- if there is a value then this is not a preiview
end
function p.previewNotice(frame)
if mw.isSubsting() then return '' end
local text = ''
if type(frame) == type('string') then --type('string') avoid version change
text = mw.text.trim(frame)
else
if type((frame or {}).args) ~= type({}) then frame.args = {} end
text = mw.text.trim(frame.args['1'] or frame.args[1] or frame.args.text or
frame['1'] or frame[1] or frame.text or '')
end
text = mw.text.trim(text)
if text ~= '' then
mw.addWarning(text)
end
return ''
end
function p.isCreating()
local frame = mw.getCurrentFrame()
local check_str = '{{PAGEID}}'
if mw.isSubsting() then check_str = "{{safesubst:PAGEID}}" end
local Preview_mode = frame:preprocess(check_str);
return (Preview_mode == nil or mw.text.trim(Preview_mode or '') == '')
end
function p.hasParent(layer)
local frame = mw.getCurrentFrame()
local times = tonumber(layer or '') or 0
local Parent = frame:getParent();
for i=2,tonumber(times) do
Parent = Parent:getParent()
if Parent == nil then break end
end
return not (Parent == nil or Parent == '')
end
function p.getTitle(layer)
local frame = mw.getCurrentFrame()
local times = tonumber(layer or '') or 0
if times <= 0 then return frame:getTitle()end
local Parent = frame:getParent();
for i=2,tonumber(times) do
Parent = Parent:getParent()
if Parent == nil then return '' end
end
return Parent:getTitle();
end
function p.nextSubst(frame)
local args, working_frame
if frame == mw.getCurrentFrame() then
-- We're being called via #invoke. The args are passed through to the module
-- from the template page, so use the args that were passed into the template.
if lib_arg.getArgs == nil then lib_arg = require('Module:Arguments') end
args = lib_arg.getArgs(frame, {
parentFirst=true,
trim = false,
removeBlanks = false
})
working_frame = frame
else
-- We're being called from another module or from the debug console, so assume
-- the args are passed in directly.
args = frame
working_frame = mw.getCurrentFrame()
if type(args) ~= type({}) then args = {frame} end
end
local input_data = args[1] or args['1']
if mw.text.trim(input_data or '') == '' then return '' end
local num_args = {}
for key,value in pairs(args) do
local num = tonumber(key) or 0
local stored = false
if num then
if num > 1 then
num_args[key - 1] = value
stored = true
end
if num == 1 then stored = true end
end
if stored ~= true then num_args[key] = value end
end
local str_args = mw.ustring.sub(require('Module:Template invocation').invocation(input_data, num_args),3,-3)
if(mw.isSubsting())then
return "{{subst:" .. str_args .. "}}" ;
end
return working_frame:preprocess("{{safesubst:" .. str_args .. "}}")
end
return p