Modulo:List
Etoso
[antaŭrigardi] [redakti] [historio] [renovigi]
![Dokumentado](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/OOjs_UI_icon_puzzle-ltr.svg/20px-OOjs_UI_icon_puzzle-ltr.svg.png)
Ŝablona programado | Diskutoj | Lua | Testoj | Subpaĝoj | |||
---|---|---|---|---|---|---|---|
Modulo | Esperanto | English
|
Modulo: | Dokumentado |
Se vi havas demandon pri ĉi tiuLua-modulo,tiam vi povas demandi en ladiskutejo pri Lua-moduloj.La Intervikiaj ligiloj estu metataj al Vikidatumoj. (ViduHelpopaĝonpri tio.) |
![]() |
|
-- This module outputs different kinds of lists. At the moment, bulleted,
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.
locallibUtil=require('libraryUtil')
localcheckType=libUtil.checkType
localmTableTools=require('Module:TableTools')
localp={}
locallistTypes={
['bulleted']=true,
['unbulleted']=true,
['horizontal']=true,
['ordered']=true,
['horizontal_ordered']=true
}
functionp.makeListData(listType,args)
-- Constructs a data table to be passed to p.renderList.
localdata={}
-- Classes
data.classes={}
iflistType=='horizontal'orlistType=='horizontal_ordered'then
table.insert(data.classes,'hlist')
elseiflistType=='unbulleted'then
table.insert(data.classes,'plainlist')
end
table.insert(data.classes,args.class)
-- Main div style
data.style=args.style
-- Indent for horizontal lists
iflistType=='horizontal'orlistType=='horizontal_ordered'then
localindent=tonumber(args.indent)
indent=indentandindent*1.6or0
ifindent>0then
data.marginLeft=indent..'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
iflistType=='ordered'orlistType=='horizontal_ordered'then
data.listStyleType=args.list_style_typeorargs['list-style-type']
data.type=args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
ifdata.type
andnotdata.listStyleType
andnottostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType=data.type
data.type=nil
end
end
-- List tag type
iflistType=='ordered'orlistType=='horizontal_ordered'then
data.listTag='ol'
else
data.listTag='ul'
end
-- Start number for ordered lists
data.start=args.start
iflistType=='horizontal_ordered'then
-- Apply fix to get start numbers working with horizontal ordered lists.
localstartNum=tonumber(data.start)
ifstartNumthen
data.counterReset='listitem '..tostring(startNum-1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle=args.list_styleorargs.ul_styleorargs.ol_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle=args.item_styleorargs.li_style
data.items={}
fori,numinipairs(mTableTools.numKeys(args))do
localitem={}
item.content=args[num]
item.style=args['item_style'..tostring(num)]
orargs['li_style'..tostring(num)]
item.value=args['item_value'..tostring(num)]
table.insert(data.items,item)
end
returndata
end
functionp.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
iftype(data.items)~='table'or#data.items<1then
return''
end
-- Render the main div tag.
localroot=mw.html.create('div')
fori,classinipairs(data.classesor{})do
root:addClass(class)
end
root:css{['margin-left']=data.marginLeft}
ifdata.stylethen
root:cssText(data.style)
end
-- Render the list tag.
locallist=root:tag(data.listTagor'ul')
list
:attr{start=data.start,type=data.type}
:css{
['counter-reset']=data.counterReset,
['list-style-type']=data.listStyleType
}
ifdata.listStylethen
list:cssText(data.listStyle)
end
-- Render the list items
fori,tinipairs(data.itemsor{})do
localitem=list:tag('li')
ifdata.itemStylethen
item:cssText(data.itemStyle)
end
ift.stylethen
item:cssText(t.style)
end
item
:attr{value=t.value}
:wikitext(t.content)
end
returntostring(root)
end
functionp.renderTrackingCategories(args)
localisDeprecated=false-- Tracks deprecated parameters.
fori,paraminipairs{'ul_style','ol_style','li_style'}do
ifargs[param]then
isDeprecated=true
break
end
end
ifnotisDeprecatedthen
fork,vinpairs(args)do
k=tostring(k)
ifk:find('^item_style%d+$')ork:find('^li_style%d+$')then
isDeprecated=true
break
end
end
end
localret=''
ifisDeprecatedthen
ret=ret..'[[Category:List templates with deprecated parameters]]'
end
returnret
end
functionp.makeList(listType,args)
ifnotlistTypeornotlistTypes[listType]then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
),2)
end
checkType('makeList',2,args,'table')
localdata=p.makeListData(listType,args)
locallist=p.renderList(data)
localtrackingCategories=p.renderTrackingCategories(args)
returnlist..trackingCategories
end
forlistTypeinpairs(listTypes)do
p[listType]=function(frame)
localmArguments=require('Module:Arguments')
localorigArgs=mArguments.getArgs(frame)
-- Copy all the arguments to a new table, for faster indexing.
localargs={}
fork,vinpairs(origArgs)do
args[k]=v
end
returnp.makeList(listType,args)
end
end
returnp