Modul:Message box: Unterschied zwischen den Versionen

unsicher, was das eigentlich macht ....
(fix bug for data being shared between multiple message boxes called from the same module; allow boxes to be hidden; use Module:Arguments to fetch the arguments)
(unsicher, was das eigentlich macht ....)
Zeile 2: Zeile 2:


-- Require necessary modules.
-- Require necessary modules.
local getArgs = require('Module:Arguments').getArgs
local htmlBuilder = require('Modul:HtmlBuilder')
local htmlBuilder = require('Module:HtmlBuilder')
local categoryHandler = require('Modul:Category handler').main
local categoryHandler = require('Module:Category handler').main
local yesno = require('Modul:Yesno')
local yesno = require('Module:Yesno')


-- Load the configuration page.
-- Load the configuration page.
local cfgTables = mw.loadData('Module:Message box/configuration')
local cfgTables = mw.loadData('Modul:Message box/configuration')


-- Get a language object for formatDate and ucfirst.
-- Get a language object for formatDate and ucfirst.
Zeile 19: Zeile 18:
local trim = mw.text.trim
local trim = mw.text.trim


--------------------------------------------------------------------------------
local box = {}
-- Helper functions
--------------------------------------------------------------------------------


local function getTitleObject(page, ...)
local function getTitleObject(page)
if type(page) == 'string' then
if type(page) == 'string' then
-- Get the title object, passing the function through pcall  
-- Get the title object, passing the function through pcall  
-- in case we are over the expensive function count limit.
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, page, ...)
local success, title = pcall(mw.title.new, page)
if success then
if success then
return title
return title
Zeile 61: Zeile 58:
table.sort(nums)
table.sort(nums)
return nums
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local box = {}
box.__index = box
function box.new()
local obj = {}
setmetatable(obj, box)
return obj
end
end


Zeile 211: Zeile 195:
if self.isSmall then
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
self:addClass(cfg.smallClass or 'mbox-small')
end
if yesno(args.hidden) then
self:addClass('infobox editsection')
end
end
self:addClass(self.typeClass)
self:addClass(self.typeClass)
Zeile 222: Zeile 203:
self.textstyle = args.textstyle
self.textstyle = args.textstyle


-- Find if we are on the template page or not. This functionality is only used if useCollapsibleTextFields is set,
-- Process data for collapsible text fields. At the moment these are only used in {{ambox}}.
-- or if both cfg.templateCategory and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields  
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields then
if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then
self.name = args.name
self.name = args.name
if self.name then
local nameTitle = getTitleObject(self.name)
local templateName = mw.ustring.match(self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$') or self.name
self.isTemplatePage = nameTitle and self.title.prefixedText == ('Template:' .. nameTitle.text) and true or false
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle 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}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
-- Get the self.issue value.
if self.isSmall and args.smalltext then
if self.isSmall and args.smalltext then
Zeile 260: Zeile 233:
-- Get the self.talk value.
-- Get the self.talk value.
local talk = args.talk
local talk = args.talk
if talk == '' -- Show talk links on the template page or template subpages if the talk parameter is blank.
if talk == '' and self.isTemplatePage then
and self.templateTitle
and (mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle))
then
talk = '#'
talk = '#'
elseif talk == '' then
talk = nil
end
end
if talk then
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,
-- See if the talk link exists and is for a talk or a content namespace.
-- and make a link to the talk page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
-- If we couldn't process the talk page link, get the talk page of the current page.
talkTitle = getTitleObject(self.title.text, mw.site.namespaces[self.title.namespace].talk.id)
local success
success, talkTitle = pcall(self.title.talkPageTitle, self.title)
if not success then
talkTitle = nil
end
end
end
if talkTitle and talkTitle.exists then
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
if talkTitle.isTalkPage then
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
else
else
Zeile 368: Zeile 338:
catTitle = getTitleObject('Category:' .. catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
if not catTitle or not catTitle.exists then
self:addCat('main', 'Articles with invalid date parameter in template')
self:addCat('main', 'Artikel mit ungültigen Datumsangaben in Vorlagen‎ ')
end
end
elseif mainCat and (not date or date == '') then
elseif mainCat and (not date or date == '') then
Zeile 382: Zeile 352:
if cfg.templateCategory then
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if cfg.templateCategoryRequireName then
self.isTemplatePage = type(self.name) == 'string' and self.title.prefixedText == ('Template:' .. self.name)
if self.isTemplatePage then
if self.isTemplatePage then
self:addCat('template', cfg.templateCategory)
self:addCat('template', cfg.templateCategory)
Zeile 408: Zeile 379:
templateSort = tostring(count)
templateSort = tostring(count)
end
end
if self.categoryNums and #self.categoryNums > 0 then
-- if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
-- templateCat = templateErrorCategory
templateSort = 'C'
-- templateSort = 'C'
end
-- end
end
end
self:addCat('template', templateCat, templateSort)
self:addCat('template', templateCat, templateSort)
Zeile 419: Zeile 390:
if self.invalidTypeError then
if self.invalidTypeError then
local allSort = (self.nsid == 0 and 'Main:' or '') .. self.title.prefixedText
local allSort = (self.nsid == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
self:addCat('all', 'Infoboxen mit falsch verwendeten Parametern‎ ', allSort)
end
end
if self.isSubstituted then
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
self:addCat('all', 'Vorlagen, die ersetzt statt eingebunden wurden')
end
end


Zeile 445: Zeile 416:
.addClass('error')
.addClass('error')
.wikitext(format(
.wikitext(format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
'Vorlage <code>%s[[Vorlage:%s|%s]]%s</code> wurde fälschlicherweise substituiert.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
))
Zeile 515: Zeile 486:
.cssText(self.textstyle)
.cssText(self.textstyle)
.wikitext(self.text)
.wikitext(self.text)
end
-- Add a message, if used on ns11
if self.nsid == 11 then
textCell
.wikitext(format('<br /><strong>Hinweis:</strong> Bei der Vielzahl von Vorlagen wird nicht jede Diskussionsseite beobachtet. Melde Änderungswünsche bitte in der [[Wikivoyage:Vorlagen/Werkstatt|Vorlagenwerkstatt]], Fragen auf der [[Wikivoyage Diskussion:Vorlagen/Werkstatt|Werkstatt-Diskussionsseite]] oder  auch in der [[Wikivoyage:Lounge|Lounge]] an.', self.type or ''))
end
end


Zeile 553: Zeile 530:


local function main(boxType, args)
local function main(boxType, args)
local outputBox = box.new()
box:setTitle(args)
outputBox:setTitle(args)
local cfg = box:getConfig(boxType)
local cfg = outputBox:getConfig(boxType)
args = box:removeBlankArgs(cfg, args)
args = outputBox:removeBlankArgs(cfg, args)
box:setBoxParameters(cfg, args)
outputBox:setBoxParameters(cfg, args)
return box:export()
return outputBox:export()
end
end


local function makeWrapper(boxType)
local function makeWrapper(boxType)
return function (frame)
return function (frame)
local args = getArgs(frame, {trim = false, removeBlanks = false})
-- If called via #invoke, use the args passed into the invoking
-- 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)
return main(boxType, args)
end
end
Anonymer Benutzer