Module:Sandbox/User:Riblet15/Trailblazer Region

From RuneRealm Wiki
Jump to navigation Jump to search
Module documentation
This documentation is transcluded from Template:Module sandbox/doc. [edit] [history] [purge]

This module is a sandbox for Riblet15. It can be used to test changes to existing modules, prototype new modules, or just experimenting with lua features.

Invocations of this sandbox should be kept in userspace; if the module is intended for use in other namespaces, it should be moved out of the sandbox into a normal module and template.

This default documentation can be overridden by creating the /doc subpage of this module, as normal.

local p = {}
local lang = mw.getContentLanguage()

local regions = {
	misthalin = true,
	karamja = true,
	asgarnia = true,
	desert = true,
	fremennik = true,
	kandarin = true,
	morytania = true,
	tirannwn = true,
	wilderness = true,
	kourend = true,
	varlamore = true,
}

function p._main(region, note, link, global_highlight, league)
	if region == nil or string.lower(region) == "no" then
		return "None"
	end
	local ret = {}
	for value in string.gmatch(region, "[^,]+") do
		-- Ampersand regions will always just show badges without text
		if string.find(value, "&") then
			local badge_result = p._badge(value, note, link, global_highlight, league)
			table.insert(ret, badge_result)
		else
			local lower = string.lower(value)
			local trimmed = lower:gsub("^%s*(.-)%s*$", "%1")
			if regions[trimmed] then
				local uc_region = lang:ucfirst(trimmed)
				local icon = p._icon(trimmed, note, link, league)
				local text
				if link == nil or link ~= 'false' then
					text = string.format('<span class="tbz-name">[[%s/Areas/%s|%s]]</span>', league, uc_region, uc_region)
				else
					text = uc_region
				end
				local cur_ret = highlight(string.format('%s %s', icon, text), uc_region, global_highlight)
				table.insert(ret, cur_ret)
			else
				table.insert(ret, value)
			end
		end
	end
	return table.concat(ret, '')
end

function highlight(s, r, global_highlight)
	r = string.lower(r)
	local highlight_class = ""
	if global_highlight ~= nil and global_highlight == 'false' then
		highlight_class = "tbz-no-global"
	end
	return string.format('<span class="tbz-region %s" data-tbz-area="%s">%s<span class="tbz-check">✓</span></span>', highlight_class, r, s)
end

function p._icon(region, note, link, league)
	if string.lower(region or '') == "no" then
		return ""
	else
		region = lang:ucfirst(region)
	end
	if note == nil then
		note = region
	end
	local label
	if link == nil or link ~= 'false' then
		label = string.format('%s/Areas/%s', league, region)
	else
		label = ''
	end
	return string.format('[[File:%s Area Badge.png|%s|link=%s]]', region, note, label)
end

function p._badge(region, note, link, global_highlight, league)
	if region == nil or string.lower(region) == "no" then
		return ""
	end
	local highlight_class = ""
	if global_highlight ~= nil and global_highlight == 'false' then
		highlight_class = "tbz-no-global"
	end
	local ret = {}
	for value in string.gmatch(region, "[^,]+") do
		local lower = string.lower(value)
		-- Ampersand regions wrapped in additional badge span
		if string.find(lower, '&') then
			local ampersandRegions = {}
			local ampersandBadges = {}
			for curRegion in string.gmatch(lower, "[^&]+") do
				curRegion = curRegion:gsub("^%s*(.-)%s*$", "%1")
				if regions[curRegion] then
					table.insert(ampersandRegions, curRegion)
					local icon = p._icon(curRegion, note, link, league)
					local cur_badge = string.format('<span class="tbz-badge %s" data-tbz-area="%s">%s</span>', highlight_class, curRegion, icon)
					table.insert(ampersandBadges, cur_badge)
				end
			end
			local ampersandString = table.concat(ampersandRegions, '&')
			local innerBadgesString = table.concat(ampersandBadges, '&') 
			local cur_ret = string.format('<span class="tbz-badge tbz-badge-wrapper %s" data-tbz-area="%s">%s</span>', highlight_class, ampersandString, innerBadgesString)
			table.insert(ret, cur_ret)
		else
			local trimmed = lower:gsub("^%s*(.-)%s*$", "%1")
			if regions[trimmed] then
				local icon = p._icon(trimmed, note, link, league)
				local cur_ret = string.format('<span class="tbz-badge %s" data-tbz-area="%s">%s</span>', highlight_class, trimmed, icon)
				table.insert(ret, cur_ret)
			else
				table.insert(ret, value)
			end
		end
	end
	return table.concat(ret, '')
end

function p._highlightedIcon(region, note, link, global_highlight, league)
	return highlight(p._icon(region, note, link, league), region, global_highlight)
end

function p.main(frame)
	local args = frame:getParent().args
	local region = args[1]
	local note = args.note
	local link = args.link
	local global_highlight = args.global_highlight
	local frameargs = frame.args
	local league = frameargs.league
	return p._main(region, note, link, global_highlight, league)
end

function p.highlightedIcon(frame)
	local args = frame:getParent().args
	local region = args[1]
	local note = args.note
	local link = args.link
	local global_highlight = args.global_highlight
	local frameargs = frame.args
	local league = frameargs.league
	return p._highlightedIcon(region, note, link, global_highlight, league)
end

function p.icon(frame)
	local args = frame:getParent().args
	local region = args[1]
	local note = args.note
	local link = args.link
	local frameargs = frame.args
	local league = frameargs.league
	return p._icon(region, note, link, league)
end

function p.badge(frame)
	local args = frame:getParent().args
	local region = args[1]
	local note = args.note
	local link = args.link
	local global_highlight = args.global_highlight
	local frameargs = frame.args
	local league = frameargs.league
	return p._badge(region, note, link, global_highlight, league)
end

-- Parsing function for use in infoboxes. Shows at most 2 full chips; more
-- regions will render as badge icons without text.
function p.regionsForInfobox(arg)
	if arg == nil or arg == '' or arg == 'UH OH YOU SHOULDN\'T SEE THIS!' or string.find(arg, "action=edit") then
		return nil
	end
	
	if string.lower(arg) == 'no' then
		return 'N/A'
	end
	
	local ret = {}
	local comma_count = select(2, string.gsub(arg, ",", ""))
	for region in string.gmatch(arg, "[^,]+") do
		local trimmed = region:gsub("^%s*(.-)%s*$", "%1")
		if comma_count < 2 then
			table.insert(ret, p._main(trimmed, nil, nil, nil, 'Raging Echoes League'))
		else
			table.insert(ret, p._badge(trimmed, nil, nil, nil, 'Raging Echoes League'))
		end
	end
	return table.concat(ret, '')
end

return p