From Wikipedia, the free encyclopedia

--Just smashing things together

require('strict');



local p = {};



local ac = require('Module:Authority control');



local rt = require('Module:Redirect template');



local function renderMainTable()

	local tbl = mw.html.create('table')

		:addClass('nowraplinks')

		:addClass('hlist')



	tbl:css('border-spacing', 0)

	if border == 'subgroup' or border == 'none' then

		tbl

			:addClass('navbox-subgroup')

			:cssText(args.bodystyle)

			:cssText(args.style)

	else  -- regular navbox - bodystyle and style will be applied to the wrapper table

		tbl

			:addClass('navbox-inner')

			:css('background', 'transparent')

			:css('color', 'inherit')

	end

	tbl:cssText(args.innerstyle)



	renderTitleRow(tbl)

	renderAboveRow(tbl)

	for i, listnum in ipairs(listnums) do

		renderListRow(tbl, i, listnum)

	end

	renderBelowRow(tbl)



	return tbl

end



function p.newTable(navboxArgs)

	listnums = {}



	for k, _ in pairs(args) do

		if type(k) == 'string' then

			local listnum = k:match('^list(%d+)$')

			if listnum then table.insert(listnums, tonumber(listnum)) end

		end

	end

	table.sort(listnums)



	border = mw.text.trim(args.border or args1 or '')

	if border == 'child' then

		border = 'subgroup'

	end



	-- render the main body of the navbox

	local tbl = renderMainTable()



	-- render the appropriate wrapper around the navbox, depending on the border param

	local res = mw.html.create()

	if border == 'none' then

		local nav = res:tag('div')

			:attr('role', 'navigation')

			:node(tbl)

		-- aria-labelledby title, otherwise above, otherwise lone group

		if args.title or args.above or (args.group1 and not args.group2) then

			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))

		else

			nav:attr('aria-label', 'Navbox')

		end

	elseif border == 'subgroup' then

		-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is

		-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the

		-- padding being applied, and at the end add a <div> to balance out the parent's </div>

		res

			:wikitext('</div>')

			:node(tbl)

			:wikitext('<div>')

	else

		local nav = res:tag('div')

			:attr('role', 'navigation')

			:addClass('navbox')

			:addClass(args.navboxclass)

			:cssText(args.bodystyle)

			:cssText(args.style)

			:css('padding', '3px')

			:node(tbl)

		-- aria-labelledby title, otherwise above, otherwise lone group

		if args.title or args.above or (args.group1 and not args.group2) then

			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))

		else

			nav:attr('aria-label', 'Navbox')

		end

	end



	if (args.nocat or 'false'):lower() == 'false' then

		renderTrackingCategories(res)

	end

	return striped(tostring(res))

end



function p.main(frame)

	local resolveEntity = require( 'Module:ResolveEntityId' )

	local parentArgs = frame:getParent().args --WD IDs added here later

	local iParentArgs = 0 --count original/manual parent args only later

	local worldcatCat = ''

	local multipleIdCat = ''

	local suppressedIdCat = ''

	local deprecatedIdCat = ''

	local differentOnWDCat = ''

	local sameOnWDCat = ''

	

	--Redirect aliases to proper parameter names

	for _, a in pairs( ac.aliases ) do

		local alias, param = a1], a2

		if (parentArgsparam == nil or parentArgsparam == '') and parentArgsalias then

			parentArgsparam = parentArgsalias

		end

	end

	

	--Redirect deprecated parameters to proper parameter names, and assign tracking cat

	for _, d in pairs( ac.deprecated ) do

		local dep, param = d1], d2

		if (parentArgsparam == nil or parentArgsparam == '') and parentArgsdep then

			parentArgsparam = parentArgsdep

			if namespace == 0 then

				deprecatedIdCat = '[[Category:Wikipedia articles with deprecated authority control identifiers|'..dep..']]'

			end

		end

	end

	

	--Use QID= parameter for testing/example purposes only

	local itemId = nil

	if namespace ~= 0 then

		local qid = parentArgs'qid' or parentArgs'QID'

		if qid then

			itemId = 'Q'..mw.ustring.gsub(qid, '^[Qq]', '')

			itemId = resolveEntity._id(itemId) --nil if unresolvable

		end

	else

		itemId = mw.wikibase.getEntityIdForCurrentPage()

	end

	

	--Wikidata fallback if available

	if itemId then

		local iMatches = 0

		for _, params in ipairs( ac.conf ) do

			if params2 > 0 then

				local val = parentArgsmw.ustring.lower(params1])] or parentArgsparams1]]

				if val == nil or val == '' then

					local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

					if wikidataIds1 then

						if val == '' and (namespace == 0 or testcases) then

							suppressedIdCat = '[[Category:Wikipedia articles with suppressed authority control identifiers|'..params1..']]'

						else

							parentArgsparams1]] = wikidataIds1 --add ID from WD

						end

					end

				else

					iParentArgs = iParentArgs + 1

					local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

					if wikidataIds1 and differentOnWDCat == '' then

						local bMatch = false

						for _, wd in pairs( wikidataIds ) do

							if val == wd then

								iMatches = iMatches + 1

								bMatch = true

							end

						end

						if bMatch == false then

							differentOnWDCat = '[[Category:Pages using authority control with parameters different on Wikidata|'..params1..']]'

		end	end	end	end	end

		if iMatches > 0 and iMatches == iParentArgs then

			sameOnWDCat = '[[Category:Pages using authority control with parameters all matching Wikidata]]'

		end

	end

	--Configured rows

	local rct = 0

	local sectionOrder = {'General','National libraries','Art galleries and museums',

						  'Art research institutes','Biographical dictionaries','Scientific databases',

						  'Other'}

	local sections = {

		'General' = {},

		'National libraries' = {},

		'Art galleries and museums' = {},

		'Art research institutes' = {},

		'Biographical dictionaries' = {},

		'Scientific databases' = {},

		'Other' = {}

	}

	-- Don't show NLP is PLWABN is present, since they both go to the National Library of Poland

	-- and the library has deprecated NLP IDs in favor of PLWABN IDs

	if parentArgs.PLWABN or parentArgs.plwabn then

		parentArgs.NLP = ''

		parentArgs.nlp = ''

	end

	for _, params in ipairs( ac.conf ) do

		local val = parentArgsmw.ustring.lower(params1])] or parentArgsparams1]]

		local tval, tlinks = {}, {} --init tables

		if val and val ~= '' and type(params3]) == 'function' then

			table.insert( tval, val )

			if params.prefix then 

				table.insert( tlinks, params3]( val, '1' ) )

			else

				table.insert( tlinks, params3]( val ) )

			end

		end

		--collect other unique vals (IDs) from WD, if present

		if itemId and tval1 then

			local nextIdVal = 2

			local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

			for _, v in pairs( wikidataIds ) do

				local bnew = true

				for _, w in pairs( tval ) do

					if v == w then bnew = false end

				end

				if bnew then

					table.insert( tval, v )

					table.insert( tlinks, params3]( v, tostring(nextIdVal) ) )

					nextIdVal = nextIdVal + 1

				end

			end

		end

		--assemble

		if tval1 then

			table.insert( sectionsparams4]], ac.createRow( params1], tval, nil, tlinks, true, params.category, params.prefix) )

			rct = rct + 1

			if tval2 then

				multipleIdCat = ac.getCatForId( 'multiple' )

			end

		end

	

	end

	

	--WorldCat

	local worldcatId = parentArgs'worldcatid' or parentArgs'WORLDCATID'

	if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed

		table.insert( sections'General'], ac.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' WorldCat]', nil, false ) ) --Validation?

		worldcatCat = ac.getCatForId( 'WORLDCATID' )

		rct = rct + 1

	elseif worldcatId == nil then --if WORLDCATID absent but unsuppressed

		local viafId = parentArgs'viaf' or parentArgs'VIAF'

		local lccnId = parentArgs'lccn' or parentArgs'LCCN'

		if viafId and viafId ~= '' and ac.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated

			table.insert( sections'General'], ac.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' WorldCat (via VIAF)]', nil, false ) )

			if namespace == 0 then 

				worldcatCat = '[[Category:Wikipedia articles with WorldCat-VIAF identifiers]]'

			end

			rct = rct + 1

		elseif lccnId and lccnId ~= '' and ac.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated

			local lccnParts = ac.splitLccn( lccnId )

			if lccnParts and lccnParts1 ~= 'sh' then

				local lccnIdFmtd = lccnParts1..lccnParts2..'-'..lccnParts3

				table.insert( sections'General'], ac.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' WorldCat (via Library of Congress)]', nil, false ) )

				if namespace == 0 then

					worldcatCat = '[[Category:Wikipedia articles with WorldCat-LCCN identifiers]]'

				end

			end

			rct = rct + 1

		end

	elseif worldcatId == '' then --if WORLDCATID suppressed

		suppressedIdCat = '[[Category:Wikipedia articles with suppressed authority control identifiers|WORLDCATID]]'

	end

	local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args};

	local titleAC = '<b>[[Help:Authority control|Authority control]]'..'<span style="font-weight:normal;">:</span>'..pencil..'</b>';

	local namespaceCategories = rt.namespaceCategories;

	local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc});

	local namespace = mw.title.getCurrentTitle().namespace;



	--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https://bugzilla.wikimedia.org/show_bug.cgi?id=12974 is fixed

	local beCompatibleWithBug12974 = args.info and (args.info:find('^[:;#*]', 1) == 1 or args.info:find('{|', 1, true) == 1) and '\n' or ' '

	

	local content = string.format('\n<div class="rcat authority-control">\n*%s%s\n</div>',

		titleAC,

		p.newTable()

	)

	

	for k,v in pairs(namespaceCategories) do

		if argsk .. ' category' then

			if type(v1]) == 'function' and v1](namespace) or v1 == namespace then

				content = content .. string.format('[[Category:%s]]', argsk .. ' category'])

			elseif args'other category' then

				content = content .. string.format('[[Category:%s]]', args'other category'])

			else

				content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v2]}}

			end

		end

	end

	return content

end

--	rt.main(frame)

--end
From Wikipedia, the free encyclopedia

--Just smashing things together

require('strict');



local p = {};



local ac = require('Module:Authority control');



local rt = require('Module:Redirect template');



local function renderMainTable()

	local tbl = mw.html.create('table')

		:addClass('nowraplinks')

		:addClass('hlist')



	tbl:css('border-spacing', 0)

	if border == 'subgroup' or border == 'none' then

		tbl

			:addClass('navbox-subgroup')

			:cssText(args.bodystyle)

			:cssText(args.style)

	else  -- regular navbox - bodystyle and style will be applied to the wrapper table

		tbl

			:addClass('navbox-inner')

			:css('background', 'transparent')

			:css('color', 'inherit')

	end

	tbl:cssText(args.innerstyle)



	renderTitleRow(tbl)

	renderAboveRow(tbl)

	for i, listnum in ipairs(listnums) do

		renderListRow(tbl, i, listnum)

	end

	renderBelowRow(tbl)



	return tbl

end



function p.newTable(navboxArgs)

	listnums = {}



	for k, _ in pairs(args) do

		if type(k) == 'string' then

			local listnum = k:match('^list(%d+)$')

			if listnum then table.insert(listnums, tonumber(listnum)) end

		end

	end

	table.sort(listnums)



	border = mw.text.trim(args.border or args1 or '')

	if border == 'child' then

		border = 'subgroup'

	end



	-- render the main body of the navbox

	local tbl = renderMainTable()



	-- render the appropriate wrapper around the navbox, depending on the border param

	local res = mw.html.create()

	if border == 'none' then

		local nav = res:tag('div')

			:attr('role', 'navigation')

			:node(tbl)

		-- aria-labelledby title, otherwise above, otherwise lone group

		if args.title or args.above or (args.group1 and not args.group2) then

			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))

		else

			nav:attr('aria-label', 'Navbox')

		end

	elseif border == 'subgroup' then

		-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is

		-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the

		-- padding being applied, and at the end add a <div> to balance out the parent's </div>

		res

			:wikitext('</div>')

			:node(tbl)

			:wikitext('<div>')

	else

		local nav = res:tag('div')

			:attr('role', 'navigation')

			:addClass('navbox')

			:addClass(args.navboxclass)

			:cssText(args.bodystyle)

			:cssText(args.style)

			:css('padding', '3px')

			:node(tbl)

		-- aria-labelledby title, otherwise above, otherwise lone group

		if args.title or args.above or (args.group1 and not args.group2) then

			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))

		else

			nav:attr('aria-label', 'Navbox')

		end

	end



	if (args.nocat or 'false'):lower() == 'false' then

		renderTrackingCategories(res)

	end

	return striped(tostring(res))

end



function p.main(frame)

	local resolveEntity = require( 'Module:ResolveEntityId' )

	local parentArgs = frame:getParent().args --WD IDs added here later

	local iParentArgs = 0 --count original/manual parent args only later

	local worldcatCat = ''

	local multipleIdCat = ''

	local suppressedIdCat = ''

	local deprecatedIdCat = ''

	local differentOnWDCat = ''

	local sameOnWDCat = ''

	

	--Redirect aliases to proper parameter names

	for _, a in pairs( ac.aliases ) do

		local alias, param = a1], a2

		if (parentArgsparam == nil or parentArgsparam == '') and parentArgsalias then

			parentArgsparam = parentArgsalias

		end

	end

	

	--Redirect deprecated parameters to proper parameter names, and assign tracking cat

	for _, d in pairs( ac.deprecated ) do

		local dep, param = d1], d2

		if (parentArgsparam == nil or parentArgsparam == '') and parentArgsdep then

			parentArgsparam = parentArgsdep

			if namespace == 0 then

				deprecatedIdCat = '[[Category:Wikipedia articles with deprecated authority control identifiers|'..dep..']]'

			end

		end

	end

	

	--Use QID= parameter for testing/example purposes only

	local itemId = nil

	if namespace ~= 0 then

		local qid = parentArgs'qid' or parentArgs'QID'

		if qid then

			itemId = 'Q'..mw.ustring.gsub(qid, '^[Qq]', '')

			itemId = resolveEntity._id(itemId) --nil if unresolvable

		end

	else

		itemId = mw.wikibase.getEntityIdForCurrentPage()

	end

	

	--Wikidata fallback if available

	if itemId then

		local iMatches = 0

		for _, params in ipairs( ac.conf ) do

			if params2 > 0 then

				local val = parentArgsmw.ustring.lower(params1])] or parentArgsparams1]]

				if val == nil or val == '' then

					local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

					if wikidataIds1 then

						if val == '' and (namespace == 0 or testcases) then

							suppressedIdCat = '[[Category:Wikipedia articles with suppressed authority control identifiers|'..params1..']]'

						else

							parentArgsparams1]] = wikidataIds1 --add ID from WD

						end

					end

				else

					iParentArgs = iParentArgs + 1

					local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

					if wikidataIds1 and differentOnWDCat == '' then

						local bMatch = false

						for _, wd in pairs( wikidataIds ) do

							if val == wd then

								iMatches = iMatches + 1

								bMatch = true

							end

						end

						if bMatch == false then

							differentOnWDCat = '[[Category:Pages using authority control with parameters different on Wikidata|'..params1..']]'

		end	end	end	end	end

		if iMatches > 0 and iMatches == iParentArgs then

			sameOnWDCat = '[[Category:Pages using authority control with parameters all matching Wikidata]]'

		end

	end

	--Configured rows

	local rct = 0

	local sectionOrder = {'General','National libraries','Art galleries and museums',

						  'Art research institutes','Biographical dictionaries','Scientific databases',

						  'Other'}

	local sections = {

		'General' = {},

		'National libraries' = {},

		'Art galleries and museums' = {},

		'Art research institutes' = {},

		'Biographical dictionaries' = {},

		'Scientific databases' = {},

		'Other' = {}

	}

	-- Don't show NLP is PLWABN is present, since they both go to the National Library of Poland

	-- and the library has deprecated NLP IDs in favor of PLWABN IDs

	if parentArgs.PLWABN or parentArgs.plwabn then

		parentArgs.NLP = ''

		parentArgs.nlp = ''

	end

	for _, params in ipairs( ac.conf ) do

		local val = parentArgsmw.ustring.lower(params1])] or parentArgsparams1]]

		local tval, tlinks = {}, {} --init tables

		if val and val ~= '' and type(params3]) == 'function' then

			table.insert( tval, val )

			if params.prefix then 

				table.insert( tlinks, params3]( val, '1' ) )

			else

				table.insert( tlinks, params3]( val ) )

			end

		end

		--collect other unique vals (IDs) from WD, if present

		if itemId and tval1 then

			local nextIdVal = 2

			local wikidataIds = ac.getIdsFromWikidata( itemId, 'P'..params2 )

			for _, v in pairs( wikidataIds ) do

				local bnew = true

				for _, w in pairs( tval ) do

					if v == w then bnew = false end

				end

				if bnew then

					table.insert( tval, v )

					table.insert( tlinks, params3]( v, tostring(nextIdVal) ) )

					nextIdVal = nextIdVal + 1

				end

			end

		end

		--assemble

		if tval1 then

			table.insert( sectionsparams4]], ac.createRow( params1], tval, nil, tlinks, true, params.category, params.prefix) )

			rct = rct + 1

			if tval2 then

				multipleIdCat = ac.getCatForId( 'multiple' )

			end

		end

	

	end

	

	--WorldCat

	local worldcatId = parentArgs'worldcatid' or parentArgs'WORLDCATID'

	if worldcatId and worldcatId ~= '' then --if WORLDCATID present & unsuppressed

		table.insert( sections'General'], ac.createRow( 'WORLDCATID', worldcatId, '[https://www.worldcat.org/identities/'..mw.uri.encode(worldcatId, 'PATH')..' WorldCat]', nil, false ) ) --Validation?

		worldcatCat = ac.getCatForId( 'WORLDCATID' )

		rct = rct + 1

	elseif worldcatId == nil then --if WORLDCATID absent but unsuppressed

		local viafId = parentArgs'viaf' or parentArgs'VIAF'

		local lccnId = parentArgs'lccn' or parentArgs'LCCN'

		if viafId and viafId ~= '' and ac.viafLink( viafId ) then --VIAF must be present, unsuppressed, & validated

			table.insert( sections'General'], ac.createRow( 'VIAF', viafId, '[https://www.worldcat.org/identities/containsVIAFID/'..viafId..' WorldCat (via VIAF)]', nil, false ) )

			if namespace == 0 then 

				worldcatCat = '[[Category:Wikipedia articles with WorldCat-VIAF identifiers]]'

			end

			rct = rct + 1

		elseif lccnId and lccnId ~= '' and ac.lccnLink( lccnId ) then --LCCN must be present, unsuppressed, & validated

			local lccnParts = ac.splitLccn( lccnId )

			if lccnParts and lccnParts1 ~= 'sh' then

				local lccnIdFmtd = lccnParts1..lccnParts2..'-'..lccnParts3

				table.insert( sections'General'], ac.createRow( 'LCCN', lccnId, '[https://www.worldcat.org/identities/lccn-'..lccnIdFmtd..' WorldCat (via Library of Congress)]', nil, false ) )

				if namespace == 0 then

					worldcatCat = '[[Category:Wikipedia articles with WorldCat-LCCN identifiers]]'

				end

			end

			rct = rct + 1

		end

	elseif worldcatId == '' then --if WORLDCATID suppressed

		suppressedIdCat = '[[Category:Wikipedia articles with suppressed authority control identifiers|WORLDCATID]]'

	end

	local pencil = frame:expandTemplate{ title = 'EditAtWikidata', args = args};

	local titleAC = '<b>[[Help:Authority control|Authority control]]'..'<span style="font-weight:normal;">:</span>'..pencil..'</b>';

	local namespaceCategories = rt.namespaceCategories;

	local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Redirect template', valueFunc = valueFunc});

	local namespace = mw.title.getCurrentTitle().namespace;



	--- XXX: this is a HORRIBLE HACK. kill it with fire as soon as https://bugzilla.wikimedia.org/show_bug.cgi?id=12974 is fixed

	local beCompatibleWithBug12974 = args.info and (args.info:find('^[:;#*]', 1) == 1 or args.info:find('{|', 1, true) == 1) and '\n' or ' '

	

	local content = string.format('\n<div class="rcat authority-control">\n*%s%s\n</div>',

		titleAC,

		p.newTable()

	)

	

	for k,v in pairs(namespaceCategories) do

		if argsk .. ' category' then

			if type(v1]) == 'function' and v1](namespace) or v1 == namespace then

				content = content .. string.format('[[Category:%s]]', argsk .. ' category'])

			elseif args'other category' then

				content = content .. string.format('[[Category:%s]]', args'other category'])

			else

				content = content .. frame:expandTemplate{title = 'Incorrect redirect template', args = {v2]}}

			end

		end

	end

	return content

end

--	rt.main(frame)

--end

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook