Module:Sorted plain list
MyWikiBiz, Author Your Legacy — Sunday September 01, 2024
Jump to navigationJump to searchOverview
This module may be used to generate a sorted "plain list", which is a sorted unordered HTML list without visible bullets.
- There are six possible sort modes
asc
is ascending as defined by the default LUA string comparison operator.desc
is descending as defined by the default LUA string comparison operator.asc
with Template:Para is ascending using numeric comparison instead of string comparison.desc
with Template:Para is descending using numeric comparison instead of string comparison.ascd
is ascending dictionary order, so spaces are sorted before other characters.descd
is descending dictionary order, so spaces are sorted before other characters.
- By default, the list is assumed to be delimited by commas, this can be changed to semicolons or any other choice.
- The list may be implicitly loaded from a wikidata property using the Template:Para parameter, which will override any explicitly specified values.
Usage
To convert a comma separated list to a sorted plainlist, use
{{#invoke:sorted plain list|asc|<comma separated entries>}}
{{#invoke:sorted plain list|desc|<comma separated entries>}}
{{#invoke:sorted plain list|ascd|<comma separated entries>}}
{{#invoke:sorted plain list|descd|<comma separated entries>}}
To convert a semicolon separated list to a sorted plainlist, use
{{#invoke:sorted plain list|asc|<semicolon separated entries>|;}}
{{#invoke:sorted plain list|desc|<semicolon separated entries>|;}}
{{#invoke:sorted plain list|ascd|<semicolon separated entries>|;}}
{{#invoke:sorted plain list|descd|<semicolon separated entries>|;}}
To convert a semicolon separated list of numbers to a sorted plainlist, use
{{#invoke:sorted plain list|asc|<semicolon separated entries>|;|type=number}}
{{#invoke:sorted plain list|desc|<semicolon separated entries>|;|type=number}}
To convert a wikidata property list to a sorted plainlist, use
{{#invoke:sorted plain list|asc|propertyID=<PNUMBER>}}
{{#invoke:sorted plain list|desc|propertyID=<PNUMBER>}}
{{#invoke:sorted plain list|ascd|propertyID=<PNUMBER>}}
{{#invoke:sorted plain list|descd|propertyID=<PNUMBER>}}
Examples
{{#invoke:sorted plain list|asc|apples, oranges, bananas}}
→ - apples
- bananas
- oranges
{{#invoke:sorted plain list|desc|apples, oranges, bananas}}
→ - oranges
- bananas
- apples
{{#invoke:sorted plain list|asc|Santa Fe, Santa Rosa, Santana}}
→ - Santa Fe
- Santa Rosa
- Santana
{{#invoke:sorted plain list|desc|Santa Fe, Santa Rosa, Santana}}
→ - Santana
- Santa Rosa
- Santa Fe
{{#invoke:sorted plain list|ascd|Santa Fe, Santa Rosa, Santana}}
→ - Santa Fe
- Santa Rosa
- Santana
{{#invoke:sorted plain list|descd|Santa Fe, Santa Rosa, Santana}}
→ - Santana
- Santa Rosa
- Santa Fe
{{#invoke:sorted plain list|asc|apples; oranges; bananas|;}}
→ - apples
- bananas
- oranges
{{#invoke:sorted plain list|desc|apples; oranges; bananas|;}}
→ - oranges
- bananas
- apples
{{#invoke:sorted plain list|asc|1,500,666; 200; 3,999; 0; -5|;|type=number}}
→ - -5
- 0
- 200
- 3,999
- 1,500,666
{{#invoke:sorted plain list|desc|1,500,666; 200; 3,999; 0; -5|;|type=number}}
→ - 1,500,666
- 3,999
- 200
- 0
- -5
{{#invoke:sorted plain list|asc|1,500,666; 200; 3,999; 0; -5; apples; oranges; bananas|;}}
→ - -5
- 0
- 1,500,666
- 200
- 3,999
- apples
- bananas
- oranges
{{#invoke:sorted plain list|desc|1,500,666; 200; 3,999; 0; -5; apples; oranges; bananas|;}}
→ - oranges
- bananas
- apples
- 3,999
- 200
- 1,500,666
- 0
- -5
{{#invoke:sorted plain list|asc|1,500,666; 200; 3,999; 0; -5; apples; oranges; bananas|;|type=number}}
→ - -5
- 0
- 200
- 3,999
- 1,500,666
- apples
- oranges
- bananas
{{#invoke:sorted plain list|desc|1,500,666; 200; 3,999; 0; -5; apples; oranges; bananas|;|type=number}}
→ - bananas
- apples
- oranges
- 1,500,666
- 3,999
- 200
- 0
- -5
{{#invoke:sorted plain list|ascd|District 1, District 8, District 10, District 11}}
→ - District 1
- District 8
- District 10
- District 11
{{#invoke:sorted plain list|descd|District 1, District 8, District 10, District 11}}
→ - District 11
- District 10
- District 8
- District 1
See also
-- This module generates a sorted plain list -- It was created as a modification of [[Module:Sort]] local p = {} local lang = mw.getContentLanguage() local function transformstring(s) local a = mw.text.trim(s) a = mw.ustring.gsub(a, '%[%[[^%[%]<>|][^%[%]<>|]*|([^%[%]<>|][^%[%]<>|]*)%]%]', '%1') a = mw.ustring.gsub(a, '%[%[([^%[%]<>|][^%[%]<>|]*)%]%]', '%1') a = mw.ustring.gsub(a, '[%s%‑]', 'AA' ) a = mw.ustring.gsub(a, '([%D])([%d])$', '%10%2') return a end -- This function was copied/modified from [[Module:Wikidata]] local function getValue(frame, propertyID) local entity = mw.wikibase.getEntityObject() local claims if entity and entity.claims then claims = entity.claims[propertyID] end if claims then -- if wiki-linked value output as link if possible if (claims[1] and claims[1].mainsnak.snaktype == "value" and claims[1].mainsnak.datavalue.type == "wikibase-entityid") then local out = {} for k, v in pairs(claims) do local sitelink = mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"]) local label = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) if label == nil then label = "Q" .. v.mainsnak.datavalue.value["numeric-id"] end if sitelink then out[#out + 1] = "[[" .. sitelink .. "|" .. label .. "]]" else out[#out + 1] = label end end return out else -- just return best values return { entity:formatPropertyValues(propertyID).value } end else return {""} end end function p.asc(frame) local items if frame.args.propertyID then items = getValue(frame, frame.args.propertyID) else items = mw.text.split( frame.args[1] or '', frame.args[2] or ',', true) end if (frame.args['type'] or '') == 'number' then table.sort( items, function (a, b) return ((lang:parseFormattedNumber(a) or math.huge) < (lang:parseFormattedNumber(b) or math.huge)) end ) else table.sort( items, function (a, b) return mw.text.trim(a) < mw.text.trim(b) end ) end return '<div class="plainlist"><ul><li>' .. table.concat( items, "</li><li>" ) .. '</li></ul></div>' end function p.desc(frame) if frame.args.propertyID then items = getValue(frame, frame.args.propertyID) else items = mw.text.split( frame.args[1] or '', frame.args[2] or ',', true) end if (frame.args['type'] or '') == 'number' then table.sort( items, function (a, b) return ((lang:parseFormattedNumber(a) or math.huge) > (lang:parseFormattedNumber(b) or math.huge)) end ) else table.sort( items, function (a, b) return mw.text.trim(a) > mw.text.trim(b) end ) end return '<div class="plainlist"><ul><li>' .. table.concat( items, "</li><li>" ) .. '</li></ul></div>' end function p.ascd(frame) local items if frame.args.propertyID then items = getValue(frame, frame.args.propertyID) else items = mw.text.split( frame.args[1] or '', frame.args[2] or ',', true) end if (frame.args['type'] or '') == 'number' then table.sort( items, function (a, b) return ((lang:parseFormattedNumber(a) or math.huge) < (lang:parseFormattedNumber(b) or math.huge)) end ) else table.sort( items, function (a, b) return ( transformstring(a) < transformstring(b) ) end) end return '<div class="plainlist"><ul><li>' .. table.concat( items, "</li><li>" ) .. '</li></ul></div>' end function p.descd(frame) local items if frame.args.propertyID then items = getValue(frame, frame.args.propertyID) else items = mw.text.split( frame.args[1] or '', frame.args[2] or ',', true) end if (frame.args['type'] or '') == 'number' then table.sort( items, function (a, b) return ((lang:parseFormattedNumber(a) or math.huge) > (lang:parseFormattedNumber(b) or math.huge)) end ) else table.sort( items, function (a, b) return ( transformstring(a) > transformstring(b) ) end) end return '<div class="plainlist"><ul><li>' .. table.concat( items, "</li><li>" ) .. '</li></ul></div>' end return p