Modul:Datei/Work: Unterschied zwischen den Versionen

Aus FürthWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 93: Zeile 93:
-- normale Zeilen
-- normale Zeilen
t = t .. p.attrZeile("Urheber", p.attrValList("Urheber", pargs))
t = t .. p.attrZeile("Urheber", p.attrValList("Urheber", pargs), nil, nil, "fileinfotpl_aut") -- mit Setzen der Medienbetracher-Tags
t = t .. p.attrZeile("Quellangaben", p.attrVal("Quellangaben", pargs))
t = t .. p.attrZeile("Quellangaben", p.attrVal("Quellangaben", pargs))
Zeile 112: Zeile 112:
-- Erstellungsdatum/ÜberDatum
-- Erstellungsdatum/ÜberDatum
for _, d in ipairs{
local date = pargs["Erstellungsdatum"] or ""
{"Erstellungsdatum", "Erstellungstag", "Erstellungsjahr"},
if date ~= "" then
{"ÜberDatum", "ÜberTag", "ÜberJahr"}} do
-- t = t .. p.attrZeile("Erstellungsdatum", lfd.linkFormDate(date, "Erstellungsdatum", "Erstellungstag", "Erstellungsjahr"))
local date = pargs[d[1]] or ""
t = t .. p.zeile("englische Notation<br>(nötig für Medienbetrachter)", date, nil, nil, "fileinfotpl_date")
if date ~= "" then
end
t = t .. p.attrZeile(d[1], lfd.linkFormDate(date, d[1], d[2], d[3]))
date = pargs["ÜberDatum"] or ""
end
if date ~= "" then
t = t .. p.attrZeile("ÜberDatum", lfd.linkFormDate(date, "ÜberDatum", "ÜberTag", "ÜberJahr"))
end
end
Zeile 125: Zeile 126:
t = t .. p.attrZeile("Signatur", p.attrVal("Signatur", pargs))
t = t .. p.attrZeile("Signatur", p.attrVal("Signatur", pargs))
t = t .. p.attrZeile("Länge", p.attrVal("Länge", pargs))
t = t .. p.attrZeile("Länge", p.attrVal("Länge", pargs))
t = t .. p.attrZeile("Lizenz", p.attrVal("Lizenz", pargs))
 
-- Lizenz mit Setzen der Medienbetracher-Tags
if not com.isEmpty(pargs["Lizenz"]) then
t = t .. "<td class=\"fileinfo-paramfield\">'''[[Attribut:Lizenz|Lizenz]]'''</td>" ..
"<td colspan = \"3\">" ..
"<span class=\"licensetpl\">" ..
"<span class=\"licensetpl_short\">" ..
pargs["Lizenz"] .. "</span></span></td>"
end
 
-- normale Zeilen
t = t .. p.attrZeile("UploadCommons", p.attrVal("UploadCommons", pargs))
t = t .. p.attrZeile("UploadCommons", p.attrVal("UploadCommons", pargs))
t = t .. p.attrZeile("Beschreibung", p.attrVal("Beschreibung", pargs), nil, nil, "fileinfotpl_desc")
t = t .. p.attrZeile("Beschreibung", p.attrVal("Beschreibung", pargs), nil, nil, "fileinfotpl_desc") -- mit Setzen der Medienbetracher-Tags
-- Dateiinfo erstellen
-- Dateiinfo erstellen
local dateiinfo, infotext = "", ""
local dateiinfo, infotext = "", ""
if not com.isEmpty(pargs["Beschreibung"]) then -- Beschreibung
if not com.isEmpty(pargs["Beschreibung"]) then -- Beschreibung
dateiinfo = dateiinfo .. wik.wikiTextLimit(pargs["Beschreibung"], 100) -- max. Zeichenanzahl Bild-Unterschrift
dateiinfo = dateiinfo .. wik.wikiTextLimit(pargs["Beschreibung"], 100) -- max. Zeichenanzahl Bild-Unterschrift
if mw.ustring.len(dateiinfo) ~= mw.ustring.len(pargs["Beschreibung"]) then
if mw.ustring.len(dateiinfo) ~= mw.ustring.len(pargs["Beschreibung"]) then
Zeile 138: Zeile 149:
end
end
end
end
local urheber = str.splitAndStrip(pargs["Urheber"] or "", ";") -- Urheber
local urheber = str.splitAndStrip(pargs["Urheber"] or "", ";") -- Urheber
if #urheber > 0 then
if #urheber > 0 then
for u = 1, #urheber do
for u = 1, #urheber do
Zeile 156: Zeile 167:
infotext = infotext .. "<br>"
infotext = infotext .. "<br>"
end
end
infotext = infotext .. wob.attr_text(d) .. ": " .. lfd.linkFormDate(date)
-- infotext = infotext .. wob.attr_text(d) .. ": " .. lfd.linkFormDate(date)
end
end
end
end
Zeile 174: Zeile 185:
t = t .. p.zeile("[[Attribut:Dateiinfo|Dateiinfo]] '''<br>(Bild-Unterschrift und Info-Box,<br>automatisch erstellt)''' ", "[[Dateiinfo::" .. dateiinfo .. "]]")
t = t .. p.zeile("[[Attribut:Dateiinfo|Dateiinfo]] '''<br>(Bild-Unterschrift und Info-Box,<br>automatisch erstellt)''' ", "[[Dateiinfo::" .. dateiinfo .. "]]")
end
end
 
t = t .. p.zeile("Medienbetrachter-Zeile'''<br>(automatisch erstellt)''' ", (pargs["Quellangaben"] or "") .. "&nbsp; &#x25BD; mehr Infos &#x25BD;", nil, nil, "fileinfotpl_src")
 
-- Tabellenende mit sem. Browsen
-- Tabellenende mit sem. Browsen
t = t .. p.zeile("[[Bild:IconSearch.svg|16px|Semantisches Browsen|link=Spezial:Durchsuchen/{{FULLPAGENAME}}]]",
t = t .. p.zeile("[[Bild:IconSearch.svg|16px|Semantisches Browsen|link=Spezial:Durchsuchen/{{FULLPAGENAME}}]]",

Aktuelle Version vom 27. Dezember 2025, 19:06 Uhr

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

local p = {}

local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local lfd = require("Modul:LinkFormDatum")
local wob = require("Modul:Wörterbuch")

function p.Dateibox(frame)
--	mw.log("Dateibox(frame)")
--	mw.logObject(frame, "frame")
	-- Kommando-Zeile zum Debuggen:
	-- =p.Dateibox{pargs={["fullpagename"]="Datei:test.jpg",["Genre"]="g1;g2",["Attribut1"]="a1",["Wert1"]="w1;w2"}}
	-- =p.Dateibox{pargs={["fullpagename"]="Datei:test.jpg",["Beschreibung"]="Int. Tag gegen Gewalt an Frauen: Aktive vom ''Unabhängige Frauen Fürth e. V.'' an einem Infostand, Nov. 2019"}}
	-- =p.Dateibox{pargs={["fullpagename"]="Datei:test.jpg",["Attribut1"]="Gebäude",["Wert1"]="Wolfringstraße 1",["Attribut2"]="Gebäude",["Wert2"]="Königstraße 86"}}
	local t = ""
	
	if wik.namespace() == "Datei" then
	
		local frame, pargs = dev.GetFrameAndParentArgs(frame)
		local title = pargs["fullpagename"] or wik.fullpagename()					-- pargs["fullpagename"] zum Testen/Debuggen
		local v = ""
	
		-- Tabellenkopf
		t = t .. "<table class = \"wikitable\">"
		t = t .. "<th colspan = \"4\">" .. title .. "</th>"
	
		-- Genre-Kategorien
		v = ""
		for i, g in ipairs(str.splitAndStrip(pargs["Genre"], ";")) do
			if i > 1 then
				v = v .. ", "
			end
			v = v .. "[[:Kategorie:" .. g .. "|" .. g .. "]]{{#set:Genre=" .. g .. "}}[[Kategorie:" .. g .. "]]"
		end
		t = t .. p.attrZeile("Genre", v)
	
		-- Freiattribute
		local aw = {}
		local aw_fail = false
		for i = 1, 6 do
			local a = pargs["Attribut" .. i] or ""
			local w = pargs["Wert" .. i] or ""
			if a ~= "" and  w ~= "" then
				aw[a] = (aw[a] or "") .. w .. ";"									-- Werte zusammenführen
			elseif a ~= "" or  w ~= "" then
				aw_fail = true
			end
		end
		if aw_fail then
			t = t .. "[[Kategorie:Freiattribut-Fehler]]"
		end
		for a, w in pairs(aw) do
			if a == "Gebäude" then													-- zusätzlich Gebäude nach StraßeHnr suchen und hinzufügen
				local gebaeude_wert = {}
				for _, e in ipairs(str.splitAndStrip(w, ";")) do					-- direkt über Wertx angegebene Gebäude
					gebaeude_wert[e] = true
				end
				local gebaeude_query = {}
				for g, _ in pairs(gebaeude_wert) do									-- über query ermittelte Gebäude
					local q = "[[:+]][[Kategorie:Gebäude]][[StraßeHnr::" .. g .. "]]|?#-"
					q = mw.smw.ask(q) or {}
					for _, qg in ipairs(q) do
						qg = qg[1]
						if gebaeude_wert[qg] ~= true then							-- nur, wenn nicht schon direkt angegeben (auch nil!)
							gebaeude_query[qg] = true
						end
					end
				end
				v = ""				 												-- jetzt den Anzeigetext zusammenbauen
				for g, _ in pairs(gebaeude_wert) do									-- erst die direkt angegebenen Gebäude
					if v ~= "" then
						v = v .. ", "
					end
					v = v .. "[[" .. a .. "::" .. g .. "]]"
				end
				local v_query = ""	    											-- dann die via query ermittelten Gebäude
				for g, _ in pairs(gebaeude_query) do
					if v_query ~= "" then
						v_query = v_query .. ", "
					end
					v_query = v_query .. "[[" .. a .. "::" .. g .. "]]"
				end
				if v_query ~= "" then
					v = v .. "<br>automatisch ermittelt über Straße/Hausnummer: " .. v_query
				end
			else
				v = p.attrValList(a, {[a] = w})
			end
			t = t .. p.attrZeile(a, v)
		end
	
		-- normale Zeilen
		t = t .. p.attrZeile("Urheber",			p.attrValList("Urheber", pargs), nil, nil, "fileinfotpl_aut") -- mit Setzen der Medienbetracher-Tags
		t = t .. p.attrZeile("Quellangaben",	p.attrVal("Quellangaben", pargs))
	
		-- Ort/Straße mit Ausblendung
		for _, a in ipairs{{"Straße", "ZeigeNichtInStraße"}, {"Ort", "ZeigeNichtInOrt"}} do
			v = p.attrValList(a[1], pargs)
			if v ~= "" then
				t = t .. p.zeile("[[Attribut:" .. a[1] .. "|" .. wob.attr_text(a[1]) .. "]]", v, "ausgeblendet:",
					"[[" .. a[2] .. "::" .. (pargs[a[2]] or "Nein") .. "]]")
			end
		end
	
		-- Dateiart/Dateityp
		local extension = p.getExtension(title)
		local filekind = p.getFilekind(extension)
		t = t .. p.attrZeile("Dateiart", "[[Dateiart::" .. filekind .. "]]", 
			"Dateityp", "[[Dateityp::" .. extension .. "]]")
	
		-- Erstellungsdatum/ÜberDatum
		local date = pargs["Erstellungsdatum"] or ""
		if date ~= "" then
--			t = t .. p.attrZeile("Erstellungsdatum", lfd.linkFormDate(date, "Erstellungsdatum", "Erstellungstag", "Erstellungsjahr"))
			t = t .. p.zeile("englische Notation<br>(nötig für Medienbetrachter)", date, nil, nil, "fileinfotpl_date")
		end
		date = pargs["ÜberDatum"] or ""
		if date ~= "" then
			t = t .. p.attrZeile("ÜberDatum", lfd.linkFormDate(date, "ÜberDatum", "ÜberTag", "ÜberJahr"))
		end
	
		-- normale Zeilen
		t = t .. p.attrZeile("Seitennummer",	p.attrValList("Seitennummer", pargs))
		t = t .. p.attrZeile("Signatur",		p.attrVal("Signatur", pargs))
		t = t .. p.attrZeile("Länge",			p.attrVal("Länge", pargs))

		-- Lizenz mit Setzen der Medienbetracher-Tags
		if not com.isEmpty(pargs["Lizenz"]) then
			t = t .. "<td class=\"fileinfo-paramfield\">'''[[Attribut:Lizenz|Lizenz]]'''</td>" ..
				"<td colspan = \"3\">" ..
					"<span class=\"licensetpl\">" ..
						"<span class=\"licensetpl_short\">" ..
							pargs["Lizenz"] .. "</span></span></td>"
		end

		-- normale Zeilen
		t = t .. p.attrZeile("UploadCommons",	p.attrVal("UploadCommons", pargs))
		t = t .. p.attrZeile("Beschreibung",	p.attrVal("Beschreibung", pargs), nil, nil, "fileinfotpl_desc") -- mit Setzen der Medienbetracher-Tags
	
		-- Dateiinfo erstellen
		local dateiinfo, infotext = "", ""
		if not com.isEmpty(pargs["Beschreibung"]) then							-- Beschreibung
			dateiinfo = dateiinfo .. wik.wikiTextLimit(pargs["Beschreibung"], 100)	-- max. Zeichenanzahl Bild-Unterschrift
			if mw.ustring.len(dateiinfo) ~= mw.ustring.len(pargs["Beschreibung"]) then
				dateiinfo = dateiinfo .. " ..."
				infotext = infotext .. pargs["Beschreibung"]
			end
		end
		local urheber = str.splitAndStrip(pargs["Urheber"] or "", ";")			-- Urheber
		if #urheber > 0 then
			for u = 1, #urheber do
				if wik.pageExists(urheber[u]) then
					urheber[u] = "[[" .. urheber[u] .. "]]"
				end
			end
			if infotext ~= "" then
				infotext = infotext .. "<br>"
			end
			infotext = infotext .. wob.attr_text("Urheber") .. ": " .. table.concat(urheber, ", ")
		end
		for _, d in ipairs{"Erstellungsdatum", "ÜberDatum"} do						-- Erstellungsdatum, ÜberDatum
			date = pargs[d] or ""
			if date ~= "" then
				if infotext ~= "" then
					infotext = infotext .. "<br>"
				end
--				infotext = infotext .. wob.attr_text(d) .. ": " ..	lfd.linkFormDate(date)
			end
		end
		if not com.isEmpty(pargs["Lizenz"]) then									-- Lizenz
			if infotext ~= "" then
				infotext = infotext .. "<br>"
			end
			infotext = infotext .. wob.attr_text("Lizenz") .. ": " .. pargs["Lizenz"]
		end
		if infotext ~= "" then
			if dateiinfo ~= "" then
				dateiinfo = dateiinfo .. " "
			end
			dateiinfo = dateiinfo .. "{{#info:" .. infotext .. "|note}}"
		end
		if dateiinfo ~= "" then
			t = t .. p.zeile("[[Attribut:Dateiinfo|Dateiinfo]] '''<br>(Bild-Unterschrift und Info-Box,<br>automatisch erstellt)''' ", "[[Dateiinfo::" .. dateiinfo .. "]]")
		end

		t = t .. p.zeile("Medienbetrachter-Zeile'''<br>(automatisch erstellt)''' ", (pargs["Quellangaben"] or "") .. "&nbsp; &#x25BD; mehr Infos &#x25BD;", nil, nil, "fileinfotpl_src")

		-- Tabellenende mit sem. Browsen
		t = t .. p.zeile("[[Bild:IconSearch.svg|16px|Semantisches Browsen|link=Spezial:Durchsuchen/{{FULLPAGENAME}}]]",
			"[[Spezial:Durchsuchen/{{FULLPAGENAME}}|Semantisches Browsen]] / {{#queryformlink:form=Abfrage Bilder|link text=Bilder-Suche}}")
		t = t .. "</table>"
		
		-- Seite setzen
		t = t .. "{{#set:Seite=" .. wik.fullpagename() .. "}}"
	
--		mw.logObject(t, "t")
		t = frame:preprocess(t)

	end	-- if wik.namespace() == "Datei" then

--	mw.logObject(t, "t")
	return t
end

function p.getExtension(filename)
	local extension = filename:match("^.+%.([^%.]+)$")
    return mw.ustring.lower(extension)
end

function p.getFilekind(filetype)
	local t = {
		["Bild"] = {"webp", "png", "gif", "jpg", "jpeg", "svg"},
		["Dokument"] = {"pdf"},
		["Audio"] = {"mp3", "ogg", "oga", "flac", "opus", "wav"},
		["Midi"] = {"midi", "mid"},
		["Video"] = {"webm", "mp4", "m4v", "ogv", "mpg", "mpeg"},
		["3D-Modell"] = {"obj", "glb", "gltf"},
	}
	for key, values in pairs(t) do
        for _, value in ipairs(values) do
            if value == filetype then
                return key  -- Bricht beide Schleifen ab und gibt den Key zurück
            end
        end
	end
	return ""  -- Gib leeren String zurück, wenn nichts gefunden wurde
end

function p.attrVal(a, pargs)													-- Wert zu Attribut wandeln
	local t = ""
	local v = pargs[a] or ""
	if v ~= "" then
		t = t .. "[[" .. a .. "::" .. v .. "]]"
	end
	return t
end
	
function p.attrValList(a, pargs)												-- Werteliste zu Attributen wandeln
	local t = ""
	local l = str.splitAndStrip(pargs[a] or "", ";")
	for i, v in ipairs(l) do
		if i > 1 then
			t = t .. ", "
		end
		t = t .. "[[" .. a .. "::" .. v .. "]]"
	end
	return t
end
	
function p.attrZeile(a1, v1, a2, v2, id1)										-- Tabellenzeile mit max. 2 Attributen
	local t = ""
	if v1 ~= "" then
		a1 = "[[Attribut:" .. a1 .. "|" .. wob.attr_text(a1) .. "]]"
		if a2 ~= nil and v2 ~= nil and v2 ~= "" then
			a2 = "[[Attribut:" .. a2 .. "|" .. wob.attr_text(a2) .. "]]"
		end
		t = t .. p.zeile(a1, v1, a2, v2, id1)
	end
	return t
end

function p.zeile(a1, v1, a2, v2, id1)											-- Tabellenzeile mit max. 2x2 Einträgen
	local t = ""
	if v1 ~= "" then
		t = t .. "<tr>"
		if id1 == nil then
			t = t .. "<td>'''" .. a1 .. "'''</td>"
		else
			t = t .. "<td id=\"" .. id1 .. "\" class=\"fileinfo-paramfield\">'''" .. a1 .. "'''</td>"
		end
		if a2 == nil or v2 == nil or v2 == "" then
			t = t .. "<td colspan = \"3\">" .. v1 .. "</td>"
		else
			t = t .. "<td>" .. v1 .. "</td>"
			t = t .. "<td>'''" .. a2 .. "'''</td>"
			t = t .. "<td>" .. v2 .. "</td>"
		end
		t = t .. "</tr>"
	end
	return t
end

return p