Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

local p = {}

--[[
My old code incase the table one for some reason breaks, will need adjusting as it's wrong and not generic but hey ho, it's here if we need it.

local data = mw.loadJsonData( 'Module:RandomTip/data.json' )

local function getTipsCount()
	local tips_count = 0
	for key,value in pairs(data.tips) do 
		tips_count = tips_count + 1
	end	
	return tips_count
end

function p.getRandomDailyTip()
    local seed = os.date("%Y%m%d")
    math.randomseed(tonumber(seed))
    
    local tips_count = getTipsCount()
	local index = math.random(1, tips_count)
   
	return data.tips[index]
end

function p.createTable() 
	local table_index = 0
	local tbl = mw.html.create('table'):addClass("wikitable")
	tbl:tag('tr')
		:tag('th'):wikitext("ID"):done()
		:tag('th'):wikitext("Tip"):done()
	:done()
	for k, v in pairs(data.tips) do
		table_index = table_index + 1
		tbl:tag('tr')
			:tag('td')
				:wikitext(table_index)
			:tag('td')
				:wikitext(v)
	end
	return tostring(tbl)
end--]]

--Makes a seed based on the date so that it always returns the same first random number in sequence which changes every day
local function getDailyRandomNumber(maxNum) 
   local seed = os.date("%Y%m%d")
   math.randomseed(tonumber(seed))
   return math.random(1, maxNum)
end

--Gets page content (kinda self-explanatory imo)
local function getPageContent(page)
	local title = mw.title.new(page)
	if not title then return nil end
	return title:getContent()
end

--Parses the page which contains the table so it only grabs the strings which doesn't include the ID column as it ignores |{number}
local function parseTableContent(content)
	local rows  = {}
	for line in content:gmatch("[^\r\n]+") do
        if line:match("^|%-$") then
            inRow = true
            row = nil
        elseif inRow then
        	if not line:match("^|(%d+)$") then
	            row = line:match("^|(.+)$")
	            if row then
	                table.insert(rows, row)
	                inRow = false
	            end
	    	end
        end
	end
	return rows
end

--Main function to call the local functions and return errors if needs be
function p.main(frame)
	local rows = {}
	local page = frame.args[1]
	local content = getPageContent(page)
	if not content then return 'Page not found' end
	
	local rows = parseTableContent(content)
	if(#rows == 0) then return 'No rows found' end
    
    local index = getDailyRandomNumber(#rows)
	return rows[index]
end

return p