Modul:Brug Wikidata/sandkasse: Forskelle mellem versioner

Content deleted Content added
m wip
wip (2)
Linje 580:
end
-- sorter, hvis angivet (og der er mere end ét udsagn)
-- TODO Sort if requested
if ( args.sort or "" ) ~= "" and (#statements > 1) then
local dump = require("Modul:Sandkasse/Poul G/dump")
-- args.sort fortolkes og resultatet lægges i tabellen sortParsed
for k, v in pairs(statements) do
local sortArgs, sortParsed = "P1545- værdi- fejl", {}
if v["qualifiers"][args.sort] ~= nil then
for sortPart in sortArgs:gmatch("%S*") do -- der kan angives flere sorteringskriterier adskildt af mellemrum; de overordnede angives først
v["sortkey"] = v["qualifiers"][args.sort][1]["datavalue"]["value"]
if a.sortkeysortPart ~= nil"" then
local _, _, num, ascdesc = sortPart:find("[Pp](%d+)([+-]?)") -- der kan sorteres efter kvalifikatorer angivet som fx P1545, evt efterstillet med +/- for stigende/faldende sortering
if b.sortkey ~= nilnum then
table.insert(sortParsed, {type="P", key="P" .. num, ascdesc=ascdesc})
else
local _, _, value, ascdesc = mw.ustring.lower(sortPart):find("(værdi)([+-]?)") -- eller der kan sorteres (alfabetisk) efter de viste værdier for udsagnet, fx værdi-
if value then
table.insert(sortParsed, {type="VÆRDI", ascdesc=ascdesc})
else
mw.addWarning("ugyldigt sorterings-element: " .. sortPart)
end
end
end
end
 
-- dan sorteringsnøgle for de enkelte statements (for hvert kriterie)
for k, vstmt in pairs(statements) do
stmt.sortKeys = {}
for ks, vs in pairs(sortParsed) do
local sortKey = "?"
if vs.type == "P" then
if stmt.qualifiers
and stmt.qualifiers[vs.key]
and stmt.qualifiers[vs.key][1]
and stmt.qualifiers[vs.key][1]["datavalue"]
v["sortkey"] and = v["stmt.qualifiers"][argsvs.sortkey][1]["datavalue"]["value"]
then
sortKey = stmt.qualifiers[vs.key][1]["datavalue"]["value"] -- todo andre datatyper
end
elseif vs.type == "VÆRDI" then
-- todo
end
stmt.sortKeys[ks] = sortKey
end
end
 
-- udfør sorteringen TODO fejler pt.
local log = "log: "
table.sort(statements, function(a, b)
log = log .. " cmp: " .. mw.dumpObject({a=a.sortKeys, b=b.sortKeys})
if a.sortkey ~= nil then
for ks, vs in pairs(sortParsed) do
if b.sortkey ~= nil then
local function flip(boo) -- vender sorteringen, hvis der har stået et - (minus) efter kriteriet
return a.sortkey > b.sortkey
local ret = boo
else
if vs.ascdesc == "-" then ret = not ret end
return -1
log = log .. " gav " .. tostring(ret)
return -1ret
end
if a.sortKeys[ks] < b.sortKeys[ks] then
else
return 1flip(true)
elseif a.sortKeys[ks] > b.sortKeys[ks] then
return flip(false)
end -- check næste
end
return true -- de var ens, bibehold sorteringen
end)
 
return nil, nil, "Sort: " .. args.sort .. log .. mw.dumpObject(sortParsed) .. " statements" .. dumpmw.dumpObject(statements, "ul")
end