Moduuli:Julkisen taiteen luettelo
Siirry navigaatioon
Siirry hakuun
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Julkisen taiteen luettelo/ohje
local p = {}
local function parse_title_row(str)
local ret={}
str=string.gsub(str, "!!", "\n!")
str=string.gsub(str, "<ref[^>]+>.+</ref>", "")
str=string.gsub(str, "<ref.+</ref>", "")
str=string.gsub(str, "<ref[^>]+/>", "")
str=string.gsub(str, "<ref.+/>", "")
str=string.gsub(str, "</?b>", "")
local iterator = mw.text.gsplit(str, "\n!", false)
local n=0
for c in iterator do
local trimmed=mw.text.trim( c )
if ((n>0) or (not (trimmed == ""))) then
table.insert(ret, trimmed )
end
n=n+1
end
return ret
end
local function parse_row(str)
local ret={}
str=string.gsub(str, "||", "\n|")
str=string.gsub(str, "<ref[^>]+>.+</ref>", "")
str=string.gsub(str, "<ref.+</ref>", "")
str=string.gsub(str, "<ref[^>]+/>", "")
str=string.gsub(str, "<ref.+/>", "")
local iterator = mw.text.gsplit(str, "\n|", true)
local n=0
for c in iterator do
local trimmed=mw.text.trim( c )
if ((n>0) or (not (trimmed == ""))) then
table.insert(ret, trimmed )
end
n=n+1
end
return ret
end
local function parse_title_row(str)
local ret={}
str=string.gsub(str, "!!", "\n!")
local iterator = mw.text.gsplit(str, "\n!", false)
local n=0
for c in iterator do
local trimmed=mw.text.trim( c )
if (c and (not (trimmed == ""))) then
table.insert(ret, trimmed )
end
n=n+1
end
return ret
end
local function parse_rows(str)
local iterator = mw.text.gsplit(str, "|-", true)
local title={}
local data={}
for l in iterator do
if (string.find(l, "\n!")) then
title=parse_title_row(l)
else
table.insert(data, parse_row(l))
end
end
ret = {title = title, data = data }
return ret
end
local function parse_list(str)
local iterator = mw.text.gsplit(str, "|}", true)
for l in iterator do
local rows = parse_rows(l)
return rows
end
end
local function parse_lajiteltavaNimi(str)
for lajiteltavanimi in string.gmatch( str, '({{LajiteltavaNimi[^}]+}})' ) do
for etunimi, sukunimi in string.gmatch( lajiteltavanimi, 'LajiteltavaNimi|([^%}%|]+)|([^%}%|]+)' ) do
str=string.gsub(str, lajiteltavanimi, etunimi .." " .. sukunimi)
end
end
return str
end
local function render_tallenna_kuva_button(title, data, sivu, nimiavaruus, kunta, talks)
-- {{Sitaattikuvan latauslinkki
-- |item={{{item|}}}
-- |itemlabel={{{itemlabel|}}} -- Teoksen nimi
-- |wd={{{wd|}}} -- wikidata kohde
-- |p170={{{p170|}}} -- Tekijä
-- |p170blabel={{{p170blabel|}}} -- Tekijän nimi
-- |p571={{{p571|}}}
-- |p2795_fi={{{p2795_fi|}}}
-- |p969={{{p969|}}}
-- |p131={{{p131|}}}
-- |lat={{{lat|}}}
-- |long={{{long|}}}
-- |pvm=4.8.2018
-- |sivun nimi = Luettelo_Porin_julkisista_taideteoksista_ja_muistomerkeistä <noinclude>{{FULLPAGENAMEE}}</noinclude>
-- }}
local frame = mw.getCurrentFrame()
local ret=""
local data2={}
for k, v in pairs(title) do
data2[string.lower(v)] = data[k] or ""
end
local sivun_nimi = string.gsub(sivu, '_', ' ')
if (tonumber(nimiavaruus) > 0) then
sivun_nimi = nimiavaruus ..":" .. string.gsub(sivu, '_', ' ')
end
local params={}
params["item"] = data2["julkinen teos"]
params["p170"] = parse_lajiteltavaNimi(data2["tekijä"])
params["p969"] = ""
params["pvm"] = ""
params["sivun nimi"] = sivun_nimi
params["p170blabel"]=parse_lajiteltavaNimi(data2["tekijä"])
params["itemlabel"]=data2["julkinen teos"]
params["p571"] = data2["julkaistu"]
params["wd"] = data2["wd"]
params["p131"] = data2["alue"]
params["p2795_fi"] = data2["paikka"]
params["p571"] = data2["paljastusvuosi"]
params["paikkalinkki"] = data2["kartalla"]
params["lat"] = ""
params["lon"] = ""
params["kunta"] = kunta
local kuvattubutton= frame:expandTemplate{ title = 'Sitaattikuvan kuvattulinkki', args = params }
for k,talk in pairs(talks) do
if (talk==data2["julkinen teos"]) then
kuvattubutton=frame:expandTemplate{ title = 'Sitaattikuva on jo kuvattu', args = params }
break
end
end
ret = kuvattubutton
ret = ret .. "||" .. frame:expandTemplate{ title = 'Sitaattikuvan latauslinkki', args = params }
return ret
end
local function render_list(l, sivu, nimiavaruus, kunta, talks)
local frame= mw.getCurrentFrame()
local n=0
-- Taulukon aloitus
local ret="{| class='wikitable sortable'\n"
-- Header-otsikot
ret = ret .. "|-\n"
for kk, vv in pairs(l.title) do
if (vv =='Kuva') then
ret = ret .. "! colspan=2 |" .. vv .. "\n"
else
ret = ret .. "! " .. vv .. "\n"
end
end
-- Data
for k,v in pairs(l.data) do
if (n>0) then
row_ret = "|-\n"
add_photo_row=0
for kk, vv in pairs(l.title) do
local title = l.title[kk] or "__%title%__"
local value = v[kk] or ""
if (value == "" and string.lower(l.title[kk]) == "kuva") then
value=render_tallenna_kuva_button(l.title, v, sivu, nimiavaruus, kunta, talks)
add_photo_row=1
end
value = frame:preprocess( value )
row_ret = row_ret .. "|" .. value .."\n"
end
-- show only rows where photo is missing
if add_photo_row==1 then
ret = ret .. row_ret
end
end
n=n+1
end
-- Footer-otsikot
ret = ret .. "|-\n"
for kk, vv in pairs(l.title) do
if (vv =='Kuva') then
ret = ret .. "! colspan=2 |" .. vv .. "\n"
else
ret = ret .. "! " .. vv .. "\n"
end
end
-- Taulukon lopetus
ret = ret .. "|}\n"
return ret
end
local function parse_talk_page()
local title = mw.title.new(mw.title.getCurrentTitle().text, mw.title.getCurrentTitle().namespace+1)
local aineisto = title:getContent() or ""
local otsikot = {}
local ret = {}
-- Haetaan sivun otsikot tauluun.
for w in string.gfind(aineisto, '=+([^=\n]+)=+') do
table.insert(otsikot, mw.text.trim(w))
end
for k,otsikko in pairs(otsikot) do
local uusi_otsikko = string.gsub(otsikko, "^Kuvattu teos ", "")
if (trimmed ~= uusi_otsikko) then
table.insert(ret, uusi_otsikko)
end
end
return ret
end
local function parse(sivu, nimiavaruus, kunta)
-- Haetaan sivun sisältö.
local title = mw.title.new(sivu, nimiavaruus)
local aineisto = title:getContent()
local rendered="";
assert(title, 'Valitettavasti sivun sisällön hakeminen ei onnistunut (virhe 1)')
assert(aineisto, 'Valitettavasti sivun sisällön hakeminen ei onnistunut (virhe 2)')
local talks=parse_talk_page()
-- for k,talk in pairs(talks) do
-- rendered = rendered .. talk
-- end
local iterator = mw.text.gsplit(aineisto, "{|", true)
for l in iterator do
local rows=parse_list(l)
rendered = rendered .. render_list(rows, sivu, nimiavaruus, kunta, talks)
end
return rendered
end
-- sivun hakemiston automaattisesti generoiva funktio
function p.tallennus(frame)
assert(frame.args['nimiavaruus'], 'Nimiavaruus tarvitaan hakemiston tuottamiseksi')
assert(frame.args['sivu'], 'Sivun nimi tarvitaan hakemiston tuottamiseksi')
local kunta = frame.args['kunta'] or ""
local nimiavaruus = frame.args['nimiavaruus']
nimiavaruus = string.gsub(nimiavaruus, '%s', '_')
local sivu = frame.args['sivu']
local sisalto=parse(sivu, nimiavaruus, kunta)
return sisalto
-- return mw.text.jsonEncode(sisalto)
end
return p