Jump to content

Module talk:Ancient Olympiads

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Hyphantes (talk | contribs) at 11:55, 19 April 2015 (New). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
@Mr. Stradivarius: I have edited the module, but get an error in line 62 that won't let me save it. Here is what I have in mind:
 
-- This module implements {{Ancient Olympiads}}. It converts a year in the Gregorian
-- calendar to the equivalent year of the ancient Greek era organized by Olympiads.

local data = mw.loadData( 'Module:Ancient Olympiads/data' )
local lang = mw.language.getContentLanguage()

local p = {}

function p._main( inputYear )
	-- Convert the input to an integer if possible. Return "N/A" if the input could
	-- not be converted, or if the converted input is too big or too small.
	inputYear = tonumber( inputYear )
	if not inputYear or inputYear > tonumber( lang:formatDate( 'Y' ) ) then
		return "''N/A''"
	end

	-- Find the length of the data.
	-- We need the length of the data so that we can loop through it backwards.
	-- Normally we can get the length of tables with the # operator, but this
	-- doesn't work with mw.loadData, as mw.loadData uses a metatable, and the
	-- # operator doesn't work for tables that use metatables.
		-- What do you mean with length of table? How many entries? numberOl, year, winner = 3, adding note would be 4 ?
	local dataLength = 0
	for i, t in ipairs( data ) do
		dataLength = i
	end

	-- Find the year in the data page and display the output.
	for i = dataLength, 1, -1 do
		local t = data[i]
		if inputYear >= t.year then
            -- Get data values from the data page.
            local numberOl = t.numberOl
            local winner = t.winner
            local inbetweenYear = inputYear - dataYear
            local note = t.note
				if inputYear == t.year then
					-- year of the Olympiad, test with = p._main( -496 )
					-- The specification 'Winner of the Stadtion race' could also be done with a <ref>note</note>, but I like my current solution.
				return string.format(
					'%s, [[Olympiad]] ([[, %s,|victor]][[Winner of the Stadion race|)¹]]',
					t.numberOl, t.winner
				)
				end
        		elseif inputYear > t.year then
                -- Years 2-4 of the Olympiad, test with = p._main( -495 )  etc.
                -- in the following string the comma after [[Olympiad]] should be actually a comma and not a command.
                return string.format(
                	'%s, [[Olympiad]], year %d',
                    t.numberOl, inbetweenYear + 1
                )
				end
				if inputYear < t.year then
				-- Our input year was less than the year of the first Olympiad.
				return string.format(
					'%d before the [[776 BC|1st]] [[Olympiad]].',
				inputYear
				)
				end
		end
	end
end

	-- the previous line seems to have an error.
function p.main( frame )
	-- If you only want to run this module from another Lua module, you can get
	-- rid of this function entirely. This function is only used if you want to
	-- run this individual module from a template.
	local args = require( 'Module:Arguments' ).getArgs( frame, {
		parentOnly = true
	} )
	return p._main( args[ 1 ] )
end

return p

  

--Hyphantes (talk) 11:54, 19 April 2015 (UTC)[reply]