Stefan Jäger Archiv

Modul:Blättern

Aus Archiv
Version vom 8. August 2026, 14:29 Uhr von Herwig (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „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 "= Tite…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

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