Module:Category main article
| මෙම Lua module පිටු බොහෝ ගණනක භාවිතා වන නිසා සිදුකරන වෙනස් කිරීම් බොහෝ ස්ථානවලට බලපානු ඇත. ඔබ සිදුකිරීමට අදහස් කරන වෙනස්කම් මෙම මොඩියුලයට අදාළ /sandbox හෝ /testcases උපපිටු. එම වෙනස්කම් සිදුකිරීමට ප්රථම අදාළ සාකච්ඡා පිටුවේ ඒ පිළිබඳව සංවාදයක් ගොඩනැගීමට කාරුණික වන්න.
Transclusion count updated automatically (ප්රලේඛනය වෙතට යොමුවන්න). |
| මෙම මොඩියුලය මතු දැක්වෙන මොඩියුල මත යැපෙයි: |
This module produces hatnote saying "The main article for this category is x." It implements the {{ප්රවර්ගයේ ප්රධාන ලිපිය}} template.
Use from wikitext
[සංස්කරණය]This module should usually be used via the {{ප්රවර්ගයේ ප්රධාන ලිපිය}} template. However, it can also be used from #invoke with the syntax {{#invoke:Category main article|catMain|parameters}}. Please see the {{ප්රවර්ගයේ ප්රධාන ලිපිය}} template documentation for available parameters.
Use from other Lua modules
[සංස්කරණය]Load the module:
local mCatMain = require('Module:Category main article')
You can then use the _catMain function like this:
mCatMain._catMain(options, ...)
options is an optional table that can be used to configure the function's output. There are two available options, "article" and "selfref".
- article - if this is set to false, "no", "n", "false", or 0, the module outputs "The main page" rather than "The main article". Use the code
{article = false}. - selfref - this is used when the output is a self-reference to Wikipedia. To set this option, use
{selfref = true}. (See the {{selfref}} template for more details on self-references.)
The remaining arguments are page names to be turned into link(s) following the text "The main article for this category is". If no page names are specified, the current page name (minus the namespace name) is used for the first link.
- Example 1
mCatMain._catMain(nil, 'Foo')
Produces:
<div class="hatnote relarticle mainarticle">The main article for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>
Displays as:
- Example 2
mCatMain._catMain(nil, 'Foo', 'Bar', 'Baz')
Produces:
<div class="hatnote relarticle mainarticle">The main articles for this [[Help:Categories|category]] are '''[[Foo]]''', '''[[Bar]]''' and '''[[Baz]]'''.</div>
Displays as:
- Example 3
mCatMain._catMain({article = false}, 'Foo')
Produces:
<div class="hatnote relarticle mainarticle">The main page for this [[Help:Categories|category]] is '''[[Foo]]'''.</div>
Displays as:
Technical details
[සංස්කරණය]This module uses Module:Hatnote to format the hatnote text.
Text output
[සංස්කරණය]This module has five lines that must be translated when exported to wikis in other languages.
| Variable | Code | Translatable text | |
|---|---|---|---|
pagetype
|
pagetype = yesno(options.article) ~= false and 'article' or 'page'
|
article
|
page
|
pagetype = mw.title.new(page).namespace == 0 and "article" or "page"
|
article
|
page
| |
pagetype = "article"
|
article
| ||
stringToFormat
|
stringToFormat = 'The main %ss for this [[Help:Categories|category]] are %s.'
|
The main %ss for this [[Help:Categories|category]] are %s.
| |
stringToFormat = 'The main %s for this [[Help:Categories|category]] is %s.'
|
The main %s for this [[Help:Categories|category]] is %s.
| ||
-- This module implements {{Category main article}}.
local mHatnote = require('Module:Hatnote')
local mFormatLink = require('Module:Format link')
local yesno = require('Module:Yesno')
local mTableTools -- lazily initialise
local mArguments -- lazily initialise
local p = {}
-- Helper: true if the page is in Template: or Module: namespace
local function isTemplateOrModule(title)
local t = (type(title) == 'string' and title) or (title and title.prefixedText) or ''
if t == '' then
return false
end
local ok, tt = pcall(mw.title.new, t)
if not ok or not tt then
return false
end
local ns = tt.namespace
return ns == 10 or ns == 828
end
function p.catMain(frame)
mTableTools = require('Module:TableTools')
mArguments = require('Module:Arguments')
-- Grab args
local args = mArguments.getArgs(frame, {wrappers = 'සැකිල්ල:ප්රවර්ගයේ ප්රධාන ලිපිය'})
local pages = mTableTools.compressSparseArray(args)
if #pages == 0 and args[1] then
pages = { args[1] }
end
local options = {
article = args.article,
selfref = args.selfref,
_rawPages = pages,
}
-- Determine the outer page (the page using the template)
local thisTitle = frame and frame.getParent and frame:getParent() and frame:getParent().title or mw.title.getCurrentTitle()
local titleText = thisTitle and thisTitle.prefixedText or ''
local ns = thisTitle and thisTitle.namespace or nil
-- Skip tracking categories on template/module pages
local isTemplate = isTemplateOrModule(titleText)
-- Remember original arg count
local origCount = #pages
-- Generate hatnote text
local text, firstLink, usedAutoFill = p._catMain(options, thisTitle, unpack(pages))
if isTemplate then
-- On templates/modules, just return the hatnote (no tracking categories)
return text
end
-- Add tracking categories
local cats = {}
-- Wrong namespace detection (Article, Draft)
if ns == 0 or ns == 118 then
table.insert(cats, '[[Category:Articles using category hatnotes]]')
end
-- Title mismatch detection
if firstLink and (origCount == 1 or (origCount == 0 and usedAutoFill)) then
local function normalizeTitle(s)
return (s or ''):gsub('^%s+', ''):gsub('%s+$', ''):gsub('^[^:]*:', ''):gsub('%s+', ' '):gsub('^%l', string.upper)
end
local compareStr
if usedAutoFill then
compareStr = normalizeTitle(firstLink)
else
local raw = (options._rawPages and options._rawPages[1]) or firstLink
compareStr = normalizeTitle(raw:gsub("|.*", ""))
end
local catName = normalizeTitle(thisTitle and thisTitle.text or '')
if compareStr ~= catName then
table.insert(cats, '[[Category:Category main article does not match category title]]')
end
end
if #cats > 0 then
text = text .. '\n' .. table.concat(cats, '\n')
end
return text
end
function p._catMain(options, thisTitle, ...)
options = options or {}
local pages = {...}
thisTitle = thisTitle or mw.title.getCurrentTitle()
local fullTitle = thisTitle and thisTitle.prefixedText or ''
local thisText = thisTitle and thisTitle.text or (pages[1] or '')
local isTemplate = isTemplateOrModule(fullTitle)
-- Red link detection
local rawLinks = mFormatLink.formatPages({
categorizeMissing = not isTemplate and 'Categories with hatnote templates targeting a non-existent page' or nil
}, pages)
-- Convert to plain strings
local links = {}
for i, link in ipairs(rawLinks or {}) do
links[i] = tostring(link)
end
-- Auto-fill if empty
local firstOutputLink = nil
local usedAutoFill = false
if not links[1] or links[1] == '' then
local title = mw.title.new(thisText)
if title and title.isRedirect then
title = title.redirectTarget
end
firstOutputLink = title and title.text or thisText
usedAutoFill = true
links[1] = tostring(mFormatLink._formatLink{
link = firstOutputLink,
categorizeMissing = not isTemplate and 'Categories with hatnote templates targeting a non-existent page' or nil
})
pages = { firstOutputLink }
else
local visible = links[1]
visible = visible:gsub("^'''", ""):gsub("'''$", "")
visible = visible:gsub("%[%[", ""):gsub("%]%]", "")
visible = visible:gsub("|.*$", "")
visible = visible:gsub("#.*$", "")
firstOutputLink = visible
usedAutoFill = false
end
-- Bold links
for i, link in ipairs(links) do
links[i] = string.format("'''%s'''", link)
end
-- Determine pagetype
local pagetype
local pagetype_si
if options.article ~= nil then
pagetype = yesno(options.article) ~= false and 'ලිපිය' or 'පිටුව'
elseif pages and pages[1] then
local page = pages[1]:gsub("|.*","")
local tt = mw.title.new(page)
pagetype = tt and tt.namespace == 0 and "ලිපිය" or "පිටුව"
else
pagetype = "ලිපිය"
end
pagetype_si = pagetype
-- Work out whether we need to be singular or plural
local stringToFormat
if #links > 1 then
stringToFormat = 'මෙම [[උදවු:ප්රවර්ග|ප්රවර්ගය]] සඳහා මූලික %s වන්නේ %s වෙති.'
if pagetype == 'ලිපිය' then
pagetype_si = 'ලිපි'
elseif pagetype == 'පිටුව' then
pagetype_si = 'පිටු'
end
else
stringToFormat = 'මෙම [[උදවු:ප්රවර්ග|ප්රවර්ගය]] සඳහා මූලික %s වන්නේ %s වෙයි.'
end
-- Build hatnote text
local text = string.format(
stringToFormat,
pagetype_si,
mw.text.listToText(links)
)
-- Pass through Module:Hatnote
local hnOptions = { selfref = options.selfref }
text = mHatnote._hatnote(text, hnOptions)
return text, firstOutputLink, usedAutoFill
end
return p