Changes

Module:Message box

674 bytes added, 05:51, 23 October 2013
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)
local box = {}
local function getTitleObject(page, ...)
if type(page) == 'string' then
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, page, ...)
if success then
return title
-- 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,
-- 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}}.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
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.
if self.isSmall and args.smalltext then
-- 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. and self.templateTitle and (mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.isTemplatePage templateTitle)) then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- See if If the talk value is a talk page, make a link exists to that page. Else assume that it's a section heading, -- and is for make a link to the talk or a content namespacepage of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
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 success, talkTitle = pcallgetTitleObject(self.title.talkPageTitletext, mw.site.namespaces[self.title.namespace].talk.id) if not success then talkTitle = nil end
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkTitle.isTalkPage talkArgIsTalkPage then
talkText = format('%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText)
else
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
self.isTemplatePage = type(self.name) == 'string' and self.title.prefixedText == ('Template:' .. self.name)
if self.isTemplatePage then
self:addCat('template', cfg.templateCategory)
Anonymous user