مسابقه دانش‌دخت
اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما می‌توانید در مسابقه مقاله‌نویسی دانش‌دخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهره‌مند باشید. اگر به موضوعات مربوط با زنان علاقه‌مندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد.

پودمان:Labelled list hatnote: تفاوت میان نسخه‌ها

از اسلامیکال
پرش به ناوبری پرش به جستجو
(ایجاد پودمان)
 
imported>Jeeputer
جز پودمان:Labelled list hatnote» را محافظت کرد: پودمان حساس ([ویرایش=تنها مدیران] (بی‌پایان) [انتقال=تنها مدیران] (بی‌پایان)))
 
خط ۹: خط ۹:
local mHatnote = require('Module:Hatnote')
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mHatlist = require('Module:Hatnote list')
local numConv --initialize lazily
local mArguments --initialize lazily
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}
local p = {}


خط ۱۷: خط ۱۹:
labelForm = '%s: %s',
labelForm = '%s: %s',
prefixes = {'label', 'label ', 'l'},
prefixes = {'label', 'label ', 'l'},
faPrefixes = {'عنوان', 'عنوان ', 'ع', 'برچسب', 'برچسب ', 'ب'},
template = 'Module:Labelled list hatnote'
template = 'Module:Labelled list hatnote'
}
-- Localizable message strings
local msg = {
errorSuffix = '#خطاها',
noInputWarning = 'نام صفحه مشخص نشده‌است',
noOutputWarning =
"'''[[%s]] — بدون خروجی: هیچ‌یک از صفحه‌های هدف موجود نیستند.'''"
}
}


-- Helper function that pre-combines display parameters into page arguments.
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
function p.preprocessDisplays (args, prefixes, faPrefixes)
-- Prefixes specify which parameters, in order, to check for display options
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
numConv = require('Module:Numeral converter').convert
prefixes = prefixes or defaults.prefixes
prefixes = prefixes or defaults.prefixes
local pages = {}
faPrefixes = faPrefixes or defaults.faPrefixes
local indices = {}
local sparsePages = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
if type(k) == 'number' then
if type(k) == 'number' then
indices[#indices + 1] = k
local display
local display
for i = 1, #prefixes do
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
display = args[prefixes[i] .. k]
if display then break end
if not display then
for j = 1, #faPrefixes do
display = args[faPrefixes[j] .. numConv('fa', k)]
if display then
break
end
end
else
break
end
end
end
local page = display and
sparsePages[k] = display and
mw.ustring.format('%s|%s', mw.ustring.gsub(v, '|.*$', ''), display) or v
mw.ustring.format('%s|%s', mw.ustring.gsub(v, '|.*$', ''), display) or v
pages[#pages + 1] = page
end
end
end
end
table.sort(indices)
local pages = {}
for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
return pages
return pages
end
--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
local pipe = mw.ustring.find(pagename, '|')
return mw.ustring.sub(pagename, 0, pipe and pipe - 1 or nil)
end
end


خط ۴۹: خط ۸۲:
function p.labelledList (frame)
function p.labelledList (frame)
mArguments = require('Module:Arguments')
mArguments = require('Module:Arguments')
yesno = require('Module:Yesno')
local labels = {frame.args[1] or defaults.label}
local labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labels[2] = frame.args[2] or labels[1]
خط ۵۵: خط ۸۹:
local template = frame:getParent():getTitle()
local template = frame:getParent():getTitle()
local args = mArguments.getArgs(frame, {parentOnly = true})
local args = mArguments.getArgs(frame, {parentOnly = true})
if args['رده'] then args.category = args['رده'] end
if args['خودارجاع'] then args.selfref = args['خودارجاع'] end
if args['فضای نام'] then args.namespace = args['فضای نام'] end
local pages = p.preprocessDisplays(args)
local pages = p.preprocessDisplays(args)
local options = {
local options = {
extraclasses = frame.args.extraclasses,
category = yesno(args.category),
category = args.category,
extraclasses = frame.args.extraclasses or frame.args['کلاس اضافی'],
selfref = frame.args.selfref or args.selfref,
ifexists = yesno(frame.args.ifexists or frame.args['اگرموجود']),
namespace = frame.args.namespace or frame.args['فضای نام'] or args.namespace,
selfref = yesno(frame.args.selfref or frame.args['خودارجاع'] or args.selfref),
template = template
template = template
}
}
خط ۶۶: خط ۱۰۶:


function p._labelledList (pages, labels, options)
function p._labelledList (pages, labels, options)
if options.ifexists then
for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
local v = pages[k]
local title = mw.title.new(getTarget(v), namespace)
if (v == '') or title == nil or not title.exists then
table.remove(pages, k)
end
end
end
labels = labels or {}
labels = labels or {}
if #pages == 0 then
return mHatnote.makeWikitextError(
'نام صفحه مشخص نشده‌است',
(options.template or defaults.template) .. '#خطاها',
options.category
)
end
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
for k, v in pairs(pages) do  
for k, v in pairs(pages) do  
خط ۸۳: خط ۱۲۵:
(labels[4] or labels[2] or defaults.label)
(labels[4] or labels[2] or defaults.label)
) or defaults.label
) or defaults.label
end
end
if #pages == 0 then
if options.ifexists then
mw.addWarning(
mw.ustring.format(
msg.noOutputWarning, options.template or defaults.template
)
)
return ''
else
return mHatnote.makeWikitextError(
msg.noInputWarning,
(options.template or defaults.template) .. msg.errorSuffix,
options.category
)
end
end
end
end

نسخهٔ کنونی تا ‏۲۶ آوریل ۲۰۲۳، ساعت ۰۵:۰۳

توضیحات این پودمان می‌تواند در پودمان:Labelled list hatnote/توضیحات قرار گیرد.

--------------------------------------------------------------------------------
--                               Labelled list                                --
--                                                                            --
-- This module does the core work of creating a hatnote composed of a list    --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]",    --
-- for {{see also}} and similar templates.                                    --
--------------------------------------------------------------------------------

local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local numConv --initialize lazily
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}

-- Defaults global to this module
local defaults = {
	label = 'همچنین نگاه کنید به', --Final fallback for label argument
	labelForm = '%s: %s',
	prefixes = {'label', 'label ', 'l'},
	faPrefixes = {'عنوان', 'عنوان ', 'ع', 'برچسب', 'برچسب ', 'ب'},
	template = 'Module:Labelled list hatnote'
}

-- Localizable message strings
local msg = {
	errorSuffix = '#خطاها',
	noInputWarning = 'نام صفحه مشخص نشده‌است',
	noOutputWarning =
		"'''[[%s]] — بدون خروجی: هیچ‌یک از صفحه‌های هدف موجود نیستند.'''"
}

-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes, faPrefixes)
	-- Prefixes specify which parameters, in order, to check for display options
	-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
	numConv = require('Module:Numeral converter').convert
	prefixes = prefixes or defaults.prefixes
	faPrefixes = faPrefixes or defaults.faPrefixes
	local indices = {}
	local sparsePages = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			indices[#indices + 1] = k
			local display
			for i = 1, #prefixes do
				display = args[prefixes[i] .. k]
				if not display then
					for j = 1, #faPrefixes do
						display = args[faPrefixes[j] .. numConv('fa', k)]
						if display then
							break	
						end
					end
				else
					break
				end
			end
			sparsePages[k] = display and
				mw.ustring.format('%s|%s', mw.ustring.gsub(v, '|.*$', ''), display) or v
		end
	end
	table.sort(indices)
	local pages = {}
	for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
	return pages
end

--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
 	local pipe = mw.ustring.find(pagename, '|')
	return mw.ustring.sub(pagename, 0, pipe and pipe - 1 or nil)
end

-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
	mArguments = require('Module:Arguments')
	yesno = require('Module:Yesno')
	local labels = {frame.args[1] or defaults.label}
	labels[2] = frame.args[2] or labels[1]
	labels[3] = frame.args[3] --no defaulting
	labels[4] = frame.args[4] --no defaulting
	local template = frame:getParent():getTitle()
	local args = mArguments.getArgs(frame, {parentOnly = true})
		if args['رده'] then args.category = args['رده'] end
		if args['خودارجاع'] then args.selfref = args['خودارجاع'] end
		if args['فضای نام'] then args.namespace = args['فضای نام'] end
		
	local pages = p.preprocessDisplays(args)
	local options = {
		category = yesno(args.category),
		extraclasses = frame.args.extraclasses or frame.args['کلاس اضافی'],
		ifexists = yesno(frame.args.ifexists or frame.args['اگرموجود']),
		namespace = frame.args.namespace or frame.args['فضای نام'] or args.namespace,
		selfref = yesno(frame.args.selfref or frame.args['خودارجاع'] or args.selfref),
		template = template
	}
	return p._labelledList(pages, labels, options)
end

function p._labelledList (pages, labels, options)
	if options.ifexists then
		for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
			local v = pages[k]
			local title = mw.title.new(getTarget(v), namespace)
			if (v == '') or title == nil or not title.exists then
				table.remove(pages, k)
			end
		end
	end
	labels = labels or {}
	label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
	for k, v in pairs(pages) do 
		if mHatnote.findNamespaceId(v) ~= 0 then
			label =
				(
					#pages == 1 and
					(labels[3] or labels[1] or defaults.label) or
					(labels[4] or labels[2] or defaults.label)
				) or defaults.label
		end
	end
	if #pages == 0 then
		if options.ifexists then
			mw.addWarning(
				mw.ustring.format(
					msg.noOutputWarning, options.template or defaults.template
				)
			)
			return ''
		else
			return mHatnote.makeWikitextError(
				msg.noInputWarning,
				(options.template or defaults.template) .. msg.errorSuffix,
				options.category
			)
		end
	end
	local text = mw.ustring.format(
		options.labelForm or defaults.labelForm,
		label,
		mHatlist.andList(pages, true)
	)
	local hnOptions = {
		extraclasses = options.extraclasses,
		selfref = options.selfref
	}
	return mHatnote._hatnote(text, hnOptions)
end

return p