Module:Numlinks: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
| Line 10: | Line 10: | ||
-- dissimilar to keep within one module | -- dissimilar to keep within one module | ||
-- Main function | |||
function p._numlinks(args) | function p._numlinks(args) | ||
local num_links = args["Link Count"] or 1 | local num_links = args["Link Count"] or 1 -- Number of links to produce in each direction (left/prev and right/next) | ||
local curr_num = args["Num"] | local curr_num = args["Num"] -- Current number | ||
local min_num = args["Min"] or 1 | local min_num = args["Min"] or 1 -- Smallest allowed number | ||
local | local link_text = args["Link Text"] or { "", "" } -- Text for a link is "<pre-text><num><post-text>" | ||
local | local disp_text = args["Displayed Text"] or nil -- Option for if the text to display is different from the link (EG, "4L 5s <3/1>"" vs "4L 5s (3/1-equivalent)") | ||
local is_ordinal = args["Is Ordinal"] | local curr_text = args["Current Page Text"] or nil -- Option for if the text to display for the current page is different from the link text; by default, this is the same as the link text | ||
local is_ordinal = yesno(args["Is Ordinal"], false) -- Option to convert numbers to ordinal (EG, 3rd-octave temperament) | |||
local is_table = yesno(args["Is Table" ], true ) -- Output is displayed in a 1-row 3-col table by default; setting this to false formats it as one line. | |||
-- Preprocess page | -- Preprocess link text, displayed text, and current-page text | ||
if # | if #link_text == 1 then | ||
link_text = { "", link_text[1] } | |||
end | end | ||
if | if disp_text ~= nil then | ||
if # | if #disp_text == 1 then | ||
disp_text = { "", disp_text[1] } | |||
end | end | ||
end | end | ||
if curr_text ~= nil then | |||
if #curr_text == 1 then | |||
curr_text = { "", curr_text[1] } | |||
if | |||
end | end | ||
end | end | ||
-- | -- Prev lines; start with left arrow, if applicable | ||
local | -- After each link produced, add a bullet as a separator | ||
for i = 1, | local prev_lines = {} | ||
if curr_num - num_links >= min_num then | |||
table.insert(prev_lines, "←") | |||
end | |||
for i = num_links, 1, -1 do | |||
local num = is_ordinal and ordinal(curr_num - i) or string.format("%s", curr_num - i) | local num = is_ordinal and ordinal(curr_num - i) or string.format("%s", curr_num - i) | ||
-- Only add links if they're not less than the minimum | |||
if curr_num - i >= min_num then | if curr_num - i >= min_num then | ||
local link = (disp_text == nil | |||
and string.format("[[%s%s%s]]", link_text[1], num, link_text[2]) -- Link text is what's displayed | |||
or string.format("[[%s%s%s|%s%s%s]]", link_text[1], num, link_text[2], disp_text[1], num, disp_text[2]) -- Displayed text is different from that of the link | |||
) | |||
table.insert(prev_lines, link) | |||
table.insert(prev_lines, "•") | |||
end | end | ||
end | end | ||
return { | -- Produce next links; before each link, add a bullet as a separator | ||
local next_lines = {} | |||
for i = 1, num_links do | |||
local num = is_ordinal and ordinal(curr_num + i) or string.format("%s", curr_num + i) | |||
local link = (disp_text == nil | |||
and string.format("[[%s%s%s]]", link_text[1], num, link_text[2]) -- Link text is what's displayed | |||
or string.format("[[%s%s%s|%s%s%s]]", link_text[1], num, link_text[2], disp_text[1], num, disp_text[2]) -- Displayed text is different from that of the link | |||
) | |||
-- Insert to lines | |||
table.insert(next_lines, "•") | |||
table.insert(next_lines, link) | |||
end | |||
-- Add right arrow | |||
table.insert(next_lines, "→") | |||
-- Produce current page text | |||
local curr_num_text = is_ordinal and ordinal(curr_num) or string.format("%s", curr_num) | |||
local curr_page_text = (disp_text == nil | |||
and string.format("'''%s%s%s'''", link_text[1], curr_num_text, link_text[2]) -- Current-page text is the same as that of its links | |||
or string.format("'''%s%s%s'''", curr_text[1], curr_num_text, curr_text[2]) -- Displayed text is different from that of the link | |||
) | |||
if is_table then | |||
local lines = {} | |||
table.insert(lines, '{| style="width: 100%;"') | |||
table.insert(lines, '|-') | |||
table.insert(lines, '| style="font-size: 0.75em;" | ' .. table.concat(prev_lines, " ")) | |||
table.insert(lines, '| style="width: 50%;" | ' .. curr_page_text) | |||
table.insert(lines, '| style="font-size: 0.75em;" | ' .. table.concat(next_lines, " ")) | |||
table.insert(lines, '|}') | |||
return table.concat(lines, "\n") | |||
else | |||
local lines = {} | |||
table.insert(lines, table.concat(prev_lines, " ")) | |||
table.insert(lines, curr_page_text) | |||
table.insert(lines, table.concat(next_lines, " ")) | |||
return table.concat(lines, " ") | |||
end | |||
end | end | ||
| Line 69: | Line 108: | ||
local curr_num_2 = args["Num 2"] | local curr_num_2 = args["Num 2"] | ||
local min_num_2 = args["Min 2"] or 1 | local min_num_2 = args["Min 2"] or 1 | ||
local | local disp_text = args["Page Text"] or { "PRE-TEXT", "MID-TEXT", "POST-TEXT" } | ||
local link_text = args["Link Text"] or nil | local link_text = args["Link Text"] or nil | ||
local is_ordinal_1 = args["Is Ordinal 1"] ~= nil and args["Is Ordinal 1"] or false | local is_ordinal_1 = args["Is Ordinal 1"] ~= nil and args["Is Ordinal 1"] or false | ||
| Line 89: | Line 128: | ||
-- Main function (TODO: split functionality into two modules) | -- Main function (TODO: split functionality into two modules) | ||
function p. | function p.numlinks(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
| Line 105: | Line 144: | ||
local args = { | local args = { | ||
["Link Count"] = 3, | ["Link Count"] = 3, | ||
["Num"] = | ["Num"] = 3, | ||
["Link Text"] = {" | ["Link Text"] = {"-octave temperaments"}, | ||
["Displayed Text"] = {""}, | |||
["Current Page Text"] = {"-octave"}, | |||
["Is Ordinal"] = 1, | |||
["Is Table" ] = 1 | |||
} | } | ||
Revision as of 09:33, 9 October 2025
- This module implements a metatemplate, and may be invoked by templates using its corresponding template Template:Numlinks, or used directly from other modules.
This module generates previous and next links for a numbered page.
| Introspection summary for Module:Numlinks | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||||||||||||
No function descriptions were provided. The Lua code may have further information.
-- Page is following provisonal style guide: User:Ganaram_inukshuk/Provisional_style_guide_for_Lua
local getArgs = require("Module:Arguments").getArgs
local ordinal = require("Module:Ordinal" )._ordinal
local yesno = require("Module:Yesno" )
local p = {}
-- TODO:
-- - Split into two modules: Numlinks and Numlinks-2D, since behaviors are too
-- dissimilar to keep within one module
-- Main function
function p._numlinks(args)
local num_links = args["Link Count"] or 1 -- Number of links to produce in each direction (left/prev and right/next)
local curr_num = args["Num"] -- Current number
local min_num = args["Min"] or 1 -- Smallest allowed number
local link_text = args["Link Text"] or { "", "" } -- Text for a link is "<pre-text><num><post-text>"
local disp_text = args["Displayed Text"] or nil -- Option for if the text to display is different from the link (EG, "4L 5s <3/1>"" vs "4L 5s (3/1-equivalent)")
local curr_text = args["Current Page Text"] or nil -- Option for if the text to display for the current page is different from the link text; by default, this is the same as the link text
local is_ordinal = yesno(args["Is Ordinal"], false) -- Option to convert numbers to ordinal (EG, 3rd-octave temperament)
local is_table = yesno(args["Is Table" ], true ) -- Output is displayed in a 1-row 3-col table by default; setting this to false formats it as one line.
-- Preprocess link text, displayed text, and current-page text
if #link_text == 1 then
link_text = { "", link_text[1] }
end
if disp_text ~= nil then
if #disp_text == 1 then
disp_text = { "", disp_text[1] }
end
end
if curr_text ~= nil then
if #curr_text == 1 then
curr_text = { "", curr_text[1] }
end
end
-- Prev lines; start with left arrow, if applicable
-- After each link produced, add a bullet as a separator
local prev_lines = {}
if curr_num - num_links >= min_num then
table.insert(prev_lines, "←")
end
for i = num_links, 1, -1 do
local num = is_ordinal and ordinal(curr_num - i) or string.format("%s", curr_num - i)
-- Only add links if they're not less than the minimum
if curr_num - i >= min_num then
local link = (disp_text == nil
and string.format("[[%s%s%s]]", link_text[1], num, link_text[2]) -- Link text is what's displayed
or string.format("[[%s%s%s|%s%s%s]]", link_text[1], num, link_text[2], disp_text[1], num, disp_text[2]) -- Displayed text is different from that of the link
)
table.insert(prev_lines, link)
table.insert(prev_lines, "•")
end
end
-- Produce next links; before each link, add a bullet as a separator
local next_lines = {}
for i = 1, num_links do
local num = is_ordinal and ordinal(curr_num + i) or string.format("%s", curr_num + i)
local link = (disp_text == nil
and string.format("[[%s%s%s]]", link_text[1], num, link_text[2]) -- Link text is what's displayed
or string.format("[[%s%s%s|%s%s%s]]", link_text[1], num, link_text[2], disp_text[1], num, disp_text[2]) -- Displayed text is different from that of the link
)
-- Insert to lines
table.insert(next_lines, "•")
table.insert(next_lines, link)
end
-- Add right arrow
table.insert(next_lines, "→")
-- Produce current page text
local curr_num_text = is_ordinal and ordinal(curr_num) or string.format("%s", curr_num)
local curr_page_text = (disp_text == nil
and string.format("'''%s%s%s'''", link_text[1], curr_num_text, link_text[2]) -- Current-page text is the same as that of its links
or string.format("'''%s%s%s'''", curr_text[1], curr_num_text, curr_text[2]) -- Displayed text is different from that of the link
)
if is_table then
local lines = {}
table.insert(lines, '{| style="width: 100%;"')
table.insert(lines, '|-')
table.insert(lines, '| style="font-size: 0.75em;" | ' .. table.concat(prev_lines, " "))
table.insert(lines, '| style="width: 50%;" | ' .. curr_page_text)
table.insert(lines, '| style="font-size: 0.75em;" | ' .. table.concat(next_lines, " "))
table.insert(lines, '|}')
return table.concat(lines, "\n")
else
local lines = {}
table.insert(lines, table.concat(prev_lines, " "))
table.insert(lines, curr_page_text)
table.insert(lines, table.concat(next_lines, " "))
return table.concat(lines, " ")
end
end
-- wip; to be placed in its own module
function p.numlinks_2num(args)
local curr_num_1 = args["Num 1"]
local min_num_1 = args["Min 1"] or 1
local curr_num_2 = args["Num 2"]
local min_num_2 = args["Min 2"] or 1
local disp_text = args["Page Text"] or { "PRE-TEXT", "MID-TEXT", "POST-TEXT" }
local link_text = args["Link Text"] or nil
local is_ordinal_1 = args["Is Ordinal 1"] ~= nil and args["Is Ordinal 1"] or false
local is_ordinal_2 = args["Is Ordinal 1"] ~= nil and args["Is Ordinal 2"] or false
local x = curr_num_1
local y = curr_num_2
local link_nums = {
{x-1, y-1}, {x , y-1}, {x+1, y-1},
{x-1, y }, {x+1, y },
{x-1, y+1}, {x , y+1}, {x+1, y+1}
}
local links = {}
for i = 1, #link_nums do
end
end
-- Main function (TODO: split functionality into two modules)
function p.numlinks(frame)
local args = getArgs(frame)
args["Num"] = tonumber(args["Num"])
args["Min"] = tonumber(args["Min"]) or 1
args["Link Count"] = tonumber(args["Link Count"]) or 1
-- Create numbered navigation links
local navigation_links = p._numlinks(args)
return navigation_links
end
function p.tester()
local args = {
["Link Count"] = 3,
["Num"] = 3,
["Link Text"] = {"-octave temperaments"},
["Displayed Text"] = {""},
["Current Page Text"] = {"-octave"},
["Is Ordinal"] = 1,
["Is Table" ] = 1
}
return p._numlinks(args)
end
return p