23.770
Bearbeitungen
(+ sort/order-args) |
(fix GalerieBilderAusblendungTabelle()) |
||
| (40 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local com = require("Modul:Common") | |||
local dev = require("Modul:Development") | |||
local str = require("Modul:String") | |||
local wik = require("Modul:Wiki") | local wik = require("Modul:Wiki") | ||
local smw = require("Modul:SMW") | |||
local htm = require("Modul:HTML") | |||
local kal = require("Modul:Kalender") | |||
local n_bilder_limit = 200 | |||
local abfrage = "Abfrage Bilder" -- Formular/Vorlage-Seitenname ggf. mit "/Work" | |||
p.gba_basepagename = "FürthWiki:Galerie-Bilder-Ausblendung" | |||
function p.Galerie(frame) | function p.Galerie(frame) | ||
-- mw.log("Galerie(frame)") | -- mw.log("Galerie(frame)") | ||
-- mw.logObject(frame, "frame") | -- mw.logObject(frame.args, "frame.args") | ||
-- Kommando-Zeile zum Debuggen: | -- Kommando-Zeile zum Debuggen: | ||
-- frame=mw.getCurrentFrame(); frame.args={["attr"]="Person",["val"]="Karl Rothammel",["sort"]="Seite",["order"]="asc"}; print(p.Galerie(frame)) | -- frame=mw.getCurrentFrame(); frame.args={["pagename"]="Wolfringstraße";["attr"]="Person;Straße",["val"]="Karl Rothammel;Erlanger Straße",["attr_zeige_nicht"]="ZeigeNichtInStraße;ZeigeNichtInOrt",["sort"]="Seite",["order"]="asc"}; print(p.Galerie(frame)) | ||
local t = "" | local t = "" | ||
local pagename = frame.args["pagename"] or wik.pagename() -- args.pagename zum Debuggen | |||
-- Argumente holen und ggf. default setzen | -- Argumente holen und ggf. default setzen | ||
local args = wik.getArgs(frame.args, {"attr", "val", "sort", "order"}) | local args = wik.getArgs(frame.args, {"attr", "val", "attr_zeige_nicht", "sort", "order"}) | ||
args. | args.sort = args.sort or "Erstellungsdatum, Seite" | ||
args. | args.order = args.order or "desc, asc" | ||
args. | args.attr = str.splitAndStrip(args.attr, ";") | ||
args.val = str.splitAndStrip(args.val or "", ";") | |||
-- Seiten-Selektor | for i = 1, #args.attr do -- default pagename setzen, wenn val nicht angegeben | ||
local selector = "[[Datei:+]][[Kategorie:Bilder]]" | args.val[i] = args.val[i] or pagename | ||
end | |||
args.attr_zeige_nicht = str.splitAndStrip(args.attr_zeige_nicht or "", ";") | |||
-- Galerie-Bilder-Ausblendung-Seite ermitteln | |||
local gba_pagename = p.gba_basepagename .. "/" .. pagename | |||
if not wik.pageExists(gba_pagename) then | |||
gba_pagename = nil | |||
end | |||
-- Bilder-Seiten-Selektor zusammenbauen | |||
local selector = "" | |||
if gba_pagename ~= nil then | |||
selector = selector .. "[[-has subobject::" .. | |||
gba_pagename .. "]]" | |||
else | |||
for i, a in ipairs(args.attr) do | |||
if selector ~= "" then | |||
selector = selector .. " OR " | |||
end | |||
selector = selector .. | |||
"[[Datei:+]][[Kategorie:Bilder]]" .. | |||
"[[" .. a .. "::" .. args.val[i] .. "]]" | |||
a = args.attr_zeige_nicht[i] | |||
if a ~= nil then | |||
selector = selector .. "[[" .. a .. "::!Ja]]" | |||
end | |||
end | |||
end | end | ||
| Zeile 26: | Zeile 59: | ||
t = t .. "{{#set:Bilderanzahl=" .. n_bilder .. "}}" | t = t .. "{{#set:Bilderanzahl=" .. n_bilder .. "}}" | ||
if n_bilder == 0 then | if n_bilder == 0 then | ||
mw.smw.set{["Wartungsmeldung"]="Bilder-Galerie leer"} | |||
else | else | ||
-- Abfrage-Link-Teile | -- Abfrage-Link-Teile | ||
local queryformlink_part1 = | local queryformlink_part1 = -- to do: sehr umständlich umgesetzt. Besser mit table arbeiten | ||
"{{#queryformlink:" .. | "{{#queryformlink:" .. | ||
"form= | "form=" .. abfrage .. | ||
"|link text=" | "|link text=" | ||
local queryformlink_part2 = | local queryformlink_part2 = | ||
"|query string= | "|query string=" | ||
for i, a in ipairs(args.attr) do | |||
"& | if a == "Straße" or a == "Ort" then | ||
queryformlink_part2 = queryformlink_part2 .. | |||
"&" .. abfrage .. "[" .. a .. "]=" .. args.val[i] | |||
else | |||
queryformlink_part2 = queryformlink_part2 .. | |||
"&" .. abfrage .. "[attrname" .. i .. "]=" .. a .. | |||
"&" .. abfrage .. "[attrval" .. i .. "]=" .. args.val[i] | |||
end | |||
end | |||
queryformlink_part2 = queryformlink_part2 .. | |||
"&" .. abfrage .. "[format]=" | |||
local queryformlink_part3 = | local queryformlink_part3 = | ||
"& | "&" .. abfrage .. "[bild1]=" | ||
"& | local queryformlink_part4 = | ||
"&" .. abfrage .. "[limit]=" | |||
local queryformlink_part5 = | |||
"&" .. abfrage .. "[chron_order]=absteigend" .. | |||
"&" .. abfrage .. "[attr_op]=oder" .. | |||
"&_run}}" | "&_run}}" | ||
-- Bilder ausblenden Link | |||
if wik.pageExists(gba_pagename) then | |||
t = t .. "<div style=\"float:right\"><small>" .. | |||
"<nowiki>[</nowiki>[[" .. gba_pagename .. | |||
"|Bilder ausblenden]]<nowiki>]</nowiki> " .. | |||
"(" .. n_bilder .. " vorhanden)" .. | |||
"</small></div>" | |||
end | |||
-- Bilder-Galerie und Abfrage-Links | -- Bilder-Galerie und Abfrage-Links | ||
if n_bilder >= 5 then | |||
t = t .. | |||
"'''Bilder als " .. | |||
queryformlink_part1 .. "Galerie" .. -- link text | |||
queryformlink_part2 .. "Galerie" .. -- format | |||
queryformlink_part3 .. "1" .. -- erstes Bild | |||
queryformlink_part4 .. n_bilder_limit .. -- Bilderanzahl | |||
queryformlink_part5 .. " / " .. | |||
queryformlink_part1 .. "Tabelle" .. -- link text | |||
queryformlink_part2 .. "Tabelle" .. -- format | |||
queryformlink_part3 .. "1" .. -- erstes Bild | |||
queryformlink_part4 .. n_bilder_limit .. -- Bilderanzahl | |||
queryformlink_part5 .. | |||
" anzeigen, sortieren und filtern'''" | |||
end | |||
t = t .. -- die eigentliche Galerie | |||
"{{#ask:" .. selector .. | "{{#ask:" .. selector .. | ||
"|?Dateiinfo" .. | "|mainlabel=-" .. | ||
"|?Seite" .. | |||
"|?Seite.Dateiinfo" .. | |||
"|sort=" .. args.sort .. | "|sort=" .. args.sort .. | ||
"|order=" .. args.order .. | "|order=" .. args.order .. | ||
| Zeile 66: | Zeile 127: | ||
if n_bilder > n_bilder_limit then | if n_bilder > n_bilder_limit then | ||
t = t .. | t = t .. | ||
queryformlink_part1 .. "... weitere Bilder anzeigen" .. | queryformlink_part1 .. "... weitere Bilder anzeigen" .. -- link text | ||
queryformlink_part2 .. "Galerie" .. | queryformlink_part2 .. "Galerie" .. -- format | ||
queryformlink_part3 .. | queryformlink_part3 .. "1" .. -- erstes Bild | ||
"[ | queryformlink_part4 .. "500" .. -- Bilderanzahl | ||
queryformlink_part5 | |||
mw.smw.set{["Wartungsmeldung"]="Bilder-Galerie übervoll"} | |||
end | end | ||
end -- if n_bilder == 0 then ... else ... | end -- if n_bilder == 0 then ... else ... | ||
-- Attribute setzen | |||
local galerie_attribut = {} | |||
for i, a in ipairs(args.attr) do | |||
galerie_attribut[i] = "Attribut:" .. a | |||
end | |||
mw.smw.set{["GalerieAttribut"] = galerie_attribut} | |||
-- mw.logObject(t, "t") | -- mw.logObject(t, "t") | ||
t = frame:preprocess(t) | |||
return t | |||
end | |||
function p.Abfrage(frame) | |||
local t = "" | |||
local frame, pargs = dev.GetFrameAndParentArgs(frame) | |||
-- Selektor zusammenbauen | |||
local selector = "[[Datei:+]][[Kategorie:Bilder]]" | |||
if not com.isEmpty(pargs["Erstellungsdatum von"]) then | |||
selector = selector .. "[[Erstellungsdatum::>=" .. pargs["Erstellungsdatum von"] .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Erstellungsdatum bis"]) then | |||
selector = selector .. "[[Erstellungsdatum::<=" .. kal.dateLastDayCompleter(pargs["Erstellungsdatum bis"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Über Datum von"]) then | |||
selector = selector .. "[[ÜberDatum::>=" .. pargs["Über Datum von"] .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Über Datum bis"]) then | |||
selector = selector .. "[[ÜberDatum::<=" .. kal.dateLastDayCompleter(pargs["Über Datum bis"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Straße"]) then | |||
selector = selector .. "[[Straße::" .. smw.uniFilter(pargs["Straße"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Ort"]) then | |||
selector = selector .. "[[Ort::" .. smw.uniFilter(pargs["Ort"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Urheber"]) then | |||
selector = selector .. "[[Urheber::" .. smw.uniFilter(pargs["Urheber"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Quellangaben"]) then | |||
selector = selector .. "[[Quellangaben::" .. smw.uniFilter(pargs["Quellangaben"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Lizenz"]) then | |||
selector = selector .. "[[Lizenz::" .. smw.uniFilter(pargs["Lizenz"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Signatur"]) then | |||
selector = selector .. "[[Signatur::" .. smw.uniFilter(pargs["Signatur"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Beschreibung"]) then | |||
selector = selector .. "[[Beschreibung::" .. smw.uniFilter(pargs["Beschreibung"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Dateiname"]) then | |||
selector = selector .. "[[Seite::" .. smw.uniFilter(pargs["Dateiname"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["Genre"]) then | |||
selector = selector .. "[[Genre::" .. pargs["Genre"] .. "]]" | |||
end | |||
local selector1, selector2 = "", "" | |||
if not com.isEmpty(pargs["attrname1"]) and not com.isEmpty(pargs["attrval1"]) then | |||
selector1 = "[[" .. pargs["attrname1"] .. "::" .. smw.uniFilter(pargs["attrval1"]) .. "]]" | |||
end | |||
if not com.isEmpty(pargs["attrname2"]) and not com.isEmpty(pargs["attrval2"]) then | |||
selector2 = "[[" .. pargs["attrname2"] .. "::" .. smw.uniFilter(pargs["attrval2"]) .. "]]" | |||
end | |||
if pargs["attr_op"] == "oder" and selector1 ~= "" and selector2 ~= "" then | |||
selector = selector .. selector1 .. " OR " .. selector .. selector2 | |||
else | |||
selector = selector .. selector1 .. selector2 | |||
end | |||
-- Anzahl der Ergebnisse | |||
n = mw.smw.ask(selector .. "|format=count") | |||
t = t .. "'''Anzahl der Ergebnisse: " .. n .. "'''" | |||
if n == 0 then | |||
t = t .. "<br/>" .. | |||
"Es konnten keine Bilder mit diesen Vorgaben gefunden werden." | |||
else | |||
if not com.isEmpty(pargs["limit"]) and n > tonumber(pargs["limit"]) then | |||
local n_anzeige = n - (pargs["bild1"] or 1) + 1 | |||
if n_anzeige > tonumber(pargs["limit"]) then | |||
n_anzeige = pargs["limit"] | |||
end | |||
t = t .. " (davon " .. n_anzeige .. " angezeigt)" | |||
end | |||
-- Die eigentliche Ergebnis-Anzeige | |||
local args = {selector} | |||
args["sort"] = "Erstellungsjahr,Seite" | |||
if pargs["chron_order"] == "aufsteigend" then | |||
args["order"] = "asc,asc" | |||
else | |||
args["order"] = "desc,asc" | |||
end | |||
if pargs["format"] == "Tabelle" then | |||
for _, a in ipairs{"Beschreibung", "Ort", "Straße", | |||
"Erstellungstag", "Erstellungsjahr", "Urheber", | |||
"Quellangaben", "Lizenz", "Signatur"} do | |||
table.insert(args, "?" .. a) | |||
end | |||
args["mainlabel"] = "Bild" | |||
args["format"] = "table" | |||
else | |||
table.insert(args, "?Dateiinfo") | |||
args["format"] = "gallery" | |||
args["searchlabel"] = "" -- erstmal kein "... weitere Ergebnisse anzeigen" => to do | |||
end | |||
args["limit"] = pargs["limit"] | |||
if not com.isEmpty(pargs["bild1"]) then | |||
args["offset"] = ((tonumber(pargs["bild1"]) or 1) - 1) | |||
end | |||
t = t .. frame:callParserFunction("#ask", args) | |||
end | |||
t = frame:preprocess(t) | |||
return t | |||
end | |||
function p.GalerieBilderAusblendungTabelle(frame) | |||
t = "" | |||
-- Seiten mit übervollen Bilder-Galerien abfragen | |||
local query = {"[[:+]][[Bilderanzahl::>" .. (n_bilder_limit + 1 ) .."]]", | |||
"?#-", "?Bilderanzahl", "?KlassenName", "?Kategorie#-", | |||
"?GalerieAttribut#-", | |||
mainlabel = "-", sort = "Bilderanzahl", order = "desc", limit = 200} | |||
uebervolle_seiten = mw.smw.ask(query) or {} | |||
-- Unterseiten | |||
query = {"[[Seite::~" .. p.gba_basepagename .. "/*]]", | |||
"?#-", limit = 10000, mainlabel = "-"} | |||
query = mw.smw.ask(query) or {} | |||
for _, q in ipairs(query) do | |||
q = string.sub(q[1], #p.gba_basepagename + 2) | |||
local query2 = {"[[" .. q .."]]" .. | |||
"[[Bilderanzahl::<" .. n_bilder_limit .."]]", | |||
"?Bilderanzahl", "?KlassenName", "?Kategorie#-", "?GalerieAttribut#-"} | |||
query2 = mw.smw.ask(query2) | |||
if query2 ~= nil then | |||
table.insert(uebervolle_seiten, {q, | |||
["Bilderanzahl"] = query2[1]["Bilderanzahl"], | |||
["KlassenName"] = query2[1]["KlassenName"], | |||
["Kategorie"] = query2[1]["Kategorie"], | |||
["GalerieAttribut"] = query2[1]["GalerieAttribut"]}) | |||
end | |||
end | |||
-- Tabelle zusammenbauen | |||
if #uebervolle_seiten == 0 then | |||
t = t .. "'''Es wurden keine Seiten gefunden'''\n" | |||
else | |||
t = t .. "'''" .. #uebervolle_seiten .. " Seiten gefunden'''\n" | |||
local hidden_categories = wik.getHiddenCategories() | |||
t = t .. htm.tableHeader{ | |||
"Seite", "Bilderanzahl", "Klasse<sup>1)</sup>", | |||
"Galerie-Attribute<sup>2)</sup>", "Kategorien", "Bilder ausblenden"} | |||
for _, u in ipairs(uebervolle_seiten) do | |||
local lemma = u[1] | |||
-- KlassenName | |||
local klassen = u["KlassenName"] or {} | |||
if type(klassen) ~= "table" then | |||
klassen = {klassen} | |||
end | |||
klassen = table.concat(klassen, ", ") | |||
-- Kategorie | |||
local kategorien = u["Kategorie"] or {} | |||
if type(kategorien) ~= "table" then | |||
kategorien = {kategorien} | |||
end | |||
local kategorien_tmp = {} | |||
for _, k in ipairs(kategorien) do | |||
if not hidden_categories[k] then | |||
k = "[[:" .. k .. "|" .. string.sub(k, 11) .. "]]" | |||
table.insert(kategorien_tmp, k) | |||
end | |||
end | |||
kategorien = table.concat(kategorien_tmp, ", ") | |||
-- GalerieAttribut | |||
local galerie_attr = u["GalerieAttribut"] or {} | |||
if type(galerie_attr) ~= "table" then | |||
galerie_attr = {galerie_attr} | |||
end | |||
local galerie_attr_tmp = {} | |||
for _, g in ipairs(galerie_attr) do | |||
g = "[[:" .. g .. "|" .. string.sub(g, 10) .. "]]" | |||
table.insert(galerie_attr_tmp, g) | |||
end | |||
galerie_attr = table.concat(galerie_attr_tmp, ", ") | |||
local gba_link = | |||
"[[" .. p.gba_basepagename .. "/" .. lemma .. "|Hier]]" | |||
t = t .. htm.tableLine{"[[" .. lemma .. "]]", | |||
{u["Bilderanzahl"], td_args = "style=\"text-align: center;\""}, | |||
{klassen, td_args = "style=\"text-align: center;\""}, | |||
{galerie_attr, td_args = "style=\"text-align: center;\""}, | |||
kategorien, | |||
{gba_link, td_args = "style=\"text-align: center;\""}} | |||
end | |||
t = t .. htm.tableFooter() | |||
t = t .. "'''Anmerkungen:'''\n" | |||
t = t .. ": 1) Entspricht <code><nowiki>{{...}}</nowiki></code>\n" | |||
t = t .. ": 2) Entspricht <code><nowiki>{{Bilder dies...}}</nowiki></code>\n" | |||
end | |||
t = frame:preprocess(t) | t = frame:preprocess(t) | ||
return t | return t | ||