Module:Wd: Difference between revisions

Content deleted Content added
mNo edit summary
Added option to retrieve statement references
Line 2:
 
local aliasesP = {
coordauthor = "P625P50",
startTimepublisher = "P580P123",
endTimestatedIn = "P582P248",
shortNamecoord = "P1813P625",
publicationDate = "P577",
startTime = "P580",
endTime = "P582",
retrieved = "P813",
referenceURL = "P854",
archiveURL = "P1065",
title = "P1476",
quote = "P1683",
shortName = "P1813",
language = "P2439",
archiveDate = "P2960"
}
 
Line 40 ⟶ 51:
stt.singleValue = false
stt.mdyDate = false
stt.withRefs = false
stt.langCode = mw.language.getContentLanguage().code
stt.langName = mw.language.fetchLanguageName(stt.langCode, stt.langCode)
stt.langObj = mw.language.new(stt.langCode)
Line 175 ⟶ 188:
function State:getShortName(itemID)
return p._property({"single", itemID, aliasesP.shortName})
end
 
function State:getLabel(ID)
return p._label({ID})
end
 
Line 195 ⟶ 212:
end
 
function State:getValue(snak, raw, link, anyLang)
raw = raw or false
link = link or false
anyLang = anyLang or false
if snak.snaktype == 'value' then
Line 203 ⟶ 221:
return snak.datavalue.value
elseif snak.datavalue.type == 'monolingualtext' then
if anyLang then
if snak.datavalue.value['language'] == self.langCode then
return snak.datavalue.value['text'], snak.datavalue.value['language']
elseif snak.datavalue.value['language'] == self.langCode then
return snak.datavalue.value['text']
else
Line 702 ⟶ 722:
startTime = self:getSingleRawQualifier(claim, aliasesP.startTime)
if startTime and startTime ~= "" and startTime ~= " " then
startTimeY, startTimeM, startTimeD = self:parseDate(startTime)
end
endTime = self:getSingleRawQualifier(claim, aliasesP.endTime)
if endTime and endTime ~= "" and endTime ~= " " then
endTimeY, endTimeM, endTimeD = self:parseDate(endTime)
elseif endTime == " " then
Line 811 ⟶ 831:
return out
end
 
-- logic based on https://www.wikidata.org/wiki/Help:Sources
function State:getReferences(claim)
local snaks, snakValue, lang, params, leadParams, property, ref
local value = ""
if not claim.references then
return ""
end
for i, v in ipairs(claim.references) do
if v.snaks then
ref = ""
snaks = {}
params = {}
leadParams = {}
for i2, v2 in pairs(v.snaks) do
if v2[1] then
snaks[i2] = v2[1]
end
end
if snaks[aliasesP.referenceURL] and snaks[aliasesP.title] then
params["url"] = self:getValue(snaks[aliasesP.referenceURL])
params["title"] = self:getValue(snaks[aliasesP.title], false, false, true)
if snaks[aliasesP.publicationDate] then params["date"] = self:getValue(snaks[aliasesP.publicationDate]) end
if snaks[aliasesP.retrieved] then params["access-date"] = self:getValue(snaks[aliasesP.retrieved]) end
if snaks[aliasesP.archiveURL] then params["archive-url"] = self:getValue(snaks[aliasesP.archiveURL]) end
if snaks[aliasesP.archiveDate] then params["archive-date"] = self:getValue(snaks[aliasesP.archiveDate]) end
if snaks[aliasesP.author] then params["author"] = self:getValue(snaks[aliasesP.author]) end
if snaks[aliasesP.publisher] then params["publisher"] = self:getValue(snaks[aliasesP.publisher]) end
if snaks[aliasesP.quote] then params["quote"] = self:getValue(snaks[aliasesP.quote], false, false, true) end
if snaks[aliasesP.language] then
snakValue = self:getValue(snaks[aliasesP.language])
if self.langName ~= snakValue then
params["language"] = snakValue
end
end
ref = mw.getCurrentFrame():expandTemplate{title="cite_web", args=params}
else
for i2, v2 in pairs(snaks) do
property = self:getLabel(i2)
if property ~= "" then
snakValue, lang = self:getValue(v2, false, (i2 == aliasesP.statedIn), true)
if lang and lang ~= self.langCode then
snakValue = "''" .. snakValue .. "'' (" .. mw.language.fetchLanguageName(lang, self.langCode) .. ")"
end
if i2 == aliasesP.referenceURL or i2 == aliasesP.statedIn then
leadParams[#leadParams + 1] = snakValue
elseif i2 ~= aliasesP.language or self.langName ~= snakValue then
params[#params + 1] = property .. ": " .. snakValue
end
end
end
ref = table.concat(leadParams, "; ")
params = table.concat(params, "; ")
if params ~= "" then
ref = ref .. "; " .. params
end
if ref ~= "" then
ref = ref .. "."
end
end
if ref ~= "" then
value = value .. mw.getCurrentFrame():extensionTag("ref", ref)
end
end
end
return value
end
 
Line 828 ⟶ 931:
elseif flag == "mdy" then
self.mdyDate = true
return true
elseif flag == "refs" then
self.withRefs = true
return true
elseif flag == "best" or flag:match('^preferred[+-]?$') or flag:match('^normal[+-]?$') or flag:match('^deprecated[+-]?$') then
Line 883 ⟶ 989:
value = _:getValue(v.mainsnak, _.rawValue, _.linked)
if value then
if _.withRefs then
value = value .. _:getReferences(v)
end
done = _:appendOutput(value, rankPos)
if done then
Line 971 ⟶ 1,080:
-- get the property value first
outValue = _:getValue(v.mainsnak, _.rawValue, _.linked)
if outValue and _.withRefs then
outValue = outValue .. _:getReferences(v)
end
end