Module:Numlinks

From Xenharmonic Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Numlinks/doc

-- Page is following provisonal style guide: User:Ganaram_inukshuk/Provisional_style_guide_for_Lua

local ordinal = require("Module:Ordinal")._ordinal
local getArgs = require("Module:Arguments").getArgs
local yesno = require("Module:yesno")

local p = {}

function p.numlinks_1_val(args)
	local num_links  = args["Link Count"]
	local curr_num   = args["Num 1"]
	local min_num    = args["Min 1"] or 1
	local page_text  = args["Page Text"] or { "PRE-TEXT", "POST-TEXT" }
	local link_text  = args["Link Text"] or nil
	local is_ordinal = args["Is Ordinal 1"] ~= nil and args["Is Ordinal 1"] or false
	
	-- Preprocess page and link text
	if #page_text == 1 then
		page_text = { "", page_text[1] }
	end
	if link_text ~= nil then
		if #link_text == 1 then
			link_text = { "", link_text[1] }
		end
	end
	
	-- Produce next links
	local next_links = ""
	for i = 1, num_links do
		local link = ""
		local num = is_ordinal and ordinal(curr_num + i) or string.format("%s", curr_num + i)
		if link_text == nil then
			-- Link text is the same as the page text
			link = string.format("[[%s%s%s]]", page_text[1], num, page_text[2])
		else
			-- Link and page text are different
			link = string.format("[[%s%s%s|%s%s%s]]", page_text[1], num, page_text[2], link_text[1], num, link_text[2])
		end
		next_links = next_links .. link .. (i == num_links and "" or " ")
	end
	
	-- Produce prev links
	local prev_links = ""
	for i = 1, num_links do
		local link = ""
		local num = is_ordinal and ordinal(curr_num - i) or string.format("%s", curr_num - i)
		if curr_num - i >= min_num then
			if link_text == nil then
				-- Link text is the same as the page text
				link = string.format("[[%s%s%s]]", page_text[1], num, page_text[2])
			else
				-- Link and page text are different
				link = string.format("[[%s%s%s|%s%s%s]]", page_text[1], num, page_text[2], link_text[1], num, link_text[2])
			end
			prev_links = (curr_num - i <= min_num and "" or "&nbsp;") .. link .. prev_links
		end
	end
	
	return { prev_links, next_links }
end

-- wip
function p.numlinks_2_val(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 page_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

-- Generate a table of previous and next links for numbered pages, with support
-- for up to two numbers. Args are as follows:
-- - Is ordinal: should the values be cardinal numbers (eg, 12edo) or ordinal
--   numbers (eg, 12th-octave)?
-- - Page text: Text is formatted as [pre-text][n][post-text], stored in a table
--   { pre } or { pre, post }. If the link config is for 8 links, then text is
--   formatted as [pre-text][n1][mid-text][n2][post-text], stored in a table
--   { mid, post } or { pre, mid, post }. Pre-text can be omitted since most
--   pages don't have pre-text (12edo, 5L 2s). 
-- - Link text: Same as page text, except this changes the text of the link. If
--   this is not specified, then the page and link text are the same.
-- - Min: The smallest allowed value for a numbered link. Default is 1. There
--   isn't a maximum since these numbers are assumed to be either natural or
--   whole numbers.
function p._numlinks(frame)
	local args = getArgs(frame)
	
	args["Num 1"] = tonumber(args["Num 1"])
	args["Min 1"] = tonumber(args["Min 1"]) or 1
	args["Num 2"] = tonumber(args["Num 2"]) or nil
	args["Min 2"] = tonumber(args["Min 2"]) or nil
	
	
	
	
	-- Create numbered navigation links
	local navigation_links = {}
	if args["Num 2"] == nil then
		navigation_links = p.numlinks_1_val(args)
	else
		navigation_links = p.numlinks_2_val(args)
	end

	return navigation_links
end

function p.tester()
	return p.side_numlinks()
end

return p