Модуль:ArticleCandidatesNavigation: відмінності між версіями
Перейти до навігації
Перейти до пошуку
[перевірена версія] | [перевірена версія] |
Вилучено вміст Додано вміст
AtUkr (обговорення | внесок) Немає опису редагування |
м Захистив «Модуль:ArticleCandidatesNavigation»: шаблон/модуль із великою кількістю включень ([Редагування=Дозволено тільки автопідтвердженим користувачам] (безстроково) [Перейменування=Дозволено тільки автопідтвердженим користувачам] (безстроково)) |
||
(Не показано 3 проміжні версії ще одного користувача) | |||
Рядок 24: | Рядок 24: | ||
-- Календар підсторінок |
-- Календар підсторінок |
||
function p.daysTable(pagename, linkText, days, dateFormat) |
function p.daysTable(pagename, linkText, days, dateFormat) |
||
if not days then |
|||
local days = 7 |
|||
end |
|||
if not dateFormat then |
if not dateFormat then |
||
local dateFormat = 'j xg Y' |
local dateFormat = 'j xg Y' |
||
Рядок 132: | Рядок 135: | ||
if args.closed and #args.closed > 0 then |
if args.closed and #args.closed > 0 then |
||
res = res .. frame:expandTemplate{ title = 'closed' } .. '</b>' |
res = res .. frame:expandTemplate{ title = 'closed' } .. '</b>' |
||
if args.closedcat and not args.nocat then |
if args.closedcat and (not args.nocat or #args.nocat == 0) then |
||
res = res .. '[[Категорія:' .. args.closedcat .. ']]' |
res = res .. '[[Категорія:' .. args.closedcat .. ']]' |
||
end |
end |
||
elseif args.opencat and not args.nocat then |
elseif args.opencat and (not args.nocat or #args.nocat == 0) then |
||
res = res .. '[[Категорія:' .. args.opencat .. ']]' |
res = res .. '[[Категорія:' .. args.opencat .. ']]' |
||
end |
end |
||
Рядок 187: | Рядок 190: | ||
:done() |
:done() |
||
end |
end |
||
⚫ | |||
⚫ | |||
if args.reminder then |
if args.reminder then |
||
Рядок 195: | Рядок 200: | ||
:wikitext(args.reminder) |
:wikitext(args.reminder) |
||
end |
end |
||
⚫ | |||
⚫ | |||
res = res .. tostring(nav) |
res = res .. tostring(nav) |
Поточна версія на 21:00, 12 липня 2023
Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]
Модуль для шаблонів навігації на підсторінках ВП:ВИЛ {{ВПВИЛ-навігація}}, ВП:ПОЛ {{ВППОЛ-навігація}} тощо.
Використання
{{#invoke:ArticleCandidatesNavigation|navigation |pagename=Вікіпедія:Статті-кандидати на вилучення |linkText=На вилучення |seeAlso= ;Також : [[Вікіпедія:Статті-кандидати на вилучення|усі кандидати на вилучення]] |reminder=Пам'ятайте, що статті вилучаються за підсумками обговорення, а не голосування. Неаргументовані голоси не враховуються! }}
Результат
| ||||||||||
Пам'ятайте, що статті вилучаються за підсумками обговорення, а не голосування. Неаргументовані голоси не враховуються!
Функції
Напівжирним позначено обов'язкові параметри.
navigation
Основна функція. Генерує шаблон з навігацією по підсторінках. Параметри:
|pagename=
- Повна назва кореневої сторінки.
|linkText=
- Текст посилання, яке відображається зліва від календаря підсторінок.
|days=
- Кількість днів, які відображаються в календарі підсторінок (включно з поточним). За замовчуванням 7.
|seeAlso=
- Додаткова інформація. Відображається меншим шрифтом, списки горизонтальні.
|reminder=
- Окреме нагадування. Відкоремлюється від тіла шаблону горизонтальною лінією.
|closed=
- Закриття обговорення. Будь-який вміст параметру підставляє шаблон {{closed}}.
|opencat=
- Категорія для сторінок з відкритими обговореннями.
|closedcat=
- Категорія для сторінок із закритими обговореннями.
|nocat=
- Відключення категоризації шаблоном. Будь-який вміст параметру запобігає включенню сторінки у категорії, вказані в
opencat
іclosedcat
.
- Відключення категоризації шаблоном. Будь-який вміст параметру запобігає включенню сторінки у категорії, вказані в
|dateFormat=
- Формат дати у назвах підсторінок. Див. довідку. За замовчуванням
j xg Y
.
- Формат дати у назвах підсторінок. Див. довідку. За замовчуванням
|color=
- Колір рамки і горизонтальної лінії-відокремлювача. За замовчуванням
#6cbed0
- Колір рамки і горизонтальної лінії-відокремлювача. За замовчуванням
dayLink
Генерує посилання на підсторінку, якщо підсторінки не існує - повертає текст сірого кольору. Параметри:
|pagename=
|dateFormat=
- Аналогічні відповідним параметрам функції navigation.
|targetDay=
- День, на підсторінку якого потрібне посилання. Формат дати повинен підтримуватися функцією парсеру #time. За замовчуванням поточний день.
daysTable
Генерує таблицю-календар підсторінок. Параметри:
|pagename=
|linkText=
|days=
|dateFormat=
- Аналогічні відповідним параметрам функції navigation.
Документація вище включена з Модуль:ArticleCandidatesNavigation/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього модуля. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
local p = {}
-- Посилання на підсторінку певного дня
function p.dayLink(pagename, targetDay, dateFormat)
local frame = mw.getCurrentFrame()
if not targetDay then
local targetDay = frame:callParserFunction('#time', 'Y-m-d')
end
if not dateFormat then
local dateFormat = 'j xg Y'
end
local dayPage = frame:callParserFunction('#time', dateFormat, targetDay)
local linkText = frame:callParserFunction('#time', 'j xg', targetDay)
local exists = tonumber(frame:callParserFunction('#ifexist', pagename .. '/' .. dayPage, 1, 0))
local link
if exists == 1 then
link = '[[' .. pagename .. '/' .. dayPage .. '|' .. linkText .. ']]'
else
link = '<span style="color: gray;">' .. linkText .. '</span>'
end
return link
end
-- Календар підсторінок
function p.daysTable(pagename, linkText, days, dateFormat)
if not days then
local days = 7
end
if not dateFormat then
local dateFormat = 'j xg Y'
end
local tbl = mw.html.create('table')
tbl
:addClass('center')
:css('width', 'auto')
:css('margin', '0 auto')
local row
local adjust
for i = 1, days do
if i % 7 == 1 then
tbl:node(row)
row = mw.html.create('tr')
if i == 1 then
row:tag('td')
:attr('rowspan', math.ceil(days / 7))
:css('font-weight', 'bold')
:wikitext('[[' .. pagename .. '|' .. linkText .. ':]]')
end
if i / 7 > 1 then
row:css('font-size', 'small')
end
--[[
поправка для дат в таблиці.
порядковий номер дати 1 2 3 4 5 6 7
різниця між даною і поточною датою -6 -5 -4 -3 -2 -1 0
поправка -7 -7 -7 -7 -7 -7 -7
8 9 10 11 12 13 14
-13 -12 -11 -10 -9 -8 -7
-21 -21 -21 -21 -21 -21 -21
тобто <величина поправки> = 7 * (2 * <номер рядка> - 1)
можна вирахувати поправку один раз для всього рядка, взявши перший елемент.
тоді <номер рядка> = i // 7 + 1 = (i - 1) / 7 + 1
<величина поправки> = 7 * (2 * ((i - 1) / 7 + 1)) - 1) = 7 * (2 * (i - 1) / 7 + 2 - 1) =
= 7 * (2 * (i - 1) / 7 + 1) = 2 * (i - 1) + 7 = 2 * i - 2 + 7 = 2 * i + 5
]]
adjust = 2 * i + 5
-- для останнього рядка таблиці додаємо порожню клітинку, щоб вирівняти дати праворуч, і відповідно змінюємо поправку
if i == math.floor(days / 7) * 7 + 1 then
row:tag('td'):attr('colspan', 7 - days % 7)
adjust = adjust + days % 7 - 7
end
end
local targetDay = mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', tostring(i - adjust) .. 'days')
row:tag('td'):wikitext(p.dayLink(pagename, targetDay, dateFormat))
if i == days then
tbl:node(row)
end
end
return tbl
end
-- Знаходження найближчої існуючої підсторінки
local function findClosest(pagename, targetDay, sign, dateFormat)
local frame = mw.getCurrentFrame()
local dayPage
local exists
for i = 1, 28 do
dayPage = frame:callParserFunction('#time', dateFormat, targetDay .. sign .. i .. 'days')
exists = tonumber(frame:callParserFunction('#ifexist', pagename .. '/' .. dayPage, 1, 0))
if exists == 1 then
return dayPage
end
end
return nil
end
-- Посилання на найближчі підсторінки
local function PrevNext(pagename, dateFormat)
local frame = mw.getCurrentFrame()
local pageDay = frame:expandTemplate{ title = 'Date Converter', args = { mw.title.getCurrentTitle().subpageText } }
local prv = findClosest(pagename, pageDay, '-', dateFormat)
local nxt = findClosest(pagename, pageDay, '+', dateFormat)
local res = ''
if prv then
res = res .. '[[' .. pagename .. '/' .. prv .. '|<<]]'
end
if prv and nxt then
res = res .. ' | '
end
if nxt then
res = res .. '[[' .. pagename .. '/' .. nxt .. '|>>]]'
end
return res
end
-- Основна функція: генерація шаблону навігації
function p.navigation(frame)
local args = frame.args
if not args.days then
args.days = 7
end
if not args.dateFormat then
args.dateFormat = 'j xg Y'
end
if not args.color then
args.color = '#6cbed0'
end
local res = ''
if args.closed and #args.closed > 0 then
res = res .. frame:expandTemplate{ title = 'closed' } .. '</b>'
if args.closedcat and (not args.nocat or #args.nocat == 0) then
res = res .. '[[Категорія:' .. args.closedcat .. ']]'
end
elseif args.opencat and (not args.nocat or #args.nocat == 0) then
res = res .. '[[Категорія:' .. args.opencat .. ']]'
end
local nav = mw.html.create('div')
if args.id then
nav:attr('id', args.id)
end
if args.class then
nav:addClass(args.class)
end
nav
:css('background', '#fff')
:css('border', '1px solid' .. args.color)
:css('margin-bottom', '1em')
:css('padding', '.5em .25em .25em')
:css('text-align', 'center')
local tbl = mw.html.create('table')
tbl
:css('width', '100%')
:tag('tr')
:tag('td')
:css('width', '75px')
:wikitext(' ')
:done()
:tag('td')
:css('text-align', 'center')
:node(p.daysTable(args.pagename, args.linkText, tonumber(args.days), args.dateFormat))
:done()
:tag('td')
:css('width', '75px')
:css('text-align', 'right')
:css('font-size', '120%')
:css('font-weight', 'bold')
:wikitext(PrevNext(args.pagename, args.dateFormat))
:done()
:done()
:done()
if args.seeAlso and #args.seeAlso > 0 then
tbl
:tag('tr')
:css('font-size', 'small')
:tag('td')
:attr('colspan', '3')
:addClass('hlist')
:css('text-align', 'center')
:wikitext('\n' .. args.seeAlso)
:done()
:done()
end
nav:node(tbl)
if args.reminder then
nav
:tag('hr')
:css('background', args.color)
:done()
:wikitext(args.reminder)
end
res = res .. tostring(nav)
return res
end
return p