Модуль:Script doc auto (Bk;rl,&Script doc auto)
Перейти к навигации
Перейти к поиску
Этот модуль оценён как бета-версия. Он готов для широкого применения, но должен применяться с осторожностью. |
Модуль на основе Module:Script doc auto в английской Википедии. Используется для создания части сообщения MediaWiki:Clearyourcache. Используется там без параметров ({{#invoke:Script doc auto|main}}
). Для тестирования поддерживает параметр page
.
Примеры
Выводит в пространствах «Участник/Участница» и «Медиавики» сообщения в зависимости от их цели.
Гаджеты
{{#invoke:Script doc auto|main|page=MediaWiki:Gadget-edittop.js}}
→ JS-код ниже относится к гаджету «Добавить ссылку „[править]“ редактирования первой секции статьи (преамбулы)» (править описание). Он включён по умолчанию.{{#invoke:Script doc auto|main|page=MediaWiki:Gadget-iwrm.css}}
→ CSS-код ниже относится к гаджету «Интерфейс для замены прямых интервики-ссылок в полуавтоматическом режиме для проекта Check Wikipedia» (править описание). Связанный JS-файл: MediaWiki:Gadget-iwrm.js. Его использует около 200 учётных записей.{{#invoke:Script doc auto|main|page=MediaWiki:Gadget-markadmins.json}}
→ JSON-код ниже относится к гаджету «Показать флаги администраторов, бюрократов и т. д. рядом со ссылками на личные страницы участников» (править описание). Связанный JS-файл: MediaWiki:Gadget-markadmins.js. Связанный CSS-файл: MediaWiki:Gadget-markadmins.css. Его использует около 16 100 учётных записей.{{#invoke:Script doc auto|main|page=MediaWiki:Gadget-articleStats.js}}
→ JS-код ниже относится к гаджету «Гаджет проектов „ХС“ и „ИС“: статистика размера текста статей с учётом требований проектов» (править описание). Его использует около 1600 учётных записей.{{#invoke:Script doc auto|main|page=MediaWiki:Group-user.js}}
→ JS-код ниже включён по умолчанию у всех участников в группе «Участники». Связанный CSS-файл: MediaWiki:Group-user.css.
Общие скрипты
{{#invoke:Script doc auto|main|page=MediaWiki:Common.js}}
→ JS-код ниже относится ко всем темам оформления стационарной версии Википедии. CSS-файл: MediaWiki:Common.css.{{#invoke:Script doc auto|main|page=MediaWiki:Mobile.css}}
→ CSS-код ниже относится к мобильной версии Википедии. CSS в мобильной версии загружается асинхронно.{{#invoke:Script doc auto|main|page=MediaWiki:Vector.js}}
→ JS-код ниже относится к теме оформления «Вектор, устаревшая (2010)». CSS-файл для этой темы: MediaWiki:Vector.css.
Личные скрипты
{{#invoke:Script doc auto|main|page=Участник:Stjn/common.js}}
→ JS-код ниже относится ко всем темам оформления (включая мобильную версию) Википедии. CSS-файл: Участник:Stjn/common.css.{{#invoke:Script doc auto|main|page=Участник:Stjn/mobile.css}}
→{{#invoke:Script doc auto|main|page=Участник:Stjn/monobook.css}}
→ CSS-код ниже относится к теме оформления «MonoBook». JS-файл для этой темы: Участник:Stjn/monobook.js.{{#invoke:Script doc auto|main|page=Участник:Serhio Magpie/instantDiffs.css}}
→ У этого CSS-кода есть связанный JS-файл: Участник:Serhio Magpie/instantDiffs.js.{{#invoke:Script doc auto|main|page=Участник:Jack who built the house/alignTemplateParameters.js}}
→ У этого JS-кода есть документация: Участник:Jack who built the house/alignTemplateParameters.
require( 'strict' )
local Gadgets = require( 'Module:Gadgets' )
local Arguments = require( 'Module:Arguments' )
local TableTools = require( 'Module:TableTools' )
local p = {}
local function parsePageName( page )
local prefixStart, prefixEnd = mw.ustring.find( tostring( page ), '%.[cj]ss?o?n?$' )
return prefixStart, prefixEnd, prefixStart ~= nil and mw.ustring.sub( tostring( page ), prefixStart + 1, prefixEnd ) or ''
end
local function isSkinPage( name, includeMobile )
name = name:lower()
local skinMsg = mw.message.new( 'skinname-' .. name )
local isMobile = includeMobile and name == 'mobile' or false
return isMobile or name == 'common' or skinMsg:exists(), skinMsg
end
local function isGroupPage( pageName )
pageName = pageName:gsub( '^Group%-', '' ):lower()
local groupMsg = mw.message.new( 'group-' .. pageName )
return groupMsg:exists(), groupMsg
end
local function getPageType( pagetype, ending )
ending = ending and ending .. ' ' or ' ниже '
return mw.ustring.upper( pagetype ) .. '-код' .. ending
end
local function formatDesc( desc )
local frame = mw.getCurrentFrame()
-- return ': <i>' .. frame:preprocess( desc ) .. '</i>'
local nestedQuotes = require( 'Модуль:Вложенные кавычки' )._main
return string.format( ' <i>«%s»</i>', nestedQuotes( frame:preprocess( desc ) ) )
end
p._makeRelatedMessage = function( pageType, sisterPage )
if sisterPage.exists then
return string.format(
' Связанный %s-файл: [[%s]].',
mw.ustring.upper( pageType ),
tostring( sisterPage )
)
end
return ''
end
p._makeUserMessage = function( pagetype, basePage, sisterPage )
local text = ''
if basePage.exists then
text = text .. string.format( 'есть документация: [[%s]].', tostring( basePage ) )
end
if sisterPage.exists then
local message = 'Связанный %s-файл: [[%s]].'
if not basePage.exists then
message = 'есть ' .. mw.ustring.lower( message )
end
local _, _, sisterType = parsePageName( sisterPage )
text = text .. string.format(
message,
mw.ustring.upper( sisterType ),
tostring( sisterPage )
)
end
if text ~= '' then
text = 'У этого ' .. getPageType( pagetype, 'а' ) .. text
end
return text
end
p._makeGroupMessage = function( pageType, pageName, name, sisterPage )
local text = getPageType( pageType )
local group = pageName:gsub( '^Group%-', '' ):lower()
local _, _, sisterType = parsePageName( sisterPage )
return text .. string.format(
'<b>включён по умолчанию</b> у всех участников в [[Special:ListGroupRights#%s|группе «%s»]].%s',
group,
name:plain(),
p._makeRelatedMessage( sisterType, sisterPage )
)
end
p._makeSkinMessage = function( pagetype, skin, name, sisterPage, isUserPage )
local text = getPageType( pagetype )
local _, _, sisterType = parsePageName( sisterPage )
local mainPageUrl = mw.uri.fullUrl( mw.message.new( 'mainpage' ):plain(), 'useskin=' .. skin )
if skin == 'common' then
text = text .. string.format(
'относится ко всем темам оформления %s Википедии. %s-файл: [[%s]].',
isUserPage and '(включая мобильную версию)' or 'стационарной версии',
mw.ustring.upper( sisterType ),
tostring( sisterPage )
)
elseif skin == 'mobile' and pagetype == 'css' then
text = text .. string.format(
'относится к мобильной версии Википедии. CSS в мобильной версии загружается асинхронно.',
mw.ustring.upper( sisterType ),
tostring( sisterPage )
)
else
text = text .. string.format(
'относится к теме оформления [%s «%s»]. %s-файл для этой темы: [[%s]].',
tostring( mainPageUrl ),
name:plain(),
mw.ustring.upper( sisterType ),
tostring( sisterPage )
)
end
return text
end
p._makeGadgetMessage = function( pagetype, name, repo )
local obj = repo[ name ]
local options = obj.options
local text = getPageType( pagetype )
local gadgetLink = 'Special:Gadgets#gadget-' .. name
local descPage = mw.title.new( 'MediaWiki:Gadget-' .. name )
local gadgetType = options.hidden ~= nil and 'к скрытому гаджету' or 'к гаджету'
if descPage.exists then
local gadgetDesc = formatDesc( descPage:getContent() )
local descEditUrl = mw.uri.fullUrl( tostring( descPage ), 'action=edit' )
text = text .. string.format(
'[[%s|относится %s]]%s<span class="group-engineer-show group-sysop-show"> ([%s править описание])</span>.',
gadgetLink,
gadgetType,
gadgetDesc,
tostring( descEditUrl )
)
else
text = text .. string.format( 'относится %s [[%s|%s]].', gadgetType, gadgetLink, name )
end
for _, page in ipairs(obj.pages) do
local relatedName = 'MediaWiki:Gadget-' .. page
local _, _, relatedType = parsePageName( relatedName )
if pagetype ~= relatedType then
text = text .. p._makeRelatedMessage( relatedType, mw.title.new( relatedName ) )
end
end
if options.default ~= nil then
if options.categories == nil then
text = text .. ' <b>Он включён по умолчанию.</b>'
end
else
local usageNum = Gadgets.get_usage( name )
local Round = require( 'Module:Math' )._round
if usageNum ~= -1 then
local lang = mw.getContentLanguage()
text = text .. string.format(
' Его использует [[Special:GadgetUsage|около %s учётных записей]].',
lang:formatNum( Round( usageNum / 100, 0 ) * 100 )
)
end
end
if options.categories ~= nil then
text = text .. ' Он <b>вызывается по умолчанию</b> на страницах в категории '
text = text .. string.format( '[[:Category:%s|%s]]', options.categories, options.categories )
text = text .. '.'
end
return text
end
p._makeMessage = function( pagetype, basepage, sisterpage )
local text = ''
-- User pages
if basepage.namespace == 2 then
local skinName = basepage.subpageText:lower()
local isSkinPage, skinMsg = isSkinPage( skinName )
if isSkinPage then
text = p._makeSkinMessage( pagetype, skinName, skinMsg, sisterpage, true )
else
text = p._makeUserMessage( pagetype, basepage, sisterpage )
end
end
-- MediaWiki namespace
if 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 = p._makeGadgetMessage( pagetype, name, gadgetRepo )
end
end
end
local skinName = basepage.text:lower()
local isSkinPage, skinMsg = isSkinPage( skinName, true )
if isSkinPage then
text = p._makeSkinMessage( pagetype, skinName, skinMsg, sisterpage )
end
local isGroupPage, groupMsg = isGroupPage( basepage.text )
if isGroupPage then
text = p._makeGroupMessage( pagetype, basepage.text, groupMsg, sisterpage )
end
end
return text
end
p._main = function( page )
local len = mw.ustring.len( page )
if len < 4 then
-- Too short page name, do nothing
return ''
end
local prefixStart, prefixEnd, lang = parsePageName( page )
if prefixStart ~= nil then
local basepage = mw.ustring.sub( page, 0, prefixStart - 1 )
local sisterpage = basepage .. ( lang == 'js' and '.css' or '.js' )
return p._makeMessage( lang, mw.title.new( basepage ), mw.title.new( sisterpage ) )
end
return ''
end
p.main = function( frame )
local args = Arguments.getArgs( frame )
return p._main( args.page or mw.title.getCurrentTitle().fullText )
end
return p