Modul:IsIn: Unterschied zwischen den Versionen
K (Test erweitert) |
(erweitert) |
||
| Zeile 1: | Zeile 1: | ||
-- documentation | -- documentation | ||
local | local isInDoc = { | ||
suite = ' | suite = 'IsIn', | ||
serial = '2020-09-22', | serial = '2020-09-22', | ||
item = 99527605 | |||
} | } | ||
local fs = require( 'Module:Failsafe' ) | |||
local fw = require( 'Module:FastWikidata' ) | |||
local wikidata = { | |||
instanceOf = 'P31', | |||
disambigId = 'Q4167410' | |||
} | |||
local isIn = {} | |||
function isIn.isDisambig( frame ) | |||
local page, pageId | |||
if type( frame ) == 'string' then | |||
page = frame | |||
else | |||
page = frame.args.page or frame.args[ 1 ] or '' | |||
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 = fw.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 ) | function isIn.checkTarget( frame ) | ||
| Zeile 17: | Zeile 54: | ||
return 'emptyTarget' | return 'emptyTarget' | ||
elseif targetPage == page.text then | elseif targetPage == page.text then | ||
return ' | return 'isItself' | ||
elseif args.enterTarget == args.page then | elseif args.enterTarget == args.page then | ||
return 'enterTarget' | return 'enterTarget' | ||
| Zeile 26: | Zeile 63: | ||
end | end | ||
targetPage = mw.title.new( targetPage ) | targetPage = mw.title.new( targetPage ) | ||
if not targetPage | if not targetPage then | ||
return 'invalidTitle' | |||
return ' | elseif not targetPage.exists then | ||
return 'notExisting' | |||
elseif targetPage.isRedirect then | |||
return 'isRedirect' | |||
elseif isIn.isDisambig( targetPage ) then | |||
return 'isDisambig' | |||
else | else | ||
return args.page | return args.page | ||
end | 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 | |||
title = mw.title.new( page ) | |||
if title and title.exists then | |||
return '[[' .. page.. '| ]]' | |||
end | |||
end | |||
return '' | |||
end | |||
-- module administration | |||
function isIn.IsIn() | |||
return isInDoc | |||
end | |||
function isIn.failsafe( version ) | |||
return fs._failsafe( version, isInDoc ) or '' | |||
end | end | ||
return isIn | return isIn | ||
Version vom 22. September 2020, 16:57 Uhr
Die Dokumentation für dieses Modul kann unter Modul:IsIn/doc erstellt werden
-- documentation
local isInDoc = {
suite = 'IsIn',
serial = '2020-09-22',
item = 99527605
}
local fs = require( 'Module:Failsafe' )
local fw = require( 'Module:FastWikidata' )
local wikidata = {
instanceOf = 'P31',
disambigId = 'Q4167410'
}
local isIn = {}
function isIn.isDisambig( frame )
local page, pageId
if type( frame ) == 'string' then
page = frame
else
page = frame.args.page or frame.args[ 1 ] or ''
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 = fw.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
targetPage = mw.title.new( targetPage )
if not targetPage then
return 'invalidTitle'
elseif not targetPage.exists then
return 'notExisting'
elseif targetPage.isRedirect then
return 'isRedirect'
elseif isIn.isDisambig( targetPage ) 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
title = mw.title.new( page )
if title and title.exists then
return '[[' .. page.. '| ]]'
end
end
return ''
end
-- module administration
function isIn.IsIn()
return isInDoc
end
function isIn.failsafe( version )
return fs._failsafe( version, isInDoc ) or ''
end
return isIn