Mô đun:User
Giao diện
--[=[-- 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-- [[Mô đun:UserLinks]]. It is about twice as fast as the version of {{user}}-- that called the {{user-multi}} template from wikitext.--]=]local mUserLinks = require('Mô đun:UserLinks')local mShared = require('Mô đun:UserLinks/shared')local yesno = require('Mô đun: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 endendfunction p.main(frame) -- Grab the user, project and lang args from wikitext. local argKeys = { user = { 1, 'User', 'user', 'thành viên' }, project = { 2, 'Project', 'project', 'dự án' }, lang = { 3, 'Lang', 'lang', 'ngôn ngữ' } } 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 [[Mô đun: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) endendreturn p