Module:ListGeneration: Difference between revisions
// via Wikitext Extension for VSCode |
// via Wikitext Extension for VSCode |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
-- | --[[ | ||
* Name: ListGeneration | |||
* Author: Mark W. Datysgeld | |||
* Description: Centralized and flexible module for generating various types of lists from delimited strings, designed to replace fragmented list generation logic | |||
* Notes: Handles semicolon-delimited strings automatically; supports multiple list modes (bullet, bullet_custom, invisible, comma); allows custom CSS classes on list container; provides itemHook for custom per-item processing and formatting; accepts both string input (auto-split) and pre-split table input | |||
]] | |||
- | |||
- | |||
local p = {} | local p = {} | ||
| Line 52: | Line 34: | ||
local items | local items | ||
if type(input) == 'string' then | if type(input) == 'string' then | ||
items = NormalizationText.splitMultiValueString(input) | -- Default to splitting only by semicolon. This is a safer default than also splitting by "and", which can break up valid entity names. | ||
-- Callers that need more complex splitting logic should pre-split the string and pass a table instead. | |||
local semicolonOnlyPattern = {{pattern = ";%s*", replacement = ";"}} | |||
items = NormalizationText.splitMultiValueString(input, semicolonOnlyPattern) | |||
else | else | ||
items = input | items = input | ||
| Line 73: | Line 58: | ||
end | end | ||
-- If there's only one item and no | -- If there's only one item and no special formatting is needed, return it directly without list formatting | ||
if #items == 1 | if #items == 1 then | ||
local singleItem = items[1] | local singleItem = items[1] | ||
if type(singleItem) == 'table' then | local hasCustomBullet = (mode == 'bullet_custom' and bulletChar and bulletChar ~= '') | ||
local hasSpecialClass = (type(singleItem) == 'table' and singleItem.class and singleItem.class ~= '') | |||
-- Only bypass list formatting if there's no custom bullet AND no special class | |||
if not hasCustomBullet and not hasSpecialClass then | |||
if type(singleItem) == 'table' then | |||
return singleItem.content or '' | |||
else | |||
return singleItem | |||
end | |||
end | end | ||
-- If we have custom bullets or special classes, continue to list formatting below | |||
end | end | ||