Modul:IsIn: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
KKeine Bearbeitungszusammenfassung
(Fehler korrigiert)
Zeile 65: Zeile 65:
targetPage = page.nsText .. ':' .. targetPage
targetPage = page.nsText .. ':' .. targetPage
end
end
targetPage = mw.title.new( targetPage )
local targetObj = mw.title.new( targetPage )
if not targetPage then
if not targetObj then
return 'invalidTitle'
return 'invalidTitle'
elseif not targetPage.exists then
elseif not targetObj.exists then
return 'notExisting'
return 'notExisting'
elseif targetPage.isRedirect then
elseif targetObj.isRedirect then
return 'isRedirect'
return 'isRedirect'
elseif isIn.isDisambig( targetPage ) then
elseif isIn.isDisambig( targetPage ) then

Version vom 22. September 2020, 17:07 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 )
	if not frame then
		return false
	end
	local page, pageId
	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 = 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
	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 ) 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