در حال ویرایش پودمان:Unsubst

هشدار: شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر وارد شوید یا یک حساب کاربری بسازید، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.

این ویرایش را می‌توان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.

نسخهٔ فعلی متن شما
خط ۱: خط ۱:
local checkType = require('libraryUtil').checkType
local p = {}
local p = {}
local BODY_PARAM = '$B'


local specialParams = {
local specialParams = {
['$params'] = 'parameter list',
['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates
['$aliases'] = 'parameter aliases',
['$flags'] = 'flags',
['$B'] = 'template content',
['$B'] = 'template content',
['$template-name'] = 'template invocation name override',
}
}


function p.main(frame, body)
p[''] = function ( frame )
-- If we are substing, this function returns a template invocation, and if
if not frame:getParent() then
-- not, it returns the template body. The template body can be specified in
error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' )
-- the body parameter, or in the template parameter defined in the
-- BODY_PARAM variable. This function can be called from Lua or from
-- #invoke.
 
-- Return the template body if we aren't substing.
if not mw.isSubsting() then
if body ~= nil then
return body
elseif frame.args[BODY_PARAM] ~= nil then
return frame.args[BODY_PARAM]
else
error(string.format(
"no template content specified (use parameter '%s' from #invoke)",
BODY_PARAM
), 2)
end
end
 
-- Sanity check for the frame object.
if type(frame) ~= 'table'
or type(frame.getParent) ~= 'function'
or not frame:getParent()
then
error(
"argument #1 to 'main' must be a frame object with a parent " ..
"frame available",
2
)
end
end
 
if not frame.args['$B'] then
-- Find the invocation name.
error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' )
local mTemplateInvocation = require('Module:Template invocation')
local name
 
if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then
name = frame.args['$template-name'] -- override whatever the template name is with this name
else
name = mTemplateInvocation.name(frame:getParent():getTitle())
end
end
 
-- Combine passed args with passed defaults
if mw.isSubsting() then
local args = {}
---- substing
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
-- Combine passed args with passed defaults
for k, v in pairs( frame:getParent().args ) do
local args = {}
args[k] = v
end
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
else
for k, v in pairs( frame.args ) do
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if not specialParams[k] then
خط ۸۲: خط ۲۹:
args[k] = v
args[k] = v
end
end
end


-- Trim parameters, if not specified otherwise
-- Build an equivalent template invocation
if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
-- First, find the title to use
for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
local titleobj = mw.title.new(frame:getParent():getTitle())
end
local title
 
if titleobj.namespace == 10 then -- NS_TEMPLATE
-- Pull information from parameter aliases
title = titleobj.text
local aliases = {}
elseif titleobj.namespace == 0 then -- NS_MAIN
if frame.args['$aliases'] then
title = ':' .. titleobj.text
local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
else
for k, v in ipairs( list ) do
title = titleobj.prefixedText
local tmp = mw.text.split( v, '%s*>%s*' )
aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
end
end
for k, v in pairs( aliases ) do
if args[k] and ( not args[v] or args[v] == '' ) then
args[v] = args[k]
end
end
args[k] = nil
end


-- Remove empty parameters, if specified
-- Build the invocation body with numbered args first, then named
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
local ret = '{{' .. title
local tmp = 0
for k, v in ipairs( args ) do
for k, v in ipairs( args ) do
if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
if string.find( v, '=', 1, true ) then
tmp = k
-- likely something like 1=foo=bar, we need to do it as a named arg
else
break
break
end
end
ret = ret .. '|' .. v
args[k] = nil
end
end
for k, v in pairs( args ) do
for k, v in pairs( args ) do
if v == '' then
ret = ret .. '|' .. k .. '=' .. v
if not (type(k) == 'number' and k < tmp) then args[k] = nil end
end
end
end
return ret .. '}}'
else
---- Not substing
-- Just return the "body"
return frame.args['$B']
end
end
-- Order parameters
if frame.args['$params'] then
local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
for k, v in ipairs(params) do
v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
if args[v] then tmp[v], args[v] = args[v], nil end
end
for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
args = tmp
end
return mTemplateInvocation.invocation(name, args)
end
end
p[''] = p.main -- For backwards compatibility


return p
return p
لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در ویکی حج منتشرشده تحت Creative Commons Attribution-NonCommercial-ShareAlike در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.
شما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!
لغو راهنمای ویرایش‌کردن (در پنجرهٔ تازه باز می‌شود)

الگوی به‌کاررفته در این صفحه: