Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Wikidata table
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local debugging = false local sep = ", " -- separator for multiple values of same property, changed from "<br>" local sep2 = "<br>" -- separator for values of different properties local maxrefs = 3 -- maximum number of references displayed for each statement -- Internationalisation -- takes optional string language code (e.g. "en") and returns a language object local findLang = function(langcode) local langobj langcode = mw.text.trim(langcode or "") if mw.language.isKnownLanguageTag(langcode) then langobj = mw.language.new( langcode ) else langcode = mw.getCurrentFrame():preprocess( '{{int:lang}}' ) if mw.language.isKnownLanguageTag(langcode) then langobj = mw.language.new( langcode ) else langobj = mw.language.getContentLanguage() end end return langobj end local currentlang = findLang().code local i18n = { filespace = "File", editonwikidata = "Edit this on Wikidata", ordinal = { [1] = "st", [2] = "nd", [3] = "rd", ["default"] = "th" }, } local months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } local mnths = {} for idx, val in ipairs(months) do mnths[idx] = val:sub(1,3) end -- makeOrdinal needs to be internationalised along with the above i18n -- takes cardinal number as a numeric and returns the ordinal as a string -- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc. ------------------------------------------------------------------------------- p.makeOrdinal = function(cardinal) local card = tonumber(cardinal) if not card then return cardinal end local ordsuffix = i18n.ordinal.default if card % 10 == 1 then ordsuffix = i18n.ordinal[1] elseif card % 10 == 2 then ordsuffix = i18n.ordinal[2] elseif card % 10 == 3 then ordsuffix = i18n.ordinal[3] end -- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th' -- similarly for 12 and 13, etc. if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then ordsuffix = i18n.ordinal.default end return card .. ordsuffix end local unitsymbol = { inch = "in", foot = "ft", yard = "yd", mile = "mi", ["nautical mile"] = "nmi", metre = "m", centimetre = "cm", millimetre = "mm", kilometre = "km", acre = "acres", hectare = "ha" } -- prefixes for particular qualifiers local prefix = { P580 = "from ", P582 = "until ", } -- external ids which have a formatter url (P1630) local formaturl = { P3563 = "https://wikidata-externalid-url.toolforge.org/?url=https%3A%2F%2Fmsi.nga.mil%2FqueryResults%3Fpublications%2Fngalol%2Flights-buoys%3Fvolume%3D%251%26featureNumber%3D%252%26includeRemovals%3Dfalse%26output%3Dhtml&exp=(%5Cd%7B3%7D)-(.*)&id=$1", -- NGA number P613 = "http://nearby.org.uk/coord.cgi?p=$1", -- OS grid reference P373 = "https://commons.wikimedia.org/wiki/Category:$1", -- Commons category P11235 = "http://damnet.or.jp/cgi-bin/binranA/enAll.cgi?db4=$1" -- Dams in Japan } -- date format default to dmy local df = "dmy" -- fallbacks for common properties: -- property-to-fallback-from = "property-to-fallback-to" local fallback = { P276 = "P131", P571 = "P1619", P729 = "P571", P4755 = "P296", P18 = "P8592" } local statedIDs = { Q36578 = {"GND", name=1}, Q547473 = {"MacTutor", name="id"}, Q19938912 = {"BNF", name=1}, Q6973052 = {"National Heritage List for England", name="num"}, Q19842847 = {"Historic Scotland listed building number", name=1} } -- error messages local function errmsg(txt) if debugging then return "Error: " .. txt else return nil end end -- formats the first character of linked item to uppercase local function ucf(lnk) local tbl = mw.text.split( lnk, "|", true ) local ret if tbl[2] then -- piped link tbl[2] = tbl[2]:gsub("^(%l)", mw.ustring.upper) ret = table.concat(tbl, "|") elseif lnk:sub(1,2) == "[[" then -- unpiped link ret = lnk:gsub("^(%[%[%l)", mw.ustring.upper) else -- unlinked ret = lnk:gsub("^(%l)", mw.ustring.upper) end return ret end -- entrypoint for invoke function p.ucf(frame) return ucf(frame.args.text or "") end -- return a number rounded to a precision local function decimalprecision(x, prec) local s = 1 if x < 0 then x = -x s = -1 end -- if prec is not suplied, pick an arbitrary precision if not tonumber(prec) then prec = 1e-4 elseif prec > 1 then prec = 1 elseif prec < 1e-6 then prec = 1e-6 else prec = 10 ^ math.floor(math.log10(prec)) end x = math.floor(x / prec + 0.5) * prec * s -- if it's integral, cast to an integer: if x == math.floor(x) then x = math.floor(x) end -- if it's less than 1e-4, it will be in exponent form, so return a string with 6dp -- 9e-5 becomes 0.000090 if math.abs(x) < 1e-4 then x = string.format("%f", x) end return x end -- creates an icon that links to the relevant Wikidata entity local function createicon(entityID, propertyID, langcode) langcode = langcode or "" if not entityID or entityID == "" then entityID= mw.wikibase.getEntityIdForCurrentPage() end propertyID = propertyID or "" local icon = " <span class='penicon autoconfirmed-show'>[[" -- " <span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge .. i18n.filespace .. ":OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=" .. i18n.editonwikidata .. "|link=https://www.wikidata.org/wiki/" .. entityID if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end if propertyID ~= "" then icon = icon .. "#" .. propertyID end icon = icon .. "|" .. i18n.editonwikidata .. "]]</span>" return icon end -- takes a statement tuple supplied from Wikidata and returns any references function p._getrefs(statement, qid) if not statement.references then return nil end local rtbl = {} local frm = mw.getCurrentFrame() for idx, ref in ipairs(statement.references) do if ref.snaks.P854 then -- reference url local url = ref.snaks.P854[1].datavalue.value if ref.snaks.P1476 then -- title (monolingual text) local title for idx1, titles in ipairs(ref.snaks.P1476) do if titles.datavalue.value.language == currentlang then title = titles.datavalue.value.text local website = "" if ref.snaks.P248 then local rqid = ref.snaks.P248[1].datavalue.value.id local label = mw.wikibase.label(rqid,currentlang) if label then local sitelink = mw.wikibase.sitelink(rqid) if sitelink then website = "[[" .. sitelink .. "|" .. label .. "]]" else website = label end end end local citeweb = frm:expandTemplate{ title = "Cite web", args = { url=url, title=title, website=website} } local hash = "WD" .. mw.hash.hashValue("crc32", citeweb) rtbl[#rtbl+1] = frm:callParserFunction{ name = "#tag:ref", args = { citeweb, name=hash } } break end end else local bnf = url:match("https?://data.bnf.fr/ark:/12148/cb([0-9][a-Za-Z0-9]+)") or url:match("https?://catalogue.bnf.fr/ark:/12148/cb([0-9][a-Za-Z0-9]+)") if bnf then rtbl[#rtbl+1] = frm:callParserFunction{ name = "#tag:ref", args = { frm:expandTemplate{title="BNF",args={bnf}}, name="bnf"..bnf} } else local hash = "WD" .. mw.hash.hashValue("crc32", url) rtbl[#rtbl+1] = frm:callParserFunction{ name = "#tag:ref", args = { url, name=hash } } end end elseif ref.snaks.P248 then local rqid = ref.snaks.P248[1].datavalue.value.id if statedIDs[rqid] then local template = statedIDs[rqid] local propid = mw.wikibase.getBestStatements(rqid,"P1687") propid = propid[1].mainsnak.datavalue.value.id for num, propdata in ipairs(mw.wikibase.getBestStatements(qid, propid)) do local property = propdata.mainsnak.datavalue.value local args = {[template.name] = property} if rqid == "Q547473" then args.title = mw.wikibase.label(qid) end local result = frm:expandTemplate{title=template[1],args=args} rtbl[#rtbl+1] = frm:callParserFunction{ name = "#tag:ref", args = { result, name=qid .. propid .. num} } end else local citeq = frm:expandTemplate{ title = "Cite Q", args = { rqid } } rtbl[#rtbl+1] = frm:callParserFunction{ name = "#tag:ref", args = { citeq, name=rqid } } end end if #rtbl>=maxrefs then break end -- maximum number of references reached end return table.concat(rtbl) end -- takes a qid and attempts to return a linked name for it -- otherwise an unlinked name; otherwise the qid function p._getLink(qid) local lbl = "" local slink = mw.wikibase.sitelink(qid) local label = mw.wikibase.getLabel(qid) if slink and label then if slink:lower() == label:lower() then if label:find("^%u") then -- match label's case lbl = "[[" .. slink:gsub("^(%l)", mw.ustring.upper) .. "]]" else lbl = "[[" .. slink:gsub("^(%u)", mw.ustring.lower) .. "]]" end else lbl = "[[" .. slink .. "|" .. label .. "]]" end elseif slink then lbl = "[[" .. slink .. "]]" elseif label then lbl = label else lbl = qid end return lbl end -- entrypoint for #invoke getLink function p.getLink(frame) local qid = (frame.args.qid or ""):upper() if qid == "" then return nil end return p._getLink(qid) end -- takes a snak for a time property and returns the date local function _getDate(snak, prec) local retval retval = mw.wikibase.renderSnak(snak) if prec == 7 then -- century local num, txt = retval:match("^(%d+)%.(.+)$") retval = p.makeOrdinal(num) .. txt elseif prec == 10 then local m, y, e = retval:match("^(%a+) (%d+)(.*)") retval = m:sub(1,3) .. " " .. y .. e elseif prec == 11 then local d, m, y, e = retval:match("^(%d+) (%a+) (%d+)(.*)") retval = d .. " " .. m:sub(1,3) .. " " .. y .. e end return retval end -- takes a qid and a property id and returns the corresponding values or nil -- maxvals greater than zero sets the maximum number of values to return -- the string quals contains property ids of qualifiers to be returned ('-' is the separator) function p._getWD(qid, pid, maxvals, quals) maxvals = maxvals or 0 local ret = {} local sortkey for idx, prop in ipairs(mw.wikibase.getBestStatements(qid, pid)) do local retval if prop.mainsnak.snaktype ~= "value" then break end local dtype = prop.mainsnak.datatype local dval = prop.mainsnak.datavalue.value if dtype == "wikibase-item" then retval = p._getLink(dval.id) elseif dtype == "monolingualtext" then retval = dval.text elseif dtype == "commonsMedia" or dtype == "url" then retval = dval elseif dtype == "external-id" or dtype == "string" then if formaturl[pid] then retval = "[" .. mw.ustring.gsub(formaturl[pid], "$1", dval) .. " " .. dval .. "]" else retval = dval end elseif dtype == "time" then retval = _getDate(prop.mainsnak, dval.precision) if dval.precision == 11 and df == "mdy" then local d, m, y, e = retval:match("^(%d+) (%a+) (%d+)(.*)") retval = m .. " " .. d .. ", " .. y .. e end if not sortkey then sortkey = prop.mainsnak.datavalue.value.time end elseif dtype == "quantity" then local amount = tonumber(dval.amount) local unitqid = string.match( dval.unit, "(Q%d+)" ) if unitqid then local unit = mw.wikibase.getLabel(unitqid) local symbol = unitsymbol[unit] if symbol then retval = mw.getCurrentFrame():expandTemplate{ title = "cvt", args = {amount, symbol} } else retval = amount .. " " .. unit end else retval = amount end elseif dtype == "globe-coordinate" then local lat = decimalprecision(dval.latitude, dval.precision) local long = decimalprecision(dval.longitude, dval.precision) retval = "<span style='font-size:90%;'>" .. mw.wikibase.formatValue(prop.mainsnak) .. "</span>" else retval = dval end -- get references retval = retval .. (p._getrefs(prop, qid) or "") -- get qualifiers if quals and prop.qualifiers and retval then local qtbl = {} for qpid in quals:gmatch("P%d+") do if prop.qualifiers[qpid] then for i, qv in ipairs(prop.qualifiers[qpid]) do local fqv if qv.datatype == "globe-coordinate" then fqv = mw.wikibase.formatValue(qv) -- linked elseif qv.datatype == "time" then fqv = _getDate(qv, qv.datavalue.value.precision) if qv.datavalue.value.precision == 11 then -- trim to month fqv = fqv:match("%d+ (.+)") end else fqv = mw.wikibase.renderSnak(qv) -- plaintext end if fqv and fqv ~= "" then qtbl[#qtbl+1] = (prefix[qpid] or "") .. fqv end end end end if #qtbl > 0 then retval = retval .. "<span style='font-size:90%;'> (" .. table.concat(qtbl, " ") .. ")</span>" end end ret[#ret+1] = retval if maxvals > 0 and #ret >= maxvals then break end end if #ret < 1 then return nil else return table.concat(ret, sep),sortkey end end -- entrypoint for #invoke getWD function p.getWD(frame) local qid = (frame.args.qid or ""):upper() if qid == "" then return nil end local pid = (frame.args.pid or ""):upper() if pid == "" then return nil end local maxvals = tonumber(frame.args.maxvals) or 0 local quals = (frame.args.quals or ""):upper() if quals == "" then quals = nil end return p._getWD(qid, pid, maxvals, quals) end -- make multiple table rows, one for each qid in args.qids, -- with one table cell for each pid in args.pids function p._makerows(args) args.qids = (args.qids or ""):upper() if args.qids == "" then return errmsg("missing qids") end args.pids = (args.pids or ""):upper() if args.pids == "" then return errmsg("missing pids") end local qids, pids = {}, {} for qid in args.qids:gmatch("Q%d+") do qids[#qids+1] = qid end for pid in args.pids:gmatch("P%d+") do pids[#pids+1] = pid end args.df = args.df or "" if args.df ~= "" then df = args.df end local out = "" for r, qid in ipairs(qids) do out = out .. "<tr>" out = out .. "<th scope='row'>" .. p._getLink(qid) .. "</th>" for c, pid in ipairs(pids) do if pid == "P18" then -- image local img = p._getWD(qid, pid, 1) if img then out = out .. '<td style="text-align:center;">[[File:' .. img .. '|100px]]</td>' end else local statement,sortkey = p._getWD(qid, pid, 0) if not statement then statement = " " end if sortkey then sortkey = 'data-sort-value="' .. sortkey .. '"' else sortkey = '' end out = out .. '<td ' .. sortkey .. 'style="text-align:center;">' .. statement .. "</td>" end end out = out .. "</tr>" end return out end -- entry point for #invoke makerows function p.makerows(frame) local args = {} for key, value in pairs(frame:getParent().args) do args[key] = value end for key, value in pairs(frame.args) do args[key] = value end return p._makerows(args) end -- make a single table row, one cell per value passed in args.pids -- each value may be a combination of properties and qualifiers function p._makerow(args) local qid = (args.qid or ""):upper():match("Q%d+") -- qid can be nil if we want a row without wikidata -- remove whitespace, uppercase, trap nil args.pids = (args.pids or ""):upper():gsub("%s", "") if args.pids == "" then return errmsg("missing pids") end local summary = (args.summary or "") local linecolor = (args.line or "") local linestyle = '' if linecolor ~= "" then linestyle = 'style="border-top:solid #' .. linecolor .. ';"' end local rows if summary == "" then rows=1 else rows=2 end local cols = 0 -- collect any parameters c1, c2, etc. as cell replacements; c1+, c2+, etc. as addenda local cellrep, celladd = {}, {} for key, value in pairs(args) do local colr = (type(key) == "string") and tonumber(key:match("^[Cc](%d+)$")) if colr then cellrep[colr] = value end local cola = (type(key) == "string") and tonumber(key:match("^[Cc](%d+)%+$")) if cola then celladd[cola] = value end end if args.refname and args.refname ~= "" then local c1 = celladd[1] or "" celladd[1] = c1 .. mw.getCurrentFrame():extensionTag{name = 'ref', args = {name = args.refname}} end -- set date format if passed args.df = args.df or "" if args.df ~= "" then df = args.df end -- create the html to return local out = "<tr " .. linestyle .."><th scope='row' rowspan=" .. rows .. ">" if cellrep[1] and qid then out = out .. cellrep[1] .. createicon(qid) .. "</th>" elseif not qid then out = out .. (cellrep[1] or " ") .. "</th>" else out = out .. ucf(p._getLink(qid)) .. (celladd[1] or "") .. createicon(qid) .. "</th>" end -- split args.pids at comma separators into sequence of cellpids (each may be like P12+P34/P456-P789) local cellpids = mw.text.split(args.pids, ",+") for c, val in ipairs(cellpids) do cols = cols+1 if cellrep[c+1] then out = out .. '<td>' .. cellrep[c+1] .. '</td>' elseif not qid then out = out .. "<td></td>" else -- separate multiple properties in same cell, sep=+ local ptbl = {} -- sequence of values for one cell local sortkeyf for propandquals in mw.text.gsplit(val, "+", true) do -- for each property, split off property from qualifiers, sep=/ local pid = mw.text.split(propandquals, "/")[1]:match("P%d+") local quals = mw.text.split(propandquals, "/")[2] if pid == "P18" then -- image local img = p._getWD(qid, "P18", 1) if not img and fallback["P18"] then img = p._getWD(qid, fallback["P18"], 1) end if img then ptbl[#ptbl+1] = "[[File:" .. img .. "|100px]]" end else local wdval,sortkey = p._getWD(qid, pid, 0, quals) if not wdval and fallback[pid] then wdval,sortkey = p._getWD(qid, fallback[pid], 0, quals) end if not sortkeyf then sortkeyf = sortkey end ptbl[#ptbl+1] = wdval and ucf(wdval) end end -- of loop through multiple properties in same cell if sortkeyf then sortkeyf = 'data-sort-value="' .. mw.ustring.sub(sortkeyf,2) .. '"' else sortkeyf = '' end out = out .. '<td ' .. sortkeyf .. 'style="text-align:center;">' .. table.concat(ptbl, sep2) .. (celladd[c+1] or "") .. '</td>' end end -- of loop through all of the cells in the row out = out .. "</tr>" if summary ~= "" then out = out .. "<tr><td colspan=".. cols .. ">" .. summary .. "</td></tr>" end return out end -- entry point for #invoke makerow function p.makerow(frame) local args = {} for key, value in pairs(frame:getParent().args) do args[key] = value end for key, value in pairs(frame.args) do args[key] = value end local isdoc if args.doc and args.doc=="no" then isdoc = false else isdoc = mw.title.getCurrentTitle():inNamespace(10) end if isdoc then args.qid = args.example return p.doc(args) else return p._makerow(args) end end function p.convert(frame) local args = frame.args local pargs = frame:getParent().args local input = args[1] or pargs[1] local template = args.template or pargs.template if input == nil then return nil end local resolveEntity = require( "Module:ResolveEntityId" ) local articlelist = mw.text.split(input,"%*%s*") local qidlist = {} for i,article in ipairs(articlelist) do local rawarticle=string.match(article,'%[%[(.+)%|') or string.match(article,'%[%[(.+)%]%]') if rawarticle then local qid = resolveEntity._id(rawarticle) if qid then qidlist[#qidlist+1] = "{{" .. template .. "|qid=" .. qid.."<!-- "..rawarticle.." -->}}" else qidlist[#qidlist+1] = "{{" .. template .. "|qid=|c1="..rawarticle.."}}" end end end return table.concat(qidlist,"\n") end function p.convert2(frame) local args = frame.args local pargs = frame:getParent().args local input = args[1] or pargs[1] local template = args.template or pargs.template if input == nil then return nil end local qidlist = mw.text.split(input,"%*%s*") local out = "" for i,qid in ipairs(qidlist) do qid = mw.text.trim(qid) out = out .. "{{" .. template .. "|qid=" .. qid local label = mw.wikibase.getLabel(qid) if label then out = out .. "<!-- " .. label .. " -->" end out = out .. "}}\n" end return out end local function proplink(pid) local out if pid == "P1" then out = "Custom input" else out = mw.getCurrentFrame():expandTemplate{ title = 'Wikidata entity link', args = {pid} } end return out end function p.doc(args) local pids = args.pids local article = args.article local qid = args.qid local documentation = require('Module:Documentation').main pids = (pids or ""):upper():gsub("%s", "") if pids == "" then return errmsg("Missing PIDs") end local pidtable = {} for c1,val in ipairs(mw.text.split(pids, ",")) do pidtable[c1] = {} for c2,propandquals in ipairs(mw.text.split(val, "+")) do pidtable[c1][c2] = {} pidtable[c1][c2].property = mw.text.split(propandquals, "/")[1]:match("P%d+") local quals = mw.text.split(propandquals, "/")[2] if quals then pidtable[c1][c2].quals = {} for qpid in quals:gmatch("P%d+") do pidtable[c1][c2].quals[1] = qpid end end end end local out = "This template will retrieve certain data from [[Wikidata]] for use in a table in an article. It is a wrapper template for [[Module:Wikidata table]] function ''makerow'', using predefined properties.\n\n" if article then out = out .. "It was designed for use on [[" .. article .. "]] but may also be used on other articles. ([[Special:WhatLinksHere/" .. mw.title.getCurrentTitle().fullText .. "|Search]])\n" end out = out .. "<h3>Usage</h3>" out = out .. "The data that is displayed in each column is as follows:" out = out .. '<table class="wikitable"><tr>' for c = 1,#pidtable+1 do out = out .. "<th>Column " .. c .. "</th>" end out = out .. "</tr><tr><td>Label</td>" for c1 = 1,#pidtable do out = out .. "<td>" for c2 = 1,#pidtable[c1] do out = out .. proplink(pidtable[c1][c2].property) if pidtable[c1][c2].quals then out = out .. " qualified by " for c3 = 1,#pidtable[c1][c2].quals do out = out .. proplink(pidtable[c1][c2].quals[c3]) end end out = out .. "<br>" end out = out .. "</td>" end out = out .. "</tr></table>" if qid then local langobj = mw.language.new("en") out = out .. "<h3>Example</h3>The Wikidata QID for " local sitelink = mw.wikibase.getSitelink(qid) if sitelink then out = out .. "[[" .. sitelink .. "]]" else out = out .. mw.wikibase.getLabel(qid) end out = out .. " is [[:d:Special:EntityPage/" .. qid .. "|" .. qid .. "]]. Typing the following:\n" out = out .. "<code>{{" .. mw.title.getCurrentTitle().text .. "|qid=" .. qid .. "}}</code>\n produces" out = out .. '<table class="wikitable"><tr><th>Name</th>' for c = 1,#pidtable do local proplabel if pidtable[c][1].property == "P1" then proplabel = "Column " .. c+1 else proplabel = langobj:ucfirst(mw.wikibase.getLabel(pidtable[c][1].property)) end out = out .. "<th>" .. proplabel .. "</th>" end out = out .. "</tr>" .. p._makerow(args) .. "</table>" end out = out .. "<h3>Notes</h3>\n" out = out .. "* The table caption, column headings, etc. need to be added manually.\n" out = out .. "* Please be careful about making changes to this template, as corresponding changes will need to be made to the column headings on " if article then out = out .. "[[" .. article .. "]] and any other " else out = out .. "any " end out = out .. "article using it. ([[Special:WhatLinksHere/" .. mw.title.getCurrentTitle().fullText .. "|Search]])\n" out = out .. "<h3>Overriding columns</h3>" out = out .. "It is possible to override or append to data values obtained from Wikidata in any column in the table.\n" out = out .. "* To completely override column ''n'' with some custom content, use parameter <code>cn=</code>\n" out = out .. "*: For example, to replace column 5 with the number 1957 use <code>c5=1957</code>\n" out = out .. "* To append some custom content to the end of column ''n'' use parameter <code>cn+=</code>\n" out = out .. "*: For example, to add a footnote to column 6 use <code>c6+={{efn|This value is approximate.}}</code>\n" out = out .. "<h3>Add named reference</h3>" out = out .. "If you [[Help:List-defined references|define references in a list]] then you can cite one of these by using the parameter <code>refname</code>. This will add a reference to column 1 directly after the label.\n" out = out .. 'For example you can define a reference called Smith1 by using <pre>{{reflist|refs=\n<ref name="Smith1">reference</ref>\n}}</pre>\n' out = out .. "Then use <code>refname=Smith1</code>" if qid then out = out .. "<h3>References</h3>" .. mw.getCurrentFrame():expandTemplate{title='Reflist'} end out = out .. "<h3>TemplateData</h3>" local td = '{"params": {"qid": {"label": "QID", "description": "Enter the Wikidata QID, which is a number beginning with Q. You can also add the name of the item as an HTML comment.","example": "' if qid then td = td .. qid .. '<!-- ' .. mw.wikibase.getLabel(qid) .. ' -->' else td = td .. 'Q1234567' end td = td .. '","type": "string","suggested": true}' td = td .. ',"refname": {"label": "Add named reference","description": "Add a named reference defined in a list","type": "string","example": "ref1"}' td = td .. ',"c1": {"label": "Override label","description": "Override the label (column 1) with this value","type": "content"}' td = td .. ',"c1+": {"label": "Append to label","description": "Append this content to the label (column 1)","type": "content"}' for c = 1,#pidtable do if pidtable[c][1].property == "P1" then td = td .. ',"c' .. c+1 .. '": {"label": "Define column ' .. c+1 .. '","description": "Define column ' .. c+1 .. ' with this content","type": "content"}' else local label = mw.wikibase.getLabel(pidtable[c][1].property) td = td .. ',"c' .. c+1 .. '": {"label": "Override ' .. label .. '","description": "Override the ' .. label .. ' (column ' .. c+1 .. ') with this content","type": "content"}' td = td .. ',"c' .. c+1 .. '+": {"label": "Append to ' .. label .. '","description": "Append this content to the ' .. label .. ' (column ' .. c+1 .. ')","type": "content"}' end end td = td .. '},"description": "This template reads some data from Wikidata while also allowing an editor to override or append their own content.","format": "inline"}' return documentation{content = out .. mw.getCurrentFrame():extensionTag{ name = 'templatedata', content = td}} end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Wikidata table/doc
(
edit
)