Modul:Wikibase signature
Utseende
This module is roughly the same as the documentation at mw:Extension:Wikibase Client/Lua. It is although not strictly the same, which makes it somewhat different from w:en:Module:Wikibase.
--- Get Wikibase items signatures
-- @license (CC-BY-SA-3.0)
-- @copyright John Erling Blad <jeblad@gmail.com>
-- @provenance https://en.wikipedia.org/w/index.php?title=Module:Wikibase&oldid=722062922
local _sites = mw.loadData('Modul:Wikibase signature/conf')
-- @var The table holding this modules exported members
local p = {}
function p.fetchEntity( str, group, code )
str = (type( str ) == 'string') and mw.text.trim( str ) or str
group = (type( group ) == 'string') and mw.text.trim( group ) or group
code = (type( code ) == 'string') and mw.text.trim( code ) or code
if type( str ) == 'nil' or str == '' then
return mw.wikibase.getEntityObject(), 'nowiki', '', str
end
if mw.ustring.find( str, "^[FLMPQS]%d+$" ) then
local initial = mw.ustring.sub( str, 1, 1 )
if initial == 'Q' then
return mw.wikibase.getEntityObject( str ), 'wikidatawiki', 'd:', str
elseif initial == 'P' then
return mw.wikibase.getEntityObject( str ), 'wikidatawiki', 'd:property:', str
else
error( "''Not implemented!''" )
return
end
end
local fullStr = str
local first, last = mw.ustring.find( str, '^[^:]*:')
if first then
group = mw.ustring.sub( str, first, last-1 )
if _sites[group] then
str = mw.ustring.sub( str, last+1 )
if type( _sites[group] ) == 'string' then
group = _sites[group]
end
if type( _sites[group] ) == 'table' then
first, last = mw.ustring.find( str, '^[^:]*:')
if first then
code = mw.ustring.sub( str, first, last-1 )
if _sites[group][code] then
str = mw.ustring.sub( str, last+1 )
end
end
end
end
end
local site = _sites[group or 'wikipedia']
local siteId = (type(site) == 'table' and site[code or 'no']) or site
local id = ( mw.ustring.find( str, "^[PQ]%d+$" ) and str )
or ( str and not(siteId) and mw.wikibase.getEntityIdForTitle( str ) )
or ( str and siteId and mw.wikibase.getEntityIdForTitle( str, siteId ) )
or nil
local entity = ( id and mw.wikibase.getEntityObject( id ) )
or ( not(str) and mw.wikibase.getEntityObject() )
or nil
local prefix = mw.ustring.sub( fullStr, 1, -(mw.ustring.len( str )+1) )
return entity, siteId, prefix, str
end
-- Wikipedia should always have mw.wikibase, but the code can be used outside wm-wikis
assert( mw.wikibase, "can not find mw.wikibase" )
--- get the item ID of the item linked to the current page
-- @param table frame from the call
-- @return string id of the item
function p.id(frame)
frame = frame or mw.getCurrentFrame()
local str = frame.args[1]
local entity = p.fetchEntity( str )
if not entity then
return ''
end
return entity.id
end
--- get the label of a given item, title, or of the connected page
-- if no argument is provided
-- @param table frame from the call
-- @return string label from the item
function p.label(frame)
frame = frame or mw.getCurrentFrame()
local str = frame.args[1]
local langCode = frame.args[2]
local entity = p.fetchEntity( str )
if not entity then
return ''
end
return langCode and entity:getLabel( langCode )
or entity:getLabel()
end
--- get the description of a given item, local title, or the connected page
-- if no argument is provided
-- @param table frame from the call
-- @return string description from the item
function p.description(frame)
frame = frame or mw.getCurrentFrame()
local str = frame.args[1]
local langCode = frame.args[2]
local entity = p.fetchEntity( str )
if not entity then
return ''
end
return langCode and entity:getDescription( langCode )
or entity:getDescription()
end
--- get the local page for a given item, local title, or the connected page
-- if no argument is provided
-- @param table frame from the call
-- @return string page title from the item
function p.page(frame)
frame = frame or mw.getCurrentFrame()
local str = frame.args[1]
local langCode = frame.args[2]
langCode = (type( langCode ) == 'string') and mw.text.trim( langCode ) or langCode
langCode = langCode ~= '' and langCode or nil
local entity, siteId, prefix, str = p.fetchEntity( str )
if entity then
local title = ( siteId and ( entity and entity:getSitelink( siteId ) ) )
or ( not(siteId) and ( entity and entity:getSitelink() ) )
or ( (siteId == 'wikidatawiki') and (str) )
or nil
if title then
local text = ( langCode and ( entity and entity:getLabel( langCode ) ) )
or ( not(langCode) and ( entity and entity:getLabel() ) )
or title
return mw.ustring.format( '<span class="extiw exist">[[%s%s|%s]]</span>', prefix, title, title )
..( (text ~= title) and mw.ustring.format( ' (%s)', text ) or '' )
end
end
--local text = mw.ustring.sub( str, prefixLength+1 )
return mw.ustring.format( '<span class="extiw">[[%s%s|%s]]</span>', prefix, str, str )
end
return p