Modul:Wikibase signature: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
Ingen redigeringsforklaring |
m (Én sideversjon ble importert) |
(Ingen forskjell)
|
Siste sideversjon per 22. feb. 2024 kl. 15:38
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