Module:Disambiguation/sandbox

From Wikisource
Jump to navigation Jump to search
require('strict')

local p = {}

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

function p._disambiguation(argsWithBlanks)
	local args = {}
	for k, v in pairs(argsWithBlanks) do
		if k == 'categories' or v ~= '' then
			args[k] = v
		end
	end
	
	local current_title = mw.title.getCurrentTitle()
	local namespace = args.namespace or current_title.nsText
	local shared = yesno(args.shared)
	
	-- info text
	local infoword1 = 'works'
	local infoword2 = 'title'
	
	if namespace == 'Author' then
		infoword1 = 'authors'
		infoword2 = 'name'
	elseif namespace == 'Portal' then
		infoword1 = 'portals'
		infoword2 = 'topic name'
	end
	
	local info = tostring(mw.html.create('p'):css({['font-style'] = 'italic'}):wikitext(table.concat({
		'This is a [[WS:STYLE#Disambiguation, versions and translations pages|disambiguation page]]. It lists ',
		infoword1,
		' that share the same ',
		infoword2,
		'. If an [[Special:Whatlinkshere/',
		current_title.fullText,
		'|article link]] referred you here, please consider editing it to point directly to the intended page.'
	})))
	if args.notes then
		info = info .. '<p>' .. args.notes .. '</p>'
	end
	
	-- header
	local header
	local postheader = tostring(mw.html.create('div'):addClass('subNote'):css({['margin'] = '4px auto 4px auto'}):wikitext(
		tostring(mw.html.create('span'):attr('id', 'nofooter'):wikitext(
			args.intro
			or tostring(mw.html.create('span'):css({['font-weight'] = 'bold', ['font-style'] = 'italic'}):wikitext(args.title or current_title.text)) .. ' may refer to:'
		))
	))
	local disambig_text = ' <span style="font-weight:normal;">(disambiguation)</span>'
	local cat = namespace .. ' disambiguation pages'
	if namespace == 'Author' then
		header = require('Module:Author')._author({
			firstname = current_title.text .. disambig_text,
			last_initial = '!NO_INITIALS',
			description = info,
			wikipedia = args.wikipedia,
			nocat = true,
			defaultsort = args.defaultsort,
			disambiguation = true
		})
	elseif namespace == 'Portal' then
		header = require('Module:Portal header')._portal_header({
			title = current_title.text .. disambig_text,
			class = 'none',
			nocat = true,
			reviewed = 'n/a',
			notes = info,
			disambiguation = true
		})
	elseif namespace == '' or namespace == 'Template' then
		local pretitle = 'Works'
		if shared then
			pretitle = 'Works and pages in other namespaces'
		end
		pretitle = pretitle .. ' entitled'
		
		if shared and not current_title.isSubpage then
			-- should be redundant as attached to header
			info = info .. '[[Category:' .. 'Merged disambiguation pages' .. ']]'
		end
		
		header = require('Module:Header')._header({
			pretitle = pretitle,
			title = args.title,
			section = args.section,
			author = args.author,
			notes = info,
			wikipedia = args.wikipedia,
			commonscat = args.commonscat,
			wikiquote = args.wikiquote,
			wikinews = args.wikinews,
			disambiguation = true,
			portal = args.portal,
			header_class = 'ws-dynlayout-disable',
			defaultsort = args.defaultsort
		})
		
		cat = 'Mainspace disambiguation pages'
	else
		header = require('Module:Error')['error']({'[[Module:Disambiguation]] error: {{[[Template:Disambiguation|disambiguation]]}} is only for use in the Main, Author and Portal [[Help:Namespace|namespaces]]'})
		postheader = ''
		cat = 'Disambiguation pages in inappropriate namespaces'
	end
	
	return header .. mw.getCurrentFrame():preprocess('__DISAMBIG__') .. postheader .. (args.category or '[[Category:' .. cat .. ']]')
end

function p.disambiguation(frame)
	return p._disambiguation(getArgs(frame, {removeBlanks = false}))
end

return p