الفرق بين المراجعتين لصفحة: «وحدة:Check for unknown parameters»

من ويكي عرب
اذهب إلى التنقل اذهب إلى البحث
طلا ملخص تعديل
 
(update to allow check for unnamed parameters, code by User:Frietjes)
سطر ٣: سطر ٣:
-- not on the list
-- not on the list
local p = {}
local p = {}
local TemplateData;
local I10n ={ }
local function getTemplateData(title)
local get_Template_Data = require('Module:TemplateData')
if title and title ~="" then
data  = get_Template_Data.readTemplateData(title)
if data and data.params then
for k, vv in pairs(data.params) do
if vv.aliases then
for _, d in pairs(vv.aliases) do
I10n[d] = k
--mw.log( "Module:Check for unknown parameters: I10n["..d.."] = ".. k )
end
end
end
end
end
end
function getl10n(p)
if p and p ~='' then
doo = I10n[p]
if doo and doo ~=''  then
doo = '<span style="color:#078e16"><strong>'.. doo ..'</strong></span>'
doo = " فضلاً قم باستخدام '''".. doo .. "''' بدلاً منه."
end
end
return doo
end


local function trim(s)
local function trim(s)
سطر ٤٠: سطر ٩:


local function isnotempty(s)
local function isnotempty(s)
return s and trim(s) ~= ''
return s and s:match('%S')
end
end


function p.check (frame)
local function clean(text)
local args = frame.args
-- Return text cleaned for display and truncated if too long.
local pargs = frame:getParent().args
-- Strip markers are replaced with dummy text representing the original wikitext.
local ignoreblank = isnotempty(frame.args['ignoreblank'])
local pos, truncated
local showblankpos = isnotempty(frame.args['showblankpositional'])
local function truncate(text)
local knownargs = {}
if truncated then
local template = frame.args['template']
return ''
if template and template ~='' then
end
un = '[[تصنيف:صفحات تستخدم قالب:'.. template ..' مع وسائط غير معروفة|_VALUE_]]'  
if mw.ustring.len(text) > 25 then
--data  = getTemplateData(template)
truncated = true
else
text = mw.ustring.sub(text, 1, 25) .. '...'
un = '[[تصنيف:صفحات تستخدم قوالب بوسائط غير معروفة|_VALUE_]]'  
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
end
end
local unknown = frame.args['unknown'] or un
table.insert(parts, truncate(text:sub(pos or 1)))
--local preview = frame.args['preview'] or 'الوسيط <span style="color:#cc0000"><strong>_VALUE_</strong></span> غير مدعوم يرجى مراجعته'
return table.concat(parts)
local preview = frame.args['preview'] or 'الوسيط <span style="color:#cc0000"><strong>_VALUE_</strong></span> غير مدعوم'
end


local values1 = {}
function p._check(args, pargs)
local values = {}
if type(args) ~= "table" or type(pargs) ~= "table" then
local res = {}
-- TODO: error handling
local category = {}
return
local res1 = {}
end
local regexps = {}


-- create the list of known args, regular expressions, and the return string
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
if type(k) == 'number' then
if type(k) == 'number' then
سطر ٧٦: سطر ٥٢:
end
end
end
end
-- loop over the parent args, and make sure they are on the list
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
local knownflag = false
for i, regexp in ipairs(regexps) do
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
if mw.ustring.match(k, regexp) then
knownflag = true
knownflag = true
سطر ٨٧: سطر ٦٧:
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) )  then
if not knownflag and ( not ignoreblank or isnotempty(v) )  then
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
table.insert(values, clean(k))
table.insert(values, k)
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
elseif I10n[k] then table.insert(values1, k)
elseif type(k) == 'number'  and
knownargs[tostring(k)] == nil and
( showblankpos or isnotempty(v) )
then
local vlen = mw.ustring.len(v)
v = mw.ustring.sub(v, 1, (vlen < 25) and vlen or 25)
v = mw.ustring.gsub(v, '[^%w\-_ ]', '?')
table.insert(values, k .. ' = ' .. v .. ((vlen >= 25) and ' ...' or ''))
end
end
end
end
if isnotempty(preview) then
 
preview = '<span style="color:#800000"><strong>تحذير:</strong></span>'
-- add results to the output tables
.. preview
local res = {}
elseif preview == nil then
if #values > 0 then
preview = unknown
local unknown_text = args['unknown'] or 'Found _VALUE_, '
end
 
if template and template ~=''
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
then tem = 'في [[قالب:'.. template ..' ]] '
local preview_text = args['preview']
end
if isnotempty(preview_text) then
-- add resuls to the output tables
preview_text = require('Module:If preview')._warning({preview_text})
if #values > 0 or #values1 > 0 then
elseif preview == nil then
dop = ' (هذه الرسالة تظهر عند المعاينة فقط)'
preview_text = unknown_text
div = '<div class="hatnote" >'
end
ss = 'الوسائط التالية غير مدعومة '
unknown_text = preview_text
ca = div ..  '<span style="color:#800000"><strong>'.. ss .. (tem or '') ..' يرجى مراجعتها:'
.. dop .. ' </strong></span>'
table.insert( res, ca )
if frame:preprocess( "{{REVISIONID}}" ) == "" then
unknown = preview
end
end
for k, v in pairs(values) do
for _, v in pairs(values) do
if v == '' then v = ' ' end
-- Fix odd bug for | = which gets stripped to the empty string and
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
-- breaks category links
-- unknown = unknown
cat = unknown:gsub('_VALUE_', v)
table.insert(category, cat)
local dp = getl10n(v)
rr =  unknown:gsub('_VALUE_', v)
if dp and dp ~=''
then
oo =  rr .. (dp or '')
table.insert(res, oo)
else
rr ='الوسيط <span style="color:#cc0000"><strong>' .. v ..'</strong></span>'
table.insert(res1, rr)
end
end
for k, v in pairs(values1) do
if v == '' then v = ' ' end
if v == '' then v = ' ' end
cat = unknown:gsub('_VALUE_', v)
 
local dp = getl10n(v)
-- avoid error with v = 'example%2' ("invalid capture index")
rr =  unknown:gsub('_VALUE_', v)
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
if dp and dp ~=''
table.insert(res, r)
then
oo =  rr .. (dp or '')
table.insert(res, oo)
else
rr ='الوسيط <span style="color:#cc0000"><strong>' .. v ..'</strong></span>'
table.insert(res1, rr)
end
end
end
end
end
if #res1 > 0 then
 
if #res1 == 1 then
return table.concat(res)
-- catemass = 'يجب تبديلها، طالع صفحة [[قالب:'.. template..'/شرح|توثيق القالب]] لمعرفة الوسائط البديلة'
catemass = 'غير مدعوم، يجب تبديله، طالع صفحة توثيق القالب لمعرفة الوسائط البديلة.'
else
catemass = 'وسائط غير مدعومة، يجب تبديلها، طالع صفحة توثيق القالب لمعرفة الوسائط البديلة.'
end
table.insert(res1, catemass)
end
ap = table.concat(res1, ' ، ')
table.insert(res, ap)
va = '</div>'
--table.insert(res, va)
cac = table.concat(res, '\n*')
if cac ~= "" then
cac = cac .. va
end
if frame:preprocess( "{{REVISIONID}}" ) == ""
then
return cac
else
return table.concat(category)
end
end
end


function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end


return p
return p

مراجعة ٢٠:٢٧، ١٨ نوفمبر ٢٠٢١

وحدة:التحقق من المعلمات غير المدعومة يمكن إلحاق هذه الوحدة إلى قالب ما للتحقق من المعلمات المجهولة المستخدمة في المقالات المتصلة به.

تأخذ هذه الوحدة الوسائط البديلة من بيانات القالب صفحة توثيق القالب، وذلك في حالة وجود الوسيط غير المدعوم في خانة aliases لوسيط ما.

الاستخدام

اساسي

<syntaxhighlight lang="wikitext">

</syntaxhighlight>

أو لفرز المقالات في التصنيف حسب القيم المجهولة :

<syntaxhighlight lang="text">

</syntaxhighlight>

أو لعرض رسالة خطأ حمراء واضحة:

<syntaxhighlight lang="lua">

</syntaxhighlight>

هنا، arg1، arg2، ...، argN، هي الوسائط المعروفة. أي وسائط أخرى تستخدم، وليست في هذه القائمة ستسبب بأن تنتج الوحدة كل ما يتم تمريره مع الوسيط unknown. كلمة _VALUE_ سيتم تغييرها بإسم الوسيط، ويفيد ذلك لفرز الإدخالات في تصنيف التتبع، وأيضا عند المعاينة.

افتراضيا لا تميز الوحدة بين الوسائط الفارغة وغير الفارغة ، لتتبع الوسائط غير الفارغة فقط استخدم |ignoreblank=1.

By default, the module ignores blank positional parameters. To include blank positional parameters in the tracking use |showblankpositional=1.

التعابير النمطية

هذه الوحدة تدعم التعابير النمطية، وهي مفيدة عندما تكون هناك الكثير من المعلمات المعروفة التي تستخدم نمط منتظم. على سبيل المثال من قالب: Infobox3cols:

<syntaxhighlight lang="lua"> | regexp1 = header[%d][%d]* | regexp2 = label[%d][%d]* | regexp3 = data[%d][%d]*[abc]? | regexp4 = class[%d][%d]*[abc]? | regexp5 = rowclass[%d][%d]* | regexp6 = rowstyle[%d][%d]* | regexp7 = rowcellstyle[%d][%d]* </syntaxhighlight> لتتناسب مع جميع المعلمات من النموذج headerNUM، labelNUM، dataNUM، dataNUMa، dataNUMb، dataNUMc، rowcellstyleNUM، حيث NUM عبارة عن سلسلة من الأرقام.

مثال آخر: <syntaxhighlight lang="lua"> | regexp1 = المنصب[%d][%d]* | regexp2 = سبقه[%d][%d]* | regexp3 = تبعه[%d][%d]* </syntaxhighlight> يتيح تحديد المنصب1، المنصب2، المنصب3 ... إلخ.

أمثلة

<syntaxhighlight lang="lua">

</syntaxhighlight>

قوالب تستخدم هذه الوحدة

قائمة
القالب تصنيف التتبع
قالب:ضبط استنادي تصنيف:صفحات تستخدم الضبط الاستنادي مع عوامل متغيرة
قالب:صندوق معلومات شخص تصنيف:صفحات تستخدم قالب:صندوق معلومات شخص مع وسائط غير معروفة
قالب:معلومات حادث مدني تصنيف:صفحات تستخدم قالب:معلومات حادث مدني مع وسائط غير معروفة
قالب:معلومات مدينة تصنيف:صفحات تستخدم قالب:معلومات مدينة مع وسائط غير معروفة
قالب:Infobox Settlement تصنيف:مقالات إسكان تحتاج للصيانة

طالع أيضاً



-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}

local function trim(s)
	return s:match('^%s*(.-)%s*$')
end

local function isnotempty(s)
	return s and s:match('%S')
end

local function clean(text)
	-- Return text cleaned for display and truncated if too long.
	-- Strip markers are replaced with dummy text representing the original wikitext.
	local pos, truncated
	local function truncate(text)
		if truncated then
			return ''
		end
		if mw.ustring.len(text) > 25 then
			truncated = true
			text = mw.ustring.sub(text, 1, 25) .. '...'
		end
		return mw.text.nowiki(text)
	end
	local parts = {}
	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
		pos = remainder
		table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
	end
	table.insert(parts, truncate(text:sub(pos or 1)))
	return table.concat(parts)
end

function p._check(args, pargs)
	if type(args) ~= "table" or type(pargs) ~= "table" then
		-- TODO: error handling
		return
	end

	-- create the list of known args, regular expressions, and the return string
	local knownargs = {}
	local regexps = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = trim(v)
			knownargs[v] = 1
		elseif k:find('^regexp[1-9][0-9]*$') then
			table.insert(regexps, '^' .. v .. '$')
		end
	end

	-- loop over the parent args, and make sure they are on the list
	local ignoreblank = isnotempty(args['ignoreblank'])
	local showblankpos = isnotempty(args['showblankpositional'])
	local values = {}
	for k, v in pairs(pargs) do
		if type(k) == 'string' and knownargs[k] == nil then
			local knownflag = false
			for _, regexp in ipairs(regexps) do
				if mw.ustring.match(k, regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( not ignoreblank or isnotempty(v) )  then
				table.insert(values, clean(k))
			end
		elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
			local knownflag = false
			for _, regexp in ipairs(regexps) do
				if mw.ustring.match(tostring(k), regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( showblankpos or isnotempty(v) ) then
				table.insert(values, k .. ' = ' .. clean(v))
			end
		end
	end

	-- add results to the output tables
	local res = {}
	if #values > 0 then
		local unknown_text = args['unknown'] or 'Found _VALUE_, '

		if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
			local preview_text = args['preview']
			if isnotempty(preview_text) then
				preview_text = require('Module:If preview')._warning({preview_text})
			elseif preview == nil then
				preview_text = unknown_text
			end
			unknown_text = preview_text
		end
		for _, v in pairs(values) do
			-- Fix odd bug for | = which gets stripped to the empty string and
			-- breaks category links
			if v == '' then v = ' ' end

			-- avoid error with v = 'example%2' ("invalid capture index")
			local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
			table.insert(res, r)
		end
	end

	return table.concat(res)
end

function p.check(frame)
	local args = frame.args
	local pargs = frame:getParent().args
	return p._check(args, pargs)
end

return p