Help:Lua/mw.html
mw.html是MediaWiki的一个Lua库,可用于高效且简便地创建HTML,并面向对象使用(类似于jQuery)。使用mw.html.create
函数创建一个新的mw.html对象。
create[编辑源代码]
mw.html.create(tagName, args)
创建一个新的mw.html对象,其为一个标签名称为tagName
的元素。tagName
可以是空字符串或者nil,这样就会创建一个新的空白mw.html对象。
args
是可选的表,可以有以下字段:
args.selfClosing
:强制当前标签自我闭合,即使mw.html不认可其自我闭合args.parent
:当前mw.html实例的上级对象(用于内部使用)
例如:
local div = mw.html.create "div"
方法[编辑源代码]
mw.html对象可以有以下方法。注:用例中的html
表示一个mw.html对象。如非特别说明,下面这些方法调用后均返回修改后的mw.html对象自身,以便于链式调用。
node[编辑源代码]
html:node(builder)
向当前的mw.html实例附加mw.html(builder)节点。如果传递nil,那么函数不做任何事。(builder)节点是要创建的HTML元素的种类的字符串代表。
wikitext[编辑源代码]
html:wikitext(text1, text2, ...)
给mw.html对象加上维基文本字符串。可以是一个,也可以是多个。注意遇到第一个nil项就会停。
text1、text2……不能是标签对象。将子节点添加到mw.html对象应当使用#node方法,或直接使用#tag方法创建子节点。
newline[编辑源代码]
html:newline()
给mw.html对象加新行。
tag[编辑源代码]
html:tag(tagName, args)
给mw.html对象添加一个新的节点,其标签名称为tagName,返回代表这个新的节点的mw.html实例。args参数和mw.html.create的参数是一样的。
注意:该方法返回的是新的mw.html对象。例如:
local tbl = mw.html.create "table" -- 不要命名为table,以避免与table库重名
:addClass "wikitable"
local tr1 = tbl:tag "tr"
local td1 = tr1:tag "td"
:wikitext "第一格"
local td2 = tr1:tag "td"
:wikitext "第二格"
local td3 = tr1:tag "td"
:wikitext "第三格"
通过该方法创建的子节点,可以调用#done方法以返回上一级节点。例如:
local tbl = mw.html.create "table"
:addClass 'wikitable'
:tag 'tr'
:tag 'td'
:wikitext "第一格"
:done()
:tag 'td'
:wikitext "第二格"
:done()
:tag 'td'
:wikitext "第三格"
:done()
:done()
这样将所有的节点就串成了一句,十分简便,当然这样的局限性在于语句不够灵活,也没有将子节点存储为局部变量。
attr[编辑源代码]
html:attr(name, value)
或html:attr(t)
(其中t
是一个表)。
将节点的HTML对象的name属性的值设为value。也可以选择使用表,其键值对即为属性名称-值对。
第一种形式中,如果值为nil,会导致这个给定名称的已被设置的属性设为未被设置。
例如:
div
:attr('data-usage', 'The usage of div')
:attr('lang', 'zh-sg')
getAttr[编辑源代码]
html:getAttr(name)
返回已经通过html:attr()设置的属性name的值。
addClass[编辑源代码]
html:addClass(class)
给节点添加一个类。可以多次添加。如果参数为nil,则无效。
例如:
div:addClass "content-div nomobile"
css[编辑源代码]
html:css(name, value)
或html:css(t)
(其中t
为表)
使用给定的name和value给节点设置CSS属性。也可以选择使用表,其键值对即为CSS名称-值对。第一种形式中,如果值为nil,会导致这个给定名称的已被设置的CSS设为未被设置。
例如:
div
:css('color', 'red')
:css('border', '1px solid currentColor')
:css('font-size', 'small')
或
div:css {
color = 'red',
border = '1px solid currentColor',
['font-size'] = 'small'
}
cssText[编辑源代码]
html:cssText(css)
给节点的属性添加一些纯css文本。如果参数为nil,则无效。
例如:
div:cssText 'color:red; border:1px solid currentColor; font-size:small'
done[编辑源代码]
html:done()
返回当前节点被创建时所在的上级节点(parent node)。类似于jQuery.end,这样可以允许方便地创建多个子节点,并串成一个语句。
allDone[编辑源代码]
html:allDone()
类似于html:done()
,但是会遍历直到树节点的根部再返回。
注意[编辑源代码]
- Lua中缩进是会被忽视的,但建议根据代码逻辑调整缩进以方便阅读:
- 对所有写在同一对象后的方法增加一缩进。
- 每调用一次
:tag
方法并链式调用时增加一即缩进。 - 每调用
:done
方法返回上级节点并链式调用时,减少一缩进。
local div = mw.html.create("div")
:addClass("foo")
:tag("span")
:css("color","#114514")
:wikitext("bar")
:done() -- 如果这里不调用done,则赋值给div的将会是这个span标签。