Module:Message box: திருத்தங்களுக்கு இடையிலான வேறுபாடு

உள்ளடக்கம் நீக்கப்பட்டது உள்ளடக்கம் சேர்க்கப்பட்டது
Allow passing attributes per protected edit request by Jackmcbarn. Also remove undocumented "hidden" parameter and format the module so it mostly fits within 80 chars.
No edit summary
வரிசை 1:
-- This is a meta-module for producing message box templates, including {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
 
-- Require necessary modules.
local getArgs = require('Module:Arguments').getArgs
local htmlBuilder = require('Module:HtmlBuilder')
local categoryHandler = require('Module:Category handler').main
வரி 20 ⟶ 18:
local trim = mw.text.trim
 
local box = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
 
local function getTitleObject(page, ...)
வரி 62 ⟶ 58:
table.sort(nums)
return nums
end
 
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
 
local box = {}
box.__index = box
 
function box.new()
local obj = {}
setmetatable(obj, box)
return obj
end
 
வரி 122 ⟶ 105:
nsVals[i] = format('"%s"', val)
end
error('invalid ns parameter passed to box:addCat; valid values are ' .. mw.text.listToText(nsVals, nil, ' or '))
error(
'invalid ns parameter passed to box:addCat; valid values are '
.. mw.text.listToText(nsVals, nil, ' or ')
)
end
self[tname] = self[tname] or {}
வரி 139 ⟶ 119:
self.classes = self.classes or {}
tinsert(self.classes, class)
end
 
function box:addAttr(attr, val)
if type(attr) ~= 'string' or type(val) ~= 'string' then return end
self.attrs = self.attrs or {}
tinsert(self.attrs, attr)
end
 
வரி 167 ⟶ 141:
end
tinsert(boxTypes, '"mbox"')
error(format('invalid message box type "%s"; valid types are %s', tostring(boxType), mw.text.listToText(boxTypes)), 2)
error(format(
'invalid message box type "%s"; valid types are %s',
tostring(boxType),
mw.text.listToText(boxTypes)
), 2)
end
return cfg
வரி 177 ⟶ 147:
 
function box:removeBlankArgs(cfg, args)
-- Only allow blank arguments for the parameter names listed in cfg.allowBlankParams.
-- cfg.allowBlankParams.
local newArgs = {}
for k, v in pairs(args) do
வரி 195 ⟶ 164:
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData and true or false
and self.type
and not typeData
and true
or false
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
வரி 224 ⟶ 189:
self.id = args.id
end
self:addClass(cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks')
self:addClass(
cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'
)
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
வரி 236 ⟶ 199:
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
 
-- Set text style.
self.textstyle = args.textstyle
 
-- Find if we are on the template page or not. This functionality is only used if useCollapsibleTextFields is set,
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory and cfg.templateCategoryRequireName are set.
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
self.name = args.name
if self.name then
local templateName = mw.ustring.match(self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$') or self.name
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) or false
and mw.title.equals(self.title, self.templateTitle)
or false
end
 
-- Process data for collapsible text fields. At the moment these are only used in {{ambox}}.
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
வரி 289 ⟶ 241:
-- Get the self.talk value.
local talk = args.talk
if talk == '' -- Show talk links on the template page or template subpages if the talk parameter is blank.
-- parameter is blank.
if talk == ''
and self.templateTitle
and (mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle))
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
வரி 303 ⟶ 250:
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else assume that it's a section heading,
-- assume that it's a section heading, and make a link to the talk page of the current page with that section heading.
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(self.title.text, mw.site.namespaces[self.title.namespace].talk.id)
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevantஇது discussionகுறித்த mayமேலதிக be found onதகவல்கள்'
if talkArgIsTalkPage then
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = format('%s [[%s#%s|பேச்சு பக்கத்தில்]] இருக்கலாம்.', talkText, talkTitle.prefixedText, talk)
talkText = format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
வரி 350 ⟶ 283:
end
 
-- Set the non-collapsible text field. At the moment this is used by all box types other than ambox,
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
வரி 375 ⟶ 308:
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px'
self.imageLeft = format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize)
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
end
end
வரி 408 ⟶ 338:
local date = args.date
date = type(date) == 'string' and date
local preposition = 'fromஇல் இருந்து'
for _, num in ipairs(self.categoryParamNums) do
local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = format('%s %s %s', mainCat, prepositiondate, datepreposition)
self:addCat('main', catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat('main', 'Articles with invalid date parameter in template')
'main',
'Articles with invalid date parameter in template'
)
end
elseif mainCat and (not date or date == '') then
வரி 480 ⟶ 406:
end
 
-- Convert category tables to strings and pass them through [[Module:Category handler]].
-- [[Module:Category handler]].
self.categories = categoryHandler{
main = tconcat(self.mainCats or {}),
வரி 517 ⟶ 442:
.cssText(self.style)
.attr('role', 'presentation')
for attr, val in pairs(self.attrs or {}) do
boxTable
.attr(attr, val)
end
 
-- Add the left-hand image.
வரி 527 ⟶ 448:
local imageLeftCell = row.tag('td').addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image is inside it.
-- is inside it. Divs use style="width: 52px;", which limits the image width to 52px. If any
-- image width to 52px. If any images in a div are wider than that, they may overlap with the text or cause
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell.tag('div').css('width', '52px')
end
வரி 536 ⟶ 457:
.wikitext(self.imageLeft)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and some don't.
-- some don't. The old template code in templates where empty cells are specified gives the following hint:
-- specified gives the following hint: "No image. Cell with some width or padding necessary for text cell to have 100% width."
-- or padding necessary for text cell to have 100% width."
row.tag('td')
.addClass('mbox-empty-cell')
வரி 548 ⟶ 468:
local textCell = row.tag('td').addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be collapsible. At the
-- collapsible. At the moment, only ambox uses this.
textCell
.cssText(self.textstyle)
வரி 582 ⟶ 502:
local imageRightCell = row.tag('td').addClass('mbox-imageright')
if self.imageCellDiv then
imageRightCell = imageRightCell.tag('div').css('width', '52px') -- If we are using a div, redefine imageRightCell so that the image is inside it.
-- is inside it.
imageRightCell = imageRightCell.tag('div').css('width', '52px')
end
imageRightCell
வரி 605 ⟶ 523:
.tag('div')
.css('text-align', 'center')
.wikitext(format('This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or ''))
.wikitext(format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
 
வரி 619 ⟶ 534:
 
local function main(boxType, args)
box:setTitle(args)
local outputBox = box.new()
local cfg = box:getConfig(boxType)
outputBox:setTitle(args)
args = box:removeBlankArgs(cfg, args)
local cfg = outputBox:getConfig(boxType)
args = outputBoxbox:removeBlankArgssetBoxParameters(cfg, args)
return box:export()
outputBox:setBoxParameters(cfg, args)
return outputBox:export()
end
 
local function makeWrapper(boxType)
return function (frame)
-- If called via #invoke, use the args passed into the invoking
local args = getArgs(frame, {trim = false, removeBlanks = false})
-- template, or the args passed to #invoke if any exist. Otherwise
-- assume args are being passed directly in from the debug console
-- or from another Lua module.
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs(frame.args) do
origArgs = frame.args
break
end
else
origArgs = frame
end
-- Trim whitespace.
local args = {}
for k, v in pairs(origArgs) do
if type(v) == 'string' then
v = trim(v)
end
args[k] = v
end
return main(boxType, args)
end
"https://tamilar.wiki/w/Module:Message_box" இலிருந்து மீள்விக்கப்பட்டது