<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AMw.html_extension</id>
	<title>Module:Mw.html extension - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AMw.html_extension"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Mw.html_extension&amp;action=history"/>
	<updated>2026-04-30T07:35:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Mw.html_extension&amp;diff=33894&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;-- &lt;nowiki&gt; local p = {} local checkType = require( &#039;libraryUtil&#039; ).checkType local mwHtml = getmetatable( mw.html.create() ).__index  -- Trick to get acces to the mw.html class local stack = {}  -- Used to keep track of nested IF-END tags local noOp = {}  -- This object is returned by IF(false) tag  function mwHtml:addClassIf( cond, class )     if cond then         return self:addClass( class )     else         return self     end end  function mwHtml:tagIf( cond, tagna...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Mw.html_extension&amp;diff=33894&amp;oldid=prev"/>
		<updated>2024-10-15T13:49:17Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- &amp;lt;nowiki&amp;gt; local p = {} local checkType = require( &amp;#039;libraryUtil&amp;#039; ).checkType local mwHtml = getmetatable( mw.html.create() ).__index  -- Trick to get acces to the mw.html class local stack = {}  -- Used to keep track of nested IF-END tags local noOp = {}  -- This object is returned by IF(false) tag  function mwHtml:addClassIf( cond, class )     if cond then         return self:addClass( class )     else         return self     end end  function mwHtml:tagIf( cond, tagna...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
local checkType = require( &amp;#039;libraryUtil&amp;#039; ).checkType&lt;br /&gt;
local mwHtml = getmetatable( mw.html.create() ).__index  -- Trick to get acces to the mw.html class&lt;br /&gt;
local stack = {}  -- Used to keep track of nested IF-END tags&lt;br /&gt;
local noOp = {}  -- This object is returned by IF(false) tag&lt;br /&gt;
&lt;br /&gt;
function mwHtml:addClassIf( cond, class )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:addClass( class )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:tagIf( cond, tagname )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:tag( tagname )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:wikitextIf( cond, text )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:wikitext( text )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:doneIf( cond )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:done()&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:attrIf( cond, name, value )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:attr( name, value )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:cssIf( cond, name, value )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:css( name, value )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:na()&lt;br /&gt;
    return self:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
            :attr( &amp;#039;data-sort-value&amp;#039;, 0 )&lt;br /&gt;
            :attr( &amp;#039;class&amp;#039;, &amp;#039;table-na&amp;#039; )&lt;br /&gt;
            :wikitext( &amp;#039;&amp;lt;small&amp;gt;N/A&amp;lt;/small&amp;gt;&amp;#039; )&lt;br /&gt;
        :done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:naIf( cond )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:na()&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addValues( self, settings )&lt;br /&gt;
    -- wikitext and addClass are no-ops when their argument is nil&lt;br /&gt;
    self:wikitext( settings[1] or settings.wikitext )&lt;br /&gt;
    self:addClass( settings.class or settings.addClass )&lt;br /&gt;
&lt;br /&gt;
    if settings.attr then&lt;br /&gt;
        if settings.attr[1] and settings.attr[2] then&lt;br /&gt;
            self:attr( settings.attr[1], settings.attr[2] )&lt;br /&gt;
        else&lt;br /&gt;
            self:attr( settings.attr )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if settings.css then&lt;br /&gt;
        if settings.css[1] and settings.css[2] then&lt;br /&gt;
            self:css( settings.css[1], settings.css[2] )&lt;br /&gt;
        else&lt;br /&gt;
            self:css( settings.css )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if settings.cssText then&lt;br /&gt;
        self:cssText( settings.cssText )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:tr( settings )&lt;br /&gt;
    if self.tagName == &amp;#039;tr&amp;#039; then&lt;br /&gt;
        self = self:done():tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
    elseif self.tagName == &amp;#039;th&amp;#039; or self.tagName == &amp;#039;td&amp;#039; then&lt;br /&gt;
        self = self:done():done():tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
    else&lt;br /&gt;
        self = self:tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type( settings ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        addValues( self, settings )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:th( settings )&lt;br /&gt;
    if self.tagName == &amp;#039;th&amp;#039; or self.tagName == &amp;#039;td&amp;#039; then&lt;br /&gt;
        self = self:done():tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
    else&lt;br /&gt;
        self = self:tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type( settings ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        addValues( self, settings )&lt;br /&gt;
    else&lt;br /&gt;
        self = self:wikitext( settings )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:td( settings )&lt;br /&gt;
    if self.tagName == &amp;#039;th&amp;#039; or self.tagName == &amp;#039;td&amp;#039; then&lt;br /&gt;
        self = self:done():tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
    else&lt;br /&gt;
        self = self:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if type( settings ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        addValues( self, settings )&lt;br /&gt;
    else&lt;br /&gt;
        self = self:wikitext( settings )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:IF( cond )&lt;br /&gt;
    if cond then&lt;br /&gt;
        table.insert( stack, { obj=noOp, trueCaseCompleted=true } )&lt;br /&gt;
        return self&lt;br /&gt;
    else&lt;br /&gt;
        table.insert( stack, { obj=self, trueCaseCompleted=false } )&lt;br /&gt;
        return noOp&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:ELSEIF( cond )&lt;br /&gt;
    if #stack == 0 then error( &amp;#039;Missing IF tag&amp;#039;, 2 ) end&lt;br /&gt;
    local last = stack[#stack]&lt;br /&gt;
&lt;br /&gt;
    if cond and not last.trueCaseCompleted then&lt;br /&gt;
        last.trueCaseCompleted = true&lt;br /&gt;
        local res = last.obj&lt;br /&gt;
        last.obj = noOp&lt;br /&gt;
        return res&lt;br /&gt;
    else&lt;br /&gt;
        if self ~= noOp then&lt;br /&gt;
            last.obj = self&lt;br /&gt;
        end&lt;br /&gt;
        return noOp&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:ELSE()&lt;br /&gt;
    return self:ELSEIF( true )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:END()&lt;br /&gt;
    if #stack == 0 then error( &amp;#039;Missing IF tag&amp;#039;, 2 ) end&lt;br /&gt;
&lt;br /&gt;
    local res = table.remove( stack )  -- Pop element from the end&lt;br /&gt;
    if res.obj == noOp then&lt;br /&gt;
        return self&lt;br /&gt;
    else&lt;br /&gt;
        return res.obj&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:exec( func, ... )&lt;br /&gt;
    checkType( &amp;#039;exec&amp;#039;, 1, func, &amp;#039;function&amp;#039; )&lt;br /&gt;
    return func( self, ... )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.addFunction( func, name )&lt;br /&gt;
    checkType( &amp;#039;addFunction&amp;#039;, 1, func, &amp;#039;function&amp;#039; )&lt;br /&gt;
    checkType( &amp;#039;addFunction&amp;#039;, 2, name, &amp;#039;string&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    if mwHtml[name] then&lt;br /&gt;
        error( &amp;#039;Function &amp;quot;&amp;#039; .. name .. &amp;#039;&amp;quot; already exists&amp;#039;, 2 )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    mwHtml[name] = func&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
noOp.IF = mwHtml.IF&lt;br /&gt;
noOp.ELSEIF = mwHtml.ELSEIF&lt;br /&gt;
noOp.ELSE = mwHtml.ELSE&lt;br /&gt;
noOp.END = mwHtml.END&lt;br /&gt;
setmetatable( noOp, {&lt;br /&gt;
    __index = function( self )&lt;br /&gt;
        return self&lt;br /&gt;
    end,&lt;br /&gt;
    __call = function( self )&lt;br /&gt;
        return self&lt;br /&gt;
    end,&lt;br /&gt;
    __tostring = function()&lt;br /&gt;
        error( &amp;#039;Attempting to convert no-op object into a string. Check for unbalanced IF-END tags&amp;#039;, 2 )&lt;br /&gt;
    end,&lt;br /&gt;
    __concat = function()&lt;br /&gt;
        error( &amp;#039;Attempting to concatenate a no-op object. Check for unbalanced IF-END tags&amp;#039;, 2 )&lt;br /&gt;
    end&lt;br /&gt;
} )&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>