Modul:Unterrichtsfilm
Erscheinungsbild
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