Jump to content

Module:Outdent

Permanently protected module
From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 09:02, 7 March 2014 (create replacement for Template:Outdent). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

-- This module implements {{outdent}}

local cfg = {}

----------------------------------------------------------------------
-- Configuration
----------------------------------------------------------------------

cfg.defaultLevel = 10
cfg.outdentLink = '[[Wikipedia:Indentation#Outdenting|outdent]]'

----------------------------------------------------------------------
-- Load external modules
----------------------------------------------------------------------

local mArguments = require('Module:Arguments')

----------------------------------------------------------------------
-- Main functions
----------------------------------------------------------------------

local p = {}

function p.main(frame)
	local args = mArguments.getArgs(frame)
	local outdent = args[1]
	local showLink = args[2]
	return p._main(outdent, showLink)
end

function p._main(outdent, showLink)
	local width = p.calculateWidth(outdent)
	local link = p.getLink(showLink)
	return p.export(width, link)
end

function p.calculateWidth(outdent)
	local outdentNum = tonumber(outdent)
	local outdentLevel
	if outdentNum then
		outdentLevel = outdentNum
	elseif type(outdent) == 'string' then
		local startOffset, endOffset = outdent:find('^:*$')
		if endOffset then
			outdentLevel = endOffset
		else
			outdentLevel = defaultLevel
		end
	else
		outdentLevel = defaultLevel
	end
	outdentLevel = math.floor(outdentLevel)
	if outdentLevel < 1 then
		outdentLevel = defaultLevel
	end
	local width = outdentLevel * 1.6 - 0.8
	return width
end

function p.getLink(showLink)
	if showLink then
		return string.format('(%s) ', cfg.outdentLink)
	else
		return ''
	end
end

function p.export(width, link)
	local ret = '<span class="outdent-template" style="display:block; margin-top:-0.5em; color:#AAA;">'
		.. '<span style="display:inline-block; overflow:hidden;">┌</span>'
		.. '<span style="display:inline-block; overflow:hidden; width:'
		.. tostring(width)
		.. 'em;">'
		.. '────────────────────────────────────────────────────────────────────────────────────────────────────'
		.. '</span>'
		.. '<span style="display:inline-block; overflow:hidden;">┘</span>'
		.. '</span>'
		.. link
	return ret
end

return p