Module:Wikidata Infobox

local p = {} local WikidataIB = require("Module:WikidataIB")

-- Code from 'Module:No globals' local mt = getmetatable(_G) or {} function mt.__index (t, k)	if k ~= 'arg' then error('Tried to read nil global ' .. tostring(k), 2) end return nil end function mt.__newindex(t, k, v)	if k ~= 'arg' then error('Tried to write global ' .. tostring(k), 2) end rawset(t, k, v) end setmetatable(_G, mt) -- End of code from 'Module:No globals'

function p.getMID return "M" .. mw.title.getCurrentTitle.id end function p.getFilename return mw.title.getCurrentTitle.nsText .. ':' .. mw.title.getCurrentTitle.text end

function p.getP180vals(frame) local mid = frame.args[1] local prefix = frame.args[2] or '' local postfix = frame.args[3] or ' ' local text = '' local tablevals = mw.wikibase.getBestStatements( mid, 'P180') for i, v in ipairs(tablevals) do text = text .. prefix .. v.mainsnak.datavalue.value.id .. postfix end return text end

function p.getCombinedWikidataTemplates(frame) local qid = frame.args[1] or '' local outputcode = '' if mw.text.trim(qid or ) ~=  then local tablevals = mw.wikibase.getAllStatements( qid, 'P971') for i, v in ipairs(tablevals) do outputcode = outputcode .. frame:expandTemplate{ title = 'Wikidata Infobox/core', args = { qid=v.mainsnak.datavalue.value.id, embed='Yes', conf_authoritycontrol='yes' } } end end return outputcode end

function p.ifThenShow(frame) if mw.text.trim(frame.args[1] or ) ~=  then return (frame.args[3] or '') .. (frame.args[1] or '') .. (frame.args[4] or '') else return (frame.args[2] or '') end end

-- Given an input area, return a map zoom level to use with mw:Extension:Kartographer in. Defaults to mapzoom=15. function p.autoMapZoom(frame) local size = tonumber(frame.args[1]) or 0 local LUT = { 5000000, 1000000, 100000, 50000, 10000, 2000, 150, 50, 19, 14, 5, 1, 0.5 } for zoom, scale in ipairs(LUT) do		if size > scale then return zoom+1 end end return 15 end

function p.formatLine(frame) local part2 = mw.text.trim(frame.args[2] or '') local returnstr = '' if part2 ~= '' then returnstr = '' .. mw.getContentLanguage:ucfirst(WikidataIB.getLabel(newframe)) returnstr = returnstr .. ' ' .. part2 .. ' '	end return returnstr end

function p.hasValue (tab, val) for index, value in ipairs(tab) do       if value == val then return true end end

return false end

-- baseLang is a utility function that returns the base language in use -- so for example, both English (en) and British English (en-gb) return 'en' -- from https://commons.wikimedia.org/wiki/Module:Wikidata2 function p.baseLang(frame) local txtlang = frame:callParserFunction( "int", "lang" ) or "" -- This deals with specific exceptions: be-tarask -> be_x_old if txtlang == "be-tarask" then return "be_x_old" end local pos = txtlang:find("-") local ret = "" if pos then ret = txtlang:sub(1, pos-1) else ret = txtlang end return ret end

function p.langDirection(frame) local lang = mw.text.trim(frame.args[1] or '') if (not mw.language.isSupportedLanguage(lang)) then lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end return mw.getLanguage(lang):getDir end

-- convertChar returns the non-diacritic version of the supplied character. stripDiacrits replaces words with diacritical characters with their non-diacritic equivalent. strip_diacrits is available for export to other modules. stringIsLike tests two words, returning true if they only differ in diacritics, false otherwise. stringIs_like is available for export to other modules. --

local function characterMap -- table with characters with diacrits and their equivalent basic latin characters local charMap_from, charMap_to charMap_from = 'ÁÀÂÄǍĂĀÃÅĄƏĆĊĈČÇĎĐḌÐÉÈĖÊËĚĔĒẼĘẸĠĜĞĢĤĦḤİÍÌÎÏǏĬĪĨĮỊĴĶĹĿĽĻŁḶḸṂŃŇÑŅṆŊÓÒÔÖǑŎŌÕǪỌŐØŔŘŖṚṜŚŜŠŞȘṢŤŢȚṬÚÙÛÜǓŬŪŨŮŲỤŰǗǛǙǕŴÝŶŸỸȲŹŻŽ'.. 'áàâäǎăāãåąəćċĉčçďđḍðéèėêëěĕēẽęẹġĝğģĥħḥıíìîïǐĭīĩįịĵķĺŀľļłḷḹṃńňñņṇŋóòôöǒŏōõǫọőøŕřŗṛṝśŝšşșṣťţțṭúùûüǔŭūũůųụűǘǜǚǖŵýŷÿỹȳźżž' charMap_to  =  'AAAAAAAAAAACCCCCDDDDEEEEEEEEEEEGGGGHHHIIIIIIIIIIIJKLLLLLLLMNNNNNNOOOOOOOOOOOORRRRRSSSSSSTTTTUUUUUUUUUUUUUUUUWYYYYYZZZ'.. 'aaaaaaaaaaacccccddddeeeeeeeeeeegggghhhiiiiiiiiiiijklllllllmnnnnnnoooooooooooorrrrrssssssttttuuuuuuuuuuuuuuuuwyyyyyzzz' local charMap = {} for i = 1,mw.ustring.len(charMap_from) do		charMap[mw.ustring.sub(charMap_from, i, i)] = mw.ustring.sub(charMap_to, i, i)	end charMap['ß'] = 'ss' return charMap end

function p.convertChar(frame) local ch = frame.args.char or mw.text.trim(frame.args[1]) or "" local charMap = characterMap return charMap[ch] or ch end

function p.strip_diacrits(wrd) if wrd then local charMap = characterMap wrd = string.gsub(wrd, "[^\128-\191][\128-\191]*", charMap ) end return wrd end

function p.stripDiacrits(frame) return p.strip_diacrits(frame.args.word or mw.text.trim(frame.args[1])) end

function p.stringIs_like(wrd1, wrd2) return p.strip_diacrits(wrd1) == p.strip_diacrits(wrd2) end

function p.stringIsLike(frame) local wrd1 = frame.args.word1 or frame.args[1] local wrd2 = frame.args.word2 or frame.args[2] if p.strip_diacrits(wrd1) == p.strip_diacrits(wrd2) then return true else return nil end end

function p.expandhiero(frame, hiero) -- added by Jura1 -- for string values in Wikihiero syntax -- inline recommended by https://meta.wikimedia.org/wiki/Help_talk:WikiHiero_syntax#Unwanted_newlines https://en.wikipedia.org/wiki/Help:WikiHiero_syntax -- maybe not needed in all contexts return 	frame:preprocess('  ') end

local function format2rowline(cell1, cell2) -- added by Jura1 local tr = "" tr = ' ' .. cell1 .. ' '	tr = tr .. ' ' .. cell2 .. ' ' 	return tr end

local function format1rowline(trqid, cell1, cell2) -- added by Jura1 local tr = "" tr = '' .. cell1 .. ' '   tr = tr .. '' .. cell2 .. ' '								return tr end

function p.hieroP7383(frame) -- added by Jura1 -- expand P7383 value in ' end

return p