Dlaždice: Porovnání verzí
Z Wiki JU
založena nová stránka s textem „-- Module:Dlaždice -- Zjistí, pro koho je cílová stránka zamčená: najde v jejím wikitextu všechny -- kategorie končící na " (skryté)" a vrátí hotový odznak (zámek + názvy skupin). -- Použití: {{#invoke:Dlaždice|odznak|odkaz=Útvar personální/K nástupu}} local p = {} local SUFFIX = ' (skryté)' -- Odstraní části wikitextu, ve kterých se kategorie nepočítají. local function stripIgnored(text) text = text:gsub('<!%-%-.-%…“ |
Bez shrnutí editace |
||
| (Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
| Řádek 2: | Řádek 2: | ||
-- Zjistí, pro koho je cílová stránka zamčená: najde v jejím wikitextu všechny | -- Zjistí, pro koho je cílová stránka zamčená: najde v jejím wikitextu všechny | ||
-- kategorie končící na " (skryté)" a vrátí hotový odznak (zámek + názvy skupin). | -- kategorie končící na " (skryté)" a vrátí hotový odznak (zámek + názvy skupin). | ||
-- Použití: {{#invoke:Dlaždice| | -- Použití: {{#invoke:Dlaždice|odznaky|odkaz=Útvar personální/K nástupu|odznak=…}} | ||
local p = {} | local p = {} | ||
local SUFFIX = ' (skryté)' | local SUFFIX = ' (skryté)' | ||
local LOGIN = 'Po přihlášení' | |||
-- Odstraní části wikitextu, ve kterých se kategorie nepočítají. | -- Odstraní části wikitextu, ve kterých se kategorie nepočítají. | ||
| Řádek 36: | Řádek 37: | ||
end | end | ||
-- Vrátí seznam skupin cílové stránky (prázdný, když stránka není zamčená / neexistuje). | |||
local function groupsForTarget(target) | |||
-- externí odkazy a prázdný odkaz neřešíme | -- externí odkazy a prázdný odkaz neřešíme | ||
if target == '' or mw.ustring.lower(mw.ustring.sub(target, 1, 4)) == 'http' then | if target == '' or mw.ustring.lower(mw.ustring.sub(target, 1, 4)) == 'http' then | ||
return | return {} | ||
end | end | ||
local title = mw.title.new(target) | local title = mw.title.new(target) | ||
if not title or not title.exists then | if not title or not title.exists then | ||
return | return {} | ||
end | end | ||
-- jedno přesměrování následujeme | -- jedno přesměrování následujeme | ||
| Řádek 54: | Řádek 53: | ||
local content = title:getContent() | local content = title:getContent() | ||
if not content then | if not content then | ||
return '' | return {} | ||
end | |||
return groupsOf(content) | |||
end | |||
local function badge(html, extraClass, tooltip) | |||
return '<span class="dlazdice-odznak' .. (extraClass and (' ' .. extraClass) or '') .. '"' | |||
.. (tooltip and (' title="' .. tooltip .. '"') or '') .. '>' .. html .. '</span>' | |||
end | |||
-- Poskládá odznaky dlaždice (pod sebou): | |||
-- 1. „Po přihlášení“ (automaticky, jen když stránka je zamčená a ruční odznak | |||
-- už není přesně „Po přihlášení“), | |||
-- 2. 🔒 skupiny z kategorií „… (skryté)“, | |||
-- 3. ruční odznak (parametr odznak), pokud je zadán a není to „Po přihlášení“. | |||
-- Když je ruční odznak „Po přihlášení“, zobrazí se na místě automatického (1). | |||
-- Parametry: odkaz, odznak | |||
function p.odznaky(frame) | |||
local args = frame.args | |||
local manual = mw.text.trim(args.odznak or '') | |||
local groups = groupsForTarget(mw.text.trim(args.odkaz or '')) | |||
local locked = #groups > 0 | |||
local manualIsLogin = mw.ustring.lower(manual) == mw.ustring.lower(LOGIN) | |||
local parts = {} | |||
if manualIsLogin then | |||
table.insert(parts, badge(manual)) | |||
elseif locked then | |||
table.insert(parts, badge(LOGIN)) | |||
end | |||
if locked then | |||
-- jeden odznak na skupinu, aby byly úzké a nepřekrývaly ikonu | |||
for _, group in ipairs(groups) do | |||
local g = mw.text.encode(group) | |||
table.insert(parts, badge('🔒 ' .. g, 'dlazdice-odznak-zamek', 'Přístup jen pro skupinu oprávnění: ' .. g)) | |||
end | |||
end | |||
if manual ~= '' and not manualIsLogin then | |||
table.insert(parts, badge(manual)) | |||
end | end | ||
if #parts == 0 then | |||
if # | |||
return '' | return '' | ||
end | end | ||
return '<div class="dlazdice-odznaky">' .. table.concat(parts) .. '</div>' | |||
return '< | |||
end | end | ||
return p | return p | ||
Aktuální verze z 12. 11. 2026, 08:02
Dokumentaci tohoto modulu lze vytvořit na stránce Modul:Dlaždice/Dokumentace
-- Module:Dlaždice
-- Zjistí, pro koho je cílová stránka zamčená: najde v jejím wikitextu všechny
-- kategorie končící na " (skryté)" a vrátí hotový odznak (zámek + názvy skupin).
-- Použití: {{#invoke:Dlaždice|odznaky|odkaz=Útvar personální/K nástupu|odznak=…}}
local p = {}
local SUFFIX = ' (skryté)'
local LOGIN = 'Po přihlášení'
-- Odstraní části wikitextu, ve kterých se kategorie nepočítají.
local function stripIgnored(text)
text = text:gsub('<!%-%-.-%-%->', '')
text = text:gsub('<[nN][oO][wW][iI][kK][iI]>.-</[nN][oO][wW][iI][kK][iI]>', '')
text = text:gsub('<[pP][rR][eE][^>]*>.-</[pP][rR][eE]>', '')
return text
end
-- Vrátí seznam skupin (názvy kategorií bez přípony) v pořadí výskytu, bez duplicit.
local function groupsOf(text)
local groups, seen = {}, {}
local suffixLen = mw.ustring.len(SUFFIX)
for prefix, name in stripIgnored(text):gmatch('%[%[%s*([^%]|:]+):%s*([^%]|]-)%s*[|%]]') do
-- jen odkazy s prefixem jmenného prostoru Kategorie / Category
local ns = mw.ustring.lower(mw.text.trim(prefix))
if ns == 'kategorie' or ns == 'category' then
name = mw.text.trim((name:gsub('_', ' ')))
if mw.ustring.sub(name, -suffixLen) == SUFFIX then
local group = mw.text.trim(mw.ustring.sub(name, 1, mw.ustring.len(name) - suffixLen))
if group ~= '' and not seen[group] then
seen[group] = true
table.insert(groups, group)
end
end
end
end
return groups
end
-- Vrátí seznam skupin cílové stránky (prázdný, když stránka není zamčená / neexistuje).
local function groupsForTarget(target)
-- externí odkazy a prázdný odkaz neřešíme
if target == '' or mw.ustring.lower(mw.ustring.sub(target, 1, 4)) == 'http' then
return {}
end
local title = mw.title.new(target)
if not title or not title.exists then
return {}
end
-- jedno přesměrování následujeme
if title.isRedirect and title.redirectTarget then
title = title.redirectTarget
end
local content = title:getContent()
if not content then
return {}
end
return groupsOf(content)
end
local function badge(html, extraClass, tooltip)
return '<span class="dlazdice-odznak' .. (extraClass and (' ' .. extraClass) or '') .. '"'
.. (tooltip and (' title="' .. tooltip .. '"') or '') .. '>' .. html .. '</span>'
end
-- Poskládá odznaky dlaždice (pod sebou):
-- 1. „Po přihlášení“ (automaticky, jen když stránka je zamčená a ruční odznak
-- už není přesně „Po přihlášení“),
-- 2. 🔒 skupiny z kategorií „… (skryté)“,
-- 3. ruční odznak (parametr odznak), pokud je zadán a není to „Po přihlášení“.
-- Když je ruční odznak „Po přihlášení“, zobrazí se na místě automatického (1).
-- Parametry: odkaz, odznak
function p.odznaky(frame)
local args = frame.args
local manual = mw.text.trim(args.odznak or '')
local groups = groupsForTarget(mw.text.trim(args.odkaz or ''))
local locked = #groups > 0
local manualIsLogin = mw.ustring.lower(manual) == mw.ustring.lower(LOGIN)
local parts = {}
if manualIsLogin then
table.insert(parts, badge(manual))
elseif locked then
table.insert(parts, badge(LOGIN))
end
if locked then
-- jeden odznak na skupinu, aby byly úzké a nepřekrývaly ikonu
for _, group in ipairs(groups) do
local g = mw.text.encode(group)
table.insert(parts, badge('🔒 ' .. g, 'dlazdice-odznak-zamek', 'Přístup jen pro skupinu oprávnění: ' .. g))
end
end
if manual ~= '' and not manualIsLogin then
table.insert(parts, badge(manual))
end
if #parts == 0 then
return ''
end
return '<div class="dlazdice-odznaky">' .. table.concat(parts) .. '</div>'
end
return p