Module:User: Difference between revisions
From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Content added Content deleted
(deal with nil values properly) |
m (7 revisions imported from wikipedia:Module:User) |
||
(5 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
--[=[ |
|||
-- This module implements {{user}}. {{user}} is a high-use template, sometimes |
|||
-- with thousands of transclusions on a page. This module optimises the |
|||
-- template's performance by reducing the number of parameters called from |
|||
-- wikitext, while still allowing all the features provided by |
|||
-- [[Module:UserLinks]]. It is about twice as fast as the version of {{user}} |
|||
-- that called the {{user-multi}} template from wikitext. |
|||
--]=] |
|||
local mUserLinks = require('Module:UserLinks') |
local mUserLinks = require('Module:UserLinks') |
||
local mShared = require('Module:UserLinks/shared') |
local mShared = require('Module:UserLinks/shared') |
||
Line 6: | Line 15: | ||
local function validateArg(arg) |
local function validateArg(arg) |
||
-- Validates one argument. Whitespace is stripped, and blank arguments |
|||
-- are treated as nil. |
|||
if not arg then |
if not arg then |
||
return nil |
return nil |
||
Line 12: | Line 23: | ||
if arg ~= '' then |
if arg ~= '' then |
||
return arg |
return arg |
||
else |
|||
return nil |
|||
end |
end |
||
end |
end |
||
function p.main(frame) |
function p.main(frame) |
||
-- Grab the user, project and lang args from wikitext. |
|||
local argKeys = { |
local argKeys = { |
||
user = { |
user = { |
||
Line 41: | Line 55: | ||
if value then |
if value then |
||
args[argKey] = value |
args[argKey] = value |
||
-- If we have found a value, break the loop. For the average |
|||
-- invocation this saves two argument lookups. |
|||
break |
break |
||
end |
end |
||
end |
end |
||
end |
end |
||
-- Generate options. Some of these need wikitext args also. |
|||
local options = { |
local options = { |
||
span = false, |
span = false, |
||
Line 50: | Line 68: | ||
isDemo = yesno(validateArg(origArgs.demo)) |
isDemo = yesno(validateArg(origArgs.demo)) |
||
} |
} |
||
-- Input the codes directly. This saves two argument lookups for each |
|||
-- invocation. |
|||
local codes = {'t', 'c'} |
local codes = {'t', 'c'} |
||
⚫ | |||
-- Plug the data into [[Module:UserLinks]]. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
local success, result = pcall(mUserLinks.export, codes, links, options) |
local success, result = pcall(mUserLinks.export, codes, links, options) |
||
if success then |
if success then |
Latest revision as of 20:47, January 28, 2022
Documentation for this module may be created at Module:User/doc
--[=[
-- This module implements {{user}}. {{user}} is a high-use template, sometimes
-- with thousands of transclusions on a page. This module optimises the
-- template's performance by reducing the number of parameters called from
-- wikitext, while still allowing all the features provided by
-- [[Module:UserLinks]]. It is about twice as fast as the version of {{user}}
-- that called the {{user-multi}} template from wikitext.
--]=]
local mUserLinks = require('Module:UserLinks')
local mShared = require('Module:UserLinks/shared')
local yesno = require('Module:Yesno')
local p = {}
local function validateArg(arg)
-- Validates one argument. Whitespace is stripped, and blank arguments
-- are treated as nil.
if not arg then
return nil
end
arg = arg:match('^%s*(.-)%s*$')
if arg ~= '' then
return arg
else
return nil
end
end
function p.main(frame)
-- Grab the user, project and lang args from wikitext.
local argKeys = {
user = {
1,
'User',
'user'
},
project = {
2,
'Project',
'project'
},
lang = {
3,
'Lang',
'lang'
}
}
local origArgs = frame:getParent().args
local args = {}
for argKey, t in pairs(argKeys) do
for i, origArgKey in ipairs(t) do
local value = origArgs[origArgKey]
value = validateArg(value)
if value then
args[argKey] = value
-- If we have found a value, break the loop. For the average
-- invocation this saves two argument lookups.
break
end
end
end
-- Generate options. Some of these need wikitext args also.
local options = {
span = false,
separator = validateArg(origArgs.separator) or 'dot',
isDemo = yesno(validateArg(origArgs.demo))
}
-- Input the codes directly. This saves two argument lookups for each
-- invocation.
local codes = {'t', 'c'}
-- Plug the data into [[Module:UserLinks]].
local snippets = mUserLinks.getSnippets(args)
local links = mUserLinks.getLinks(snippets)
local success, result = pcall(mUserLinks.export, codes, links, options)
if success then
return result
else
return mShared.makeWikitextError(result, options.isDemo)
end
end
return p