Module

TemplateSource

From Dogcraft Wiki

mNo edit summary
mNo edit summary
Line 23: Line 23:
end
end


function p.test(frame)
function templateText()
pageContent = mw.title.new( 'Template:Templates Nav' ):getContent()
pageContent = mw.title.new( 'Template:Templates Nav' ):getContent()
Line 39: Line 39:
strippedNoIncludes = stripNoinclude( strippedIncludeOnly )
strippedNoIncludes = stripNoinclude( strippedIncludeOnly )
return mw.text.nowiki( strippedNoIncludes )
return mw.text.nowiki( strippedNoIncludes )
end
function p.test()
text = templateText()
return mw.text.decode( text )
end
end


return p
return p

Revision as of 20:27, 31 January 2026

Meant to be used with the {{Template source}} template. Returns the plaintext contents of a template. Obeys the mostly the same behaviours as transclusion would, respects <onlyinclude>, <includeonly>, and <noinclude> tags. This module is primarily meant to be used as input to <syntaxhighlight>, which doesn't handle some tags (like <templatestyles> or <categorytree>) correctly.

Example

The source of the {{Pagetabs}} template, wrapped in a <syntaxhighlight> tag.

{{#tag:syntaxhighlight|{{#invoke:TemplateSource|templateSource|Template:Pagetabs}}|lang=html|line=1}} generates:

<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">Script error: The function &quot;templateSource&quot; does not exist.</span></strong>

local p = {}

function handleOnlyInclude( text )
	onlyincludes = {}
	
	for capture in mw.ustring.gmatch( text, '<onlyinclude>(.-)</onlyinclude>' ) do
		table.insert(onlyincludes, capture)
	end
	
	return table.concat(onlyincludes, '')
end

function stripNoinclude( text )
	stripCompleteNoincludes = mw.ustring.gsub( text, '<noinclude>.-</noinclude>', '' )
	stripDanglingNoincludes = mw.ustring.gsub( stripCompleteNoincludes, '<noinclude>.*', '' )
	return stripDanglingNoincludes
end

function stripIncludeonlyTags( text )
	stripIncludeonlyOpenTags = mw.ustring.gsub( text, '<includeonly>', '' )
	stripIncludeonlyCloseTags = mw.ustring.gsub( stripIncludeonlyOpenTags, '</includeonly>', '' )
	return stripIncludeonlyCloseTags
end

function templateText()
	pageContent = mw.title.new( 'Template:Templates Nav' ):getContent()
	
	-- stripping includeonlys
	strippedIncludeOnly = stripIncludeonlyTags( pageContent )
	
	-- handling onlyinclude tags
	handledOnlyInclude = handleOnlyInclude( strippedIncludeOnly )
	if mw.ustring.len( handledOnlyInclude ) > 0 then
		strippedNoIncludesInsideOnlyIncludes = stripNoinclude( handledOnlyInclude )
		return mw.text.nowiki( strippedNoIncludesInsideOnlyIncludes )
	end
	
	-- handling normal noincludes
	strippedNoIncludes = stripNoinclude( strippedIncludeOnly )
	return mw.text.nowiki( strippedNoIncludes )
end

function p.test()
	text = templateText()
	return mw.text.decode( text )
end

return p
This page was last modified on 31 January 2026, at 20:27. (44 hours ago)