Module:Taxonbar/confdoc
Jump to navigation
Jump to search
Documentation for this madule may be created at Module:Taxonbar/confdoc/doc
require('Module:No globals') 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('[[d:Property:P%d|P%d]]', prop, prop)) -- {{#statements:P1629|from=P{{{1|}}}}} :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 .. '<br/>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 ..'<br/>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|' .. '[[:d:Property:P' .. prop .. '|P' .. prop .. ']]' .. '\n|' .. link .. '\n|' .. examples .. '\n|' .. datatype .. '\n|' .. url .. '\n{{smalldiv|1=' .. 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*[[:d:' .. exampleID .. '|' .. exampleID ..']] ' local label = mw.wikibase.getLabel( exampleID ) examples = examples .. '\n*[[' .. label .. ']] ([[:d:' .. exampleID .. '|' .. 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 .. '<br/><small>id=<code>' .. id .. '</code></small>' 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