Modul:Wikibase signature

--- 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( '%s', 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( '%s', prefix, str, str ) end

return p

"https://tamilar.wiki/index.php?title=Modul:Wikibase_signature&oldid=18816" இருந்து மீள்விக்கப்பட்டது