Modul:IsIn: Unterschied zwischen den Versionen
(Fehler korrigiert) |
K (21 Versionen von wikivoyage:Modul:IsIn importiert) |
||
| (10 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
local isInDoc = { | local isInDoc = { | ||
suite = 'IsIn', | suite = 'IsIn', | ||
serial = ' | serial = '2022-10-22', | ||
item = 99527605 | item = 99527605 | ||
} | } | ||
-- require( 'strict' ) | |||
local | local wu = require( 'Module:Wikidata utilities' ) | ||
local wikidata = { | local wikidata = { | ||
| Zeile 14: | Zeile 14: | ||
} | } | ||
local isIn = {} | local isIn = { | ||
moduleInterface = isInDoc | |||
} | |||
function isIn.isDisambig( frame ) | function isIn.isDisambig( frame ) | ||
local page, pageId | |||
if not frame then | if not frame then | ||
return false | return 'false' | ||
end | |||
if type( frame ) == 'table' and not frame.args then | |||
return 'false' | |||
end | end | ||
if type( frame ) == 'table' then | if type( frame ) == 'table' then | ||
page = frame.args.page or frame.args[ 1 ] or '' | page = frame.args.page or frame.args[ 1 ] or '' | ||
| Zeile 28: | Zeile 33: | ||
page = mw.text.trim( page ) | page = mw.text.trim( page ) | ||
if page == '' then | if page == '' then | ||
return false | return 'false' | ||
end | end | ||
pageId = mw.wikibase.getEntityIdForTitle( page ) | pageId = mw.wikibase.getEntityIdForTitle( page ) | ||
if not pageId then | if not pageId then | ||
return false | return 'false' | ||
end | end | ||
local values = | local values = wu.getValues( pageId, wikidata.instanceOf ) | ||
if values == '' then | if values == '' then | ||
return false | return 'false' | ||
end | end | ||
for i, v in ipairs( values ) do | for i, v in ipairs( values ) do | ||
if v.id == wikidata.disambigId then | if v.id == wikidata.disambigId then | ||
return true | return 'true' | ||
end | end | ||
end | end | ||
return false | return 'false' | ||
end | end | ||
| Zeile 72: | Zeile 77: | ||
elseif targetObj.isRedirect then | elseif targetObj.isRedirect then | ||
return 'isRedirect' | return 'isRedirect' | ||
elseif isIn.isDisambig( targetPage ) then | elseif isIn.isDisambig( targetPage ) == 'true' then | ||
return 'isDisambig' | return 'isDisambig' | ||
else | else | ||
| Zeile 101: | Zeile 106: | ||
if page.nsText == '' then -- only main namespace | if page.nsText == '' then -- only main namespace | ||
page = 'Category:' .. page.text | page = 'Category:' .. page.text | ||
title = mw.title.new( page ) | local title = mw.title.new( page ) | ||
if title and title.exists then | if title and title.exists then | ||
return '[[' .. page.. '| ]]' | return '[[' .. page.. '| ]]' | ||
| Zeile 107: | Zeile 112: | ||
end | end | ||
return '' | return '' | ||
end | end | ||
return isIn | return isIn | ||
Aktuelle Version vom 27. Januar 2023, 07:40 Uhr
Die Dokumentation für dieses Modul kann unter Modul:IsIn/doc erstellt werden
-- documentation
local isInDoc = {
suite = 'IsIn',
serial = '2022-10-22',
item = 99527605
}
-- require( 'strict' )
local wu = require( 'Module:Wikidata utilities' )
local wikidata = {
instanceOf = 'P31',
disambigId = 'Q4167410'
}
local isIn = {
moduleInterface = isInDoc
}
function isIn.isDisambig( frame )
local page, pageId
if not frame then
return 'false'
end
if type( frame ) == 'table' and not frame.args then
return 'false'
end
if type( frame ) == 'table' then
page = frame.args.page or frame.args[ 1 ] or ''
else
page = frame
end
page = mw.text.trim( page )
if page == '' then
return 'false'
end
pageId = mw.wikibase.getEntityIdForTitle( page )
if not pageId then
return 'false'
end
local values = wu.getValues( pageId, wikidata.instanceOf )
if values == '' then
return 'false'
end
for i, v in ipairs( values ) do
if v.id == wikidata.disambigId then
return 'true'
end
end
return 'false'
end
function isIn.checkTarget( frame )
local page = mw.title.getCurrentTitle()
local args = frame.args
args.page = args.page or args[ 1 ] or ''
args.page = mw.text.trim( args.page )
args.enterTarget = args.enterTarget or ''
local targetPage = mw.ustring.gsub( args.page, '^' .. page.nsText .. ':', '' )
if targetPage == '' then
return 'emptyTarget'
elseif targetPage == page.text then
return 'isItself'
elseif args.enterTarget == args.page then
return 'enterTarget'
end
if page.nsText ~= '' then
targetPage = page.nsText .. ':' .. targetPage
end
local targetObj = mw.title.new( targetPage )
if not targetObj then
return 'invalidTitle'
elseif not targetObj.exists then
return 'notExisting'
elseif targetObj.isRedirect then
return 'isRedirect'
elseif isIn.isDisambig( targetPage ) == 'true' then
return 'isDisambig'
else
return args.page
end
end
function isIn.addCategories( frame )
local args = frame:getParent().args
local cat, catSort
local i = -1
local result = ''
repeat
i = i + 2
cat = args[ i ] or ''
catSort = args[ i + 1 ] or ''
if cat ~= '' then
result = result .. '[[Category:' .. cat
.. ( catSort ~= '' and ( '|' .. catSort ) or '' )
.. ']]'
end
until i > 30 or cat == ''
return result
end
function isIn.addPageCategory( frame )
local page = mw.title.getCurrentTitle()
if page.nsText == '' then -- only main namespace
page = 'Category:' .. page.text
local title = mw.title.new( page )
if title and title.exists then
return '[[' .. page.. '| ]]'
end
end
return ''
end
return isIn