Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Sandbox/Hawkeye7
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', '175px') :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 function p._main(args) local rows = {} -- 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 = "'''[[Portal: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) 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.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 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('noprint') :addClass('metadata') :addClass('plainlist') :css('background-color', '#f9f9f9') :css('border', '1px solid #aaa') :css('clear', 'both') :css('margin-bottom', '0.5em') :css('margin-top', '0.5em') :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 p._main(args) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, 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 (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Sandbox/Hawkeye7/doc
(
edit
)