<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bodycommunication.net/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ASubject_bar</id>
	<title>Module:Subject bar - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://bodycommunication.net/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ASubject_bar"/>
	<link rel="alternate" type="text/html" href="https://bodycommunication.net/w/index.php?title=Module:Subject_bar&amp;action=history"/>
	<updated>2026-05-04T22:52:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://bodycommunication.net/w/index.php?title=Module:Subject_bar&amp;diff=8619&amp;oldid=prev</id>
		<title>SadanYagci: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://bodycommunication.net/w/index.php?title=Module:Subject_bar&amp;diff=8619&amp;oldid=prev"/>
		<updated>2021-09-07T23:04:07Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:04, 7 September 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>SadanYagci</name></author>
	</entry>
	<entry>
		<id>https://bodycommunication.net/w/index.php?title=Module:Subject_bar&amp;diff=8618&amp;oldid=prev</id>
		<title>en&gt;Tom.Reding: Update portal link, per talk</title>
		<link rel="alternate" type="text/html" href="https://bodycommunication.net/w/index.php?title=Module:Subject_bar&amp;diff=8618&amp;oldid=prev"/>
		<updated>2021-04-29T10:25:24Z</updated>

		<summary type="html">&lt;p&gt;Update portal link, per talk&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getPortalImage = require('Module:Portal').image&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix, args)&lt;br /&gt;
    -- Returns a table containing the numbers of the arguments that exist for the specified prefix. For example, if the&lt;br /&gt;
    -- prefix was 'data', and 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.&lt;br /&gt;
    local nums = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
        if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(nums)&lt;br /&gt;
    return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHorizontalRule()&lt;br /&gt;
    local row = mw.html.create('tr')&lt;br /&gt;
    row&lt;br /&gt;
        :tag('td')&lt;br /&gt;
            :attr('colspan', '2')&lt;br /&gt;
            :tag('hr', {selfClosing = true})&lt;br /&gt;
    return tostring(row)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeItem(image, text)&lt;br /&gt;
    local root = mw.html.create('li')&lt;br /&gt;
    root&lt;br /&gt;
        :css('float', 'left')&lt;br /&gt;
        :css('margin-left', '0.3em')&lt;br /&gt;
        :css('height', '3.6em')&lt;br /&gt;
        :tag('span')&lt;br /&gt;
            :css('display', 'inline-block')&lt;br /&gt;
            :css('margin-right', '0.3em')&lt;br /&gt;
            :css('width', '30px')&lt;br /&gt;
            :css('line-height', '3.6em')&lt;br /&gt;
            :css('text-align', 'center')&lt;br /&gt;
            :wikitext(image)&lt;br /&gt;
            :done()&lt;br /&gt;
        :tag('span')&lt;br /&gt;
            :css('display', 'inline-block')&lt;br /&gt;
            :css('width', '11em')&lt;br /&gt;
            :css('vertical-align', 'middle')&lt;br /&gt;
            :wikitext(text)&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeRow(items, heading, subheading, options)&lt;br /&gt;
    if #items &amp;lt; 1 then return end&lt;br /&gt;
    local swapHeadingSize = type(options) == 'table' and options.swapHeadingSize or false&lt;br /&gt;
    local row = mw.html.create('tr')&lt;br /&gt;
    row&lt;br /&gt;
        :tag('td')&lt;br /&gt;
            :css('width', '125px')&lt;br /&gt;
            :cssText('border-right:solid 1px black; padding-left:3px; padding-right:3px;')&lt;br /&gt;
            :tag('span')&lt;br /&gt;
                :css('font-size', swapHeadingSize and '90%' or '125%')&lt;br /&gt;
                :wikitext(heading)&lt;br /&gt;
                :done()&lt;br /&gt;
            :tag('br', {selfClosing = true})&lt;br /&gt;
                :done()&lt;br /&gt;
            :tag('span')&lt;br /&gt;
                :css('font-size', swapHeadingSize and '125%' or '90%')&lt;br /&gt;
                :wikitext(subheading)&lt;br /&gt;
    local list = row:tag('td'):css('text-align', 'left'):tag('ul')&lt;br /&gt;
    for i, item in ipairs(items) do&lt;br /&gt;
        local image = item[1]&lt;br /&gt;
        local text = item[2]&lt;br /&gt;
        list&lt;br /&gt;
            :wikitext(makeItem(image, text))&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(row)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeNumberedRow(prefix, args, heading, subheading, getItemValsFunc, options)&lt;br /&gt;
    if args[prefix] then&lt;br /&gt;
        args[prefix .. '1'] = args[prefix]&lt;br /&gt;
    end&lt;br /&gt;
    local argNums = getArgNums(prefix, args)&lt;br /&gt;
    local items = {}&lt;br /&gt;
    for i, argNum in ipairs(argNums) do&lt;br /&gt;
        local image, text = getItemValsFunc(args[prefix .. tostring(argNum)])&lt;br /&gt;
        table.insert(items, {image, text})&lt;br /&gt;
    end&lt;br /&gt;
    return makeRow(items, heading, subheading, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function checkPortalExists(portal)&lt;br /&gt;
	return not (mw.title.makeTitle(100, portal).id == 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local trackingEnabled = true&lt;br /&gt;
&lt;br /&gt;
-- Check whether to do tracking in this namespace&lt;br /&gt;
-- Returns true unless the page is one of the banned namespaces&lt;br /&gt;
local function checkTrackingNamespace()&lt;br /&gt;
	local thisPage = mw.title.getCurrentTitle()&lt;br /&gt;
	if (thisPage.namespace == 1) -- Talk&lt;br /&gt;
		or (thisPage.namespace == 2) -- User&lt;br /&gt;
		or (thisPage.namespace == 3) -- User talk&lt;br /&gt;
		or (thisPage.namespace == 5) -- Wikipedia talk&lt;br /&gt;
		or (thisPage.namespace == 7) -- File talk&lt;br /&gt;
		or (thisPage.namespace == 11) -- Template talk&lt;br /&gt;
		or (thisPage.namespace == 15) -- Category talk&lt;br /&gt;
		or (thisPage.namespace == 101) -- Portal talk&lt;br /&gt;
		or (thisPage.namespace == 118) -- Draft&lt;br /&gt;
		or (thisPage.namespace == 119) -- Draft talk&lt;br /&gt;
		or (thisPage.namespace == 829) -- Module talk&lt;br /&gt;
		then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Check whether to do tracking on this pagename&lt;br /&gt;
-- Returns false if the page title matches one of the banned strings&lt;br /&gt;
-- Otherwise returns true&lt;br /&gt;
local function checkTrackingPagename()&lt;br /&gt;
	local thisPage = mw.title.getCurrentTitle()&lt;br /&gt;
	local thisPageLC = mw.ustring.lower(thisPage.text)&lt;br /&gt;
	if (string.match(thisPageLC, &amp;quot;/archive&amp;quot;) ~= nil) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if (string.match(thisPageLC, &amp;quot;/doc&amp;quot;) ~= nil) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if (string.match(thisPageLC, &amp;quot;/test&amp;quot;) ~= nil) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local redlinkedportal = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Tracking is on by default.&lt;br /&gt;
	-- It is disabled if any of the following is true&lt;br /&gt;
	-- 1/ the parameter &amp;quot;tracking&amp;quot; is set to 'no, 'n', or 'false'&lt;br /&gt;
	-- 2/ the current page fails the namespace tests in checkTrackingNamespace()&lt;br /&gt;
	-- 3/ the current page fails the pagename tests in checkTrackingPagename()&lt;br /&gt;
	if (args.tracking == 'no') or (args.tracking == 'n') or (args.tracking == 'false') then&lt;br /&gt;
		trackingEnabled = false&lt;br /&gt;
	end&lt;br /&gt;
	if (checkTrackingNamespace() == false) then&lt;br /&gt;
		trackingEnabled = false&lt;br /&gt;
	end&lt;br /&gt;
	if (checkTrackingPagename() == false) then&lt;br /&gt;
		trackingEnabled = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local rows = {}&lt;br /&gt;
    --[=[ disabled per [[Wikipedia:Village pump (technical)/Archive 176#Suppress rendering of Template:Wikipedia books]]&lt;br /&gt;
    -- Get the book row text.&lt;br /&gt;
    local bookHeading = &amp;quot;'''[[Wikipedia:Books|Books]]'''&amp;quot;&lt;br /&gt;
    local bookSubheading = 'View or order collections of articles'&lt;br /&gt;
    local function getBookItemVals(book)&lt;br /&gt;
        local image = '[[File:Office-book.svg|30px|alt=|link=]]'&lt;br /&gt;
        local text = mw.ustring.format(&amp;quot;'''''[[Book:%s|%s]]'''''&amp;quot;, book, book)&lt;br /&gt;
        return image, text&lt;br /&gt;
    end&lt;br /&gt;
    local bookRow = makeNumberedRow('book', args, bookHeading, bookSubheading, getBookItemVals)&lt;br /&gt;
    table.insert(rows, bookRow)&lt;br /&gt;
    ]=]&lt;br /&gt;
    -- Get the portal row text&lt;br /&gt;
    local portalHeading = &amp;quot;'''[[Wikipedia:Contents/Portals|Portals]]'''&amp;quot;&lt;br /&gt;
    local portalSubheading = 'Access related topics'&lt;br /&gt;
    local function getPortalItemVals(portal)&lt;br /&gt;
        local image = mw.ustring.format('[[File:%s|30x30px]]', getPortalImage{portal})&lt;br /&gt;
        local text = mw.ustring.format(&amp;quot;'''''[[Portal:%s|%s portal]]'''''&amp;quot;, portal, portal)&lt;br /&gt;
		if not pcall(checkPortalExists, portal) or not checkPortalExists(portal) then&lt;br /&gt;
			-- Getting here means a redlinked portal has been found&lt;br /&gt;
				if trackingEnabled then&lt;br /&gt;
					redlinkedportal = '[[Category:Subject bar templates with redlinked portals]]'&lt;br /&gt;
				end&lt;br /&gt;
		end&lt;br /&gt;
        return image, text&lt;br /&gt;
    end&lt;br /&gt;
    local portalRow = makeNumberedRow('portal', args, portalHeading, portalSubheading, getPortalItemVals)&lt;br /&gt;
    table.insert(rows, portalRow)&lt;br /&gt;
&lt;br /&gt;
    -- Get the sister projects row text.&lt;br /&gt;
    local sisters = {&lt;br /&gt;
        {arg = 'commons', image = 'Commons-logo.svg', prefix = 'commons', display = 'Media', from = 'Commons'},&lt;br /&gt;
        {arg = 'species', image = 'Wikispecies-logo.svg', prefix = 'wikispecies', display = 'Species directories', from = 'Wikispecies'},&lt;br /&gt;
        {arg = 'voy', image = 'Wikivoyage-Logo-v3-icon.svg', prefix = 'voy', display = 'Travel guides', from = 'Wikivoyage'},&lt;br /&gt;
        {arg = 'n', image = 'Wikinews-logo.svg', prefix = 'wikinews', display = 'News stories', from = 'Wikinews'},&lt;br /&gt;
        {arg = 'wikt', image = 'Wiktionary-logo-v2.svg', prefix = 'wiktionary', postfix = 'English', display = 'Definitions', from = 'Wiktionary'},&lt;br /&gt;
        {arg = 'b', image = 'Wikibooks-logo.svg', prefix = 'wikibooks', display = 'Textbooks', from = 'Wikibooks'},&lt;br /&gt;
        {arg = 'q', image = 'Wikiquote-logo.svg', prefix = 'wikiquote', display = 'Quotations', from = 'Wikiquote'},&lt;br /&gt;
        {arg = 's', image = 'Wikisource-logo.svg', prefix = 'wikisource', display = 'Source texts', from = 'Wikisource'},&lt;br /&gt;
        {arg = 'v', image = 'Wikiversity logo 2017.svg', prefix = 'wikiversity', display = 'Learning resources', from = 'Wikiversity'},&lt;br /&gt;
        {arg = 'd', image = 'Wikidata-logo.svg', prefix = 'wikidata', display = 'Data', from = 'Wikidata'},&lt;br /&gt;
        {arg = 'spoken', image = 'Sound-icon.svg', prefix = 'spoken wikipedia', display = 'Listen to this page', from = 'Spoken Wikipedia'},&lt;br /&gt;
    }&lt;br /&gt;
    local sisterItems = {}&lt;br /&gt;
    for i, t in ipairs(sisters) do&lt;br /&gt;
        if args[t.arg] then&lt;br /&gt;
            -- Get the image value.&lt;br /&gt;
            local image = mw.ustring.format('[[File:%s|30x30px|alt=|link=]]', t.image)&lt;br /&gt;
            -- Get the text value.&lt;br /&gt;
            local prefix = t.prefix&lt;br /&gt;
            local search = args[t.arg .. '-search'] or mw.title.getCurrentTitle().text&lt;br /&gt;
            local postfix = t.postfix&lt;br /&gt;
            postfix = postfix and ('#' .. postfix) or ''&lt;br /&gt;
            local display = t.display&lt;br /&gt;
            local from = t.from&lt;br /&gt;
            local text = mw.ustring.format(&lt;br /&gt;
                '[[%s:Special:Search/%s%s|%s]]&amp;lt;br /&amp;gt;from %s',&lt;br /&gt;
                prefix,    search,    postfix, display, from&lt;br /&gt;
            )&lt;br /&gt;
            if t.arg == 'spoken' then&lt;br /&gt;
            	 text = mw.ustring.format('%s on %s&amp;lt;br /&amp;gt;[[File:%s]]',&lt;br /&gt;
                				display, from, args[t.arg] &lt;br /&gt;
                )		&lt;br /&gt;
            end&lt;br /&gt;
            -- Add the values to the items table.&lt;br /&gt;
            table.insert(sisterItems, {image, text})&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local sisterHeading = &amp;quot;Find out more on&amp;lt;br /&amp;gt;Wikipedia's&amp;quot;&lt;br /&gt;
    local sisterSubheading = &amp;quot;'''[[Wikipedia:Wikimedia sister projects|Sister projects]]'''&amp;quot;&lt;br /&gt;
    local sisterRow = makeRow(sisterItems, sisterHeading, sisterSubheading, {swapHeadingSize = true})&lt;br /&gt;
    table.insert(rows, sisterRow)&lt;br /&gt;
&lt;br /&gt;
    -- Make the table.&lt;br /&gt;
    local root = mw.html.create('table')&lt;br /&gt;
    root&lt;br /&gt;
        :attr('role', 'presentation')&lt;br /&gt;
        :addClass('subjectbar')&lt;br /&gt;
        :addClass('noprint')&lt;br /&gt;
        :addClass('metadata')&lt;br /&gt;
        :addClass('plainlist')&lt;br /&gt;
        :wikitext(table.concat(rows, makeHorizontalRule()))&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking template, or the args passed to #invoke if any exist. Otherwise&lt;br /&gt;
    -- assume args are being passed directly in from the debug console or from another Lua module.&lt;br /&gt;
    local origArgs&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
        for k, v in pairs(frame.args) do&lt;br /&gt;
            origArgs = frame.args&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
    -- Remove blank arguments.&lt;br /&gt;
    local args = {}&lt;br /&gt;
    for k, v in pairs(origArgs) do&lt;br /&gt;
        if v ~= '' then&lt;br /&gt;
            args[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return frame:extensionTag{ name = 'templatestyles', args = { src = 'Subject bar/styles.css'} } .. p._main(args) .. redlinkedportal&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;Tom.Reding</name></author>
	</entry>
</feed>