(Go: >> BACK << -|- >> HOME <<)

יחידה זו מיועדת לפונקציות שימושיות לקישורים.

בדיקות


local linkUtilities = {}


function linkUtilities.checkIsDismabig( targetPage )
	local targetQid = mw.wikibase.getEntityIdForTitle(targetPage)
	local WIKIDATA_DISAMBIG_QID = 'Q4167410'
	
	if targetQid == nil then
		return false -- target page doesnt have wikidata entity -> hence cant query if disambig
	end
	
	local targetType = mw.wikibase.getBestStatements(targetQid, 'P31')
	for _, v in pairs(targetType) do
		if v.mainsnak and v.mainsnak.datavalue  and v.mainsnak.datavalue.value and v.mainsnak.datavalue.value.id == WIKIDATA_DISAMBIG_QID then
			return true
		end
	end
	return false
end

function linkUtilities._linkIfExists(targetPage, linkText, noDisambig, currentPage) 
	if mw.ustring.match(targetPage, '%[%[') then
		return targetPage
	end
	if linkText == '' or linkText == nil then
		linkText = targetPage
    	-- remove parentheses 
    	linkText= mw.ustring.gsub(linkText, " *[(].*[)]","")
	end

	if targetPage == currentPage then return linkText	end
	
	if noDisambig then
		if linkUtilities.checkIsDismabig(targetPage) then
			return linkText
		end
	end
	
	local targetTitle = mw.title.new( targetPage )
	-- target title may be nil if the targetPage is invalid title
	if targetTitle ~=nil and targetTitle.exists then
		return mw.ustring.format('[[%s|%s]]', targetPage, linkText)
	else
		return linkText
	end
end

-- check if target is disambig page
function linkUtilities.isDismabig( frame )
	local targetPage = frame.args['1']
	if targetPage == '' or targetPage == nil then
		targetPage = mw.title.getCurrentTitle().text
	end
	return linkUtilities.checkIsDismabig(targetPage)
end

function linkUtilities.linkIfExists( frame )
	local targetPage = frame.args['1']
	local linkText = frame.args['2']
	local noDisambig = frame.args['noDisambig']~=nil and frame.args['noDisambig']~=''
	local currentPage = mw.title.getCurrentTitle().text
	return linkUtilities._linkIfExists(targetPage, linkText, noDisambig ,currentPage)
end

return linkUtilities