Modul:IsIn: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
KKeine Bearbeitungszusammenfassung
K (21 Versionen von wikivoyage:Modul:IsIn importiert)
 
(11 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 2: Zeile 2:
local isInDoc = {
local isInDoc = {
suite  = 'IsIn',
suite  = 'IsIn',
serial = '2020-09-22',
serial = '2022-10-22',
item  = 99527605
item  = 99527605
}
}


local fs = require( 'Module:Failsafe' )
-- require( 'strict' )
local fw = require( 'Module:FastWikidata' )
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
local page, pageId
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 = fw.getValues( pageId, wikidata.instanceOf )
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 65: Zeile 70:
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 ) == '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
-- module administration
function isIn.IsIn()
return isInDoc
end
function isIn.failsafe( version )
return fs._failsafe( version, isInDoc ) or ''
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