<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FEvad37%2FMapframe_multi</id>
	<title>Module:Sandbox/Evad37/Mapframe multi - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FEvad37%2FMapframe_multi"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Evad37/Mapframe_multi&amp;action=history"/>
	<updated>2026-04-20T19:47:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Evad37/Mapframe_multi&amp;diff=145409&amp;oldid=prev</id>
		<title>imported&gt;Evad37: thumbinner requires a width</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Evad37/Mapframe_multi&amp;diff=145409&amp;oldid=prev"/>
		<updated>2020-06-19T01:27:01Z</updated>

		<summary type="html">&lt;p&gt;thumbinner requires a width&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local mapframe = require(&amp;#039;Module:Mapframe&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local DEFAULT_WIDTH = &amp;quot;300&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Get the number of key-value pairs in a table, which might not be a sequence.&lt;br /&gt;
function tableCount(t)&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
	end&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- For a table where the values are all tables, returns either the tableCount of&lt;br /&gt;
-- the subtables if they are all the same, or nil if they are not all the same.&lt;br /&gt;
function subTablesCount(t)&lt;br /&gt;
	local count = nil&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if count == nil then&lt;br /&gt;
			count = tableCount(v)&lt;br /&gt;
		elseif count ~= tableCount(v) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tableFromList(listString)&lt;br /&gt;
	if type(listString) ~= &amp;quot;string&amp;quot; or listString == &amp;quot;&amp;quot; then return nil, true end&lt;br /&gt;
	local separator = (mw.ustring.find(listString, &amp;quot;###&amp;quot;, 0, true ) and &amp;quot;###&amp;quot;) or&lt;br /&gt;
		(mw.ustring.find(listString, &amp;quot;;&amp;quot;, 0, true ) and &amp;quot;;&amp;quot;) or &amp;quot;,&amp;quot;&lt;br /&gt;
	local pattern = &amp;quot;%s*&amp;quot;..separator..&amp;quot;%s*&amp;quot;&lt;br /&gt;
	local t = mw.text.split(listString, pattern)&lt;br /&gt;
	-- if #t == 1 then -- debugging&lt;br /&gt;
	-- 	error(string.format(&amp;quot;Found 1 value in &amp;#039;%s&amp;#039; using separator &amp;#039;%s&amp;#039;&amp;quot;, listString or &amp;quot;{nil}&amp;quot;, separator))&lt;br /&gt;
	-- end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Makes the HTML required for the swicther to work, including the templatestyles tag&lt;br /&gt;
&lt;br /&gt;
@param {table} params  table sequence of {map, label} tables&lt;br /&gt;
  @param {string} params{}.map  Wikitext for mapframe map&lt;br /&gt;
  @param {string} params{}.label  Label text for swicther option&lt;br /&gt;
@param {table} options&lt;br /&gt;
  @param {string} options.alignment  &amp;quot;left&amp;quot; or &amp;quot;center&amp;quot; or &amp;quot;right&amp;quot;&lt;br /&gt;
  @param {boolean} options.isThumbnail  Display in a thumbnail&lt;br /&gt;
  @param {string} options.width  Width of frame, e.g. &amp;quot;200&amp;quot;&lt;br /&gt;
  @param {string} [options.caption]  Caption wikitext for thumnail&lt;br /&gt;
@retruns {string} swicther HTML&lt;br /&gt;
]]--&lt;br /&gt;
function makeSwitcherHtml(params, options)&lt;br /&gt;
	if not options then option = {} end&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local styles = frame:extensionTag{&lt;br /&gt;
		name = &amp;quot;templatestyles&amp;quot;,&lt;br /&gt;
		args = {src = &amp;quot;TemplateStyles sandbox/Evad37/Template:Mapframe multi/styles.css&amp;quot;}&lt;br /&gt;
	}&lt;br /&gt;
	local container = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;switcher-container&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;mapframe-multi-container&amp;quot;)&lt;br /&gt;
	if options.alignment == &amp;quot;left&amp;quot; or options.alignment == &amp;quot;right&amp;quot; then&lt;br /&gt;
		container:addClass(&amp;quot;float&amp;quot;..options.alignment)&lt;br /&gt;
	else -- alignment is &amp;quot;center&amp;quot;&lt;br /&gt;
		container:addClass(&amp;quot;center&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, #params do&lt;br /&gt;
		container&lt;br /&gt;
			:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
				:wikitext(params[i].map)&lt;br /&gt;
				:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
					:addClass(&amp;quot;switcher-label&amp;quot;)&lt;br /&gt;
					:css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;)&lt;br /&gt;
					:wikitext(mw.text.trim(params[i].label))&lt;br /&gt;
	end&lt;br /&gt;
	if not options.isThumbnail then&lt;br /&gt;
		return styles .. tostring(container)&lt;br /&gt;
	end&lt;br /&gt;
	local classlist = container:getAttr(&amp;quot;class&amp;quot;)&lt;br /&gt;
	classlist = mw.ustring.gsub(classlist, &amp;quot;%a*&amp;quot;..options.alignment, &amp;quot;&amp;quot;)&lt;br /&gt;
	container:attr(&amp;quot;class&amp;quot;, classlist)&lt;br /&gt;
	local outerCountainer = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;mapframe-multi-outer-container&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;mw-kartographer-container&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;thumb&amp;quot;)&lt;br /&gt;
	if options.alignment == &amp;quot;left&amp;quot; or options.alignment == &amp;quot;right&amp;quot; then&lt;br /&gt;
		outerCountainer:addClass(&amp;quot;t&amp;quot;..options.alignment)&lt;br /&gt;
	else -- alignment is &amp;quot;center&amp;quot;&lt;br /&gt;
		outerCountainer&lt;br /&gt;
			:addClass(&amp;quot;tnone&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;center&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	outerCountainer&lt;br /&gt;
		:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;thumbinner&amp;quot;)&lt;br /&gt;
			:css(&amp;quot;width&amp;quot;, options.width..&amp;quot;px&amp;quot;)&lt;br /&gt;
			:node(container)&lt;br /&gt;
			:node(options.caption and mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
				:addClass(&amp;quot;thumbcaption&amp;quot;)&lt;br /&gt;
				:wikitext(options.caption)&lt;br /&gt;
			)&lt;br /&gt;
	return styles .. tostring(outerCountainer)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry points for templates&lt;br /&gt;
p.main = function(frame)&lt;br /&gt;
	local args = getArgs(frame, {parentFirst = true})&lt;br /&gt;
	local output = p._main(args)&lt;br /&gt;
	return frame:preprocess(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p._main = function(args)&lt;br /&gt;
	if not args.switch then error(&amp;quot;Mapframe multi: Paramater switch= is required&amp;quot;, 0) end&lt;br /&gt;
	local switchLabels = tableFromList(args.switch)&lt;br /&gt;
	if #switchLabels == 1 then error(&amp;quot;Mapframe multi: Found only one label in paramater switch=&amp;quot;, 0) end&lt;br /&gt;
	&lt;br /&gt;
	local mapframeArgs = {}&lt;br /&gt;
	local switchParams = {}&lt;br /&gt;
	for name, val in pairs(args) do&lt;br /&gt;
		-- Copy to mapframeArgs, if not one of the switch labels or values args&lt;br /&gt;
		if name ~= &amp;quot;switch&amp;quot; and not string.match(name, &amp;quot;^SWITCH:&amp;quot;) then&lt;br /&gt;
			mapframeArgs[name] = val&lt;br /&gt;
		end&lt;br /&gt;
		-- Check if this is params to switch. If so, store the name and switch&lt;br /&gt;
		-- values in switchParams table.&lt;br /&gt;
		local switchList = string.match(val, &amp;quot;^SWITCH:(.+)&amp;quot;)&lt;br /&gt;
		if switchList ~= nil then&lt;br /&gt;
			local values = tableFromList(switchList)&lt;br /&gt;
			if #values == 1 then&lt;br /&gt;
				error(string.format(&amp;quot;Mapframe multi: Found only one switch value in paramater %s=&amp;quot;, name), 0)&lt;br /&gt;
			end&lt;br /&gt;
			switchParams[name] = values&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if tableCount(switchParams) == 0 then&lt;br /&gt;
		error(&amp;quot;Mapframe multi: At least one parameter must have a SWITCH: list&amp;quot;, 0)&lt;br /&gt;
	end&lt;br /&gt;
	local switchCount = subTablesCount(switchParams)&lt;br /&gt;
	if not switchCount then &lt;br /&gt;
		error(&amp;quot;Mapframe multi: All SWITCH parameters must have the same number of switch values&amp;quot;, 0)&lt;br /&gt;
	elseif switchCount &amp;gt; #switchLabels then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;Mapframe multi: Found %d switch value%s but only %d label%s in parameter switch=&amp;quot;,&lt;br /&gt;
			switchCount, switchCount == 1 and &amp;quot;&amp;quot; or &amp;quot;s&amp;quot;, #switchLabels, #switchLabels == 1 and &amp;quot;&amp;quot; or &amp;quot;s&amp;quot;&lt;br /&gt;
		), 0)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ensure a plain frame will be used (thumbnail will be built by the&lt;br /&gt;
	-- makeSwitcherHtml function if required, so that switcher options are&lt;br /&gt;
	-- inside the thumnail)&lt;br /&gt;
	mapframeArgs.plain = &amp;quot;yes&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local switcher = {}&lt;br /&gt;
	for i = 1, switchCount do&lt;br /&gt;
		local label = switchLabels[i]&lt;br /&gt;
		for name, values in pairs(switchParams) do&lt;br /&gt;
			mapframeArgs[name] = values[i]&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(switcher, {&lt;br /&gt;
			map = mapframe._main(mapframeArgs),&lt;br /&gt;
			label = &amp;quot;Show &amp;quot;..label&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	return makeSwitcherHtml(switcher, {&lt;br /&gt;
		alignment = args[&amp;quot;frame-align&amp;quot;] or &amp;quot;right&amp;quot;,&lt;br /&gt;
		isThumbnail = (args.frame and not args.plain) and true or false,&lt;br /&gt;
		width = args[&amp;quot;frame-width&amp;quot;] or DEFAULT_WIDTH,&lt;br /&gt;
		caption = args.text&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Evad37</name></author>
	</entry>
</feed>