Modul:Brug Wikidata/sandkasse: Forskelle mellem versioner
Content deleted Content added
Poul G (diskussion | bidrag) m wip (4b) |
Poul G (diskussion | bidrag) 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
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 =
if vs.type == "P" then
if stmt.qualifiers and stmt.qualifiers[vs.key] and stmt.qualifiers[vs.key][1] then
if q.snaktype == "novalue" then
sortKey = _missing
elseif q.snaktype == "somevalue" then
else -- snaktype "value"
sortKey =
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 --
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
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
|