Модуль:Реслінг-таблиця результатів
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Цей модуль залежить від наступних модулів: |
Цей модуль реалізує {{Таблиця результатів у реслінгу}}. Будь ласка, дивіться сторінку шаблону для документації.
Додавання приміток матчів
[ред. код]По-перше, ознайомтеся з форматом таблиці приміток:
local notes = {
dark = { 'D', '[[Темний матч (реслінг)|темний]]' },
pre = { 'P', 'на перед-шоу' },
aewd = { 'AD', taped ..'<i>[[AEW Dark|Dark]]</i>' },
aewde = { 'DE', taped ..'<i>[[AEW Dark: Elevation|Dark: Elevation]]</i>' },
bti = { 'B', taped ..'<i>[[Before the Impact]]</i>' },
ffa = { 'F', live ..'<i>[[WWE Free for All|Free for All]]</i>' },
fusion = { 'FT', taped ..'<i>[[MLW Fusion|Fusion]]</i>' },
fusionlive = { 'F', live ..'<i>[[MLW Fusion|Fusion]]</i>' },
heat = { 'H', live ..'<i>[[WWE Heat|Sunday Night Heat]]</i>' },
mem = {'MEM', taped ..'<i>Main Event Mondays</i>' },
regnxt = { 'N', taped ..'<i>[[WWE NXT|NXT]]</i>' },
regnxtuk = { 'UK', taped ..'<i>[[WWE NXT UK|NXT UK]]</i>' },
slam = { 'S', live ..'<i>[[WWF Sunday Night Slam|Sunday Night Slam]]</i>' },
wcwme = { 'ME', live ..'<i>[[WCW Main Event|Main Event]]</i>' },
wcwsn = { 'SN', live ..'<i>[[WCW Saturday Night|Saturday Night]]</i>' },
xplosion = { 'X', taped ..'<i>[[Impact! Xplosion|Xplosion]]</i>' }
}
Таблицю приміток було вирівняно, щоб її було легше зрозуміти редакторам, які не мають досвіду роботи з Lua. Давайте розберемо її далі, на конкретному прикладі:
heat = { 'H', live ..'<i>[[WWE Heat|Sunday Night Heat]]</i>' },
- heat є значенням поля приміток (наприклад,
|note1=heat
) - H це символ примітки, який з'являється поряд з порядковим номером матчу у таблиці
- далі йде ключ, що формує речення внизу таблиці. Ключі: live (для матчів, що транслювались до шоу) і taped (для наперед записаних матчів). В ідеалі, опісля має йти вікіпосилання на програму, виділене курсивом через HTML-теги (<i></i>).
Додаючи примітку в модуль, слід пам'ятати про декілька речей:
- Значення поля примітки має бути коротким, але зрозумілим. Використовуйте абревіатуру або акронім програми. Якщо результуюче значення є загальним і є потенціал для дублювання, розгляньте можливість включення абревіатури промоушну.
- Позначення примітки для таблиці (символ примітки) повинне бути обмеженим одним або двома символами. Якщо існує потенційний збіг з іншими символами в тій самій таблиці результатів, відкоригуйте відповідним чином. Уникайте використання «D» або «P», оскільки вони є узагальненими позначеннями для темного матчу і матчів на перед-шоу, відповідно.
Документація вище включена з Модуль:Реслінг-таблиця результатів/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього шаблону. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
local p = {}
function p.main(frame)
local args = require('Модуль:Arguments').getArgs(frame, {wrappers = 'Шаблон:Таблиця результатів у реслінгу'})
local warnings = {}
-- Preprocessing
local live = ' транслювався перед платним показом шоу у рамках '
local taped = ' був записаний для майбутньої трансляції '
local notes = {
dark = { 'D', '[[Темний матч (реслінг)|темний]]' },
pre = { 'P', 'на перед-шоу' },
aewd = { 'AD', taped ..'<i>[[AEW Dark|Dark]]</i>' },
aewde = { 'DE', taped ..'<i>[[AEW Dark: Elevation|Dark: Elevation]]</i>' },
bti = { 'B', taped ..'<i>[[Before the Impact]]</i>' },
ffa = { 'F', live ..'<i>[[WWE Free for All|Free for All]]</i>' },
fusion = { 'FT', taped ..'<i>[[MLW Fusion|Fusion]]</i>' },
fusionlive = { 'F', live ..'<i>[[MLW Fusion|Fusion]]</i>' },
heat = { 'H', live ..'<i>[[WWE Heat|Sunday Night Heat]]</i>' },
mem = {'MEM', taped ..'<i>Main Event Mondays</i>' },
regnxt = { 'N', taped ..'<i>[[WWE NXT|NXT]]</i>' },
regnxtuk = { 'UK', taped ..'<i>[[WWE NXT UK|NXT UK]]</i>' },
slam = { 'S', live ..'<i>[[WWF Sunday Night Slam|Sunday Night Slam]]</i>' },
wcwme = { 'ME', live ..'<i>[[WCW Main Event|Main Event]]</i>' },
wcwsn = { 'SN', live ..'<i>[[WCW Saturday Night|Saturday Night]]</i>' },
xplosion = { 'X', taped ..'<i>[[Impact! Xplosion|Xplosion]]</i>' }
}
local matches, notes_key, notes_key_filter = {}, {}, {}
local future_match, times_active, champions_active
local row_num = 1
while args['match'.. row_num] do
-- Validate match status and order
local row_match = args['match'.. row_num]
if not (row_match:match(' переміг ') or row_match:match(' перемогла ') or row_match:match(' виграв ') or row_match:match(' перемогли ') or row_match:match(' виграла ') or row_match:match(' виграли ') or row_match:match(' закінчився ')) or row_match:match(' закінчили ') then
future_match = true
elseif future_match then
table.insert(warnings, '<b>match'.. row_num-1 ..'</b> (future match in wrong order OR not properly marked as complete — "перемогла", "переміг", "перемогли", "закінчився", "виграв", "виграли", "виграла", "закінчили", очікується)')
future_match = false
end
-- Validate note
-- Add note to Key (maintain order, avoid duplicates)
-- Create sub-note if discrepancy in match status
local row_note = args['note'.. row_num]
if row_note then
if notes[row_note] then
local suffix = future_match and 'F' or ''
local row_note_symbol = notes[row_note][1] .. (future_match and notes_key_filter[row_note] and 'F' or '')
if not notes_key_filter[row_note .. suffix] then
table.insert(notes_key, {
row_note_symbol,
(row_note == 'dark' and 'цей матч' or 'матч') .. (future_match and row_note == 'dark' and ' запланований як ' or future_match ~= true and row_note == 'dark' and ' пройшов як ' or future_match and row_note == 'pre' and ' буде проведений ' or future_match ~= true and row_note == 'pre' and ' пройшов ') .. notes[row_note][2]
})
notes_key_filter[row_note .. suffix] = true
end
row_note = row_note_symbol
else
table.insert(warnings, '<b>note'.. row_num ..'</b> (див. [[Шаблон:Таблиця результатів у реслінгу]])')
row_note = nil
end
end
-- Validate stipulation
if mw.text.killMarkers(args['stip'.. row_num] or '') == '' then
table.insert(warnings, '<b>stip'.. row_num ..'</b> (умови не мають бути пустими)')
end
-- Validate time (M:SS minimum)
local row_time = args['time'.. row_num]
if row_time then
if row_time:match('[0-9]:[0-5][0-9]') then
times_active = true
else
table.insert(warnings, '<b>time'.. row_num ..'</b> (M:SS expected)')
row_time = nil
end
end
-- Detect champions for Key
if not champions_active and row_match:match('%(c%)') then
champions_active = true
end
-- Перевірка на кирилицю
if not champions_active and row_match:match('%(с%)') then
table.insert(warnings, '<b>match'.. row_num .. '</b> (Використовуйте англійську "c")')
end
table.insert(matches, {row_note, row_match, args['stip'.. row_num], row_time})
row_num = row_num+1
end
local notes_active = #notes_key > 0 and true or false
-- Validate extra parameters
if args['align'] and args['align'] ~= 'center' then
table.insert(warnings, '<b>align</b> ("center" expected)')
end
-- Table start
local root = mw.html.create('table')
:addClass('wikitable')
:css('max-width', '1440px')
:css('margin', args['align'] == 'center' and '1em auto !important' or nil) -- Optional center align
if args['caption'] then
root
:tag('caption')
:css('font-size', '16px')
:wikitext(args['caption'])
end
-- Header
local header = root:tag('tr')
header
:tag('th')
:attr('scope', 'col')
:tag('abbr')
:attr('title', 'Номер'.. (notes_active and ' і примітка' or ''))
:wikitext('№')
:done()
:done()
:tag('th')
:attr('scope', 'col')
:wikitext((future_match and 'Матчі*' or 'Результати') .. (args['results'] or '')) -- Optional reference
:done()
:tag('th')
:attr('scope', 'col')
:wikitext('Умови')
if times_active then
header
:tag('th')
:attr('scope', 'col')
:wikitext('Час'.. (args['times'] or '')) -- Optional reference
end
-- Матчі
for num, v in ipairs(matches) do
local row = root:tag('tr')
row
-- Номер
:tag('th')
:attr('scope', 'row')
:wikitext(num)
-- Примітка
:tag('sup')
:css('font-size', '85%')
:wikitext(v[1])
:done()
:done()
-- Match
:tag('td')
:wikitext(v[2])
:done()
-- Умови
:tag('td')
:wikitext(v[3])
-- Час
if v[4] then
row
:tag('td')
:css('text-align', 'center')
:wikitext(v[4])
elseif times_active then
-- mirror Template:N/a
row
:tag('td')
:addClass('table-na')
:css('text-align', 'center')
:css('background-color', '#ececec')
:css('color', '#2C2C2C')
:wikitext('—')
end
end
-- Key
if champions_active or notes_active or future_match then
local key = root:tag('tr')
:tag('th')
:attr('scope', 'row')
:attr('colspan', times_active and '4' or '3')
:css('border-top', 'solid 2px #aaa')
:css('font-weight', 'normal')
:css('text-align', 'left')
:tag('table')
:css('margin', '0 auto !important')
:css('padding', '0')
:css('border-spacing', '0')
:css('line-height', '1.45em')
if champions_active then
key
:tag('tr')
:tag('td')
:css('text-align', 'right')
:wikitext('(c)')
:done()
:tag('td')
:wikitext(' – чемпіон(-и) на момент старту поєдинку')
end
for _, v in ipairs(notes_key) do
key
:tag('tr')
:tag('td')
:css('text-align', 'right')
:css('font-size', '85%')
:css('font-weight', 'bold')
:wikitext(v[1])
:done()
:tag('td')
:wikitext(' – '.. v[2])
end
if future_match then
key
:tag('tr')
:tag('td')
:attr('colspan', '2')
:css('text-align', 'center')
:css('font-size', '85%')
:css('font-weight', 'bold')
:wikitext('*Кард може змінюватись з часом')
end
end
-- Preview warnings and tracking
if #warnings > 0 then
root = require('Модуль:If preview')._warning({'Invalid parameter value at '.. table.concat(warnings, '; ') ..'.'})
.. (mw.title.getCurrentTitle().namespace == 0 and '[[Категорія:Сторінки з невалідними значеннями у таблиці результатів реслінгу]]' or '')
.. tostring(root)
end
return root
end
return p