Module:WD version

require('strict')

local p = {}

local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local small_scan_link = require('Module:Small scan link')._small_scan_link local WikidataIB = require('Module:WikidataIB')

local function getWDLink(args) return WikidataIB.getLink({['args'] = args}) end

local function getWDLabel(args) return WikidataIB.getLink({['args'] = args}) end

function p.WDStatement(args) local item = args.item if not item then return nil end local prop = args.prop local formattedStatement if args.getLink then local unsorted_statements = item:getBestStatements(prop) local statements = {} for k, v in pairs(unsorted_statements) do			if v.rank == 'preferred' then table.insert(statements, v)			end end for k, v in pairs(unsorted_statements) do			if v.rank == 'normal' then table.insert(statements, v)			end end -- mw.logObject('statements:') -- mw.logObject(statements) local statementLinks = {} for k, statement in pairs(statements) do			if statement['mainsnak']['datatype'] == 'wikibase-item' and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value and statement.mainsnak.datavalue.value.id then local statementLink = getWDLink({statement.mainsnak.datavalue.value.id}) if statementLink and statementLink ~= '' then table.insert(statementLinks, statementLink) end else local statementValue = mw.wikibase.formatValue(statement.mainsnak) if statementValue and statementValue ~= '' then table.insert(statementLinks, statementValue) end end end -- mw.logObject(statementLinks) -- mw.logObject(#statementLinks) if #statementLinks == 1 then -- mw.logObject('#statementLinks = 1') formattedStatement = statementLinks[1] elseif #statementLinks > 1 then -- mw.logObject('#statementLinks > 1') formattedStatement = table.concat(statementLinks, ', ', 1, #statementLinks - 1) .. ' and ' .. statementLinks[#statementLinks] end end if not formattedStatement or formattedStatement == '' then -- mw.logObject('not formattedStatement') formattedStatement = item:formatPropertyValues(prop).value end -- mw.logObject(formattedStatement) if formattedStatement and formattedStatement ~= '' then return (args.prefix or '') .. formattedStatement .. (args.suffix or '') else return nil end end

function p._WD_version(args) local wikidata_id = args[1] --mw.logObject(wikidata_id) local item = mw.wikibase.getEntity(wikidata_id) --mw.logObject(item) if not item then return nil end local version_info = {} version_info.link = getWDLink({wikidata_id}) version_info.author = p.WDStatement({		['item'] = item,		['prop'] = 'P50',		['prefix'] = ' by ',		['getLink'] = true	}) version_info.translator = p.WDStatement({		['item'] = item,		['prop'] = 'P655',		['prefix'] = ', translated by ',		['getLink'] = true	}) version_info.editor = p.WDStatement({		['item'] = item,		['prop'] = 'P98',		['prefix'] = ', edited by ',		['getLink'] = true	}) version_info.illustrator = p.WDStatement({		['item'] = item,		['prop'] = 'P110',		['prefix'] = ', illustrated by ',		['getLink'] = true	}) version_info.published = p.WDStatement({		['item'] = item,		['prop'] = 'P1433',		['prefix'] = ", in ",		['suffix'] = "",		['getLink'] = true	}) version_info.pubdate = p.WDStatement({		['item'] = item,		['prop'] = 'P577',		['prefix'] = ' (', ['suffix'] = ')'	}) if version_info.link and not yesno(args.useitalics or false) and (version_info.published or yesno(args.usequotes or false)) then version_info.link = '"' .. version_info.link .. '"' else version_info.link = "''" .. version_info.link .. "''"	end local scan local scan_item = mw.wikibase.getEntity(args[2] or wikidata_id) scan = p.WDStatement({		['item'] = scan_item,		['prop'] = 'P996'	}) if not scan and scan_item ~= item then scan = p.WDStatement({			['item'] = item,			['prop'] = 'P996'		}) end -- mw.logObject(scan) if scan then version_info.scanlink = ' ' .. small_scan_link({scan}) end local version_text = {} local version_keys = {'link', 'author', 'translator', 'editor', 'illustrator', 'published', 'pubdate', 'scanlink'} for i = 1, #version_keys do		local v = version_keys[i] if version_info[v] and not yesno(args['no' .. v] or false) then table.insert(version_text, version_info[v]) end end return table.concat(version_text) end

function p.WD_version(frame) return p._WD_version(getArgs(frame)) end

return p