<?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%3AUserLinks%2Fsandbox2</id>
	<title>Module:UserLinks/sandbox2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AUserLinks%2Fsandbox2"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:UserLinks/sandbox2&amp;action=history"/>
	<updated>2026-06-07T07:00:57Z</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:UserLinks/sandbox2&amp;diff=147519&amp;oldid=prev</id>
		<title>imported&gt;Frietjes: ←Created page with &#039;local ToolbarBuilder = require(&#039;Module:Toolbar&#039;) local interwikiTable = mw.loadData(&quot;Module:InterwikiTable&quot;)  local u = {} -- Table for user-data helper strings....&#039;</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:UserLinks/sandbox2&amp;diff=147519&amp;oldid=prev"/>
		<updated>2014-03-26T16:25:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=WP:AES&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:AES (page does not exist)&quot;&gt;←&lt;/a&gt;Created page with &amp;#039;local ToolbarBuilder = require(&amp;#039;Module:Toolbar&amp;#039;) local interwikiTable = mw.loadData(&amp;quot;Module:InterwikiTable&amp;quot;)  local u = {} -- Table for user-data helper strings....&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local ToolbarBuilder = require(&amp;#039;Module:Toolbar&amp;#039;)&lt;br /&gt;
local interwikiTable = mw.loadData(&amp;quot;Module:InterwikiTable&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local u = {} -- Table for user-data helper strings.&lt;br /&gt;
local trackingCategories = {} -- Table for storing the tracking categories.&lt;br /&gt;
local demo&lt;br /&gt;
&lt;br /&gt;
-- Define a custom error message for this module.&lt;br /&gt;
local function err(msg, section)&lt;br /&gt;
    local help&lt;br /&gt;
    if section then&lt;br /&gt;
        help = &amp;#039; ([[Template:User-multi#&amp;#039; .. section .. &amp;#039;|help]])&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        help = &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local cat&lt;br /&gt;
    if demo == &amp;#039;yes&amp;#039; then&lt;br /&gt;
        cat = &amp;#039;&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        cat = &amp;#039;[[Category:UserLinks transclusions with errors]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[Template:User-multi|User-multi]] error: &amp;#039; .. msg &lt;br /&gt;
        .. help .. &amp;#039;.&amp;lt;/span&amp;gt;&amp;#039; .. cat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
--      To add more link types, write a function that produces an individual link, and put  --&lt;br /&gt;
--      it at the bottom of the list below. Then, add a link code for your function to the  --&lt;br /&gt;
--      &amp;quot;linktypes&amp;quot; table. Try and make the code three letters or less. There are a number  --&lt;br /&gt;
--      of helper strings available for writing the functions:                       --&lt;br /&gt;
--                                                                                          --&lt;br /&gt;
--      u.username          The plain username. If the username is not present then the     --&lt;br /&gt;
--                          module returns an error.                                        --&lt;br /&gt;
--      u.usernameHtml      The username html-encoded. Spaces are encoded with plus signs.  --&lt;br /&gt;
--      u.project           The project name. Nil if not specified.                         --&lt;br /&gt;
--      u.lang              The language code. Nil if not specified.                        --&lt;br /&gt;
--      u.interwiki         The interwiki prefix, consisting of the project and language    --&lt;br /&gt;
--                          values, separated by colons, e.g. &amp;quot;:wikt:es:&amp;quot;. If no project    --&lt;br /&gt;
--                          or language values are found, this is the blank string, &amp;quot;&amp;quot;.     --&lt;br /&gt;
--      u.projectCode       If a valid project is specified, this is the code for that      --&lt;br /&gt;
--                          project in [[Module:InterwikiTable]]. Otherwise this is nil.    --&lt;br /&gt;
--      u.projectLong       The long project name, e.g. &amp;quot;wikipedia&amp;quot; or &amp;quot;wikibooks&amp;quot;. If      --&lt;br /&gt;
--                          not specified the default is &amp;quot;wikipedia&amp;quot;.                       --&lt;br /&gt;
--      u.toolLang          The language code for use with toolserver or labs tools. The    --&lt;br /&gt;
--                          default is &amp;quot;en&amp;quot;.                                                --&lt;br /&gt;
--                                                                                          --&lt;br /&gt;
--      If you want more helper strings, you can define them in the generateUserDataStrings --&lt;br /&gt;
--      function below.                                                                     --&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
--                                LINK FUNCTIONS START                                      --&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeUserLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;User:&amp;#039; .. u.username .. &amp;#039;|&amp;#039; .. u.username .. &amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTalkLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;User talk:&amp;#039; .. u.username .. &amp;#039;|talk]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeContribsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Contributions/&amp;#039; .. u.username .. &amp;#039;|contribs]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCountLink()&lt;br /&gt;
    return &amp;#039;[//tools.wmflabs.org/supercount/index.php?user=&amp;#039; .. u.usernameHtml&lt;br /&gt;
        .. &amp;#039;&amp;amp;project=&amp;#039; .. u.toolLang .. &amp;#039;.&amp;#039; .. u.projectLong&lt;br /&gt;
        .. &amp;#039; count]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeMovesLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/move/&amp;#039; .. u.username .. &amp;#039;|page&amp;amp;nbsp;moves]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeLogsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/&amp;#039; .. u.username .. &amp;#039;|logs]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeBlockLogLink()&lt;br /&gt;
    local url = mw.uri.fullUrl(u.interwiki .. &amp;#039;Special:Log/block&amp;#039;, &amp;#039;page=User:&amp;#039; .. u.usernameHtml)&lt;br /&gt;
    return &amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; block&amp;amp;nbsp;log]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeBlocksLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/block/&amp;#039; .. u.username .. &amp;#039;|blocks]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeBlockUserLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Block/&amp;#039; .. u.username .. &amp;#039;|block&amp;amp;nbsp;user]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeCentralAuthLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:CentralAuth/&amp;#039; .. u.username .. &amp;#039;|central&amp;amp;nbsp;auth]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeDeletedContribsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:DeletedContributions/&amp;#039; .. u.username .. &amp;#039;|deleted&amp;amp;nbsp;contribs]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeEmailLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Emailuser/&amp;#039; .. u.username .. &amp;#039;|email]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeEditSummariesLink()&lt;br /&gt;
    return &amp;#039;[http://tools.wmflabs.org/xtools/editsummary/index.php?name=&amp;#039; .. u.usernameHtml&lt;br /&gt;
        .. &amp;#039;&amp;amp;lang=&amp;#039; .. u.toolLang&lt;br /&gt;
        .. &amp;#039;&amp;amp;wiki=&amp;#039; .. u.projectLong&lt;br /&gt;
        .. &amp;#039; edit&amp;amp;nbsp;summaries]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeDeletionsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/delete/&amp;#039; .. u.username .. &amp;#039;|deletions]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeListUserLink()&lt;br /&gt;
    local url = mw.uri.fullUrl(u.interwiki .. &amp;#039;Special:ListUsers&amp;#039;, &amp;#039;limit=1&amp;amp;username=&amp;#039; .. u.usernameHtml)&lt;br /&gt;
    return &amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; list&amp;amp;nbsp;user]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSulLink()&lt;br /&gt;
    return &amp;#039;[[sulutil:&amp;#039; .. u.username .. &amp;#039;|global&amp;amp;nbsp;contribs]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeTargetLogsLink()&lt;br /&gt;
    local url = mw.uri.fullUrl(u.interwiki .. &amp;#039;Special:Log&amp;#039;, &amp;#039;page=User:&amp;#039; .. u.usernameHtml)&lt;br /&gt;
    return &amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; target&amp;amp;nbsp;logs]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeEditFilterLogLink()&lt;br /&gt;
    local url = mw.uri.fullUrl(u.interwiki .. &amp;#039;Special:AbuseLog&amp;#039;, &amp;#039;wpSearchUser=&amp;#039; .. u.usernameHtml)&lt;br /&gt;
    return &amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; edit&amp;amp;nbsp;filter&amp;amp;nbsp;log]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeProtectionsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/protect/&amp;#039; .. u.username .. &amp;#039;|protections]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeRightsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/rights/&amp;#039; .. u.username .. &amp;#039;|rights]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeRenamesLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:Log/renameuser/&amp;#039; .. u.username .. &amp;#039;|renames]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeRfaLink()&lt;br /&gt;
    if u.project or u.lang then&lt;br /&gt;
        table.insert( trackingCategories, &amp;#039;[[Category:UserLinks transclusions with unresolvable interwiki links]]&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;[[Special:PrefixIndex/Wikipedia:Requests for adminship/&amp;#039; .. u.username .. &amp;#039;|RfA]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeApiLink()&lt;br /&gt;
    -- Find the full domain, as the API can&amp;#039;t be accessed through the interwiki system.&lt;br /&gt;
    local fulldomain&lt;br /&gt;
    local lang = u.lang or &amp;#039;en&amp;#039;&lt;br /&gt;
    if u.projectCode then&lt;br /&gt;
        local domain = interwikiTable[u.projectCode].domain&lt;br /&gt;
        local takesLangPrefix = interwikiTable[u.projectCode].takes_lang_prefix&lt;br /&gt;
        if not takesLangPrefix then&lt;br /&gt;
            fulldomain = domain&lt;br /&gt;
        else&lt;br /&gt;
            fulldomain = lang .. &amp;#039;.&amp;#039; .. domain&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        fulldomain = lang .. &amp;#039;.wikipedia.org&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Return the API link&lt;br /&gt;
    return &amp;#039;[//&amp;#039; .. fulldomain .. &amp;#039;/w/api.php?action=query&amp;amp;list=users&amp;amp;usprop=editcount&amp;amp;ususers=&amp;#039; .. u.usernameHtml .. &amp;#039; api]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeUploadsLink()&lt;br /&gt;
    return &amp;#039;[[&amp;#039; .. u.interwiki .. &amp;#039;Special:ListFiles/&amp;#039; .. u.username .. &amp;#039;|uploads]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
--                                   LINK FUNCTIONS END                                     --&lt;br /&gt;
--      To enable new link functions, add the code to the &amp;quot;linktypes&amp;quot; table directly below. --&lt;br /&gt;
----------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local linktypes = {&lt;br /&gt;
    {&amp;#039;t&amp;#039;   , makeTalkLink},&lt;br /&gt;
    {&amp;#039;c&amp;#039;   , makeContribsLink},&lt;br /&gt;
    {&amp;#039;ct&amp;#039;  , makeCountLink},&lt;br /&gt;
    {&amp;#039;m&amp;#039;   , makeMovesLink},&lt;br /&gt;
    {&amp;#039;l&amp;#039;   , makeLogsLink},&lt;br /&gt;
    {&amp;#039;bl&amp;#039;  , makeBlockLogLink},&lt;br /&gt;
    {&amp;#039;bls&amp;#039; , makeBlocksLink},&lt;br /&gt;
    {&amp;#039;bu&amp;#039;  , makeBlockUserLink},&lt;br /&gt;
    {&amp;#039;ca&amp;#039;  , makeCentralAuthLink},&lt;br /&gt;
    {&amp;#039;dc&amp;#039;  , makeDeletedContribsLink},&lt;br /&gt;
    {&amp;#039;e&amp;#039;   , makeEmailLink},&lt;br /&gt;
    {&amp;#039;es&amp;#039;  , makeEditSummariesLink},&lt;br /&gt;
    {&amp;#039;del&amp;#039; , makeDeletionsLink},&lt;br /&gt;
    {&amp;#039;lu&amp;#039;  , makeListUserLink},&lt;br /&gt;
    {&amp;#039;sul&amp;#039; , makeSulLink},&lt;br /&gt;
    {&amp;#039;tl&amp;#039;  , makeTargetLogsLink},&lt;br /&gt;
    {&amp;#039;efl&amp;#039; , makeEditFilterLogLink},&lt;br /&gt;
    {&amp;#039;pr&amp;#039;  , makeProtectionsLink},&lt;br /&gt;
    {&amp;#039;rl&amp;#039;  , makeRightsLink},&lt;br /&gt;
    {&amp;#039;ren&amp;#039; , makeRenamesLink},&lt;br /&gt;
    {&amp;#039;rfa&amp;#039; , makeRfaLink},&lt;br /&gt;
    {&amp;#039;api&amp;#039; , makeApiLink},&lt;br /&gt;
    {&amp;#039;up&amp;#039;  , makeUploadsLink}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function getLink(linktype)&lt;br /&gt;
    local linkNumber&lt;br /&gt;
    for i, value in ipairs(linktypes) do&lt;br /&gt;
        if value[1] == linktype then&lt;br /&gt;
            linkNumber = i&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not linkNumber then&lt;br /&gt;
        return err(&amp;#039;&amp;quot;&amp;#039; .. linktype .. &amp;#039;&amp;quot; is not a valid link code&amp;#039;, &amp;#039;Not a valid link code&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local result = linktypes[linkNumber][2]()&lt;br /&gt;
    if type(result) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
        return err(&lt;br /&gt;
            &amp;#039;the function for code &amp;quot;&amp;#039; .. linktype .. &amp;#039;&amp;quot; did not return a string value&amp;#039;,&lt;br /&gt;
            &amp;#039;Function did not return a string value&amp;#039;&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeToolbar(args)&lt;br /&gt;
    local targs = {}&lt;br /&gt;
    local numArgsExist = false&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
            numArgsExist = true&lt;br /&gt;
            targs[k] = getLink(v)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    targs.style = args.small and &amp;#039;font-size: 90%;&amp;#039;&lt;br /&gt;
    targs.separator = args.separator or &amp;#039;dot&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    if numArgsExist == false then&lt;br /&gt;
        return nil -- Don&amp;#039;t return a toolbar if no numeric arguments exist.&lt;br /&gt;
    else&lt;br /&gt;
        return ToolbarBuilder.main(targs)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This function finds whether a string is a valid interwiki project prefix.&lt;br /&gt;
-- If the string is valid, the function outputs two values: true, and the site code&lt;br /&gt;
-- used in [[Module:InterwikiTable]]. If the string is valid, the function outputs&lt;br /&gt;
-- false and nil.&lt;br /&gt;
local function isKnownProject(prefix)&lt;br /&gt;
    for projectCode, projectVal in pairs(interwikiTable) do&lt;br /&gt;
        for _, iwCode in ipairs(projectVal.iw_prefix) do&lt;br /&gt;
            if iwCode == prefix then&lt;br /&gt;
                return true, projectCode&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false, nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function generateUserDataStrings(args)&lt;br /&gt;
    -- If the username is absent or blank, return an error and a tracking category.&lt;br /&gt;
    if args.user == &amp;#039;&amp;#039; or (not args.user and (not args.User or args.User == &amp;#039;&amp;#039;)) then&lt;br /&gt;
        return err(&amp;#039;no username detected&amp;#039;, &amp;#039;No username detected&amp;#039;)&lt;br /&gt;
    else&lt;br /&gt;
        u.username = args.user or args.User&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Get other basic user data strings.&lt;br /&gt;
    u.project = args.Project or args.project&lt;br /&gt;
    u.lang = args.lang or args.Lang&lt;br /&gt;
    if u.lang then&lt;br /&gt;
        if mw.language.isKnownLanguageTag(u.lang) then&lt;br /&gt;
            table.insert(trackingCategories, &amp;#039;[[Category:UserLinks transclusions with language parameters]]&amp;#039;)&lt;br /&gt;
        else&lt;br /&gt;
            return err(&amp;#039;&amp;quot;&amp;#039; .. u.lang .. &amp;#039;&amp;quot; is not a valid language code&amp;#039;, &amp;#039;Not a valid language code&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Process the project value if it is present.&lt;br /&gt;
    if u.project then&lt;br /&gt;
        table.insert( trackingCategories, &amp;#039;[[Category:UserLinks transclusions with project parameters]]&amp;#039; )&lt;br /&gt;
        &lt;br /&gt;
        -- If u.project is a known project, we only need to get the project code. If the project &lt;br /&gt;
        -- isn&amp;#039;t known, first check whether it is a valid language code, and if not then see if it&amp;#039;s&lt;br /&gt;
        -- an interwiki code separated by colons, e.g. &amp;quot;wikt:es&amp;quot;.&lt;br /&gt;
        local uprojectIsKnownProject, uprojectProjectCode = isKnownProject(u.project)&lt;br /&gt;
        if uprojectIsKnownProject then&lt;br /&gt;
            u.projectCode = uprojectProjectCode&lt;br /&gt;
        else&lt;br /&gt;
            if mw.language.isKnownLanguageTag(u.project) then&lt;br /&gt;
                u.lang = u.project&lt;br /&gt;
                u.project = nil&lt;br /&gt;
            else&lt;br /&gt;
                local pref1, pref2 = mw.ustring.match( u.project, &amp;#039;^(%w+):(%w+)$&amp;#039; )&lt;br /&gt;
                if pref1 and pref2 then&lt;br /&gt;
                    local pref1IsKnownProject, pref1ProjectCode = isKnownProject(pref1)&lt;br /&gt;
                    local pref2IsKnownProject, pref2ProjectCode = isKnownProject(pref2)&lt;br /&gt;
                    if pref1IsKnownProject&lt;br /&gt;
                        and mw.language.isKnownLanguageTag(pref2)&lt;br /&gt;
                        and interwikiTable[pref1ProjectCode].takes_lang_prefix then&lt;br /&gt;
                        u.project = pref1&lt;br /&gt;
                        u.lang = pref2&lt;br /&gt;
                        u.projectCode = pref1ProjectCode&lt;br /&gt;
                        table.insert(&lt;br /&gt;
                            trackingCategories,&lt;br /&gt;
                            &amp;#039;[[Category:UserLinks transclusions with project parameters containing language codes]]&amp;#039;&lt;br /&gt;
                        )&lt;br /&gt;
                    elseif pref2IsKnownProject&lt;br /&gt;
                        and mw.language.isKnownLanguageTag(pref1)&lt;br /&gt;
                        and interwikiTable[pref2ProjectCode].takes_lang_prefix then&lt;br /&gt;
                        u.project = pref2&lt;br /&gt;
                        u.lang = pref1&lt;br /&gt;
                        u.projectCode = pref2ProjectCode&lt;br /&gt;
                        table.insert(&lt;br /&gt;
                            trackingCategories,&lt;br /&gt;
                            &amp;#039;[[Category:UserLinks transclusions with project parameters containing language codes]]&amp;#039;&lt;br /&gt;
                        )&lt;br /&gt;
                    else&lt;br /&gt;
                        return err(&lt;br /&gt;
                            &amp;#039;&amp;quot;&amp;#039; .. u.project .. &amp;#039;&amp;quot; is not a valid interwiki prefix&amp;#039;,&lt;br /&gt;
                            &amp;#039;Not a valid interwiki prefix&amp;#039;&lt;br /&gt;
                        )&lt;br /&gt;
                    end&lt;br /&gt;
                else&lt;br /&gt;
                    return err(&lt;br /&gt;
                        &amp;#039;&amp;quot;&amp;#039; .. u.project .. &amp;#039;&amp;quot; is not a valid interwiki prefix&amp;#039;,&lt;br /&gt;
                        &amp;#039;Not a valid interwiki prefix&amp;#039;&lt;br /&gt;
                    )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Generate the interwiki prefix. This includes colons.&lt;br /&gt;
    if u.project or u.lang then&lt;br /&gt;
        u.interwiki = &amp;#039;&amp;#039;&lt;br /&gt;
        if u.project then&lt;br /&gt;
            u.interwiki = u.interwiki .. &amp;#039;:&amp;#039; .. u.project&lt;br /&gt;
        end&lt;br /&gt;
        if u.lang then&lt;br /&gt;
            u.interwiki = u.interwiki .. &amp;#039;:&amp;#039; .. u.lang&lt;br /&gt;
        end&lt;br /&gt;
        u.interwiki = u.interwiki .. &amp;#039;:&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        u.interwiki = &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Generate the other helper strings.&lt;br /&gt;
    u.usernameHtml = mw.uri.encode(u.username) -- Html-encoded username. Spaces are encoded as pluses.&lt;br /&gt;
    if u.project then&lt;br /&gt;
        local prefixes = interwikiTable[u.projectCode].iw_prefix&lt;br /&gt;
        u.projectLong = prefixes[2] or prefixes[1] -- A bit of a hack, but should find the long prefix name most of the time.&lt;br /&gt;
    else&lt;br /&gt;
        u.projectLong = &amp;#039;wikipedia&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    u.toolLang = u.lang or &amp;#039;en&amp;#039; -- set the default language for tools on the toolserver or labs.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function generateTrackingCategories()&lt;br /&gt;
    if demo == &amp;#039;yes&amp;#039; then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        return table.concat(trackingCategories)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This function generates a table of all available link types, with their previews.&lt;br /&gt;
-- It is used in the module documentation.&lt;br /&gt;
local function getLinkTable(args)&lt;br /&gt;
    demo = args.demo -- Set the demo variable.&lt;br /&gt;
    -- Generate the user data strings and return any errors.&lt;br /&gt;
    local dataStringError = generateUserDataStrings(args)&lt;br /&gt;
    if dataStringError then&lt;br /&gt;
        return dataStringError&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Build a table of all of the links.&lt;br /&gt;
    local result = &amp;#039;&amp;lt;table class=&amp;quot;wikitable plainlinks sortable&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
        .. &amp;#039;\n&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Code&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Preview&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
    for i, value in ipairs(linktypes) do&lt;br /&gt;
        local code = value[1]&lt;br /&gt;
        result = result .. &amp;quot;\n&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. code .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. getLink(code) .. &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    result = result .. &amp;#039;\n&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSingleLink(args)&lt;br /&gt;
    demo = args.demo -- Set the demo variable.&lt;br /&gt;
    -- Generate the user data strings and return any errors.&lt;br /&gt;
    local dataStringError = generateUserDataStrings(args)&lt;br /&gt;
    if dataStringError then&lt;br /&gt;
        return dataStringError&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local linktype = args[1]&lt;br /&gt;
    if not linktype then &lt;br /&gt;
        return err(&amp;#039;no link type specified&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local result = getLink(linktype)&lt;br /&gt;
    result = result .. generateTrackingCategories()&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLinks(args)&lt;br /&gt;
    demo = args.demo -- Set the demo variable.&lt;br /&gt;
    -- Generate the user data strings and return any errors.&lt;br /&gt;
    local dataStringError = generateUserDataStrings(args)&lt;br /&gt;
    if dataStringError then&lt;br /&gt;
        return dataStringError&lt;br /&gt;
    end    &lt;br /&gt;
    &lt;br /&gt;
    -- Build the template output.&lt;br /&gt;
    local result = makeToolbar(args) -- Get the toolbar contents.&lt;br /&gt;
    if result then&lt;br /&gt;
        if args.sup then&lt;br /&gt;
            result = &amp;#039;&amp;lt;sup&amp;gt;&amp;#039; .. result .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        result = &amp;#039;&amp;amp;nbsp;&amp;#039; .. result&lt;br /&gt;
    else&lt;br /&gt;
        result = &amp;#039;&amp;#039; -- If there are no links specified, don&amp;#039;t return the toolbar at all.&lt;br /&gt;
    end&lt;br /&gt;
    result = &amp;#039;&amp;lt;span&amp;gt;&amp;#039; .. makeUserLink() .. result .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    result = result .. generateTrackingCategories()&lt;br /&gt;
    &lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getExampleLinks(args)&lt;br /&gt;
    -- This function enables example output without having to specify any&lt;br /&gt;
    -- parameters to #invoke.&lt;br /&gt;
    args.demo = &amp;#039;yes&amp;#039;&lt;br /&gt;
    args.user = &amp;#039;Example&amp;#039;&lt;br /&gt;
    args.User = nil&lt;br /&gt;
    return getLinks(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeWrapper(func)&lt;br /&gt;
    return function (frame)&lt;br /&gt;
        -- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
        -- Otherwise, for testing purposes, assume args are being passed directly in.&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;
 &lt;br /&gt;
        -- Strip whitespace, and treat blank arguments as nil.&lt;br /&gt;
        -- &amp;#039;user&amp;#039;, &amp;#039;User&amp;#039;, and &amp;#039;separator&amp;#039; have different behaviour depending on&lt;br /&gt;
        -- whether they are blank or nil, so keep them as they are.&lt;br /&gt;
        local args = {}&lt;br /&gt;
        for k, v in pairs(origArgs) do&lt;br /&gt;
            v = mw.text.trim(v)&lt;br /&gt;
            if v ~= &amp;#039;&amp;#039; or k == &amp;#039;user&amp;#039; or k == &amp;#039;User&amp;#039; or k == &amp;#039;separator&amp;#039; then&lt;br /&gt;
                args[k] = v&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    &lt;br /&gt;
        return func(args)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
    main = makeWrapper(getLinks),&lt;br /&gt;
    single = makeWrapper(getSingleLink),&lt;br /&gt;
    linktable = makeWrapper(getLinkTable),&lt;br /&gt;
    example = makeWrapper(getExampleLinks)&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>imported&gt;Frietjes</name></author>
	</entry>
</feed>