Modul:Brug Wikidata/sandkasse: Forskelle mellem versioner

Content deleted Content added
m wip (4b)
m mw.logObject(p.x)
Linje 584:
-- args.sort fortolkes og resultatet lægges i tabellen sortParsed
local sortArgs, sortParsed = args.sort, {} -- "værdi+ P1545- værdi- fejl", {}
for sortPart in sortArgs:gmatch("%S*") do -- der kan angives flere sorteringskriterier adskildt af mellemrum; de overordnede angives først
if sortPart ~= "" then
Linje 608:
elseif lang.uc then
caseHandler = function(s) return lang:uc(s) end
end)
 
local _missing = {"Fraværende"} -- qualifier ikke angivet eller værdien er "novalue" eller "somevalue" eller der er ikke noget label til item
local valueToSortKey = function (datatype, datavalue) -- håndterer både qualifiers (P) og mainsnak (VÆRDI)
if datatype == "string" or datatype == "commonsMedia" or datatype == "external-id" then
return caseHandler(datavalue.value) .. ":" .. datavalue.value
elseif datatype == "wikibase-item" then
local label = mw.wikibase.getLabel(datavalue.value.id) -- TODO buffer?
if not label then return _missing end
return caseHandler(label) .. ":" .. label
else -- TODO flere datatyper
mw.log("datatypen " .. datatype .. " håndteres ikke af sortering") -- TODO
return "?"
end
end
Line 613 ⟶ 628:
stmt.sortKeys = {}
for ks, vs in pairs(sortParsed) do
local sortKey = "?"_missing
if vs.type == "P" then
if stmt.qualifiers and stmt.qualifiers[vs.key] and stmt.qualifiers[vs.key][1] then
andlocal q = stmt.qualifiers[vs.key][1]
-- todo
and stmt.qualifiers[vs.key][1]
if q.snaktype == "novalue" then
and stmt.qualifiers[vs.key][1]["datavalue"]
sortKey = _missing
and stmt.qualifiers[vs.key][1]["datatype"] == "string" -- todo andre datatyper
elseif q.snaktype == "somevalue" then
and stmt.qualifiers[vs.key][1]["datavalue"]["value"]
then sortKey = _missing
else -- snaktype "value"
local val = stmt.qualifiers[vs.key][1]["datavalue"]["value"] -- todo somevalue, novalue
sortKey = caseHandlervalueToSortKey(val) .q.datatype, ":" q.. valdatavalue)
end
end
elseif vs.type == "VÆRDI" then
sortKey = valueToSortKey(stmt.mainsnak.datatype, stmt.mainsnak.datavalue)
-- todo
end
stmt.sortKeys[ks] = sortKey
Line 647 ⟶ 664:
end
if a.sortKeys[ks] ~= b.sortKeys[ks] then
if a.sortKeys[ks] == _missing then return true end -- placér altid tomme sidst
if b.sortKeys[ks] == _missing then return false end
return flip(a.sortKeys[ks] < b.sortKeys[ks], vs.ascdesc ~= "-")
end -- ellers check næste niveau
Line 653 ⟶ 672:
end)
 
p.x = mw.dumpObject(statements)
-- return nil, nil, "Sort: " .. args.sort .. log .. mw.dumpObject(sortParsed, " sortParsed ") .. " statements " .. mw.dumpObject(statements)
end
 
Line 1.069 ⟶ 1.089:
-- Sort the statements after snaktype (value, novalue, somevalue) and id
-- This makes it possible to find and group equal values together
if args.sort or "" ~= "" then -- TODO: Onlyonly when theno sort-parameter isn'tis specified. xxx
for key, statement in pairs(statements) do
if statement.mainsnak.snaktype == 'value' then
if statement.mainsnak.datatype ~= 'wikibase-item' then
-- The property has a wrong datatype, ignore it.
return ''
end
statement.sortkey = statement.mainsnak.datavalue.value.id
else
statement.sortkey = statement.mainsnak.snaktype
end
statement.sortkey = statement.mainsnak.datavalue.value.id
else
statement.sortkey = statement.mainsnak.snaktype
end
table.sort(statements, function (a,b)
return (a.sortkey < b.sortkey)
end)
end
table.sort(statements, function (a,b)
return (a.sortkey < b.sortkey)
end)
 
if #statements > 5 then -- finder sider hvor meget hentes fra Wikidata