Jump to content

Module:Make Wikisource link

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by HouseBlaster (talk | contribs) at 04:10, 2 June 2025 (mw). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')

function p.makeLink(frame)
	local args = getArgs(frame)
	local lang = args['explicit-lang-param'] or args['implicit-lang-param'] or 'en'
	local pagename = mw.title.getCurrentTitle().text
	local linkTarget
	local displayText
	local toReturn
	-- get the Wikidata sitelink
	local wikidataSitelink = mw.wikibase.getSitelink(
		mw.wikibase.getEntityIdForCurrentPage() or '',
		lang .. 'wikisource'
	)
		
	-- if we have a language parameter, we look at the second unnamed parameter for the source title
	local checkIndexForTarget = args['implicit-lang-param'] and 2 or 1
	-- and then use the next index for display
	local checkIndexForDisplay = checkIndexForTarget + 1
	
	
	--[[---------
	Set the link target
	--]]---------
	if args[checkIndexForTarget] then
		-- we have a source title parameter, so return that
		linkTarget = args[checkIndexForTarget]
	elseif wikidataSitelink then
		-- use Wikidata
		linkTarget = wikidataSitelink
	else
		-- if Wikidata returns nothing, search for the {{PAGENAME}}
		linkTarget = 'Special:Search/' .. pagename
		-- we have no parameters and nothing at Wikidata, so we are flying blind
		-- We set displayText now to avoid including the Special:Search in the display text
		displayText = pagename
	end
	
	--[[---------	
	Now build the displayText
	--]]---------
	
	if not displayText then
		-- we did not set displayText in the above steps, so set it now
		-- first we check for an explicit display text, or else we set it to be the link target
		displayText = args[checkIndexForDisplay] or 
		('' .. string.gsub(linkTarget, '^Author:', ''))
	end
	
	-- build the link
	toReturn = '[[:m:s:' .. lang .. ':' .. linkTarget .. '|' .. displayText .. ']]'
	
	-- if no Wikidata link and no nocat parameter, throw in the error category
	-- we do this regardless of whether we used the Wikidata link for linking
	-- because the Wikisource text should be added to Wikidata regardless
	if not (wikidataSitelink or yesno(args.nocat)) then
		toReturn = toReturn .. '[[Category:Wikisource templates with missing id|' .. pagename .. ']]' 
	end
	
	return toReturn
end

return p