Modul:Blättern
Aus Archiv
local p = {}
-- Hilfsfunktion: Holt die Hauptüberschrift (Bildtitel) einer anderen Wiki-Seite local function getRealPageTitle(pageName)
local titleObj = mw.title.new(pageName)
if not titleObj or not titleObj.exists then
return nil
end
-- Holt den rohen Wikitext der Zielseite
local content = titleObj:getContent()
if not content then return pageName end
-- Sucht nach der ersten großen Überschrift wie "= Titel =" oder "== Titel =="
local cleanTitle = content:match("\n=+%s*(.-)%s*=+%s*\n")
-- Falls keine Überschrift gefunden wurde, weiche auf ein Standard-Muster aus
if not cleanTitle or cleanTitle == "" then
cleanTitle = pageName
end
-- Schneidet den Titel ab, falls er zu lang für einen Navigations-Button wird
if mw.ustring.len(cleanTitle) > 35 then
cleanTitle = mw.ustring.sub(cleanTitle, 1, 32) .. "..."
end
return cleanTitle
end
function p.navigation(frame)
-- Aktuellen Seitennamen holen (z.B. "WK:0146")
local currentTitle = mw.title.getCurrentTitle().text
local prefix, numStr = currentTitle:match("^(WK:)(%d+)$")
if not prefix or not numStr then
return ""
end
local currentNum = tonumber(numStr)
local width = #numStr
local formatStr = "%0" .. width .. "d"
local prevNum = currentNum - 1
local nextNum = currentNum + 1
-- CSS Styling im modernen, flachen MediaWiki-Look
local btnStyle = "display: inline-flex; flex-direction: column; align-items: flex-start; padding: 8px 16px; border: 1px solid #a2a9b1; border-radius: 4px; background-color: #f8f9fa; color: #202122; text-decoration: none; min-width: 200px; max-width: 320px; box-shadow: 0 1px 2px rgba(0,0,0,0.05); transition: background-color 0.2s;"
local btnStyleRight = btnStyle:gsub("align%-items: flex%-start;", "align-items: flex-end;")
-- Pfeile
local arrowBack = "←"
local arrowForward = "→"
-- 1. VORHERIGER BUTTON (Wird bei WK:0001 unsichtbar)
local prevHTML = ""
if prevNum >= 1 then
local prevTargetName = prefix .. string.format(formatStr, prevNum)
local prevRealTitle = getRealPageTitle(prevTargetName)
if prevRealTitle then
prevHTML = string.format(
'<a href="%s" style="%s">' ..
'%s' ..
'Vorheriges (%s):' ..
'%s' ..
'</a>',
mw.title.new(prevTargetName):getFullURL(), btnStyle, arrowBack, string.format(formatStr, prevNum), prevRealTitle
)
end
end
-- 2. NÄCHSTER BUTTON (Verschwindet automatisch am Ende des Katalogs)
local nextHTML = ""
local nextTargetName = prefix .. string.format(formatStr, nextNum)
local nextRealTitle = getRealPageTitle(nextTargetName)
if nextRealTitle then
nextHTML = string.format(
'<a href="%s" style="%s">' ..
'%s' ..
'Nächstes (%s):' ..
'%s' ..
'</a>',
mw.title.new(nextTargetName):getFullURL(), btnStyleRight, arrowForward, string.format(formatStr, nextNum), nextRealTitle
)
end
-- Render das Layout
return '
' ..
'
' .. prevHTML .. '
' ..
'' .. nextHTML .. '
' ..
''
end
return p