Модуль:Песочница/Vavilexxx/tests
Перейти к навигации
Перейти к поиску
Документация
require('strict')
local getLink = require('Модуль:Песочница/Vavilexxx/URL').getLink
local colorContrast = require('Модуль:Color contrast')
local htmlColor = mw.loadData('Модуль:Color contrast/colors')
local tableEmptyCell = require('Модуль:Пустая ячейка таблицы')
local debugthis = require('Модуль:Песочница/Vavilexxx/debug')
local wikidata = require('Модуль:Wikidata').formatProperty
local getArgs = require('Module:Arguments').getArgs
local delink = require('Модуль:Delink').delink
local stringModule = require('Модуль:String')
local mathModule = require('Модуль:Math')
local yesno = require('Модуль:Yesno')
local format = mw.ustring.format
local match = mw.ustring.match
local upper = mw.ustring.upper
local lower = mw.ustring.lower
local find = mw.ustring.find
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub
local trim = mw.text.trim
local p = {}
local args, rawargs, sortedargs
local result
--------------------------------------------------------------------------------
-- ВСПОМОГАТЕЛЬНЫЕ (ЛОКАЛЬНЫЕ) ФУНКЦИИ
--------------------------------------------------------------------------------
local function funcname(...)
-- Тело функции
end
--[[ Декоратор (функция-обёртка) для передачи аргументов в функцию
---- Хотя это не нужно. Если в области видимости модуля есть нужные аргументы,
---- то они доступны и в области видимости модуля (замыкание)
--]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame)
return p[funcName](args)
end
end
-- Это навесить перед нужной функцией
p.func1 = makeInvokeFunc('_func1')
local function comparator(key, value, ...)
-- sortargs = {key, value, ...}
-- sortargs[#sortargs + 1] = key
end
local function getsortedargs(unsortedargs)
local tempargs, newargs = {}, {}
for key, value in pairs(unsortedargs) do
table.insert(tempargs, key)
end
table.sort(tempargs)
for i, key in pairs(tempargs) do
newargs[key] = unsortedargs[key]
end
return newargs
end
--------------------------------------------------------------------------------
-- ОСНОВНЫЕ ФУНКЦИИ (МЕТОДЫ)
--------------------------------------------------------------------------------
--- \127'"`UNIQ--tagname-8 hex digits-QINU`"'\127
--- '"`UNIQ--ref-FFFFFFFF-QINU`"'
--- Удаление <ref> -- match(args.ref, '^(.+)%s*\'"`')
--- Удаление {{comment}} -- match(frame.args[1], '>([^<>]+)<')
function p.DEBUG(frame)
local firstArg = getArgs(frame)[1]
local killMarkers = mw.text.killMarkers
local nowiki = mw.text.nowiki
local result = '<b>Вывод</b>: '
if not firstArg then
return result .. 'nil'
end
if firstArg:find('-ref-') then
result = result .. firstArg
result = result .. '<br><b>Под капотом</b>: ' .. nowiki(firstArg)
result = result .. '<br><b>После подрезки</b>: ' .. killMarkers(firstArg)
elseif firstArg:find('-comment-') then
result = result .. firstArg
result = result .. '<br><b>Под капотом</b>: ' .. nowiki(firstArg)
result = result .. '<br><b>После подрезки</b>: ' .. firstArg:match('>([^<>]+)<')
elseif firstArg:find('UNIQ') then
result = result .. firstArg
result = result .. '<br><b>Под капотом</b>: ' .. nowiki(firstArg)
result = result .. '<br><b>После подрезки</b>: ' .. killMarkers(firstArg)
elseif firstArg:find('[<>]') then
result = result .. firstArg
result = result .. '<br><b>Под капотом</b>: ' .. nowiki(firstArg)
result = result .. '<br><b>После подрезки</b>: ' .. firstArg:gsub('<.->', ' '):gsub('%s+', ' '):gsub('^%s+', ''):gsub('%s+$', '')
else
result = '<b>Это просто текст</b>: ' .. firstArg
end
return result
end
function p.DEBUG2(frame)
local arg = getArgs(frame)[1]
local result
if not arg then
return 'На выходе: nil'
end
if find(arg, '-ref-') then
result = 'Вывод: ' .. arg
result = result .. '<br>Под капотом: ' .. mw.text.nowiki(arg)
result = result .. '<br>После подрезки: ' .. mw.text.killMarkers(arg)
elseif find(arg, '-comment-') then
result = 'Вывод: ' .. arg
result = result .. '<br>Под капотом: ' .. mw.text.nowiki(arg)
result = result .. '<br>После подрезки: ' .. match(arg, '>([^<>]+)<')
elseif find(arg, 'UNIQ') then
result = 'Вывод: ' .. arg
result = result .. '<br>Под капотом: ' .. mw.text.nowiki(arg)
result = result .. '<br>После подрезки: ' .. mw.text.killMarkers(arg)
elseif find(arg, '[<>]') then
result = 'Вывод: ' .. arg
result = result .. '<br>Под капотом: ' .. mw.text.nowiki(arg)
result = result .. '<br>После подрезки: ' .. gsub(arg, '<.->', ' '):gsub('%s+', ' '):gsub('^%s+', ''):gsub('%s+$', '')
else
result = 'Это просто текст: ' .. arg
end
return result
end
function p.getWikidata(frame)
local args = getArgs(frame)
local property = args.property or args[1]
local value = args.value or args[2]
local from = args.from or args[3]
frame.args.property = property
frame.args.value = value
frame.args.from = from
-- wikidata({args={property='P1811', value='Список эпизодов телесериала «Во все тяжкие»', from='Q126004'}})
-- {['args']={property=property, value='', from=from}}
result = wikidata(frame)
debugthis(result)
return result
end
function p._main(args)
-- Основной код модуля.
-- table.sort( table, comparator )
-- comparator = function (key) return key end
-- table.sort(args, comparator) -- Не работает с именованными параметрами!!!???
-- sortedargs = getsortedargs(args)
result = '{'
local first = '%1q: %2q'
-- mw.site.namespaces, args
for key, value in pairs(mw.site.namespaces[0]) do
result = result .. format(first or ', %1q: %2q', key, tostring(value))
first = false
end
local postfix = nil or '​'
result = result .. '}' .. postfix
result = result .. '<br>' .. format('yesno = %1s', tostring(yesno(lower(args.yesno)))) or ''
result = result .. '<br>' .. format('delink = %1s', delink({args.delink})) or ''
local urlLink = getLink({'https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:URL', 'ссылка на шаблон'})
-- return tostring(args)
return result, '<br>', tostring(mw.site.namespaces[0].displayName), '<br>', urlLink
end
--------------------------------------------------------------------------------
-- ЭКСПОРТ
--------------------------------------------------------------------------------
function p.main(frame)
local args = {}
local rawargs = getArgs(frame)
local iargs = getArgs(frame, {
-- Обрезка и удаление пробелов:
-- trim = false, -- Обрезка и удаление пробелов по краям. По умолчанию: true
removeBlanks = false, -- Удаление пустых аргументов. По умолчанию: true
valueFunc = function (key, value)
-- Произвольное форматирование аргументов
-- код, обрабатывающий единственный аргумент
end,
--[[ При установке одновременно опций frameOnly и parentOnly модуль не получит никаких аргументов из #invoke. Так делать не стоит.
---- В некоторых ситуациях родительский фрейм может быть недоступен, например, если он был сразу подан на вход функции getArgs.
---- Тогда могут использоваться лишь аргументы этого фрейма (если установлена опция parentOnly, то никакие аргументы получить не удастся),
---- а parentFirst и frameOnly не будут иметь эффекта.
--]]
-- frameOnly = true, -- будут обрабатываться только аргументы фрейма, где происходит непосредственно вызов {{#invoke:имя_модуля|main|*args|**kwargs}}
-- parentOnly = true, -- будут обрабатываться только аргументы родительского фрейма ({{шаблона|*аргументы|**аргументы}})
-- parentFirst = true, -- будут обрабатываться аргументы из обоих фреймов, но в первую очередь родительского
-- Обёртки. Опция wrappers используется для указания ограниченного числа шаблонов как шаблонов-обёрток:
-- wrappers = 'Шаблон:Обёртка',
wrappers = {
-- 'Шаблон:Шаблон №1',
-- 'Шаблон:Шаблон №2',
-- 'Шаблон:Обёртка',
-- 'Шаблон:Другая обёртка'
},
-- Запись в таблицу args:
-- readOnly = true, -- в таблицу args нельзя вносить изменения вообще. По умолчанию: false
-- noOverwrite = true -- можно добавлять новые значения, но нельзя менять уже имеющиеся в таблице значения, полученные из #invoke. По умолчанию: false
})
--Предобработка параметров
for key, value in pairs(rawargs) do
if type(key) == 'string' then
key = lower(gsub(key, ' ', '')) -- Удаление всех пробелов и приведение к нижнему регистру
if not args[key] then
args[key] = value -- добавление в таблицу аргументов новых параметров
end
end
end
return p._main(args)
end
return p