مودول:Unsubst
هذه الوحدة مساعدة لتسهيل استبدال القوالب، أو منع نسخها.
قوالب الصيانة، مثل {{بحاجة لمصدر}} أو {{مصادر أكثر}}، وغيرها من قوالب المعلومات، التي لا ينبغي أبدا أن تكون منسوخة. ولتجنب نسخها، نستخدم هذه الوحدة.
الاستخدام
[بدل لكود]لعرض نصوص ويكي WikiText عندما لا يجب نسخها، يجب أن تعطى باسم "$B".
جميع المعلمات الأخرى سيتم نسخها بقيمها كما هي عبر تمريرها في استدعاء الوحدة، ويمكن تحديد قيم إفتراضية لبعض الوسائط، حيث يمكن استخدام "__DATE__" كقيمة افتراضية في أحد الوسائط، وفي هذه الحالة عند نسخ القالب، سيتم وضع قيمة الوسيط "الشهر السنة" مثل "أكتوبر 2016".
بعض القوالب تحتوي على <noinclude> ولكن لا يوجد </noinclude> في نهاية القالب، وفي مثل هذه الحالة </noinclude> يجب أن تضاف الوسوم المفقودة قبل نهاية }}
وإلا فهي ستظهر مع نتيجة نسخ القالب.
لتحويل قالب إلى نفس القالب، يستخدم نفس الوسائط، بمعنى آخر لمنع نسخ النص البرمجي له، استخدم:
{{ {{{|safesubst:}}}#invoke:Unsubst||$B=
النص البرمجي للقالب
}}
متى لا تعمل هذه الوحدة؟
[بدل لكود]من الممكن أن يؤدي إضافة الوحدة إلى تعطيل بعض القوالب أو إخفاء ظهورها أو إخفاء ظهور جزء من القالب، وذلك في حالة كون القالب جدول ويكي أو يحتوي على نصوص الويكي الخاصة بالجداول، مثل:
{| |- |}
أو بعض منها منفردة:
{|
|}
|-
مثال
[بدل لكود]التاريخ: __DATE__
[بدل لكود]على سبيل المثال، لنفترض أن موضيل:مثال يحتوي على التعليمات البرمجية التالية:
{{ {{{|safesubst:}}}#invoke:Unsubst||foo=bar |تاريخ=__DATE__ |$B=
[ ... Template code goes here ... ]
}}
النص البرمجي | النتيجة |
---|---|
{{subst:مثال}} | {{مثال|foo=bar|تاريخ=نونبر 2024}} |
{{subst:مثال|تج=X}} | {{مثال|تج=X|تاريخ=نونبر 2024}} |
{{subst:مثال|baz=X}} | {{مثال|foo=bar|baz=X|تاريخ=نونبر 2024}} |
{{subst:مثال|تاريخ=يناير 2001}} | {{مثال|foo=bar|تاريخ=يناير 2001}} |
local p = {}
local specialParams = {
['$N'] = 'template name', -- Deprecated, but keeping until it is removed from transcluding templates
['$B'] = 'template content',
}
p[''] = function ( frame )
if not frame:getParent() then
error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' )
end
if not frame.args['$B'] then
error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' )
end
if mw.isSubsting() then
---- substing
-- Combine passed args with passed defaults
local args = {}
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
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
-- Build an equivalent template invocation
-- First, find the title to use
local titleobj = mw.title.new(frame:getParent():getTitle())
local title
if titleobj.namespace == 10 then -- NS_TEMPLATE
title = titleobj.text
elseif titleobj.namespace == 0 then -- NS_MAIN
title = ':' .. titleobj.text
else
title = titleobj.prefixedText
end
-- Build the invocation body with numbered args first, then named
local ret = '{{' .. title .. '\n'
for k, v in ipairs( args ) do
if string.find( v, '=', 1, true ) then
-- likely something like 1=foo=bar, we need to do it as a named arg
break
end
ret = ret .. '|' .. v .. '\n'
args[k] = nil
end
for k, v in pairs( args ) do
ret = ret .. '|' .. k .. '=' .. v.. '\n'
end
return ret .. '}}'
else
---- Not substing
-- Just return the "body"
return frame.args['$B']
end
end
p['get'] = function ( frame )
if not frame:getParent() then
error( '{{#invoke:Unsubst|}} makes no sense without a parent frame' )
end
if not frame.args['$B'] then
error( '{{#invoke:Unsubst|}} requires parameter $B (template content)' )
end
if mw.isSubsting() then
---- substing
-- Combine passed args with passed defaults
local args = {}
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
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
-- Build an equivalent template invocation
-- First, find the title to use
local titleobj = mw.title.new(frame:getParent():getTitle())
local title
if titleobj.namespace == 10 then -- NS_TEMPLATE
title = titleobj.text
elseif titleobj.namespace == 0 then -- NS_MAIN
title = ':' .. titleobj.text
else
title = titleobj.prefixedText
end
if frame.args['$N'] and frame.args['$N'] ~= ''
then title = frame.args['$N']
end
-- Build the invocation body with numbered args first, then named
local ret = '{{' .. title
for k, v in ipairs( args ) do
if string.find( v, '=', 1, true ) then
-- likely something like 1=foo=bar, we need to do it as a named arg
break
end
ret = ret .. '|' .. v
args[k] = nil
end
for k, v in pairs( args ) do
ret = ret .. '|' .. k .. '=' .. v
end
return ret .. '}}'
else
---- Not substing
-- Just return the "body"
return frame.args['$B']
end
end
return p