پودمان:Pages with authority control identifiers/تمرین

توضیحات پودمان[ایجاد] [پاکسازی]
require('Module:No globals')

local p = {}
local ac_conf = require('Module:Authority control/تمرین').conf
local rmCats = require('Module:Suppress categories').main
local currentTitle = mw.title.getCurrentTitle()
local title = currentTitle.text
local isCat = (currentTitle.namespace == 14)

--[[==========================================================================]]
--[[                         Local Utility Functions                          ]]
--[[==========================================================================]]

local function whichTOC( frame )
	--local pageCount = mw.site.stats.pagesInCategory(title, 'pages')
	--if pageCount > 1200 then
	--	return frame:expandTemplate{ title = 'Large category TOC' }
	--elseif pageCount > 100 then
	--	return frame:expandTemplate{ title = 'Category TOC', args = { align = 'center' } }
	--end
	--return ''
	
	-- standardize TOC behavior via {{CatAutoTOC}}
	return frame:expandTemplate{ title = 'CatAutoTOC', args = { align = 'center' } }
end

local function redCatCheck( catName ) --catName == 'Blah', not 'Category:Blah', not '[[Category:Blah]]'
	if catName and catName ~= '' and mw.title.new(catName, 14).exists == false then
		return '[[رده:صفحه‌های دارای رده‌های داده‌های کتابخانه‌ای با پیوند قرمز]]'
	end
	return ''
end
local function getExample(conf, id)
	if id == "WORLDCATID" then
		return "[https://www.worldcat.org/identities/lccn-n78039510 ورلدکت]"
	else
		return rmCats(conf[3](conf[5]))
	end
end
--[[==========================================================================]]
--[[                    Local Category-Specific Functions                     ]]
--[[==========================================================================]]

--For indirect use on [[Category:<catType> with multiple identifiers]],
--   i.e. on [[Category:Wikipedia articles with multiple identifiers]]
local function multiple( frame, catType, pre, post )
	local txCatMore  = frame:expandTemplate{ title = 'توضیح رده', args = { 'ویکی‌پدیا:داده‌های کتابخانه‌ای' } }
	local txEmptyCat = frame:expandTemplate{ title = 'رده خالی' }
	local txWPCat    = frame:expandTemplate{ title = 'رده ویکی‌پدیا', args = { hidden = 'yes', tracking = 'yes' } }
	local txQ        = frame:expandTemplate{ title = 'Q', args = { 'Q7245' } }
	local txWdpl1    = frame:expandTemplate{ title = 'پیوند خصوصیت ویکی‌داده', args = { 'P213' } }
	local txWdpl2    = frame:expandTemplate{ title = 'پیوند خصوصیت ویکی‌داده', args = { 'P244' } }
	local txTOC      = whichTOC( frame )
	local ex = 'برای مثال، '..txQ..' شامل چندین شناسه برای '..txWdpl1..'، '..txWdpl2..'، و غیره است.<br/>'
	local only = 'صفحه‌ها تنها باید توسط [[پودمان:Authority control]] به این رده افزوده شوند.'
	if catType and catType == 'صفحه‌های' then
		txEmptyCat = ''
		txWPCat = frame:expandTemplate{ title = 'رده ویکی‌پدیا' }
		ex = ''
		only = ''
	end
	local outString = txCatMore..txEmptyCat..txWPCat..txTOC..'\n'..ex..only
	return (pre or '')..outString..(post or '')
end

--For use in [[Category:Pages with authority control information]],
--   i.e. on [[Category:Pages with VIAF identifiers]]
local function pages( frame, id )
	if id == 'چندگانه' then 
		local pagesCat = 'صفحه‌های دارای اطلاعات کنترل مرجع'
		local pagesCatFull = '[[رده:'..pagesCat..']]'..redCatCheck(pagesCat)
		return multiple( frame, 'صفحه‌های', '', pagesCatFull )
	end
	for _, conf in pairs( ac_conf ) do
		if conf.category == id or conf[1] == id then
			local linktarget = conf.link or conf[1] .. ' (شناسه)'
			local wdpl = ':d:Property:P'..conf[2]
			local txCatMore = frame:expandTemplate{ title = 'اطلاعات رده', args = {'ویکی‌پدیا:داده‌های کتابخانه‌ای', linktarget, wdpl} }
			local txWPCat   = frame:expandTemplate{ title = 'رده ویکی‌پدیا' }
			local pagesCat  = 'صفحه‌های دارای اطلاعات کنترل مرجع'
			local outString = txCatMore..txWPCat..'\n'..
							'[[رده:'..pagesCat..'|'..id..']]'..redCatCheck(pagesCat)
			return outString
		end
	end
	return ''
end

--For use in [[Category:Miscellaneous pages with authority control information]],
--   i.e. on [[Category:Miscellaneous pages with VIAF identifiers]]
local function misc( frame, id )
	if id == 'چندگانه' then
		local link = id
		local txCatExplain = frame:expandTemplate{ title = 'توضیح رده', 
				args = { 'صفحه‌ها، به‌جز صفحه‌های کاربری اصلی یا مقاله‌های ویکی‌پدیا، با کاربرد {{[[الگو:داده‌های کتابخانه‌ای|داده‌های کتابخانه‌ای]]}} به‌همراه شناسه‌های '..link } } -- الگوی توضیح رده یک «است» در انتهایش دارد. پس ورودی‌اش نباید جمله باشد. مثال: «این رده برای "فلان صفحه‌های بهمان‌شده" است
		local idCat   = 'صفحه‌های دارای شناسه‌های '..id
		local miscCat = 'صفحه‌های متفرقه دارای اطلاعات داده‌های کتابخانه‌ای'
		local idCatFull   = '[[رده:'..idCat..']]'..redCatCheck(idCat)
		local miscCatFull = '[[رده:'..miscCat..'|'..id..']]'..redCatCheck(miscCat)
		return multiple( frame, 'misc', txCatExplain, idCatFull..miscCatFull )
	end
	for _, conf in pairs( ac_conf ) do
		if conf.category == id or conf[1] == id then
			local linktarget = conf.link or conf[1] .. ' (شناسه)'
			local link = '[['..linktarget..'|'..conf[1]..']]'
			local example = 'شناسه ' .. conf[1].. ' به‌شکل '..getExample(conf,id)..' در بخش '..conf[4]..' ظاهر می‌شود.'
			local wdpl = ':d:Property:P'..conf[2]
			local txCatExplain = frame:expandTemplate{ title = 'توضیح رده', 
					args = { 'صفحه‌ها، به‌جز صفحه‌های کاربری اصلی یا مقاله‌های ویکی‌پدیا، با کاربرد {{[[الگو:داده‌های کتابخانه‌ای|داده‌های کتابخانه‌ای]]}} به‌همراه شناسه '..link..'. '..example } }
			local txCatMore  = frame:expandTemplate{ title = 'اطلاعات رده', args = {'ویکی‌پدیا:داده‌های کتابخانه‌ای', wdpl} }
			local txEmptyCat = frame:expandTemplate{ title = 'رده خالی' }
			local txWPCat    = frame:expandTemplate{ title = 'رده ویکی‌پدیا', args = { hidden = 'yes', tracking = 'yes' } }
			local txTOC = whichTOC( frame )
			local idCat = 'مقاله‌های ویکی‌پدیا همراه شناسه‌های '..id
			local miscCat = 'صفحه‌های متفرقه دارای اطلاعات داده‌های کتابخانه‌ای'
			local outString = txCatExplain..txCatMore..txEmptyCat..txWPCat..txTOC..'\n'..
							'صفحه‌ها تنها باید توسط [[پودمان:Authority control]] به این رده افزوده شوند.'..
							'[[رده:'..idCat..']]'..redCatCheck(idCat)..
							'[[رده:'..miscCat..'|'..id..']]'..redCatCheck(miscCat)
			return outString
		end
	end
	return ''
end

--For use in [[Category:User pages with authority control information]],
--   i.e. on [[Category:User pages with VIAF identifiers]]
local function user( frame, id )
	if id == 'چندگانه' then
		local idCat   = 'مقاله‌های ویکی‌پدیا همراه شناسه‌های '..id
		local userCat = 'صفحه‌های کاربری همراه اطلاعات داده‌های کتابخانه‌ای'
		local idCatFull   = '[[رده:'..idCat..']]'..redCatCheck(idCat)
		local userCatFull = '[[رده:'..userCat..'|'..id..']]'..redCatCheck(userCat)
		return multiple( frame, 'user', '', idCatFull..userCatFull )
	end
	for _, conf in pairs( ac_conf ) do
		if conf.category == id or conf[1] == id then
			local linktarget = conf.link or conf[1] .. ' (شناسه)'			
			local wdpl = ':d:Property:P'..conf[2]
			local txCatMore  = frame:expandTemplate{ title = 'اطلاعات رده', args = {'ویکی‌پدیا:داده‌های کتابخانه‌ای', linktarget, wdpl} }
			local txEmptyCat = frame:expandTemplate{ title = 'رده خالی' }
			local txWPCat    = frame:expandTemplate{ title = 'رده ویکی‌پدیا', args = { hidden = 'yes', tracking = 'yes' } }
			local txTOC      = whichTOC( frame )
			local idCat   = 'صفحه‌های دارای شناسه‌های '..id
			local userCat = 'صفحه‌های کاربری همراه اطلاعات داده‌های کتابخانه‌ای'
			local outString = txCatMore..txEmptyCat..txWPCat..txTOC..'\n'..
							'صفحه‌ها تنها باید توسط [[پودمان:Authority control]] به این رده افزوده شوند.'..
							'[[رده:'..idCat..']]'..redCatCheck(idCat)..
							'[[رده:'..userCat..'|'..id..']]'..redCatCheck(userCat)
			return outString
		end
	end
	return ''
end

--For use in [[Category:Wikipedia articles with authority control information]],
--   i.e. on [[Category:Wikipedia articles with VIAF identifiers]]
local function wp( frame, id )
	if id == 'چندگانه' then
		local link = id
		local txCatExplain = frame:expandTemplate{ title = 'توضیح رده', args = {'مقاله‌های دارای شناسه‌های '..link..' بوده و افزودن [[ویکی‌پدیا:رده‌بندی#زیررده‌بندی|زیررده]] به آن اشتباه'} } -- ...زیررده به آن اشتباه» است (توسط الگو چنین جمله‌ای تولید می‌شود)
		local idCat = 'صفحه‌های دارای شناسه‌های '..id
		local wpCat = 'مقاله‌های ویکی‌پدیا همراه اطلاعات داده‌های کتابخانه‌ای'
		local idCatFull = '[[رده:'..idCat..']]'..redCatCheck(idCat)
		local wpCatFull = '[[رده:'..wpCat..'|'..id..']]'..redCatCheck(wpCat)
		return multiple( frame, 'wp', txCatExplain, idCatFull..wpCatFull )
	end
	for _, conf in pairs( ac_conf ) do
		if conf.category == id or conf[1] == id then
			local linktarget = conf.link or conf[1] .. ' (شناسه)'			local link = '[['..linktarget..'|'..conf[1]..']]'
			local wdpl = ':d:Property:P'..conf[2]
			local example = 'شناسه ' .. conf[1].. ' که به‌شکل '..getExample(conf, id)..' در بخش '..conf[4]..' ظاهر می‌شود'
			local txCatExplain = frame:expandTemplate{ title = 'توضیح رده', args = {'مقاله‌های دارای شناسه '..link..'، مثلاً '..example..' بوده و افزودن [[ویکی‌پدیا:رده‌بندی#زیررده‌بندی|زیررده]] به آن اشتباه'} }
			local txCatMore    = frame:expandTemplate{ title = 'توضیح رده', args = {'ویکی‌پدیا:داده‌های کتابخانه‌ای', wdpl} }
			local txEmptyCat   = frame:expandTemplate{ title = 'رده خالی' }
			local txWPCat      = frame:expandTemplate{ title = 'رده ویکی‌پدیا', args = { hidden = 'yes', tracking = 'yes' } }
			local txTOC = whichTOC( frame )
			local idCat = 'صفحه‌های دارای شناسه‌های '..id
			local wpCat = 'مقاله‌های ویکی‌پدیا همراه اطلاعات داده‌های کتابخانه‌ای'
			local outString = txCatExplain..txCatMore..txEmptyCat..txWPCat..txTOC..'\n'..
							'صفحه‌ها تنها باید توسط [[پودمان:Authority control]] به این رده افزوده شوند.'..
							'[[رده:'..idCat..']]'..redCatCheck(idCat)..
							'[[رده:'..wpCat..'|'..id..']]'..redCatCheck(wpCat)
			return outString
		end
	end
	return ''
end

--For use in [[Category:Wikipedia articles with faulty authority control information]],
--   i.e. on [[Category:Wikipedia articles with faulty VIAF identifiers]]
local function wpfaulty( frame, id )
	for _, conf in pairs( ac_conf ) do
		if conf.category == id or conf[1] == id then
			local linktarget = conf.link or conf[1] .. ' (identifier)'
			local wdpl = ':d:Property:P'..conf[2]
			local txCatMore  = frame:expandTemplate{ title = 'توضیح رده', args = {'ویکی‌پدیا:داده‌های کتابخانه‌ای', linktarget, wdpl} }
			local txEmptyCat = frame:expandTemplate{ title = 'رده خالی' }
			local txWPCat    = frame:expandTemplate{ title = 'رده ویکی‌پدیا', args = { hidden = 'yes', tracking = 'yes' } }
			local txDirtyCat = frame:expandTemplate{ title = 'رده آلوده' }
			local txTOC = whichTOC( frame )
			local idCat = 'مقاله‌های ویکی‌پدیا همراه شناسه‌های '..id
			local wpfCat = 'مقاله‌های ویکی‌پدیا همراه اطلاعات معیوب داده‌های کتابخانه‌ای'
			local outString = txCatMore..txEmptyCat..txWPCat..txDirtyCat..txTOC..'\n'..
							'صفحه‌ها تنها باید توسط [[پودمان:Authority control]] به این رده افزوده شوند.'..
							'[[رده:'..idCat..']]'..redCatCheck(idCat)..
							'[[رده:'..wpfCat..'|'..id..']]'..redCatCheck(wpfCat)
			return outString
		end
	end
	return ''
end

--[[==========================================================================]]
--[[                            Main/External Call                            ]]
--[[==========================================================================]]
function p.autoDetect( frame )
	if isCat then
		local pagesID    = mw.ustring.match(title, 'صفحه‌های دارای شناسه‌های ([%w%.%- ]+)')
		local miscID     = mw.ustring.match(title, 'صفحه‌های متفرقه همراه شناسه‌های ([%w%.%- ]+)')
		local userID     = mw.ustring.match(title, 'صفحه‌های کاربری همراه شناسه‌های ([%w%.%- ]+)')
		local wpfaultyID = mw.ustring.match(title, 'مقاله‌های ویکی‌پدیا همراه شناسه‌های معیوب ([%w%.%- ]+)')
		local wpID       = mw.ustring.match(title, 'مقاله‌های ویکی‌پدیا همراه شناسه‌های ([%w%.%- ]+)')
		
		if     pagesID    then return pages( frame, pagesID )
		elseif miscID     then return misc( frame, miscID )
		elseif userID     then return user( frame, userID )
		elseif wpfaultyID then return wpfaulty( frame, wpfaultyID ) --must be before wpID check, in case they both match
		elseif wpID       then return wp( frame, wpID )             --to keep the regex simple
		else   return '[[رده:صفحه‌های دارای رده نامعلوم شناسه‌های داده‌های کتابخانه‌ای]]'
		end
	end
	return ''
end

return p