Zuletzt bearbeitet vor einer Woche
von Xineohp1506

Modul:LPON/EpisodeOutput: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 2: Zeile 2:
local helper = require('Module:LPON/Helper')
local helper = require('Module:LPON/Helper')


-- Funktion zur tabberbasierten Ausgabe der Folgen mit HTML-Tabellen und Wiki-Syntax
-- Funktion zur tabberbasierten Ausgabe der Folgen mit generierten VOD-Links
function episodeOutput.inside(frame, cleanProjektname)
function episodeOutput.inside(frame, cleanProjektname)
     if not mw.smw then
     if not mw.smw then
Zeile 14: Zeile 14:
     -- Abfrage-String erstellen
     -- Abfrage-String erstellen
     local query = string.format(
     local query = string.format(
         "[[LPON:Projekt::%s]][[LPON:Typ::Episode]]|?LPON:Episodennummer|?LPON:Episodentitel|?LPON:Description|?LPON:VOD-Link",
         "[[LPON:Projekt::%s]][[LPON:Typ::Episode]]|?LPON:Episodennummer|?LPON:Episodentitel|?LPON:Description|?LPON:Service|?LPON:ID",
         cleanProjektname
         cleanProjektname
     )
     )
Zeile 30: Zeile 30:
         local episodeTitle = result.printouts["LPON:Episodentitel"] and result.printouts["LPON:Episodentitel"][1] or "Ohne Titel"
         local episodeTitle = result.printouts["LPON:Episodentitel"] and result.printouts["LPON:Episodentitel"][1] or "Ohne Titel"
         local description = result.printouts["LPON:Description"] and result.printouts["LPON:Description"][1] or "Keine Beschreibung verfügbar"
         local description = result.printouts["LPON:Description"] and result.printouts["LPON:Description"][1] or "Keine Beschreibung verfügbar"
         local vodLink = result.printouts["LPON:VOD-Link"] and result.printouts["LPON:VOD-Link"][1] or nil
         local service = result.printouts["LPON:Service"] and result.printouts["LPON:Service"][1] or nil
        local videoID = result.printouts["LPON:ID"] and result.printouts["LPON:ID"][1] or nil


         -- Staffelnummer bestimmen (z. B. alle 20 Folgen eine neue Staffel)
         -- Staffelnummer bestimmen (z. B. alle 20 Folgen eine neue Staffel)
Zeile 40: Zeile 41:
         end
         end


         -- Link zur Plattform (Wiki-Syntax)
         -- Link zur Plattform generieren
         local vodWikiLink = vodLink and "[" .. vodLink .. " Zur Plattform]" or "PRIVAT"
         local vodWikiLink = "PRIVAT"
        if service and videoID then
            local videoLink = helper.getVideoLink(service, videoID)
            if videoLink then
                vodWikiLink = "[" .. videoLink .. " " .. service:gsub("^%l", string.upper) .. "]"
            end
        end


         -- HTML-Tabelleintrag hinzufügen
         -- HTML-Tabelleintrag hinzufügen
Zeile 49: Zeile 56:
             episodeTitle,
             episodeTitle,
             description,
             description,
             vodWikiLink
             frame:preprocess(vodWikiLink)
         ))
         ))
     end
     end

Version vom 19. Dezember 2024, 16:21 Uhr

Die Dokumentation für dieses Modul kann unter Modul:LPON/EpisodeOutput/Doku erstellt werden

local episodeOutput = {}
local helper = require('Module:LPON/Helper')

-- Funktion zur tabberbasierten Ausgabe der Folgen mit generierten VOD-Links
function episodeOutput.inside(frame, cleanProjektname)
    if not mw.smw then
        return "Semantic MediaWiki-Erweiterung nicht gefunden."
    end

    if not cleanProjektname or cleanProjektname == "" then
        return "Kein Projekt angegeben."
    end

    -- Abfrage-String erstellen
    local query = string.format(
        "[[LPON:Projekt::%s]][[LPON:Typ::Episode]]|?LPON:Episodennummer|?LPON:Episodentitel|?LPON:Description|?LPON:Service|?LPON:ID",
        cleanProjektname
    )

    local queryResult = mw.smw.getQueryResult(query)

    if not queryResult or not queryResult.results then
        return "Keine Folgen für dieses Projekt gefunden."
    end

    -- Folgen nach Tabs aufteilen
    local tabGroups = {}
    for _, result in ipairs(queryResult.results) do
        local episodeNumber = result.printouts["LPON:Episodennummer"] and result.printouts["LPON:Episodennummer"][1] or 0
        local episodeTitle = result.printouts["LPON:Episodentitel"] and result.printouts["LPON:Episodentitel"][1] or "Ohne Titel"
        local description = result.printouts["LPON:Description"] and result.printouts["LPON:Description"][1] or "Keine Beschreibung verfügbar"
        local service = result.printouts["LPON:Service"] and result.printouts["LPON:Service"][1] or nil
        local videoID = result.printouts["LPON:ID"] and result.printouts["LPON:ID"][1] or nil

        -- Staffelnummer bestimmen (z. B. alle 20 Folgen eine neue Staffel)
        local season = math.floor((episodeNumber - 1) / 20) + 1
        local tabName = string.format("%02d - %02d", (season - 1) * 20 + 1, season * 20)

        if not tabGroups[tabName] then
            tabGroups[tabName] = {}
        end

        -- Link zur Plattform generieren
        local vodWikiLink = "PRIVAT"
        if service and videoID then
            local videoLink = helper.getVideoLink(service, videoID)
            if videoLink then
                vodWikiLink = "[" .. videoLink .. " " .. service:gsub("^%l", string.upper) .. "]"
            end
        end

        -- HTML-Tabelleintrag hinzufügen
        table.insert(tabGroups[tabName], string.format(
            '<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>',
            episodeNumber,
            episodeTitle,
            description,
            frame:preprocess(vodWikiLink)
        ))
    end

    -- Tabber-Ausgabe generieren
    local wikitextOutput = '<tabber>'
    for tabName, episodes in pairs(tabGroups) do
        wikitextOutput = wikitextOutput .. string.format(
            "\n%s=\n<table class='lpnon-episode-table'>\n<thead>\n<tr><th>Nr.</th><th>Titel</th><th>Beschreibung</th><th>VOD</th></tr>\n</thead>\n<tbody>\n%s\n</tbody>\n</table>\n|-|\n",
            tabName,
            table.concat(episodes, "\n")
        )
    end
    wikitextOutput = wikitextOutput .. '</tabber>'

    -- Wikitext verarbeiten
    return frame:preprocess(wikitextOutput)
end

return episodeOutput