Module:Script doc auto: Difference between revisions
Appearance
Content deleted Content added
add templatestyles |
Display {{mfd}} if the page has it in a comment Tag: Reverted |
||
Line 13: | Line 13: | ||
p.core = function(page) |
p.core = function(page) |
||
local len = page:len() |
local len = page:len() |
||
local mfd = '' |
|||
local content = mw.title.new(page).content |
|||
local result = content:match("/%* ({{mfd.-}})") |
|||
⚫ | |||
mfd = mw.getCurrentFrame():preprocess(result) |
|||
⚫ | |||
if len < 5 then |
|||
-- Too short page name, do nothing |
-- Too short page name, do nothing |
||
return |
return mfd |
||
end |
end |
||
if page:sub(-4 |
if page:sub(-4) == '.css' then |
||
local basepage = page:sub(0, -5) |
local basepage = page:sub(0, -5) |
||
local sisterpage = basepage..'.js' |
local sisterpage = basepage..'.js' |
||
return p.makeMessage('css', mw.title.new(basepage), mw.title.new(sisterpage), 'js') |
return mfd .. p.makeMessage('css', mw.title.new(basepage), mw.title.new(sisterpage), 'js') |
||
end |
end |
||
if page:sub(-3 |
if page:sub(-3) == '.js' then |
||
local basepage = page:sub(0, -4) |
local basepage = page:sub(0, -4) |
||
local sisterpage = basepage..'.css' |
local sisterpage = basepage..'.css' |
||
return p.makeMessage('js', mw.title.new(basepage), mw.title.new(sisterpage), 'css') |
return mfd .. p.makeMessage('js', mw.title.new(basepage), mw.title.new(sisterpage), 'css') |
||
end |
end |
||
if page:sub(-5) == '.json' then |
|||
local basepage = page:sub(0, -6) |
|||
return mfd .. p.makeMessage('json', mw.title.new(basepage), mw.title.new(sisterpage), '') |
|||
end |
|||
return mfd |
|||
end |
end |
||
Line 48: | Line 61: | ||
if options.hidden ~= nil then |
if options.hidden ~= nil then |
||
-- Find dependents |
-- Find dependents |
||
for n, |
for n, conf in pairs(repo) do |
||
local deps = |
local deps = conf.options.dependencies and |
||
TableTools.listToSet(mw.text.split( |
TableTools.listToSet(mw.text.split(conf.options.dependencies, ',', false)) or {} |
||
local peers = |
local peers = conf.options.peers and |
||
TableTools.listToSet(mw.text.split( |
TableTools.listToSet(mw.text.split(conf.options.peers, ',', false)) or {} |
||
if deps['ext.gadget.'..name] ~= nil or peers[name] ~= nil then |
if deps['ext.gadget.'..name] ~= nil or peers[name] ~= nil then |
||
table.insert(dependents, '[[Special:Gadgets#gadget-'..n..'|'..n..']]') |
table.insert(dependents, '[[Special:Gadgets#gadget-'..n..'|'..n..']]') |
||
end |
end |
||
end |
end |
||
⚫ | |||
local usage = Gadgets.get_usage(name) |
|||
⚫ | |||
usage = "an unknown number of" |
|||
else |
|||
usage = lang:formatNum(usage) |
|||
end |
end |
||
return 'This page is loaded as a part of the ' .. |
return 'This page is loaded as a part of the ' .. |
||
Line 69: | Line 76: | ||
(#dependents > 0 and ' used by '..mw.text.listToText(dependents)..'.' or '.') or |
(#dependents > 0 and ' used by '..mw.text.listToText(dependents)..'.' or '.') or |
||
(options.default ~= nil and ', <b>which is enabled by default</b>.' or |
(options.default ~= nil and ', <b>which is enabled by default</b>.' or |
||
(', used by '.. |
(', used by '..lang:formatNum(Gadgets.get_usage(name))..' users. '))) .. |
||
'<br>' |
'<br>' |
||
end |
end |
||
Line 75: | Line 82: | ||
p.makeMessage = function(pagetype, basepage, sisterpage, sistertype) |
p.makeMessage = function(pagetype, basepage, sisterpage, sistertype) |
||
local text = '' |
local text = '' |
||
if basepage.namespace == 2 then |
if basepage.namespace == 2 and pagetype ~= 'json' then |
||
if skins[basepage.subpageText] ~= nil then |
if skins[basepage.subpageText] ~= nil then |
||
-- We are on a user skin file |
-- We are on a user skin file |
||
Line 84: | Line 91: | ||
local docpageExists = basepage.exists |
local docpageExists = basepage.exists |
||
local sisterpageExists = sisterpage.exists |
local sisterpageExists = sisterpage.exists |
||
local desc = pagetype == 'js' and '[[Wikipedia:User scripts|user script]]' or 'user stylesheet' |
|||
if docpageExists and sisterpageExists then |
if docpageExists and sisterpageExists then |
||
text = 'This |
text = 'This '..desc..' seems to have a documentation page at [['..basepage.fullText..']] and an accompanying .'..sistertype..' page at [['..sisterpage.fullText..']].' |
||
elseif docpageExists and not sisterpageExists then |
elseif docpageExists and not sisterpageExists then |
||
text = 'This |
text = 'This '..desc..' seems to have a documentation page at [['..basepage.fullText..']].' |
||
elseif sisterpageExists then |
elseif sisterpageExists then |
||
text = 'Documentation for this |
text = 'Documentation for this '..desc..' can be added at [['..basepage.fullText..']]. This user script seems to have an accompanying .'..sistertype..' page at [['..sisterpage.fullText..']]. ' |
||
else |
else |
||
text = 'Documentation for this |
text = 'Documentation for this '..desc..' can be added at [['..basepage.fullText..']].' |
||
end |
end |
||
end |
end |
||
Line 109: | Line 118: | ||
if text ~= '' then |
if text ~= '' then |
||
return |
return MessageBox.main('fmbox', { |
||
name = 'templatestyles', args = { src = 'Module:Script doc auto/styles.css' } |
|||
} .. MessageBox.main('fmbox', { |
|||
class = 'script-doc-auto-box', |
|||
id = 'mw-script-doc', |
id = 'mw-script-doc', |
||
type = 'system', |
type = 'system', |
||
image = '[[File:Template-info.svg|43x40px]]', |
image = '[[File:Template-info.svg|43x40px]]', |
||
style = 'background: var(--background-color-success-subtle, #d5fdf4); color: inherit; border: 1px solid var(--border-color-base, #a2ab91)', |
|||
text = text |
text = text |
||
}) |
}) |
||
end |
end |
||
return '' |
|||
end |
end |
||
Revision as of 00:24, 23 November 2024
![]() | 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 can only be edited by administrators because it is transcluded onto one or more cascade-protected pages. |
![]() | This module depends on the following other modules: |
![]() | This module uses TemplateStyles: |
This module is for use by {{Script doc auto}}.
Usage
{{#invoke:Script doc auto|main}}
No arguments are needed. For testing what the output would be when used on a specific page, you use |page=
param.
local MessageBox = require('Module:Message box')
local Gadgets = require('Module:Gadgets')
local Arguments = require('Module:Arguments')
local TableTools = require('Module:TableTools')
local p = {}
p.main = function(frame)
local args = Arguments.getArgs(frame)
return p.core(args.page or mw.title.getCurrentTitle().fullText)
end
p.core = function(page)
local len = page:len()
local mfd = ''
local content = mw.title.new(page).content
local result = content:match("/%* ({{mfd.-}})")
if result then
mfd = mw.getCurrentFrame():preprocess(result)
end
if len < 5 then
-- Too short page name, do nothing
return mfd
end
if page:sub(-4) == '.css' then
local basepage = page:sub(0, -5)
local sisterpage = basepage..'.js'
return mfd .. p.makeMessage('css', mw.title.new(basepage), mw.title.new(sisterpage), 'js')
end
if page:sub(-3) == '.js' then
local basepage = page:sub(0, -4)
local sisterpage = basepage..'.css'
return mfd .. p.makeMessage('js', mw.title.new(basepage), mw.title.new(sisterpage), 'css')
end
if page:sub(-5) == '.json' then
local basepage = page:sub(0, -6)
return mfd .. p.makeMessage('json', mw.title.new(basepage), mw.title.new(sisterpage), '')
end
return mfd
end
local skins = {
['common'] = true,
['vector-2022'] = true,
['vector'] = true,
['timeless'] = true,
['minerva'] = true,
['monobook'] = true,
['modern'] = true,
['cologneblue'] = true
}
p.gadget_text = function(name, repo)
local lang = mw.getContentLanguage()
local options = repo[name].options
local dependents = {}
if options.hidden ~= nil then
-- Find dependents
for n, conf in pairs(repo) do
local deps = conf.options.dependencies and
TableTools.listToSet(mw.text.split(conf.options.dependencies, ',', false)) or {}
local peers = conf.options.peers and
TableTools.listToSet(mw.text.split(conf.options.peers, ',', false)) or {}
if deps['ext.gadget.'..name] ~= nil or peers[name] ~= nil then
table.insert(dependents, '[[Special:Gadgets#gadget-'..n..'|'..n..']]')
end
end
end
return 'This page is loaded as a part of the ' ..
'[[Special:Gadgets#gadget-'..name..'|'..name..']] gadget' ..
(options.hidden ~= nil and ', a hidden gadget'..
(#dependents > 0 and ' used by '..mw.text.listToText(dependents)..'.' or '.') or
(options.default ~= nil and ', <b>which is enabled by default</b>.' or
(', used by '..lang:formatNum(Gadgets.get_usage(name))..' users. '))) ..
'<br>'
end
p.makeMessage = function(pagetype, basepage, sisterpage, sistertype)
local text = ''
if basepage.namespace == 2 and pagetype ~= 'json' then
if skins[basepage.subpageText] ~= nil then
-- We are on a user skin file
text = 'The accompanying .'..sistertype..' page for this skin '..
(sisterpage.exists and 'is' or 'can be added')..' at [['..sisterpage.fullText..']].'
else
-- We are on some script page, not a user skin file
local docpageExists = basepage.exists
local sisterpageExists = sisterpage.exists
local desc = pagetype == 'js' and '[[Wikipedia:User scripts|user script]]' or 'user stylesheet'
if docpageExists and sisterpageExists then
text = 'This '..desc..' seems to have a documentation page at [['..basepage.fullText..']] and an accompanying .'..sistertype..' page at [['..sisterpage.fullText..']].'
elseif docpageExists and not sisterpageExists then
text = 'This '..desc..' seems to have a documentation page at [['..basepage.fullText..']].'
elseif sisterpageExists then
text = 'Documentation for this '..desc..' can be added at [['..basepage.fullText..']]. This user script seems to have an accompanying .'..sistertype..' page at [['..sisterpage.fullText..']]. '
else
text = 'Documentation for this '..desc..' can be added at [['..basepage.fullText..']].'
end
end
elseif basepage.namespace == 8 then
if basepage.text:find('^Gadget-') ~= nil then
local gadgetRepo = Gadgets.parse()
local shortName = basepage.text:gsub('^Gadget%-', '') .. '.' .. pagetype
for name, config in pairs(gadgetRepo) do
if TableTools.inArray(config.pages, shortName) then
text = text .. p.gadget_text(name, gadgetRepo)
end
end
end
end
if text ~= '' then
return MessageBox.main('fmbox', {
id = 'mw-script-doc',
type = 'system',
image = '[[File:Template-info.svg|43x40px]]',
style = 'background: var(--background-color-success-subtle, #d5fdf4); color: inherit; border: 1px solid var(--border-color-base, #a2ab91)',
text = text
})
end
return ''
end
return p