وحدة:Lua banner

    من ویکي‌وحدت

    يمكن إنشاء صفحة توثيق الوحدة في وحدة:Lua banner/شرح

    -- This module implements the {{lua}} template.
    
    local yesno = require('وحدة:Yesno')
    local mList = require('وحدة:List')
    local mTableTools = require('وحدة:TableTools')
    local mMessageBox = require('وحدة:Message box')
    
    local p = {}
    
    function p.main(frame)
    	local origArgs = frame:getParent().args
    	local args = {}
    	for k, v in pairs(origArgs) do
    		v = v:match('^%s*(.-)%s*$')
    		if v ~= '' then
    			args[k] = v
    		end
    	end
    	return p._main(args)
    end
    
    function p._main(args)
    	local modules = mTableTools.compressSparseArray(args)
    	local box = p.renderBox(modules)
    	local trackingCategories = p.renderTrackingCategories(args, modules)
    	if args.nocat and  args.nocat ~= '' then
    	end
    	if trackingCategories and trackingCategories ~= "" then 
    		trackingCategories = mw.getCurrentFrame():preprocess('{{#تبديل:{{SUBPAGENAME}}|ملعب|ملعب2|doc|مختبر|نسخة|تجربة|شرح=|#default='.. trackingCategories .. "}}")
    	end
    	return box .. (trackingCategories or '')
    end
    
    function p.renderBox(modules)
    	local boxArgs = {}
    	if #modules < 1 then
    		boxArgs.text = '<strong class="error">خطأ: لم تذكر أي وحدة</strong>'
    	else
    		local moduleLinks = {}
    		for i, module in ipairs(modules) do
    			moduleLinks[i] = string.format('[[:%s]]', module)
    		end
    		local moduleList = mList.makeList('bulleted', moduleLinks)
    		boxArgs.text = 'هذا القالب يستعمل [[ ويكيبيديا:لوا|لوا]]:\n' .. moduleList
    	end
    	boxArgs.type = 'notice'
    	boxArgs.small = true
    	boxArgs.image = '[[File:Lua-logo-nolabel.svg|30px|alt=Lua logo|link= ويكيبيديا:لوا]]'
    	return mMessageBox.main('mbox', boxArgs)
    end
    
    function p.renderTrackingCategories(args, modules, titleObj)
    	if yesno(args.nocat) then
    		return ''
    	end
    	
    	local cats = {}
    	
    	-- Error category
    	if #modules < 1 then
    		cats[#cats + 1] = 'Lua templates with errors'
    	end
    	local categories = {
    		['Module:String'] = 'قوالب تستند على وحدة String',
    		['Module:Math'] = 'قوالب تستند على وحدة Math Lua',
    		['Module:BaseConvert'] = 'قوالب تستند على وحدة BaseConvert Lua',
    		['Module:Citation'] = 'قوالب استشهاد تستند على وحدة لوا',
    		['Module:Citation/CS1'] = 'قوالب استشهاد تستند على وحدة لوا',
    		['وحدة:تحويلات بلدان'] = 'قوالب تستخدم وحدة تحويلات بلدان',
    
    		['وحدة:Flagg'] = 'قوالب تستخدم وحدة:Flagg',
    		['Module:Flagg'] = 'قوالب تستخدم وحدة:Flagg'
    	}
    
    	-- Lua templates category
    	titleObj = titleObj or mw.title.getCurrentTitle()
    	local subpageBlacklist = {
    		['doc'] = true,
    		['شرح'] = true,
    		['sandbox'] = true,
    		['ملعب'] = true,
    		['sandbox2'] = true,
    		['testcases'] = true,
    		['مختبر'] = true
    	}
    	if titleObj.namespace == 10 
    		and not subpageBlacklist[titleObj.subpageText]
    	then
    		for i, Module in ipairs(modules) do
    			mw.log( Module )
    			local cate = categories[ Module ]
    			if not cate and mw.ustring.find( Module , "وحدة:ب.ص.م", 1, true )  then
    				cate = "قوالب وحدة:ب.ص.م"
    			end
    			if not cate and mw.ustring.find( Module , "Flagg", 1, true )  then
    				cate = 'قوالب تستخدم وحدة:Flagg'
    			end
    			if cate and cate ~= "" then 
    				cats[#cats + 1] = cate
    			end
    		end
    	end
    	if #cats < 1 then
    		cats[#cats + 1] = 'قوالب تستند على وحدات لوا'
    	end
    	
    	for i, cat in ipairs(cats) do
    		cats[i] = string.format('[[Category:%s]]', cat)
    	end
    	return table.concat(cats)
    end
    
    return p