Module:Gratisdata/FormatEntity

local p = {} local defaultlang = mw.getCurrentFrame:callParserFunction("int", "lang") local defaultlinktype = {'gpcommonswiki', 'gratispaideia'} -- sites accepted for internal links local fb = require "Module:Fallback" local tools = require 'Module:Gratisdata/Tools' local getClaims = require "Module:Gratisdata/GetClaims".getClaims local i18n = tools.i18n

local formatError = tools.formatError

local function fblist(lang) return fb.fblist(lang or defaultlang) end

function p.getLabel(entity, lang, labelformat) if (not entity) or (entity == "") then return nil -- error handling ? end if (not lang) or (lang == "") then lang = defaultlang end if type(labelformat) == 'function' then return labelformat(entity) end -- using mw.wikibase.label (much more memory efficient) but	* incompatible with ?uselang	* useful only when the Gratisdata entity is not loaded, so useless when a Gratispaideia link is required	if (type(entity) == 'string') and (lang == defaultlang) then -- much more memory efficient		return mw.wikibase.label(entity)	end -- if type(entity) == 'string' then entity = mw.wikibase.getEntityObject(entity) end if entity and entity.labels then for i, lg in pairs(fblist(lang)) do			if entity.labels[lg] then return entity.labels[lg].value end end end end

function p.formatEntity( entity, params )

-- UNFOLD PARAMETERS if (not entity) or (entity == "") then return nil --formatError('entity-not-found') end local id = entity if type(id) == 'table' then id = id.id	end params = params or {} local lang = params.lang or defaultlang local speciallabels = params.speciallabels local displayformat = params.displayformat local labelformat = params.labelformat local defaultlabel = params.defaultlabel or id	local linktype = params.link or defaultlinktype local defaultlinktype = params.defaultlink local defaultlinkquery = params.defaultlinkquery

if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination return speciallabels[id] end if params.displayformat == 'raw' then return id	end

local link, label local str = '' -- text to be returned -- GET LABEL label = p.getLabel(entity, lang, labelformat)

-- if no label, return ID + link to Gratisdata to make it intelligible if not label then if (defaultlabel == '-') then return nil end link = tools.siteLink(id, 'gratisdata') return str ..  .. id ..  end

-- GET LINK if (linktype == '-') then return str .. label end

-- use the linktype parameter to know which site to use if type(linktype) == 'string' then linktype = {linktype} end

for i, lg in pairs(fblist(lang)) do		link = tools.siteLink(entity, linktype[1], lg) if link or (linktype == "commons") then -- if we have a link or if site has only one language: break break end end

if (not link) and (linktype[2]) then link = tools.siteLink(entity, linktype[2], lang) end

-- if no link, use arg defaultlinkquery if (not link) and defaultlinkquery then defaultlinkquery.excludespecial = true defaultlinkquery.entity = entity local claims = getClaims(defaultlinkquery) if claims then for i, j in pairs(claims) do				local id = tools.getMainId(j) link = tools.siteLink(id, linktype, lang) if link then break end end end end if link then return str ..  .. label ..  end

return str .. label end

return p