تضامنًا مع حق الشعب الفلسطيني |
وحدة:ParameterCount
هذه الوحدة تقوم بحساب عدد المعلمات التي تم تمريرها إلى قالب ما. على سبيل المثال، إذا كنت قد وضعت الكود {{#invoke:ParameterCount|all}}
في {{مثال قالب}}
وإذا كنت تستخدم قالب: {{مثال قالب}}
بالطريقة التالية:
{{مثال قالب | 1 | 2 | 3 }}
سيكون ناتج {{#invoke:ParameterCount|all}}
داخل القالب: 3
.
يمكن إعداد هذه الوحدة لحساب جميع المعلمات، أو لحساب معلمات محددة ضمن معايير يحددها مؤلف القالب، هذه الوحدة مفيدة عند استعمالها في نطاق القوالب ولا يفيد استعمالها في نطاقات أخرى.
تحتوي الوحدة على وظيفتان أساسيتان هما all
وmain
.
all
الوظيفة all
يتم استخدام الدالة لحساب جميع المعلمات المحددة عند استخدام قالب، بغض النظر عن إذا كان مستخدمة في القالب نفسه أم لا.
الاستعمال
{{#invoke:ParameterCount|all}}
أمثلة
اذا وضع الكود {{#invoke:ParameterCount|all}}
في القالب {{my example template}}
وعند استخدام القالب كالتالي: {{my example template|1|2|foo=bar}}
سيكون الناتج: 3
.
main
الوظيفة main
يتم استخدام الدالة لحساب معلمات ذو أسماء محددة، بواسطة طريقتان تستخدم لتحديد المعلمات: إما الاسم، أو بنمط معين.
بالأسم :لتحديد معلمة محددة باسمها.
{{#invoke:ParameterCount|main|1|2|3|abc|def}}
باستخدام نمط
{{#invoke:ParameterCount|main|pattern1=^param%d+$|pattern2=^abc}}
لتحديد معلمة أو أكثر بواسطة نمط لوا (بالإنجليزية: Lua Ustring pattern) أضف المعلمة |pattern1=
و |pattern2=
إلخ.
للحصول على معلومات حول إنشاء أنماط لوا، طالع الصفحات التالية:
أمثلة
إذا وضع الكود {{#invoke:ParameterCount|main|1|2|abc}}
في قالب {{مثال قالب}}
وعند استخدام القالب كالتالي: {{مثال قالب|1|2|abc=some value|other=some other value}}
سيكون ناتج استخدام الوحدة 3
.
إذا وضع الكود {{#invoke:ParameterCount|main|pattern1=^param%d+$}}
في قالب {{مثال قالب}}
وعند استخدام القالب كالتالي: {{مثال قالب|param1=a value|param2=another value|param5=yet another value}}
سيكون ناتج استخدام الوحدة 3
.
التحقق من الوسائط الفارغة
{{#invoke:ParameterCount|all|checkblanks=no}}
{{#invoke:ParameterCount|main|checkblanks=no}}
افتراضياً، لا تقوم الوحدة بحساب المعلمات أو الوسائط الفارغة مثال: |abc=
.إذا أردت حساب جميع المعلمات بما فيها الفارغة يجب عليك استخدام المعلمة التالية: |checkblanks=no
. وهي تعمل في الوظيفتين all
وmain
.
أمثلة
عند وضع الكود {{#invoke:ParameterCount|all|checkblanks=no}}
في قالب {{مثال قالب}}
وعند استخدام الكود التالي: {{مثال قالب|1|2|مثال=ملعب|مثال2=}}
سينتج عدد الوسائط المستخدمة: 4
.
-- This module produces a count of all the arguments passed to it.
local yesno = require('Module:Yesno')
-- Trim a string
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
-- Test whether a string is blank
local function isBlank(s)
return not s:find('%S')
end
-- Tests whether a string is a valid positional key, and if so, returns it. If
-- the key is invalid, this returns nil.
local function isPositionalKey(s)
s = trim(s)
if s:find('^[1-9][0-9]*$') then
return tonumber(s)
end
end
-- Return the count of all arguments for which testFunc returns a truthy value.
local function count(args, testFunc)
local ret = 0
for key, val in pairs(args) do
if testFunc(key, val) then
ret = ret + 1
end
end
return ret
end
-- Check shared arguments and get the parent argument count.
local function main(frame, testFunc)
local blankifiedTestFunc
if yesno(frame.args.checkblanks) ~= false then
-- Extend the test function to check for blanks as well.
blankifiedTestFunc = function (key, val)
if not isBlank(val) then
return testFunc(key, val)
end
end
else
blankifiedTestFunc = testFunc
end
return count(frame:getParent().args, blankifiedTestFunc)
end
return {
-- Called with {{#invoke:ParameterCount|all}}
-- All specified parameters are counted, even those not supported by the
-- template.
all = function (frame)
return main(frame, function () return true end)
end,
-- Called with {{#invoke:ParameterCount|main}}
-- Users can specify a list of parameters to check, and a list of Lua
-- Ustring patterns to check each parameter against.
main = function (frame)
local args = frame.args
local keys, patterns = {}, {}
-- Get key list
for i, key in ipairs(args) do
local positionalKey = isPositionalKey(key)
if positionalKey then
keys[positionalKey] = true
else
keys[trim(key)] = true
end
end
-- Get patterns
do
local function getPattern(i)
local pattern = args['pattern' .. tostring(i)]
if pattern and pattern ~= '' then
return pattern
end
end
local i = 1
local pattern = getPattern(i)
while pattern do
patterns[i] = pattern
i = i + 1
pattern = getPattern(i)
end
end
-- Construct the test function
local testFunc = function (key, val)
if keys[key] then
return true
end
for i, pattern in ipairs(patterns) do
if mw.ustring.find(tostring(key), pattern) then
return true
end
end
return false
end
return main(frame, testFunc)
end
}