Module talk:Ancient Olympiads
Appearance
- @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