<?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%3APortal_navigation</id>
	<title>Module:Portal navigation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3APortal_navigation"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Portal_navigation&amp;action=history"/>
	<updated>2026-06-07T04:07:16Z</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:Portal_navigation&amp;diff=144487&amp;oldid=prev</id>
		<title>imported&gt;Xaosflux: WP:RFPI complete</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Portal_navigation&amp;diff=144487&amp;oldid=prev"/>
		<updated>2020-04-24T14:15:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=WP:RFPI&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:RFPI (page does not exist)&quot;&gt;WP:RFPI&lt;/a&gt; complete&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local yesno = require(&amp;quot;Module:Yesno&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
function get_portalicon(portalicon)&lt;br /&gt;
	if portalicon == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span style=&amp;quot;padding:0.3em; display:inline-block;margin-right:0.5em;&amp;quot;&amp;gt;&amp;#039; .. portalicon .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function converttolinearrgb(c)&lt;br /&gt;
	c = tonumber(c, 16)&lt;br /&gt;
	c = c / 255.0&lt;br /&gt;
	if c &amp;lt;= 0.03928 then&lt;br /&gt;
		c = c/12.92&lt;br /&gt;
	else&lt;br /&gt;
		c = ((c+0.055)/1.055) ^ 2.4&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return c&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
	-- Default values&lt;br /&gt;
	portalname = &amp;#039;Portal&amp;#039;&lt;br /&gt;
	tabs = {}&lt;br /&gt;
	subtabs = {}&lt;br /&gt;
	wrc = 0&lt;br /&gt;
&lt;br /&gt;
	-- Default values (customizations)&lt;br /&gt;
	themecolor = &amp;#039;#54595d&amp;#039;&lt;br /&gt;
	headerstyle = &amp;#039;&amp;#039;&lt;br /&gt;
	tabsicons = {}&lt;br /&gt;
	wrcadditional = nil&lt;br /&gt;
	&lt;br /&gt;
	-- Populating variables&lt;br /&gt;
	for key, value in pairs(frame:getParent().args) do&lt;br /&gt;
		if key == &amp;#039;portalname&amp;#039; then&lt;br /&gt;
			portalname = value&lt;br /&gt;
		elseif key == &amp;#039;portalicon&amp;#039; then&lt;br /&gt;
			portalicon = value&lt;br /&gt;
		elseif key == &amp;#039;active&amp;#039; then&lt;br /&gt;
			active = tonumber(value)&lt;br /&gt;
		elseif key == &amp;#039;wrc&amp;#039; then&lt;br /&gt;
			wrc = value&lt;br /&gt;
		elseif key == &amp;#039;themecolor&amp;#039; then&lt;br /&gt;
			themecolor = value&lt;br /&gt;
		elseif key == &amp;#039;headerstyle&amp;#039; then&lt;br /&gt;
			headerstyle = value&lt;br /&gt;
		elseif key == &amp;#039;hidenav&amp;#039; then&lt;br /&gt;
			hidenav = yesno(value)&lt;br /&gt;
		elseif key == &amp;#039;hidesubnav&amp;#039; then&lt;br /&gt;
			hidesubnav = yesno(value)&lt;br /&gt;
		elseif key == &amp;#039;wrcadditional&amp;#039; then&lt;br /&gt;
			wrcadditional = value&lt;br /&gt;
		elseif string.find(key, &amp;#039;tab&amp;#039;) ~= nil&lt;br /&gt;
		and string.find(key, &amp;#039;subtab&amp;#039;) == nil then  -- matches tab1, tab2, ...&lt;br /&gt;
    		id = string.gsub(key, &amp;#039;tab&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    		id = tonumber(id)&lt;br /&gt;
    		tabs[id] = value&lt;br /&gt;
    	elseif string.find(key, &amp;#039;icon&amp;#039;) ~= nil then -- matches icon1, icon2, etc.&lt;br /&gt;
    		id = string.gsub(key, &amp;#039;icon&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    		id = tonumber(id)&lt;br /&gt;
    		tabsicons[id] = value&lt;br /&gt;
    	elseif string.find(key, &amp;#039;subtab&amp;#039;) ~= nil then -- matches subtab1-1, etc.&lt;br /&gt;
    		id = string.gsub(key, &amp;#039;subtab&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
    		-- Subtab params take the form [prime tab]-[sub tab]&lt;br /&gt;
    		id = mw.text.split(id, &amp;#039;-&amp;#039;)&lt;br /&gt;
    		primetab = tonumber(id[1])&lt;br /&gt;
    		subtab = tonumber(id[2])&lt;br /&gt;
    		if subtabs[primetab] == nil then&lt;br /&gt;
    			subtabs[primetab] = {}&lt;br /&gt;
    		end&lt;br /&gt;
    		subtabs[primetab][subtab] = value&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Constructing header&lt;br /&gt;
	-- Relevant variables: portalname, wrc, themecolor, headerstyle&lt;br /&gt;
	&lt;br /&gt;
	-- The text color in the header is automatically chosen based on the best contrast&lt;br /&gt;
	-- https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color&lt;br /&gt;
	headertextcolor = &amp;#039;#fff&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	rgb = string.gsub(themecolor, &amp;#039;#&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	rgb = mw.text.split(rgb, &amp;#039;&amp;#039;)&lt;br /&gt;
	if #rgb == 6 then&lt;br /&gt;
		r = rgb[1] .. rgb[2]&lt;br /&gt;
		g = rgb[3] .. rgb[4]&lt;br /&gt;
		b = rgb[5] .. rgb[6]&lt;br /&gt;
	elseif #rgb == 3 then&lt;br /&gt;
		r = rgb[1] .. rgb[1]&lt;br /&gt;
		g = rgb[2] .. rgb[2]&lt;br /&gt;
		b = rgb[3] .. rgb[3]&lt;br /&gt;
	end&lt;br /&gt;
	r = converttolinearrgb(r)&lt;br /&gt;
	g = converttolinearrgb(g)&lt;br /&gt;
	b = converttolinearrgb(b)&lt;br /&gt;
	&lt;br /&gt;
	luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b&lt;br /&gt;
	&lt;br /&gt;
	if luminance &amp;gt; 0.179 then&lt;br /&gt;
		headertextcolor = &amp;#039;#000&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Applying customizations to headerstyle&lt;br /&gt;
	if headerstyle ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		headerstyle = &amp;#039; &amp;#039; .. headerstyle&lt;br /&gt;
	end&lt;br /&gt;
	headerstyle = &amp;#039;font-size:1.6875em; border-radius:2px; font-weight:bold;&amp;#039;&lt;br /&gt;
		.. &amp;#039;background:&amp;#039; .. themecolor .. &amp;#039;; color:&amp;#039; .. headertextcolor&lt;br /&gt;
		.. &amp;#039;; padding:0.25em;&amp;#039;.. headerstyle&lt;br /&gt;
	&lt;br /&gt;
	header = &amp;#039;&amp;lt;div style=&amp;quot;&amp;#039; .. headerstyle .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	header = header .. portalname .. get_portalicon(portalicon) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if wrc == &amp;#039;1&amp;#039; or wrc == 1 or wrc == &amp;#039;true&amp;#039; or wrc == true or wrc == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		badgeargs = {}&lt;br /&gt;
		if wrcadditional ~= nil then&lt;br /&gt;
			badgeargs[&amp;#039;additional&amp;#039;] = wrcadditional&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		header = frame:expandTemplate{&lt;br /&gt;
			title = &amp;#039;Wikimedia Resource Center badge&amp;#039;,&lt;br /&gt;
			args = badgeargs }&lt;br /&gt;
			.. &amp;#039;\n\n&amp;#039; .. header&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Constructing the rest&lt;br /&gt;
	-- Relevant variables: themecolor tabs tabsicons active subtabs&lt;br /&gt;
&lt;br /&gt;
	body = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if hidenav ~= true then&lt;br /&gt;
		body = body .. &amp;#039;&amp;lt;div style=&amp;quot;font-size:1.125em; margin-bottom:1.125em;&amp;gt;&amp;#039;&lt;br /&gt;
		&lt;br /&gt;
		for index, pagelink in ipairs(tabs) do&lt;br /&gt;
			-- Open TOC entry container&lt;br /&gt;
			containerstyle = &amp;#039;display:inline-block; position:relative; vertical-align:top;&amp;#039;&lt;br /&gt;
			body = body .. &amp;#039;&amp;lt;div style=&amp;quot;&amp;#039; .. containerstyle .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
			&lt;br /&gt;
			-- Create the tab itself&lt;br /&gt;
			entrystyle = &amp;#039;display:inline-block; margin:1em; padding-bottom:0.5em; font-weight:bold;&amp;#039;&lt;br /&gt;
			if index == active then&lt;br /&gt;
				if subtabs[index] == nil or hidesubnav == true then&lt;br /&gt;
					entrystyle = entrystyle .. &amp;#039; border-bottom:0.3em solid &amp;#039; .. themecolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					entrystyle = entrystyle .. &amp;#039; margin-bottom:0;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				entrystyle = entrystyle .. &amp;#039;  border-bottom:0.3em solid #c8ccd1;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			icon = &amp;#039;&amp;#039;&lt;br /&gt;
			if tabsicons[index] ~= nil then&lt;br /&gt;
				icon = &amp;#039;&amp;lt;span style=&amp;quot;margin-right:0.75em;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
				icon = icon .. tabsicons[index] .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			body = body&lt;br /&gt;
				.. &amp;#039;&amp;lt;span style=&amp;quot;&amp;#039; .. entrystyle .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
				.. icon .. pagelink&lt;br /&gt;
				.. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			&lt;br /&gt;
			-- If the tab is active, show the subnav if there is any&lt;br /&gt;
			&lt;br /&gt;
			if index == active and subtabs[index] ~= nil and hidesubnav ~= true then&lt;br /&gt;
				body = body .. &amp;#039;&amp;lt;div style=&amp;quot;font-size:95%; margin-left:1em; margin-right:1em; padding-top:1.125em; padding-bottom:1.125em; border-top:0.35em solid &amp;#039; .. themecolor .. &amp;#039;; border-bottom:0.35em solid&amp;#039; .. themecolor .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
				&lt;br /&gt;
				for subindex, subpagelink in ipairs(subtabs[index]) do&lt;br /&gt;
					body = body .. subpagelink&lt;br /&gt;
					if subindex ~= #subtabs[index] then&lt;br /&gt;
						body = body .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				body = body .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Close TOC entry container&lt;br /&gt;
			body = body .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		body = body .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;#039;&amp;lt;div&amp;gt;&amp;#039; .. header .. body .. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Xaosflux</name></author>
	</entry>
</feed>