Module:Taxonbar/confdoc

require('strict')

local conf = require( "Module:Taxonbar/conf" ) -- configuration module

local p = {} function p.confdoc( frame ) local wikitable = mw.html.create('table') wikitable:addClass('wikitable sortable') :tag('caption') :wikitext('Taxon identifiers by parameter name') :done :tag('tr') :tag('th') :wikitext('Parameter') :tag('th') :attr('data-sort-type', 'number') :css('white-space', 'nowrap') :wikitext('Wikidata ID') :tag('th') :wikitext('Authority') :tag('th') :wikitext('Description') local format = string.format for _, db in pairs( conf.databases ) do		local prop = db[3] if type(prop) == 'number' and prop > 0 then local param = mw.ustring.lower(db[1]) local row = mw.html.create('tr') row :tag('td') :wikitext(param) :tag('td') :attr('data-sort-value', prop) :wikitext(format('P%d', prop, prop)) -- 				:tag('td') :wikitext(frame:callParserFunction{						name = '#statements:P1629',						args = { from = 'P' .. prop }					}) :tag('td') :wikitext(mw.wikibase.getDescription('P' .. prop)) wikitable:node(row) end end return wikitable end -- p.wikidataInfo( frame )   -function to show formatURL and id for taxonomic databases local COUNTER_MAX = 390 local counter = 0   --expensive parser function counter

function p.wikidataInfo( frame ) counter = frame.args['counter'] or COUNTER_MAX  -- prevent too many expensive calls local start = frame.args['start'] or "a" local finish = frame.args['finish'] or "zzz" local wikitable = '{| class="wikitable sortable"\n' .. '|-\n' .. '! Parameter !! Wikidata ID !! Database !! Examples !! datatype !! formatterURL (or alternative) and examples' for _, db in pairs( conf.databases ) do		local param = mw.ustring.lower(db[1]) local link = db[2] local prop = db[3] local id = 'id' local url = 'url' local datatype = "" local examples = "" local links = "" local formatterURL = "" if type(prop) == 'number' and prop > 0 and param > start and param < finish then local item = mw.wikibase.getEntity('P'..prop) --('P5354') counter = counter - 1 if item and item ~= "" then datatype = item.datatype local statements = item:getBestStatements('P1630')[1] if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then formatterURL = statements.mainsnak.datavalue.value url = formatterURL else url = "No formatter URL (P1630)." if datatype == "url" then url = url .. " The id of the external database is the url." end local subjectItem = item:getBestStatements('P1629')[1] if subjectItem then local officialWebsite = mw.wikibase.getEntity(subjectItem.mainsnak.datavalue.value.id):getBestStatements('P856')[1] counter = counter - 1 if officialWebsite then url = url .. ' website: ' .. officialWebsite.mainsnak.datavalue.value end else url = url .. ' or official website (P856) of wikidata item of this property (P1629)' -- use third-party formatter URL. e.g for Euring number (P3459) local statements = item:getBestStatements('P3459')[1] if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then local thirdPartyURL = statements.mainsnak.datavalue.value url = url ..' use third party url: ' .. thirdPartyURL else url = url .. ' or third party formatter url (P3459) ' end end end examples, links = p.getExamples( item, prop, formatterURL, datatype ) end

wikitable = wikitable .. '\n' .. '|-' 					   .. '\n|' .. param .. '\n|' .. 'P' .. prop .. '' .. '\n|' .. link .. '\n|' .. examples .. '\n|' .. datatype .. '\n|' .. url .. '\n' .. links .. ''		end end return wikitable .. '\n|}' end

function p.getExamples( propItem, prop, formatterURL, datatype) if counter < 0 then return "count exceeded" end local examples	= "" local links	= "" local exampleStatements = propItem:getBestStatements('P1855') local nExamples = 0 --local statement = statements[1] for _, statement in pairs( exampleStatements ) do		if nExamples == 3 then break end -- don't show more than 3 examples if statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value then local examplesValue = statement.mainsnak.datavalue.value if examplesValue and examplesValue.id then local exampleID = examplesValue.id --examples = examples .. '\n*' .. exampleID ..' ' local label = mw.wikibase.getLabel( exampleID ) examples = examples .. '\n*' .. label .. ' (' .. exampleID ..')'

-- get information form qualifiers if statement.qualifiers then local qualifiers = statement['qualifiers'] local value = qualifiers['P'..prop][1] --['datavalue']['value'] --mw.addWarning (mw.wikibase.formatValues( qualifiers )) --mw.addWarning (mw.wikibase.renderSnaks( qualifiers )) -- mw.addWarning (mw.wikibase.formatValue( value )) --mw.addWarning ( mw.wikibase.renderSnak( value )) local id = mw.wikibase.renderSnak( value ) examples = examples .. ' id= ' local link = formatterURL:gsub('$1', id) if (datatype == "url") then link = id end links = links .. '\n*' .. link .. ''               end

--[==[		   -- this method is expensive as it calls getEntity

local item = mw.wikibase.getEntity(exampleID) counter = counter - 1 nExamples = nExamples + 1 if item and item ~= "" then --datatype = item.datatype local statements = item:getBestStatements('P225')[1] -- taxon name if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then local taxon = statements.mainsnak.datavalue.value examples = examples .. ' ' .. taxon .. '' end local statements = item:getBestStatements('P'..prop)[1] -- the databas property if statements and statements.mainsnak and statements.mainsnak.datavalue and statements.mainsnak.datavalue.value then local id = statements.mainsnak.datavalue.value local link = formatterURL:gsub('$1', id) if (datatype == "url") then link = id end examples = examples .. ' (' .. id .. ')' links = links .. '\n*' .. link .. ''					end end ]==]		   else examples = examples .. "No example" end else examples = examples .. "No examples statements" end end

return examples, links end return p