Модуль:High-use
Зовнішній вигляд
| Цей модуль позначений як К:реліз, готовий до загального вжитку (276). Він досягнув стадії готовності й вважається, що вільний від помилок і може використовуватись всюди, де знадобиться. Його можна згадувати на довідкових сторінках та інших сторінках Вікіпедії як можливість для навчання новачків. Аби зменшити навантаження на сервери та некоректний показ сторінок, його потрібно вдосконалювати через тестування у пісочниці[en], а не через застосування спроб і помилок. |
| Цей модуль позначено як К:такий, що потребує захищеного статусу (133). Завершені модулі використовуються в дуже великій кількості статей, або часто використовуються як підстановки. Позаяк акти вандалізму або помилки можуть вплинути на багато сторінок і навіть незначне редагування призведе до істотного навантаження на сервери, вони підлягають захисту від редагувань. |
| Цей модуль Lua використовується на близько 3900 сторінках і його зміни будуть дуже помітними. Будь ласка, перевіряйте будь-які зміни на підсторінках /пісочниці та /тестів цього модуля, або у вашій пісочниці модуля, та зважайте на обговорення змін на сторінці обговорення перед їхнім впровадженням. |
| Цей модуль залежить від наступних модулів: |
Впроваджує {{High-use}}. Використовує значення, що оновлюються ботом, з підсторінок Module:Transclusion_count/data/, коли наявні.
Використання
{{#invoke:High-use|main|1=кількість включень|2=сторінка обговорення або використання запису із +|all-pages=|info=|demo=|form=|expiry=}}
кількість включень: Перший параметр є статичним числом кількості включень шаблону або словом «risk» (без лапок), щоб відобразити текст «дуже великій кількості сторінок» замість справжнього значення. Значення цього параметра ігнорується, якщо наявні дані включень для цієї сторінки.сторінка обговорення або використання запису із +: Другий параметр є перевантаженим. Якщо встановлено значення «yes» (без лапок), то кількість включень відобразиться як «## ###+» замість «близько ## ###». Коли використано цей метод запису, то округлення відбувається в меншу сторону замість округлення до найближчого числа відповідною кількістю значущих цифр. Коли вказано будь-яке інше не пусте значення, то буде замінено посилання, що веде на сторінку обговорення шаблону, на значення, яке вказане в параметрі (наприклад,2=ВП:КТПвставить посилання на ВП:КТП),|all-pages=yes: Також відображатиме відсоток скільки сторінок використовують шаблон від усієї кількості сторінок. Це повинно використовуватися лише для шаблонів з дуже великою кількістю включень, а відсоток відображуватиметься лише, якщо він більший за 1%.|info=додаткова інформація: Коли вказано непусте значення, то вставляється додаткова інформація в текст шаблону, якщо шаблон має більше ніж 20 000 включень або вказано значення «risk» в параметрі 1.|demo=Назва_шаблону: буде використовувати кількість включень для шаблону Шаблон:Назва_шаблону замість визначення назви шаблону зі сторінки, де використано цей модуль. Капіталізація має точно відповідати значенню, що вказано в Спеціальна:Покажчик за початком назви/Module:Transclusion_count/data/.|form=: Коли встановлено значення «editnotice», то повідомлення відображається за використанням {{editnotice}} замість {{ombox}}.|expiry=: Встановлює параметр|expiry=для {{editnotice}}.|system=в системних повідомленнях: якщо його зазначити, то цей модуль виглядатиме як {{Використовується в системі}}.|fetch=: якщо вказано false, то модуль не намагатиметься отримати дані включень з модуля Модуль:Transclusion count.
Інші функції
- num
- Створює текст і посилання на toolforge з приводу кількості включень.
- risk
- При виклику цієї функції, якщо передано
riskв перший неназваний параметр або є вже більше ніж 100k включень, то вона повернеrisk. - text
- Повертає текст тіла цього шаблону, зі значенням кількості включень або nil.
{{#invoke:High-use|назва функції}}
Документація вище включена з Модуль:High-use/документація. (ред. | історія)
Дописувачі можуть експериментувати на підсторінках пісочниці (ред. | різн.) та тести (створити) цього модуля.
Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки.
Дописувачі можуть експериментувати на підсторінках пісочниці (ред. | різн.) та тести (створити) цього модуля.
Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки.
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local _fetch = require('Module:Transclusion_count')._fetch -- _fetch looks at the 'demo' argument
local yesno = require('Module:Yesno')
local lang_obj = mw.getContentLanguage() -- this here because the language object is used multiple places in the module
local large_count_cutoff = 20000
local approx_num_total_pages = 5300000
local user_subpage_info_page = 'Вікіпедія:Підсторінки#Як створювати користувацькі підсторінки'
local sandbox_module_page = 'Модуль:Пісочниця'
local system_messages_cat = 'Сторінки, що використані в системних повідомленнях та потребують захисту'
local sandbox_word = 'пісочниця'
local testcases_word = 'тести'
local doc_word = 'документація'
local function count_from_args(args)
if tonumber(args.count) then -- check if function has already been used
return tonumber(args.count) -- early exit if so
end
local count
if yesno(args['fetch']) ~= false then
count = _fetch(args) -- fetch transclusion count
end
-- use explicitly-provided count when fetch fails
if count == nil and args[1] ~= nil and args[1] ~= '' then
-- convert local language number string to a number understandable by Lua
count = mw.ustring.gsub(args[1], '+$', '')
count = lang_obj:parseFormattedNumber(args[1])
end
-- in case someone writes a non-positive number
if count and count > 0 then
return count
end
return nil
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
local function risk_boolean(args)
if args.risk == true or args.risk == false then
return args.risk
elseif args[1] == 'risk' then
return true
else
local count = count_from_args(args)
if count and count >= large_count_cutoff then
return true
end
end
return false
end
-- function retained for backwards compatibility
function p._risk(args)
return risk_boolean(args) and 'risk' or ''
end
-- function retained for backwards compatibility
function p.risk(frame)
return p._risk(getArgs(frame))
end
-- count and no_percent arguments retained for backwards compatibility
function p._num(args, count, no_percent)
if count == nil then
count = count_from_args(args)
end
args.count = count
args.risk = risk_boolean(args)
-- Build output string
local return_value = ''
if args.count == nil and args.risk then
return 'дуже великій кількості сторінок'
elseif args.count == nil then
return 'багатьох сторінках'
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if args.count >= large_count_cutoff then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(args.count)) - sigfig + 1
-- Round and insert 'approximately' or '+' when appropriate
if yesno(args[2]) == true or (type(args[1]) == 'string' and (mw.ustring.sub(args[1], -1) == '+')) then
-- Round down
return_value = string.format('%s+ сторінках', lang_obj:formatNum(math.floor( (args.count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format('близько %s сторінках', lang_obj:formatNum(math.floor( (args.count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
no_percent = yesno(no_percent or args['no-percent'])
if args.count and args.count >= approx_num_total_pages/100 and not no_percent then
local num_total_pages = mw.getCurrentFrame():callParserFunction('NUMBEROFPAGES', 'R')
local total_percent = math.floor( ( ( args.count/num_total_pages ) * 100) + 0.5)
if total_percent >= 1 then
return_value = string.format('%s або близько %s%% всіх сторінок', return_value, total_percent)
end
end
end
return return_value
end
-- used by [[Template:Stub documentation]] and other pages
-- count argument retained for backwards compatibility
function p.num(frame, count)
return p._num(getArgs(frame), count)
end
-- count argument retained for backwards compatibility
function p._text(args, count)
--[=[
Only show the information about how this template gets updated
if someone is actually editing the page and maybe trying to update the count.
]=]
local bot_text = (mw.getCurrentFrame():preprocess('{{REVISIONID}}') == '') and ("\n\n----\n'''Повідомлення попереднього перегляду''':" .. ' Лічильник кількості включення оновлюється автоматично ([[Шаблон:Часте використання/документація#Технічні подробиці|див. документацію]]).') or ''
if count == nil then
count = count_from_args(args)
end
args.count = count
args.risk = risk_boolean(args)
-- trim /doc, /sandbox and /testcases
local title = args.title or (args.demo and args.demo ~= '' and mw.title.new(args.demo, 'Template')) or mw.title.getCurrentTitle()
if title.subpageText == doc_word or title.subpageText == sandbox_word or title.subpageText == testcases_word then
title = title.basePageTitle
end
-- use /testcases of base template
local testcases_page = mw.title.new(title.prefixedText .. '/' .. testcases_word)
-- exists is expensive
while testcases_page.basePageTitle.isSubpage and not testcases_page.exists do
testcases_page = mw.title.new(testcases_page.basePageTitle.basePageTitle.prefixedText .. '/' .. testcases_word)
end
local systemMessages = (args['system'] or '') ~= ''
-- This retrieves the project URL automatically to simplify localization.
local templateCount = ('на [https://linkcount.toolforge.org/?project=%s&page=%s#transclusions %s]'):format(
title:fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p._num(args))
local used_on_text = "'''Цей " .. (title:inNamespace('Module') and 'модуль Lua' or 'шаблон') .. ' використовується '
if systemMessages then
used_on_text = used_on_text .. args['system'] ..
((args.count and args.count > 2000) and ("''', and " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ('підсторінках [[%s/пісочниця|/пісочниці]] та [[%s|/тестів]] цього %s, або у ваш%s [[%s]]'):format(
title.fullText,
testcases_page.fullText,
title:inNamespace('Module') and 'модуля' or 'шаблону',
title:inNamespace('Module') and "ій" or "ому",
title:inNamespace('Module') and (sandbox_module_page .. '|пісочниці модуля') or (user_subpage_info_page .. '|особистому просторі')
)
local infoArg = args['info'] ~= '' and args['info']
if (systemMessages or args.risk) then
local info = '.'
if systemMessages then
info = info .. '<br />Його зміни можуть призвести до миттєвих змін у користувацькому інтерфейсі ' .. mw.site.namespaces.Project.name .. '.'
end
if infoArg then
info = info .. '<br />' .. infoArg
end
sandbox_text = info .. '<br /> Для уникнення великомасштабних збоїв' ..
(args.count and args.count >= large_count_cutoff and ' та непотрібного навантаження на сервер' or '') .. -- should this use args.risk?
', будь-які зміни спочатку потрібно перевірити на ' .. sandbox_text ..
'. Потім перевірені зміни можуть бути впроваджені на цій сторінці єдиним редагуванням. '
else
sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' Й') or ' і й') ..
'ого зміни будуть дуже помітними. Будь ласка, перевіряйте будь-які зміни на ' .. sandbox_text
end
-- local discussion_text = systemMessages and 'Будь ласка, обговорюйте будь-які зміни ' or ', та зважайте на обговорення змін ' (реалізація англ. вікі)
local discussion_text = (systemMessages or args.risk) and 'Будь ласка, обговорюйте будь-які зміни ' or ', та зважайте на обговорення змін '
if args[2] ~= nil and args[2] ~= '' and yesno(args[2]) == nil then
discussion_text = string.format('%sна [[%s]]', discussion_text, args[2])
else
discussion_text = string.format('%sна [[%s|сторінці обговорення]]', discussion_text, title.talkPageTitle.fullText)
end
return used_on_text .. sandbox_text .. discussion_text .. ' перед їхнім впровадженням.' .. bot_text
end
-- used by [[Template:R from high-use template]]
-- count argument retained for backwards compatibility
function p.text(frame, count)
return p._text(getArgs(frame), count)
end
-- nocat argument retained for backwards compatibility
function p._main(args, nocat)
args.count = count_from_args(args)
args.risk = risk_boolean(args)
args.title = (args.demo and args.demo ~= '' and mw.title.new(args.demo, 'Template')) or mw.title.getCurrentTitle()
local image = 'Ambox warning yellow.svg'
local type_param = 'style'
local epilogue = ''
if args['system'] and args['system'] ~= '' then
image = 'Ambox important.svg'
type_param = 'content'
if yesno(nocat or args['nocat']) ~= true and not args.title.isRedirect then
local protection_action = (args.title:inNamespace('File') and 'upload') or 'edit'
local protection_level = require('Module:Effective protection level')._main(protection_action, args.title.fullText)
if protection_level ~= 'sysop' and protection_level ~= 'interfaceadmin' then
epilogue = mw.getCurrentFrame():expandTemplate {
title = 'sandbox other',
args = {
[2] = '[[Category:' .. system_messages_cat .. ']]'
}
}
end
end
elseif args.risk then
image = 'Ambox warning orange.svg'
type_param = 'content'
end
image = '[[File:' .. image .. '|40px|alt=Увага|link=]]'
if args['form'] == 'editnotice' then
return mw.getCurrentFrame():expandTemplate{
title = 'editnotice',
args = {
['image'] = image,
['text'] = p._text(args),
['expiry'] = (args['expiry'] or '')
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p._text(args),
expiry = (args['expiry'] or '')
}) .. epilogue
end
end
function p.main(frame)
return p._main(getArgs(frame))
end
return p