మాడ్యూల్:Category see also: కూర్పుల మధ్య తేడాలు
Jump to navigation
Jump to search
Content deleted Content added
create replacement for Template:Category see also |
keep the "Category:" prefix if we have one link |
||
పంక్తి 12: | పంక్తి 12: | ||
end |
end |
||
-- Gets the length of the sequence seq. Usually this should be done with the # |
|||
⚫ | |||
-- operator, but we need to work with tables that get their values through an |
|||
-- project. The project can be nil, in which case it formats the category for |
|||
-- __index metamethod. |
|||
-- the current project. |
|||
local function getSequenceLength(seq) |
|||
local length = 0 |
|||
for i in ipairs(seq) do |
|||
length = i |
|||
end |
|||
return length |
|||
end |
|||
⚫ | |||
-- those options. |
|||
-- |
|||
-- Options: |
|||
-- project - a project code such as "fr" (for the French Wikipedia) |
|||
-- showPrefix - a boolean value for whether to show the "Category:" prefix |
|||
-- (and the project prefix if specified) |
|||
-- |
-- |
||
-- This is implemented as a function generator rather than a simple function |
-- This is implemented as a function generator rather than a simple function |
||
-- so that we can just process the |
-- so that we can just process the options once, instead of every time we |
||
-- |
-- generate a category. |
||
local function |
local function newCategoryLinker(options) |
||
local formatString |
local formatString |
||
if project then |
if options.project then |
||
if options.showPrefix then |
|||
⚫ | |||
formatString = '[[:' .. options.project .. ':Category:%s]]' |
|||
else |
|||
⚫ | |||
end |
|||
else |
else |
||
if options.showPrefix then |
|||
⚫ | |||
formatString = '[[:Category:%s]]' |
|||
else |
|||
⚫ | |||
end |
|||
end |
end |
||
return function (category) |
return function (category) |
||
-- We can get away with using two arguments even when showDisplay is |
|||
-- false, as string.format ignores extra arguments as long as there is |
|||
-- an argument for each flag in the format string. |
|||
return formatString:format(category, category) |
return formatString:format(category, category) |
||
end |
end |
||
పంక్తి 32: | పంక్తి 58: | ||
function p._main(args) |
function p._main(args) |
||
local nLinks = getSequenceLength(args) |
|||
⚫ | |||
⚫ | |||
return makeWikitextError('at least one parameter required') |
return makeWikitextError('at least one parameter required') |
||
end |
end |
||
local makeCategoryLink = generateCategoryLinkMaker(args.project) |
|||
local makeCategoryLink = newCategoryLinker{ |
|||
project = args.project, |
|||
showPrefix = nLinks == 1, |
|||
} |
|||
local links = {} |
local links = {} |
||
for i, cat in ipairs(args) do |
for i, cat in ipairs(args) do |
||
links[i] = makeCategoryLink(cat) |
links[i] = makeCategoryLink(cat) |
||
end |
end |
||
-- Don't output a comma before the "and" if we have only two links. |
|||
local conjunction |
|||
if nLinks == 2 then |
|||
conjunction = ' and ' |
|||
else |
|||
conjunction = ', and ' |
|||
end |
|||
local hatnoteText = string.format( |
local hatnoteText = string.format( |
||
'%s: %s.', |
'%s: %s.', |
||
args.LABEL or 'See also', |
args.LABEL or 'See also', |
||
mw.text.listToText(links, ', ', |
mw.text.listToText(links, ', ', conjunction) |
||
) |
) |
||
return mHatnote._hatnote(hatnoteText, {selfref = true}) |
return mHatnote._hatnote(hatnoteText, {selfref = true}) |
13:29, 12 మే 2017 నాటి కూర్పు
-- This module implements {{Category see also}}
local mHatnote = require('Module:Hatnote')
local p = {}
local function makeWikitextError(msg)
return string.format(
'<strong class="error">Error: %s ([[Template:Category see also]])</strong>',
msg
)
end
-- Gets the length of the sequence seq. Usually this should be done with the #
-- operator, but we need to work with tables that get their values through an
-- __index metamethod.
local function getSequenceLength(seq)
local length = 0
for i in ipairs(seq) do
length = i
end
return length
end
-- Given a table of options, returns a function that formats categories for
-- those options.
--
-- Options:
-- project - a project code such as "fr" (for the French Wikipedia)
-- showPrefix - a boolean value for whether to show the "Category:" prefix
-- (and the project prefix if specified)
--
-- This is implemented as a function generator rather than a simple function
-- so that we can just process the options once, instead of every time we
-- generate a category.
local function newCategoryLinker(options)
local formatString
if options.project then
if options.showPrefix then
formatString = '[[:' .. options.project .. ':Category:%s]]'
else
formatString = '[[:' .. options.project .. ':Category:%s|%s]]'
end
else
if options.showPrefix then
formatString = '[[:Category:%s]]'
else
formatString = '[[:Category:%s|%s]]'
end
end
return function (category)
-- We can get away with using two arguments even when showDisplay is
-- false, as string.format ignores extra arguments as long as there is
-- an argument for each flag in the format string.
return formatString:format(category, category)
end
end
function p._main(args)
local nLinks = getSequenceLength(args)
if nLinks < 1 then
return makeWikitextError('at least one parameter required')
end
local makeCategoryLink = newCategoryLinker{
project = args.project,
showPrefix = nLinks == 1,
}
local links = {}
for i, cat in ipairs(args) do
links[i] = makeCategoryLink(cat)
end
-- Don't output a comma before the "and" if we have only two links.
local conjunction
if nLinks == 2 then
conjunction = ' and '
else
conjunction = ', and '
end
local hatnoteText = string.format(
'%s: %s.',
args.LABEL or 'See also',
mw.text.listToText(links, ', ', conjunction)
)
return mHatnote._hatnote(hatnoteText, {selfref = true})
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Category see also',
})
return p._main(args)
end
return p