Module:Mainspace editnotice/sandbox
Appearance
This is the module sandbox page for Module:Mainspace editnotice (diff). See also the companion subpage for test cases (run). |
This Lua module is used in system messages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them. |
This module depends on the following other modules: |
This module is for use in Template:Editnotices/Namespace/Main. It conditionally includes other editnotice templates.
It has testcases at Module:Mainspace editnotice/testcases.
Usage
[edit]{{#invoke:Mainspace editnotice|main}}
No parameters are required. For testing what editnotice would be generated for a specific page, you can pass |page=
.
local Arguments = require('Module:Arguments')
local Disambiguation = require('Module:Disambiguation')
local TfaTitle = require('Module:TFA title')
local p = {}
p.main = function(frame)
local args = Arguments.getArgs(frame)
return p.core(args.page and mw.title.new(args.page) or mw.title.getCurrentTitle(), frame)
end
local notices = {
draft_notice = function (page, ctx)
if page.exists
and (page.isRedirect or ctx.isDisambigPage)
and mw.title.new('Draft:'..page.fullText).exists then
return "Draft at"
end
end,
blp_notice = function(page)
local content = page:getContent()
local living = "%[%[%s*[Cc]ategory:%s*[Ll]iving[ _]people%s*%]%]"
local possiblyLiving = "%[%[%s*[Cc]ategory:%s*[Pp]ossibly[ _]living[ _]people%s*%]%]"
if content and (content:find(living) or content:find(possiblyLiving)) then
return "BLP editnotice"
end
end,
disambig_notice = function(page, ctx)
if ctx.isDisambigPage then
return "Disambig editnotice"
end
end,
tfa_notice = function(page)
if TfaTitle.today_title() == page.text then
return "TFA editnotice"
end
end,
refideas_notice = function(page)
local talkContent = page.talkPageTitle:getContent()
if talkContent and talkContent:match('%{%{[rR]ef ?idea') and not talkContent:match("Refideas%-nonotice") then
return "Refideas editnotice"
end
end,
}
p.core = function(page, frame)
-- Context object to store values that are expensive to compute and required
-- in multiple places
local context = {
isDisambigPage = Disambiguation._isDisambiguationPage(page.fullText)
}
local text = ''
for _, getNotice in pairs(notices) do
local template = getNotice(page, context)
text = text .. (template and ('<div class="editnotice-link" style="clear: both; float: right; margin: 0px 0.8em; padding: 0; line-height: 1em;"> <small>[[Template:'..template..'|'..template..']]</small> </div>' .. frame:expandTemplate{ title = template }) or '')
end
return text
end
return p