FANDOM


This page contains some quick lua snippets to help create modules.

General

Get template and transcluding page arguments

local p = {}
function p.doStuff(frame)
        local transclusionArguments = frame.args
        local templateArguments = frame:getParent().args
        local templateOption = templateArguments["option"] or ""
        local transclusionOption = transclusionArguments["trans_option"] or ""
 
        return transclusionOption .. templateOption
end
 
return p

Check if a lua table contains values.

local tTab = {}
if next(tTab) then
    mw.log (true)
end

Get the title of the page that transcludes a page containing a lua invocation (parent frame). This is typically a template name.

local p = {}
function p.frameTitle(frame)
    local title = frame:getParent():getTitle()
    return (title)
end
return p

Get parameters (bool= in example) passed to template that have no value and read them to set boolean variables (or just localBool in this example).

local p = {}
 
-- include Arguments module at dev.wikia.com
local getArgs = require('Dev:Arguments').getArgs
 
function p.myTemplate(frame) -- Implements {{myTemplate}}
	local args = getArgs(frame, {
	trim = false,
	removeBlanks = false -- Keeps empty params
	})
	local booleanVar = false -- Default booleanVar to false
 
	-- Set booleanVar to true if |bool= used with template
	if args["bool"] then
		booleanVar = true
	end
 
	return p._myTemplate(args, booleanVar)
end
 
function p._myTemplate( args, isBool )
	local localBool = isBool -- Set local boolean variable 
	local returnWikitext = nil
 
	-- Do stuff that is conditional on isBool and set returnWikitext
 
	return returnWikitext
end

Text

Find a piece of text within text.

local textToFind = "one"
local content = "In the end there can be only one"
local startposition , endposition = string.find(content, textToFind)
 
if startposition then
   mw.log (true)
end

Show only a specific number of sequential tokens (group of characters) from a piece of text.

local text  = "Human beings are a disease, a cancer of this planet."
local tab = mw.text.split( text, " ")
local tokens = 5
local output = ""
   for i= 0, tokens do
       output = output .. " " .. (tab[i] or "")
   end
 
print(output)
Output : Human beings are a disease,

Math

Round a number.

function p.round(num, idp)
    local roundedNumber = tonumber(string.format("%." .. (idp or 0) .. "f", num))
 
    return (roundedNumber)
end

Date

Add days to a date.

local iDays = 50
local iDayToSecs = iDays  * 24 * 60 *60
local timestamp = os.time({month=12,year=2012,day=10})
local futureDate = os.date("%Y-%m-%d", timestamp + iDayToSecs)
 
mw.log (futureDate)

Conditional statements

Using a ternary operator.

local condition = true
local trueText = "Bananas are good"
local returnText = condition and trueText or ""
--This returns trueText if condition is true, and "" if not
mw.log (returnText)

Sorting

Sorting using an Associative table[1]

function spairs(t, order)
    -- collect the keys
    local keys = {}
    for k in pairs(t) do keys[#keys+1] = k end
 
    -- if order function given, sort by it by passing the table and keys a, b,
    -- otherwise just sort the keys 
    if order then
        table.sort(keys, function(a,b) return order(t, a, b) end)
    else
        table.sort(keys)
    end
 
    -- return the iterator function
    local i = 0
    return function()
        i = i + 1
        if keys[i] then
            return keys[i], t[keys[i]]
        end
    end
end

Usage

local power = { Majin = "11", Buu = "3", Baba = "10" , ["5"] = "ratty", ["8"] = "bum"   }
 
-- basic usage, just sort by the keys
for k,v in spairs(power) do
    print(k,v)
end
--Sorts by keys
--Output
--5	ratty 8	bum Baba 10 Buu	3 Majin	11 
-- Sort by values
for k,v in spairs(power, function(t,a,b) return t[b] < t[a] end) do
    print(k,v)
end
-->5	 ratty
-->8	 bum
-->Buu	 3
-->Majin 11
-->Baba	 10

See also

References

  1. Sort a Table[] in Lua. http://stackoverflow.com/a/15706820

Start a Discussion Discussions about Lua templating/Snippets

Community content is available under CC-BY-SA unless otherwise noted.

Fandom may earn an affiliate commission on sales made from links on this page.

Stream the best stories.

Fandom may earn an affiliate commission on sales made from links on this page.

Get Disney+