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()
if len < 4 then
-- Too short page name, do nothing
return ''
end
if page:sub(-4, -1) == '.css' then
local basepage = page:sub(0, -5)
local sisterpage = basepage..'.js'
return p.makeMessage('css', mw.title.new(basepage), mw.title.new(sisterpage), 'js')
end
if page:sub(-3, -1) == '.js' then
local basepage = page:sub(0, -4)
local sisterpage = basepage..'.css'
return p.makeMessage('js', mw.title.new(basepage), mw.title.new(sisterpage), 'css')
end
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, c in pairs(repo) do
local deps = c.options.dependencies and
TableTools.listToSet(mw.text.split(c.options.dependencies, ',', false)) or {}
local peers = c.options.peers and
TableTools.listToSet(mw.text.split(c.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
local usage = Gadgets.get_usage(name)
if usage == -1 then
usage = "مجموعة مستخدمين"
else
local plural = require('Module:Plural')
usage = plural(usage, {'مستخدم واحد', 'مستخدمان', 'مستخدمون', 'مستخدمًا', 'مستخدمٍ'})
end
return 'هذه الصفحة هي جزء من الإضافة ' ..
' «[[Special:Gadgets#gadget-'..name..'|'..name..']]»' ..
(options.hidden ~= nil and '، هذه الإضافة مخفية '..
(#dependents > 0 and ' يستعملها '..mw.text.listToText(dependents)..'.' or '.') or
(options.default ~= nil and '، <b>مفعلة لجميع المستخدمين</b>.' or
('، يستعملها ' .. usage .. '.'))) ..
'<br>'
end
p.makeMessage = function(pagetype, basepage, sisterpage, sistertype)
local text = ''
if basepage.namespace == 2 then
if skins[basepage.subpageText] ~= nil then
-- We are on a user skin file
text = 'الملف المصاحب .'..sistertype..' لهذا المظهر '..
(sisterpage.exists and 'موجود' or 'يمكن إضافته إلى')..' في [['..sisterpage.fullText..']].'
else
-- We are on some script page, not a user skin file
local docpageExists = basepage.exists
local sisterpageExists = sisterpage.exists
if docpageExists and sisterpageExists then
text = 'يبدو بأن [[Wikipedia:User scripts|سكربت المستخدم]] هذا مرفوق بـصفحة توثيق في [['..basepage.fullText..']] و مرفق بملف مصاحب .'..sistertype..' في [['..sisterpage.fullText..']].'
elseif docpageExists and not sisterpageExists then
text = 'يبدو بأن [[Wikipedia:User scripts|سكربت المستخدم]] هذا مرفوق بـصفحة توثيق في [['..basepage.fullText..']].'
elseif sisterpageExists then
text = 'يمكن توفير توثيق ل[[Wikipedia:User scripts|سكربت المستخدم]] هذا في الصفحة : [['..basepage.fullText..']]. لهذا السكربت مرفوق بـ .'..sistertype..' في [['..sisterpage.fullText..']]. '
else
text = 'يمكن توفير توثيق ل[[Wikipedia:User scripts|سكربت المستخدم]] هذا في الصفحة : [['..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 mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Script doc auto/styles.css' }
} .. MessageBox.main('fmbox', {
class = 'script-doc-auto-box',
id = 'mw-script-doc',
type = 'system',
image = '[[ملف:Template-info.svg|43x40px]]',
text = text
})
end
end
return p