<?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%2FHawkeye7</id>
	<title>Module:Sandbox/Hawkeye7 - 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%2FHawkeye7"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Hawkeye7&amp;action=history"/>
	<updated>2026-04-20T22:56:08Z</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/Hawkeye7&amp;diff=145510&amp;oldid=prev</id>
		<title>imported&gt;Anthony Appleyard: Anthony Appleyard moved page Module:User:Hawkeye7 to Module:Sandbox/Hawkeye7 without leaving a redirect: Requested by Hawkeye7 at WP:RM/TR: No good reason. To conform with naming convention on Module:Sandbox. An admin moved my previous module sandbox [https://en.wikipedia.org/w/index.php?title=Module%3ASandbox%2FHawkeye7&amp;type=revision&amp;diff=861798418&amp;oldid=671376817] for this reason without resetting where it was used. So another editor re-create...</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Hawkeye7&amp;diff=145510&amp;oldid=prev"/>
		<updated>2019-04-03T20:33:10Z</updated>

		<summary type="html">&lt;p&gt;Anthony Appleyard moved page &lt;a href=&quot;/index.php?title=Module:User:Hawkeye7&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:User:Hawkeye7 (page does not exist)&quot;&gt;Module:User:Hawkeye7&lt;/a&gt; to &lt;a href=&quot;/research/Module:Sandbox/Hawkeye7&quot; title=&quot;Module:Sandbox/Hawkeye7&quot;&gt;Module:Sandbox/Hawkeye7&lt;/a&gt; without leaving a redirect: &lt;a href=&quot;/research/Special:PermanentLink/890828422&quot; title=&quot;Special:PermanentLink/890828422&quot;&gt;Requested&lt;/a&gt; by Hawkeye7 at &lt;a href=&quot;/index.php?title=WP:RM/TR&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:RM/TR (page does not exist)&quot;&gt;WP:RM/TR&lt;/a&gt;: No good reason. To conform with naming convention on &lt;a href=&quot;/research/Module:Sandbox&quot; title=&quot;Module:Sandbox&quot;&gt;Module:Sandbox&lt;/a&gt;. An admin moved my previous module sandbox [https://en.wikipedia.org/w/index.php?title=Module%3ASandbox%2FHawkeye7&amp;amp;type=revision&amp;amp;diff=861798418&amp;amp;oldid=671376817] for this reason without resetting where it was used. So another editor re-create...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getPortalImage = require(&amp;#039;Module:Portal&amp;#039;).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 &amp;#039;data&amp;#039;, and &amp;#039;data1&amp;#039;, &amp;#039;data2&amp;#039;, and &amp;#039;data5&amp;#039; 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(&amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&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(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    row&lt;br /&gt;
        :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            :attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;hr&amp;#039;, {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(&amp;#039;li&amp;#039;)&lt;br /&gt;
    root&lt;br /&gt;
        :css(&amp;#039;float&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;margin-left&amp;#039;, &amp;#039;0.3em&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;height&amp;#039;, &amp;#039;3.6em&amp;#039;)&lt;br /&gt;
        :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;display&amp;#039;, &amp;#039;inline-block&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;margin-right&amp;#039;, &amp;#039;0.3em&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;30px&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;line-height&amp;#039;, &amp;#039;3.6em&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
            :wikitext(image)&lt;br /&gt;
            :done()&lt;br /&gt;
        :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;display&amp;#039;, &amp;#039;inline-block&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;11em&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;vertical-align&amp;#039;, &amp;#039;middle&amp;#039;)&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) == &amp;#039;table&amp;#039; and options.swapHeadingSize or false&lt;br /&gt;
    local row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    row&lt;br /&gt;
        :tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
            :css(&amp;#039;width&amp;#039;, &amp;#039;175px&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;font-size&amp;#039;, swapHeadingSize and &amp;#039;90%&amp;#039; or &amp;#039;125%&amp;#039;)&lt;br /&gt;
                :wikitext(heading)&lt;br /&gt;
                :done()&lt;br /&gt;
            :tag(&amp;#039;br&amp;#039;, {selfClosing = true})&lt;br /&gt;
                :done()&lt;br /&gt;
            :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                :css(&amp;#039;font-size&amp;#039;, swapHeadingSize and &amp;#039;125%&amp;#039; or &amp;#039;90%&amp;#039;)&lt;br /&gt;
                :wikitext(subheading)&lt;br /&gt;
    local list = row:tag(&amp;#039;td&amp;#039;):css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;):tag(&amp;#039;ul&amp;#039;)&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 .. &amp;#039;1&amp;#039;] = 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;
function p._main(args)&lt;br /&gt;
    local rows = {}&lt;br /&gt;
&lt;br /&gt;
    -- Get the book row text.&lt;br /&gt;
    local bookHeading = &amp;quot;&amp;#039;&amp;#039;&amp;#039;[[Wikipedia:Books|Books]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
    local bookSubheading = &amp;#039;View or order collections of articles&amp;#039;&lt;br /&gt;
    local function getBookItemVals(book)&lt;br /&gt;
        local image = &amp;#039;[[File:Office-book.svg|30px|alt=|link=]]&amp;#039;&lt;br /&gt;
        local text = mw.ustring.format(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[Book:%s|%s]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, book, book)&lt;br /&gt;
        return image, text&lt;br /&gt;
    end&lt;br /&gt;
    local bookRow = makeNumberedRow(&amp;#039;book&amp;#039;, 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;&amp;#039;&amp;#039;&amp;#039;[[Portal:Contents/Portals|Portals]]&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
    local portalSubheading = &amp;#039;Access related topics&amp;#039;&lt;br /&gt;
    local function getPortalItemVals(portal)&lt;br /&gt;
        local image = mw.ustring.format(&amp;#039;[[File:%s|30x30px]]&amp;#039;, getPortalImage{portal})&lt;br /&gt;
        local text = mw.ustring.format(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[Portal:%s|%s portal]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, portal, portal)&lt;br /&gt;
        return image, text&lt;br /&gt;
    end&lt;br /&gt;
    local portalRow = makeNumberedRow(&amp;#039;portal&amp;#039;, 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 = &amp;#039;commons&amp;#039;, image = &amp;#039;Commons-logo.svg&amp;#039;, prefix = &amp;#039;commons&amp;#039;, display = &amp;#039;Media&amp;#039;, from = &amp;#039;Commons&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;species&amp;#039;, image = &amp;#039;Wikispecies-logo.svg&amp;#039;, prefix = &amp;#039;wikispecies&amp;#039;, display = &amp;#039;Species directories&amp;#039;, from = &amp;#039;Wikispecies&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;voy&amp;#039;, image = &amp;#039;Wikivoyage-Logo-v3-icon.svg&amp;#039;, prefix = &amp;#039;voy&amp;#039;, display = &amp;#039;Travel guides&amp;#039;, from = &amp;#039;Wikivoyage&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;n&amp;#039;, image = &amp;#039;Wikinews-logo.svg&amp;#039;, prefix = &amp;#039;wikinews&amp;#039;, display = &amp;#039;News stories&amp;#039;, from = &amp;#039;Wikinews&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;wikt&amp;#039;, image = &amp;#039;Wiktionary-logo-v2.svg&amp;#039;, prefix = &amp;#039;wiktionary&amp;#039;, postfix = &amp;#039;English&amp;#039;, display = &amp;#039;Definitions&amp;#039;, from = &amp;#039;Wiktionary&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;b&amp;#039;, image = &amp;#039;Wikibooks-logo.svg&amp;#039;, prefix = &amp;#039;wikibooks&amp;#039;, display = &amp;#039;Textbooks&amp;#039;, from = &amp;#039;Wikibooks&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;q&amp;#039;, image = &amp;#039;Wikiquote-logo.svg&amp;#039;, prefix = &amp;#039;wikiquote&amp;#039;, display = &amp;#039;Quotations&amp;#039;, from = &amp;#039;Wikiquote&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;s&amp;#039;, image = &amp;#039;Wikisource-logo.svg&amp;#039;, prefix = &amp;#039;wikisource&amp;#039;, display = &amp;#039;Source texts&amp;#039;, from = &amp;#039;Wikisource&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;v&amp;#039;, image = &amp;#039;Wikiversity-logo.svg&amp;#039;, prefix = &amp;#039;wikiversity&amp;#039;, display = &amp;#039;Learning resources&amp;#039;, from = &amp;#039;Wikiversity&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;d&amp;#039;, image = &amp;#039;Wikidata-logo.svg&amp;#039;, prefix = &amp;#039;wikidata&amp;#039;, display = &amp;#039;Data&amp;#039;, from = &amp;#039;Wikidata&amp;#039;},&lt;br /&gt;
        {arg = &amp;#039;spoken&amp;#039;, image = &amp;#039;Sound-icon.svg&amp;#039;, prefix = &amp;#039;spoken wikipedia&amp;#039;, display = &amp;#039;Listen to this page&amp;#039;, from = &amp;#039;Spoken Wikipedia&amp;#039;},&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(&amp;#039;[[File:%s|30x30px|alt=|link=]]&amp;#039;, t.image)&lt;br /&gt;
            -- Get the text value.&lt;br /&gt;
            local prefix = t.prefix&lt;br /&gt;
            local search = args[t.arg .. &amp;#039;-search&amp;#039;] or mw.title.getCurrentTitle().text&lt;br /&gt;
            local postfix = t.postfix&lt;br /&gt;
            postfix = postfix and (&amp;#039;#&amp;#039; .. postfix) or &amp;#039;&amp;#039;&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;
                &amp;#039;[[%s:Special:Search/%s%s|%s]]&amp;lt;br /&amp;gt;from %s&amp;#039;,&lt;br /&gt;
                prefix,    search,    postfix, display, from&lt;br /&gt;
            )&lt;br /&gt;
            if t.arg == &amp;#039;spoken&amp;#039; then&lt;br /&gt;
            	 text = mw.ustring.format(&amp;#039;%s on %s&amp;lt;br /&amp;gt;[[File:%s]]&amp;#039;,&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 Wikipedia&amp;#039;s&amp;quot;&lt;br /&gt;
    local sisterSubheading = &amp;quot;&amp;#039;&amp;#039;&amp;#039;[[Wikipedia:Wikimedia sister projects|Sister projects]]&amp;#039;&amp;#039;&amp;#039;&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(&amp;#039;table&amp;#039;)&lt;br /&gt;
    root&lt;br /&gt;
        :attr(&amp;#039;role&amp;#039;, &amp;#039;presentation&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;noprint&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;metadata&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;plainlist&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;background-color&amp;#039;, &amp;#039;#f9f9f9&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;border&amp;#039;, &amp;#039;1px solid #aaa&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;clear&amp;#039;, &amp;#039;both&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;margin-bottom&amp;#039;, &amp;#039;0.5em&amp;#039;)&lt;br /&gt;
        :css(&amp;#039;margin-top&amp;#039;, &amp;#039;0.5em&amp;#039;)&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 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            args[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Anthony Appleyard</name></author>
	</entry>
</feed>