Module:Message box: Difference between revisions

Jump to navigation Jump to search
m>Mr. Stradivarius
m Changed protection level of Module:Message box: High-risk Lua module: used in system messages ([Edit=Block all non-admin users] (indefinite) [Move=Block all non-admin users] (indefinite))
m>Mr. Stradivarius
fix talk page links, and fix bug producing spurious WhatLinksHere links (however note that a link will appear for Foo if the code "talk=Foo" is used)
Line 20: Line 20:
local box = {}
local box = {}


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
Line 202: Line 202:
-- Set text style.
-- Set text style.
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,
-- or if both cfg.templateCategory and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields 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
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}}.
-- Process data for collapsible text fields. At the moment these are only used in {{ambox}}.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields then
if self.useCollapsibleTextFields then
self.name = args.name
local nameTitle = getTitleObject(self.name)
self.isTemplatePage = nameTitle and self.title.prefixedText == ('Template:' .. nameTitle.text) and true or false
-- Get the self.issue value.
-- Get the self.issue value.
if self.isSmall and args.smalltext then
if self.isSmall and args.smalltext then
Line 233: Line 241:
-- Get the self.talk value.
-- Get the self.talk value.
local talk = args.talk
local talk = args.talk
if talk == '' and self.isTemplatePage then
if talk == '' -- Show talk links on the template page or template subpages if the talk parameter is blank.
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
-- See if the talk link exists and is for a talk or a content namespace.
-- If the talk value is a talk page, make a link to that page. Else assume that it's a section heading,
-- 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
-- If we couldn't process the talk page link, get the talk page of the current page.
talkArgIsTalkPage = false
local success
talkTitle = getTitleObject(self.title.text, mw.site.namespaces[self.title.namespace].talk.id)
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 talkTitle.isTalkPage then
if talkArgIsTalkPage then
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
else
else
Line 352: Line 363:
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)