Zum Inhalt springen

Modul:Unterrichtsfilm

Aus Matrix of Time
Version vom 14. April 2026, 23:08 Uhr von Xineohp1506 (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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

local p = {}
local getArgs = require('Module:Arguments').getArgs
local helper = require('Module:Unterrichtsfilm/Helper')

function p.render(frame)
    local args = getArgs(frame)
    local html = mw.html.create('div'):addClass('uf-block')

    -- DISPLAYTITLE setzen
    helper.setDisplayTitle{ title = args.Titel }

    -- Kurzbeschreibung für SMW
    local shortDesc = helper.cleanAndTruncate(args.Beschreibung, 250)

    -- Semantische Speicherung
    helper.setProperty{
        ['FilmTitel']           = args.Titel,
        ['FilmFach']            = args.Fach,
        ['FilmThema']           = args.Thema,
        ['FilmKlassenstufe']    = args.Klassenstufe,
        ['FilmAltersfreigabe']  = args.Altersfreigabe,
        ['FilmTyp']             = args.Typ,
        ['FilmErscheinungsjahr']= args.Erscheinungsjahr,
        ['FilmLänge']           = args.Laenge,
        ['FilmKurzbeschreibung']= shortDesc,
    }

    -- Kategorien
    html:wikitext(helper.addCategories{
        categories = {
            'Unterrichtsfilm/' .. (args.Fach or 'Unbekannt'),
            'Klassenstufe '    .. (args.Klassenstufe or 'Unbekannt'),
            args.Altersfreigabe or '',
            'Filmtyp/'         .. (args.Typ or 'Unbekannt'),
        },
        sortkey = args.Titel or mw.title.getCurrentTitle().text
    })

    -- Haupt-Container: links Text, rechts Bild
    local container = html:tag('div'):addClass('uf-container')
    local left  = container:tag('div'):addClass('uf-left')
    local right = container:tag('div'):addClass('uf-right')

    -- Bild (rechts)
    local bild = args.Bild
    if not bild or bild == '' then
        bild = 'Default_' .. (args.Typ or 'Film') .. '.png'
    end
    right:wikitext('[[Datei:' .. bild .. '|300px|rahmen]]')

    -- Metabox
    local metabox = left:tag('div'):addClass('uf-metabox')

    -- Zeile 0: Überschrift
    metabox:tag('h5'):addClass('uf-meta-title'):wikitext('Metadaten')

    -- Zeile 1: Typ, Erscheinungsjahr, Länge, FSK
    do
        local zeile1 = {}
        if args.Typ then
            table.insert(zeile1, frame:preprocess(
                '{{#fas:' .. helper.getIcon(args.Typ) .. '}} ' .. args.Typ))
        end
        if args.Erscheinungsjahr then
            table.insert(zeile1, frame:preprocess(
                '{{#fas:calendar}} ' .. args.Erscheinungsjahr))
        end
        if args.Laenge then
            table.insert(zeile1, frame:preprocess(
                '{{#fas:clock}} ' .. args.Laenge))
        end
        if args.Altersfreigabe then
            table.insert(zeile1, frame:preprocess(
                '{{#fas:user-shield}} FSK: ' .. args.Altersfreigabe))
        end
        if #zeile1 > 0 then
            metabox:tag('div'):addClass('uf-meta-line')
                :wikitext(table.concat(zeile1, '  •  '))
        end
    end

    -- Zeile 2: Fach, Thema, InfoLink
    do
        local zeile2 = {}
        if args.Fach then
            table.insert(zeile2, frame:preprocess(
                '{{#fas:book-open}} ' .. args.Fach))
        end
        if args.Thema then
            table.insert(zeile2, frame:preprocess(
                '{{#fas:tags}} ' .. args.Thema))
        end
        if args.InfoLink then
            table.insert(zeile2, frame:preprocess(
                '{{#fas:external-link-alt}} [' .. args.InfoLink .. ' Weiterführende Informationen]'))
        end
        if #zeile2 > 0 then
            metabox:tag('div'):addClass('uf-meta-line')
                :wikitext(table.concat(zeile2, '  •  '))
        end
    end

    -- Zeile 3: Warnung
    if args.Warnung and args.Warnung ~= '' then
        metabox:tag('div'):addClass('uf-meta-line uf-warn')
            :wikitext(frame:preprocess(
                '{{#fas:exclamation-triangle}} ' .. args.Warnung))
    end

    -- Zeile 4: Interner Zugriff (nur per Benutzer-CSS sichtbar)
    if args.InternLink and args.InternLink ~= '' then
        metabox:tag('div'):addClass('uf-meta-line uf-intern')
            :wikitext(frame:preprocess(
                '{{#fas:lock}} ' .. args.InternLink))
    end

    -- Serien-Folgen (optional, nur bei Typ=Serie)
    if (args.Typ or ''):lower() == 'serie' and args.Folgen and args.Folgen ~= '' then
        metabox:tag('div'):addClass('uf-meta-line')
            :wikitext(frame:preprocess(
                '{{#fas:list}} Folgen: ' .. args.Folgen))
    end

    -- Beschreibung
    left:tag('h2'):wikitext('Beschreibung')
    left:tag('p'):wikitext(args.Beschreibung or '')

    -- Fragestellungen
    left:tag('h2'):wikitext('Fragestellungen')

    if args.Empfehlung and args.Empfehlung ~= '' then
        left:tag('div'):addClass('uf-bewertung')
            :wikitext(frame:preprocess(
                '{{#fas:thumbs-up}} Empfehlung: ' .. args.Empfehlung))
    end

    if args.Hinweise and args.Hinweise ~= '' then
        left:tag('div'):addClass('uf-hinweis')
            :wikitext(frame:preprocess(
                '{{#fas:exclamation-triangle}} ' .. args.Hinweise))
    end

    left:wikitext('<!-- -->\n' .. (args.Fragestellungen or ''))
	left:wikitext('\n\n') -- Liste sauber schließen

    -- Trailer
    if args.Service and args.Service ~= '' and args.ID and args.ID ~= '' then
        left:tag('h2'):wikitext('Trailer')
        local embed = '{{#ev:' .. args.Service .. '|' .. args.ID .. '||center|Trailer|||autoresize}}'
        left:tag('div'):addClass('uf-video-container')
            :wikitext(frame:preprocess(embed))
    end
    
    -- WikiSEO
    helper.setSEO{
        title       = args.Titel,
        description = shortDesc,
        image       = args.Bild or ('Default_' .. (args.Typ or 'Film') .. '.jpg'),
    }
    
    return tostring(html)
end

return p