新闻工作者援助项目实施办法今年修订 申报工作启动
[перев?рена верс?я] | [перев?рена верс?я] |
шо то було? |
Repakr (обговорення | внесок) Додано п?дтримку виклику з модуля, а також додано п?дтримку перев?рки нейменованих параметр?в, поправлено в?дступи ? трохи реорган?зовано код на ман?р англ?йського модуля. ? |
||
(Не показано 3 пром?жн? верс?? 3 користувач?в) | |||
Рядок 6: | Рядок 6: | ||
local function trim(s) |
local function trim(s) |
||
return s:match('^%s*(.-)%s*$') |
|||
end |
end |
||
local function isnotempty(s) |
local function isnotempty(s) |
||
return s and trim(s) ~= '' |
|||
end |
end |
||
local function clean(text) |
|||
function p.check (frame) |
|||
-- Return text cleaned for display and truncated if too long. |
|||
local args = frame.args |
|||
-- Strip markers are replaced with dummy text representing the original wikitext. |
|||
local pargs = frame:getParent().args |
|||
local pos, truncated |
|||
local ignoreblank = isnotempty(frame.args['ignoreblank']) |
|||
local function truncate(text) |
|||
local showblankpos = isnotempty(frame.args['showblankpositional']) |
|||
if truncated then |
|||
local knownargs = {} |
|||
return '' |
|||
local unknown = frame.args['unknown'] or '<s>|_VALUE_=</s>, '-- якщо не задано |
|||
end |
|||
local preview = frame.args['preview'] or '<s>|_VALUE_=</s>, '-- завжди попередж. в прев'ю |
|||
if mw.ustring.len(text) > 25 then |
|||
local values = {} |
|||
truncated = true |
|||
local res = {} |
|||
text = mw.ustring.sub(text, 1, 25) .. '...' |
|||
local regexps = {} |
|||
end |
|||
local revisionid = isnotempty( frame:preprocess( "{{REVISIONID}}" ) ) |
|||
return mw.text.nowiki(text) |
|||
local function nounderscore( pargs ) |
|||
end |
|||
for k, v in pairs(pargs) do |
|||
local parts = {} |
|||
k = mw.ustring.gsub(k, '[_]', ' ') |
|||
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do |
|||
end |
|||
pos = remainder |
|||
return pargs |
|||
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>') |
|||
end |
|||
end |
|||
-- create the list of known args, regular expressions, and the return string |
|||
table.insert(parts, truncate(text:sub(pos or 1))) |
|||
for k, v in pairs(args) do |
|||
return table.concat(parts) |
|||
if type(k) == 'number' then |
|||
end |
|||
v = trim(v) |
|||
knownargs[v] = 1 |
|||
function p._check(args, pargs) |
|||
elseif k:find('^regexp[1-9][0-9]*$') then |
|||
if type(args) ~= "table" or type(pargs) ~= "table" then |
|||
table.insert(regexps, '^' .. v .. '$') |
|||
-- TODO: error handling |
|||
end |
|||
return |
|||
end |
|||
end |
|||
if not isnotempty(preview) then preview = unknown end |
|||
-- loop over the parent args, and make sure they are on the list |
|||
for k, v in pairs(pargs) do |
|||
local unknown = args['unknown'] or '<s>|_VALUE_=</s>, '-- якщо не задано |
|||
if type(k) == 'string' and knownargs[k] == nil then |
|||
local preview = args['preview'] or '<s>|_VALUE_=</s>, '-- завжди попередж. в прев'ю |
|||
local knownflag = false |
|||
local revisionid = isnotempty( mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) ) |
|||
for i, regexp in ipairs(regexps) do |
|||
local function nounderscore( pargs ) |
|||
if mw.ustring.match(k, regexp) then |
|||
for k, v in pairs(pargs) do |
|||
knownflag = true |
|||
k = mw.ustring.gsub(k, '[_]', ' ') |
|||
end |
|||
return pargs |
|||
end |
|||
if not knownflag and ( not ignoreblank or isnotempty(v) ) then |
|||
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?') |
|||
-- create the list of known args, regular expressions, and the return string |
|||
table.insert(values, k) |
|||
local knownargs = {} |
|||
end |
|||
local regexps = {} |
|||
elseif type(k) == 'number' and knownargs[tostring(k)] == nil and ( showblankpos or isnotempty(v) ) then |
|||
for k, v in pairs(args) do |
|||
local vlen = mw.ustring.len(v) |
|||
if type(k) == 'number' then |
|||
v = mw.ustring.sub(v, 1, (vlen < 25) and vlen or 25) |
|||
v = trim(v) |
|||
knownargs[v] = 1 |
|||
table.insert(values, k .. ' = ' .. v .. ((vlen >= 25) and ' ...' or '')) |
|||
elseif k:find('^regexp[1-9][0-9]*$') then |
|||
end |
|||
table.insert(regexps, '^' .. v .. '$') |
|||
end |
|||
end |
|||
-- add resuls to the output tables |
|||
end |
|||
if #values > 0 then |
|||
if not isnotempty(preview) then preview = unknown end |
|||
-- loop over the parent args, and make sure they are on the list |
|||
local ignoreblank = isnotempty(args['ignoreblank']) |
|||
local showblankpos = isnotempty(args['showblankpositional']) |
|||
local values = {} |
|||
for k, v in pairs(pargs) do |
|||
if type(k) == 'string' and knownargs[k] == nil then |
|||
local knownflag = false |
|||
for _, regexp in ipairs(regexps) do |
|||
if mw.ustring.match(k, regexp) then |
|||
knownflag = true |
|||
break |
|||
end |
|||
end |
|||
if not knownflag and ( not ignoreblank or isnotempty(v) ) then |
|||
table.insert(values, clean(k)) |
|||
end |
|||
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then |
|||
local knownflag = false |
|||
for _, regexp in ipairs(regexps) do |
|||
if mw.ustring.match(tostring(k), regexp) then |
|||
knownflag = true |
|||
break |
|||
end |
|||
end |
|||
if not knownflag and ( showblankpos or isnotempty(v) ) then |
|||
table.insert(values, k .. ' = ' .. clean(v)) |
|||
end |
|||
end |
|||
end |
|||
-- add resuls to the output tables |
|||
local res = {} |
|||
if #values > 0 then |
|||
if not revisionid then unknown = preview |
|||
end |
|||
for k, v in pairs(values) do |
for k, v in pairs(values) do |
||
-- Fix odd bug for | = which gets stripped to the empty string and |
-- Fix odd bug for | = which gets stripped to the empty string and |
||
-- breaks category links |
-- breaks category links |
||
if v == '' then v = ' ' end |
|||
local r = unknown:gsub('_VALUE_', v) |
|||
table.insert(res, r) |
|||
end |
end |
||
if not revisionid then |
if not revisionid then |
||
table.insert(res, 1, '<div class="hatnote" style="color:red; border:1px dashed pink; border-radius:10px;"><strong>Увага:</strong> {{[[' |
|||
.. tostring(mw.getCurrentFrame():getParent():getTitle()) .. ']]}}: не розум?ю параметр(и):<br/><span style="font-color:black;font-size:85%;">') |
|||
table.insert(res, '</span><br/>(це пов?домлення лише в попередперегляд?). [[В?к?пед?я:Про?кт:Шаблони#Параметри шаблон?в|Докладн?ше]]</div>') |
|||
end |
end |
||
end |
|||
return table.concat(res) |
|||
end |
|||
function p.check(frame) |
|||
local args = frame.args |
|||
local pargs = frame:getParent().args |
|||
return p._check(args, pargs) |
|||
end |
end |
||
Поточна верс?я на 15:51, 26 лютого 2025

![]() | Цей модуль Lua використову?ться на близько 1 150 000 стор?нках або близько 23% вс?х стор?нок. Для уникнення великомасштабних збо?в та непотр?бного навантаження на сервер, будь-як? зм?ни спочатку потр?бно перев?рити на п?дстор?нках /п?сочниц? та /тест?в цього модуля, або у ваш?й п?сочниц? модуля. Пот?м перев?рен? зм?ни можуть бути впроваджен? на ц?й стор?нц? ?диним редагуванням. Будь ласка, обговорюйте будь-як? зм?ни на стор?нц? обговорення перед ?хн?м впровадженням. |
![]() | Цей модуль позначений як К:рел?з, готовий до загального вжитку (138). В?н досягнув стад?? готовност? й вважа?ться, що в?льний в?д помилок ? може використовуватись всюди, де знадобиться. Його можна вживати на допом?жних стор?нках та ?нших стор?нках В?к?пед?? як можлив?сть для навчання новачк?в. Аби зменшити навантаження на сервери та некоректний показ стор?нок, його можна вдосконалювати в рамцях чернеткового тестування[en], а не з застосуванням спроб ? помилок. |
{{Модуль:Check for unknown parameters}} (обг. · викор. · ред.)
Модуль виклика?ться з шаблон?в, як? бажають перев?ряти власн? виклики з нев?домими ?м параметрами.
Використання
Базове
{{#invoke:check for unknown parameters|check |unknown=[[Категор?я:Шаблон:<Назва шаблону>:Параметр не п?дтриму?ться]] |arg1|arg2|...|argN}}
або щоб в?дсортувати стор?нки з помилками в категор?? спостереження за помилковою назвою параметра ?з пов?домленням про помилку у попередньому перегляд?
{{#invoke:check for unknown parameters|check |unknown=[[Категор?я:Шаблон:<Назва шаблону>:Параметр не п?дтриму?ться |_VALUE_]] |preview=нев?домий параметр "_VALUE_" |arg1|arg2|...|argN}}
або для пов?домлення про помилку у т?л? стор?нки
{{#invoke:check for unknown parameters|check |unknown=<span class="error">Вибачте, я не розум?ю параметр ?_VALUE_?</span> |arg1|arg2|...|argN}}
або використати прихован? пов?домлення про помилку, як? можна побачити у вих?дному код? HTML, разом з пов?домленням у попередньому перегляд?
{{#invoke:check for unknown parameters|check |unknown=<span class="error" style="display:none">HIDDEN ERROR: Usage of "_VALUE_" is not recognized</span> |preview=unknown parameter "_VALUE_" |arg1|arg2|...|argN}}
Тут, arg1
, arg2
, ..., argN
— параметри, як? вм?? обробляти шаблон. Any parameter which is used, but not on this list, will cause the module to return whatever is passed with the unknown
parameter. The _VALUE_
keyword, if used, will be changed to the name of the parameter. This is useful for either sorting the entries in a tracking category, or for provide more explicit information.
By default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. Щоб в?дстежувати лише непорожн? параметри вкаж?ть модулю |ignoreblank=1
.
Регулярн? вирази
Модуль п?дтриму? патерни Lua (под?бн? до регулярних вираз?в), якими зручно користуватися, коли у шаблона багато в?домих параметр?в за певною маскою назви параметра. Наприклад, {{infobox3cols}} (обг. · викор. · ред.) використову?
| regexp1 = header[%d][%d]* | regexp2 = label[%d][%d]* | regexp3 = data[%d][%d]*[abc]? | regexp4 = class[%d][%d]*[abc]? | regexp5 = rowclass[%d][%d]* | regexp6 = rowstyle[%d][%d]* | regexp7 = rowcellstyle[%d][%d]*
to match all parameters of the form headerNUM
, labelNUM
, dataNUM
, dataNUMa
, dataNUMb
, dataNUMc
, ..., rowcellstyleNUM
, where NUM is a string of digits.
Приклад
{{Infobox | above = {{{name|}}} | label1 = Height | data1 = {{{height|}}} | label2 = Weight | data2 = {{{weight|}}} | label3 = Website | data3 = {{{website|}}} }}<!-- end infobox, start tracking -->{{#invoke:Check for unknown parameters|check | unknown = [[Category:Some tracking category|_VALUE_]] | preview = unknown parameter "_VALUE_" | name | height | weight | website }}
Шаблони на Модуль:Check for unknown parameters
The following is a list of templates which invoke this module, with the associated category for each.
Перел?к шаблон?в, як? викликають {{Модуль:Check for unknown parameters}} (обг. · викор. · ред.) (список в?д руш?я) | |
---|---|
Шаблон | Категор?я спостереження |
{{Year box}} (обг. · викор. · ред.) | Категор?я:Стор?нки, що використовують year box з нев?домими параметрами (0 К, 0 С) |
{{Затока}} (обг. · викор. · ред.) | Категор?я:Шаблон:Затока:Параметр не п?дтриму?ться (0 К, 2 С) |
{{Картка Ресторан}} (обг. · викор. · ред.) | [[:Категор?я:|Категор?я:]] (0 К, 0 С) |
{{Картка ун?верситету}} (обг. · викор. · ред.) | [[:Категор?я:|Категор?я:]] (0 К, 0 С) |
{{Картка анатом??}} (обг. · викор. · ред.) | [[:Категор?я:|Категор?я:]] (0 К, 0 С) |
![]() | Цей модуль м?стить код, запозичений з модуля ?Check for unknown parameters? англ?йсько? В?к?пед??. | ![]() |
Документац?я вище включена з Модуль:Check for unknown parameters/документац?я. (ред. | ?стор?я) Дописувач? можуть експериментувати на п?дстор?нках п?сочниц? (ред. | р?зн.) та протестувати зм?ни (ред.) цього модуля. Будь ласка, додавайте категор?? до п?дстор?нки /документац?я. П?дстор?нки ц??? стор?нки. |
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
-- modified at ukwiki
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and trim(s) ~= ''
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
local unknown = args['unknown'] or '<s>|_VALUE_=</s>, '-- якщо не задано
local preview = args['preview'] or '<s>|_VALUE_=</s>, '-- завжди попередж. в прев'ю
local revisionid = isnotempty( mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) )
local function nounderscore( pargs )
for k, v in pairs(pargs) do
k = mw.ustring.gsub(k, '[_]', ' ')
end
return pargs
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
if not isnotempty(preview) then preview = unknown end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add resuls to the output tables
local res = {}
if #values > 0 then
if not revisionid then unknown = preview
end
for k, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
local r = unknown:gsub('_VALUE_', v)
table.insert(res, r)
end
if not revisionid then
table.insert(res, 1, '<div class="hatnote" style="color:red; border:1px dashed pink; border-radius:10px;"><strong>Увага:</strong> {{[['
.. tostring(mw.getCurrentFrame():getParent():getTitle()) .. ']]}}: не розум?ю параметр(и):<br/><span style="font-color:black;font-size:85%;">')
table.insert(res, '</span><br/>(це пов?домлення лише в попередперегляд?). [[В?к?пед?я:Про?кт:Шаблони#Параметри шаблон?в|Докладн?ше]]</div>')
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p