Not logged in
Talk
Contributions
Log in
Navigation
Main page
Recent changes
Random page
Upload file
Module
Discussion
Edit
View history
Editing
Module:Subject bar
From Body Communication
Jump to:
navigation
,
search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local getPortalImage = require('Module:Portal').image local p = {} local function getArgNums(prefix, args) -- Returns a table containing the numbers of the arguments that exist for the specified prefix. For example, if the -- prefix was 'data', and 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end local function makeHorizontalRule() local row = mw.html.create('tr') row :tag('td') :attr('colspan', '2') :tag('hr', {selfClosing = true}) return tostring(row) end local function makeItem(image, text) local root = mw.html.create('li') root :css('float', 'left') :css('margin-left', '0.3em') :css('height', '3.6em') :tag('span') :css('display', 'inline-block') :css('margin-right', '0.3em') :css('width', '30px') :css('line-height', '3.6em') :css('text-align', 'center') :wikitext(image) :done() :tag('span') :css('display', 'inline-block') :css('width', '11em') :css('vertical-align', 'middle') :wikitext(text) return tostring(root) end local function makeRow(items, heading, subheading, options) if #items < 1 then return end local swapHeadingSize = type(options) == 'table' and options.swapHeadingSize or false local row = mw.html.create('tr') row :tag('td') :css('width', '125px') :cssText('border-right:solid 1px black; padding-left:3px; padding-right:3px;') :tag('span') :css('font-size', swapHeadingSize and '90%' or '125%') :wikitext(heading) :done() :tag('br', {selfClosing = true}) :done() :tag('span') :css('font-size', swapHeadingSize and '125%' or '90%') :wikitext(subheading) local list = row:tag('td'):css('text-align', 'left'):tag('ul') for i, item in ipairs(items) do local image = item[1] local text = item[2] list :wikitext(makeItem(image, text)) end return tostring(row) end local function makeNumberedRow(prefix, args, heading, subheading, getItemValsFunc, options) if args[prefix] then args[prefix .. '1'] = args[prefix] end local argNums = getArgNums(prefix, args) local items = {} for i, argNum in ipairs(argNums) do local image, text = getItemValsFunc(args[prefix .. tostring(argNum)]) table.insert(items, {image, text}) end return makeRow(items, heading, subheading, options) end local function checkPortalExists(portal) return not (mw.title.makeTitle(100, portal).id == 0) end local trackingEnabled = true -- Check whether to do tracking in this namespace -- Returns true unless the page is one of the banned namespaces local function checkTrackingNamespace() local thisPage = mw.title.getCurrentTitle() if (thisPage.namespace == 1) -- Talk or (thisPage.namespace == 2) -- User or (thisPage.namespace == 3) -- User talk or (thisPage.namespace == 5) -- Wikipedia talk or (thisPage.namespace == 7) -- File talk or (thisPage.namespace == 11) -- Template talk or (thisPage.namespace == 15) -- Category talk or (thisPage.namespace == 101) -- Portal talk or (thisPage.namespace == 118) -- Draft or (thisPage.namespace == 119) -- Draft talk or (thisPage.namespace == 829) -- Module talk then return false end return true end -- Check whether to do tracking on this pagename -- Returns false if the page title matches one of the banned strings -- Otherwise returns true local function checkTrackingPagename() local thisPage = mw.title.getCurrentTitle() local thisPageLC = mw.ustring.lower(thisPage.text) if (string.match(thisPageLC, "/archive") ~= nil) then return false end if (string.match(thisPageLC, "/doc") ~= nil) then return false end if (string.match(thisPageLC, "/test") ~= nil) then return false end return true end local redlinkedportal = "" function p._main(args) -- Tracking is on by default. -- It is disabled if any of the following is true -- 1/ the parameter "tracking" is set to 'no, 'n', or 'false' -- 2/ the current page fails the namespace tests in checkTrackingNamespace() -- 3/ the current page fails the pagename tests in checkTrackingPagename() if (args.tracking == 'no') or (args.tracking == 'n') or (args.tracking == 'false') then trackingEnabled = false end if (checkTrackingNamespace() == false) then trackingEnabled = false end if (checkTrackingPagename() == false) then trackingEnabled = false end local rows = {} --[=[ disabled per [[Wikipedia:Village pump (technical)/Archive 176#Suppress rendering of Template:Wikipedia books]] -- Get the book row text. local bookHeading = "'''[[Wikipedia:Books|Books]]'''" local bookSubheading = 'View or order collections of articles' local function getBookItemVals(book) local image = '[[File:Office-book.svg|30px|alt=|link=]]' local text = mw.ustring.format("'''''[[Book:%s|%s]]'''''", book, book) return image, text end local bookRow = makeNumberedRow('book', args, bookHeading, bookSubheading, getBookItemVals) table.insert(rows, bookRow) ]=] -- Get the portal row text local portalHeading = "'''[[Wikipedia:Contents/Portals|Portals]]'''" local portalSubheading = 'Access related topics' local function getPortalItemVals(portal) local image = mw.ustring.format('[[File:%s|30x30px]]', getPortalImage{portal}) local text = mw.ustring.format("'''''[[Portal:%s|%s portal]]'''''", portal, portal) if not pcall(checkPortalExists, portal) or not checkPortalExists(portal) then -- Getting here means a redlinked portal has been found if trackingEnabled then redlinkedportal = '[[Category:Subject bar templates with redlinked portals]]' end end return image, text end local portalRow = makeNumberedRow('portal', args, portalHeading, portalSubheading, getPortalItemVals) table.insert(rows, portalRow) -- Get the sister projects row text. local sisters = { {arg = 'commons', image = 'Commons-logo.svg', prefix = 'commons', display = 'Media', from = 'Commons'}, {arg = 'species', image = 'Wikispecies-logo.svg', prefix = 'wikispecies', display = 'Species directories', from = 'Wikispecies'}, {arg = 'voy', image = 'Wikivoyage-Logo-v3-icon.svg', prefix = 'voy', display = 'Travel guides', from = 'Wikivoyage'}, {arg = 'n', image = 'Wikinews-logo.svg', prefix = 'wikinews', display = 'News stories', from = 'Wikinews'}, {arg = 'wikt', image = 'Wiktionary-logo-v2.svg', prefix = 'wiktionary', postfix = 'English', display = 'Definitions', from = 'Wiktionary'}, {arg = 'b', image = 'Wikibooks-logo.svg', prefix = 'wikibooks', display = 'Textbooks', from = 'Wikibooks'}, {arg = 'q', image = 'Wikiquote-logo.svg', prefix = 'wikiquote', display = 'Quotations', from = 'Wikiquote'}, {arg = 's', image = 'Wikisource-logo.svg', prefix = 'wikisource', display = 'Source texts', from = 'Wikisource'}, {arg = 'v', image = 'Wikiversity logo 2017.svg', prefix = 'wikiversity', display = 'Learning resources', from = 'Wikiversity'}, {arg = 'd', image = 'Wikidata-logo.svg', prefix = 'wikidata', display = 'Data', from = 'Wikidata'}, {arg = 'spoken', image = 'Sound-icon.svg', prefix = 'spoken wikipedia', display = 'Listen to this page', from = 'Spoken Wikipedia'}, } local sisterItems = {} for i, t in ipairs(sisters) do if args[t.arg] then -- Get the image value. local image = mw.ustring.format('[[File:%s|30x30px|alt=|link=]]', t.image) -- Get the text value. local prefix = t.prefix local search = args[t.arg .. '-search'] or mw.title.getCurrentTitle().text local postfix = t.postfix postfix = postfix and ('#' .. postfix) or '' local display = t.display local from = t.from local text = mw.ustring.format( '[[%s:Special:Search/%s%s|%s]]<br />from %s', prefix, search, postfix, display, from ) if t.arg == 'spoken' then text = mw.ustring.format('%s on %s<br />[[File:%s]]', display, from, args[t.arg] ) end -- Add the values to the items table. table.insert(sisterItems, {image, text}) end end local sisterHeading = "Find out more on<br />Wikipedia's" local sisterSubheading = "'''[[Wikipedia:Wikimedia sister projects|Sister projects]]'''" local sisterRow = makeRow(sisterItems, sisterHeading, sisterSubheading, {swapHeadingSize = true}) table.insert(rows, sisterRow) -- Make the table. local root = mw.html.create('table') root :attr('role', 'presentation') :addClass('subjectbar') :addClass('noprint') :addClass('metadata') :addClass('plainlist') :wikitext(table.concat(rows, makeHorizontalRule())) return tostring(root) end function p.main(frame) -- If called via #invoke, use the args passed into the invoking template, or the args passed to #invoke if any exist. Otherwise -- assume args are being passed directly in from the debug console or from another Lua module. local origArgs if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args for k, v in pairs(frame.args) do origArgs = frame.args break end else origArgs = frame end -- Remove blank arguments. local args = {} for k, v in pairs(origArgs) do if v ~= '' then args[k] = v end end return frame:extensionTag{ name = 'templatestyles', args = { src = 'Subject bar/styles.css'} } .. p._main(args) .. redlinkedportal end return p
Summary:
Please note that all contributions to Body Communication are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (see
Body Communication:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Subject bar/doc
(
edit
)
Tools
What links here
Related changes
Special pages
Page information