| مسابقه دانشدخت | |
| اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما میتوانید در مسابقه مقالهنویسی دانشدخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهرهمند باشید. اگر به موضوعات مربوط با زنان علاقهمندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد. |
پودمان: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 | 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 | ||
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 | ||
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), | ||
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 {} | ||
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