Modul:List

Sa Wikipedije, slobodne enciklopedije
Idi na: navigacija, traži
Template-info.svg Dokumentacija modula [uredi] [historija] [osvježi keš]
Ova dokumentacija je prikazana u Modul:List/dok.
Bih-usa.svg Ovaj članak nije preveden ili je djelimično preveden.
Ako smatrate da ste sposobni da ga prevedete, kliknite na link uredi i prevedite ga vodeći računa o enciklopedijskom stilu pisanja i pravopisu bosanskog jezika.

This module outputs various kinds of lists. At present, it supports bulleted lists, unbulleted lists, horizontal lists, ordered lists (numbered or alphabetical), and horizontal ordered lists. It allows for easy css styling of the list or of the individual list items.

Usage

Quick usage

Šablon:Pre2

All parameters

Šablon:Pre2

Arguments passed from parent template

Šablon:Pre2

Functions
Function name Produces Example output
bulleted Bulleted lists
  • First item
  • Second item
  • Third item
unbulleted Unbulleted lists
  • First item
  • Second item
  • Third item
horizontal Horizontal bulleted lists
  • First item
  • Second item
  • Third item
ordered Ordered lists (numbered lists and alphabetical lists)
  1. First item
  2. Second item
  3. Third item
horizontal_ordered Horizontal ordered lists
  1. First item
  2. Second item
  3. Third item

Parameters

  • Positional parameters (1, 2, 3...) - these are the list items. If no list items are present, the module will output nothing.
  • start - sets the start item for ordered lists. This can be a start number for numbered lists, or a start letter for alphabetical lists. Horizontal ordered lists only support numbers.
  • type - the type of marker used in ordered lists. Possible values are "1" for numbers (the default), "A" for uppercase letters, "a" for lowercase letters, "I" for uppercase Roman numerals, and "i" for lowercase Roman numerals. Not supported in horizontal ordered lists. See also the list_style_type parameter.
  • list_style_type - the type of marker used in ordered lists. This uses CSS styling, and has more types available than the type parameter, which uses an html attribute. Possible values are listed at W3schools' list-style-type page. Support may vary by browser. list-style-type is an alias for this parameter.
  • class - a custom class for the <div>...</div> tags surrounding the list, e.g. plainlinks.
  • style - a custom css style for the <div>...</div> tags surrounding the list, e.g. font-size: 90%;.
  • list_style - a custom css style for the list itself. The format is the same as for the |style= parameter. ul_style and ol_style are aliases for this parameter, included for backwards compatibility.
  • item_style - a custom css style for all of the list items (the <li>...</li> tags). The format is the same as for the |style= parameter. li_style is an alias for this parameter, included for backwards compatibility.
  • item_style1, item_style2, item_style3... - custom css styles for each of the list items. The format is the same as for the |style= parameter. The li_style1, li_style2 li_style3 ... parameters are aliases for these parameters, included for backwards compatibility.
  • item_value1, item_value2, item_value3... - custom value for list items. The value should be a positive integer (only works with ordered lists).
  • indent - this parameter indents the list, for horizontal and horizontal ordered lists only. The value must be a number, e.g. 2. The indent is calculated in em, and is 1.6 times the value specified. If no indent is specified, the default is zero.

Examples

Bulleted lists
Code Result
{{#invoke:list|bulleted|First item|Second item|Third item}}
  • First item
  • Second item
  • Third item
{{#invoke:list|bulleted|First item|Second item|Third item|li_style=color:blue;}}
  • First item
  • Second item
  • Third item
{{#invoke:list|bulleted|First item|Second item|Third item|li_style1=background-color:yellow;|li_style2=background-color:silver;}}
  • First item
  • Second item
  • Third item
Unbulleted lists
Code Result
{{#invoke:list|unbulleted|First item|Second item|Third item}}
  • First item
  • Second item
  • Third item
{{#invoke:list|unbulleted|First item|Second item|Third item|li_style=color:blue;}}
  • First item
  • Second item
  • Third item
{{#invoke:list|unbulleted|First item|Second item|Third item|li_style1=background-color:yellow;|li_style2=background-color:silver;}}
  • First item
  • Second item
  • Third item
Horizontal lists
Code Result
{{#invoke:list|horizontal|First item|Second item|Third item}}
  • First item
  • Second item
  • Third item
{{#invoke:list|horizontal|First item|Second item|Third item|indent=2}}
  • First item
  • Second item
  • Third item
Unbulleted lists
Code Result
{{#invoke:list|unbulleted|First item|Second item|Third item}}
  • First item
  • Second item
  • Third item
{{#invoke:list|unbulleted|First item|Second item|Third item|li_style=color:blue;}}
  • First item
  • Second item
  • Third item
{{#invoke:list|unbulleted|First item|Second item|Third item|li_style1=background-color:yellow;|li_style2=background-color:silver;}}
  • First item
  • Second item
  • Third item
Ordered lists
Code Result
{{#invoke:list|ordered|First item|Second item|Third item}}
  1. First item
  2. Second item
  3. Third item
{{#invoke:list|ordered|First item|Second item|Third item|start=3}}
  1. First item
  2. Second item
  3. Third item
{{#invoke:list|ordered|First item|Second item|Third item|type=i}
  1. First item
  2. Second item
  3. Third item
{{#invoke:list|ordered|First item|Second item|Third item|list_style_type=lower-greek}}
  1. First item
  2. Second item
  3. Third item
Horizontal ordered lists
Code Result
{{#invoke:list|horizontal_ordered|First item|Second item|Third item}}
  1. First item
  2. Second item
  3. Third item
{{#invoke:list|horizontal_ordered|First item|Second item|Third item|start=3}}
  1. First item
  2. Second item
  3. Third item
{{#invoke:list|horizontal_ordered|First item|Second item|Third item|indent=2}}
  1. First item
  2. Second item
  3. Third item

-- This module outputs different kinds of lists. At the moment, bulleted, unbulleted,
-- horizontal, ordered, and horizontal ordered lists are supported.
 
local p = {}
 
local getArgs = require('Module:Arguments').getArgs
local htmlBuilder = require('Module:HtmlBuilder')
 
local function getListItem(data, style, itemStyle, itemValue)
	if not data then
		return c
	end
	local item = htmlBuilder.create('li')
	item
		.cssText(style)
		.cssText(itemStyle)
		.wikitext(data)
	if(itemValue) then
		item.attr('value',itemValue)
	end
	return tostring(item)
end
 
local function getArgNums(args)
	-- Returns an array containing the keys of all positional arguments that contain data (i.e. non-whitespace values).
	local nums = {}
	for k, v in pairs(args) do
		if type(k) == 'number' and 
			k >= 1 and 
			math.floor(k) == k and 
			mw.ustring.match(v, '%S') then
				table.insert(nums, k)
		end
	end
	table.sort(nums)
	return nums
end
 
function p.makeList(listType, args)
	-- This is the main function to be called from other Lua modules.
	-- First, get the list items.
	local listItems = {}
	local argNums = getArgNums(args)
	for i, num in ipairs(argNums) do
		local item = getListItem(
			args[num],
			args.item_style or args.li_style, -- li_style is included for backwards compatibility. item_style was included to be easier to understand for non-coders.
			args['item_style' .. tostring(num)] or args['li_style' .. tostring(num)],
			args['item_value' .. tostring(num)]
		)
		table.insert(listItems, item)
	end
	if #listItems == 0 then
		return ''
	end
	-- Build the opening div tag.
	local root = htmlBuilder.create('div')
	if listType == 'horizontal' or listType == 'horizontal_ordered' then
		root.addClass('hlist')
	elseif listType == 'unbulleted' then
		root.addClass('plainlist')
	end
	root.addClass(args.class)
	if listType == 'horizontal' or listType == 'horizontal_ordered' then
		local indent = tonumber(args.indent)
		indent = tostring((indent and indent * 1.6) or 0)
		root.css('margin-left', indent .. 'em')
	end
	-- If we are outputting an ordered list or an ordered horizontal list, get the type and list-style-type.
	-- Horizontal ordered lists aren't supported yet, but including them anyway in case support is ever added to the CSS backend.
	local listStyleType, typeAttr
	if listType == 'ordered' or listType == 'horizontal_ordered' then 
		listStyleType = args.list_style_type or args['list-style-type']
		typeAttr = args['type']
	end
	-- Detect if the type attribute specified by args.type is using an invalid value, and if so try passing it as a list-style-type CSS property.
	if typeAttr and not typeAttr:match('^%s*[1AaIi]%s*$') then
		if not listStyleType then
			listStyleType = typeAttr
			typeAttr = nil
		end
	end
	root.cssText(args.style)
	-- Build the list tags and list items.
	local list = root.tag((listType == 'ordered' or listType == 'horizontal_ordered') and 'ol' or 'ul')
	local start = args.start
	list
		.attr('start', start)
	if listType == 'horizontal_ordered' then
		-- Apply fix to get start numbers working with horizontal ordered lists.
		local startNum = tonumber(start)
		if startNum then
			list.css('counter-reset', 'listitem ' .. tostring(startNum - 1))
		end
	end
	list
		.attr('type', typeAttr)
		.css('list-style-type', listStyleType)
		.cssText(args.list_style or args.ul_style or args.ol_style) -- ul_style and ol_style are included for backwards compatibility. No distinction is made for ordered or unordered lists.
		.wikitext(table.concat(listItems))
	return tostring(root)
end
 
local function makeWrapper(listType)
	return function(frame)
		local args = getArgs(frame, {
			valueFunc = function (key, value)
				if type(key) == 'number' or value ~= '' then
					return value
				end
			end
		})
		return p.makeList(listType, args)
	end
end
 
local funcNames = {'bulleted', 'unbulleted', 'horizontal', 'ordered', 'horizontal_ordered'}
 
for _, funcName in ipairs(funcNames) do
	p[funcName] = makeWrapper(funcName)
end
 
return p