FANDOM


-- This module loads a big hashtable for translating a Dalereckoning year
-- to the name of the year as given to us by Augathra the Mad and Alaundo.
local RoY = {}
--- imported libraries
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
 
local yearNames = mw.loadData( 'Module:Years/data' )
local offset = 701 --The offset needed to convert a calendar year to a sequence number.
 
function RoY._yearName( year )
 
    if yearNames[year + offset] == nil then
        return ''
    else
        return yearNames[year + offset][2]
    end
end
 
function RoY.yearName( frame )
    local args = getArgs(frame)
    local year = tonumber(args[1] or 0)
 
    return RoY._yearName(year)
end
 
function RoY.randomYear()
    math.randomseed(mw.language.new( 'en' ):formatDate('U'))
    local randomYearNum = math.random(-700,1600)
 
    return {randomYearNum, RoY._yearName(randomYearNum) or ''}
 
end
 
function RoY._relatedYear( year )
    local yearsSinceLeap = ((year % 4) + 4) % 4
    local randomYr = RoY.randomYear()[1]
 
    local relatedYr = randomYr - (randomYr % 4) + yearsSinceLeap
    if relatedYr > 1600 then
        relatedYr = relatedYr - 4
    end
 
    return {relatedYr, RoY._yearName(relatedYr) or ''}
end
 
function RoY.RelatedYear( frame )
    local args = getArgs(frame)
    local relatedYear = RoY._relatedYear( args[1] )
 
    return '[['..relatedYear[1]..' DR|'..relatedYear[2]..']]'
end
 
function RoY.yearlinkName( frame )
    local args = getArgs(frame)
    local year = tonumber(args[1] or 0)
    local formattedYear = string.gsub(year,'-','−')..' DR'
 
    local output = '[['..year..' DR|'
    if RoY._yearName(year) == '' then
        output = output..formattedYear..']]'
    else
        output = output..RoY._yearName(year)..', '..formattedYear..']]'
    end
 
    return output
end
 
function RoY.yearsByName( )
    local output = mw.html.create('table')
      :addClass('wikitable'):addClass('sortable')
      :tag('tr')
        :tag('th'):attr('data-sort-type','number'):attr('scope','col'):wikitext('Year'):done()
        :tag('th'):wikitext('Name of Year'):done()
      :done()
 
    local sortable = {}
    for i,v in ipairs(yearNames) do
        sortable[i] = {v[1], v[2]}
    end
 
    table.sort(sortable, function(a,b) return a[2] < b[2] end)
 
    for i,v in ipairs(sortable) do
        output:tag('tr')
          :tag('td'):attr('data-sort-value',tonumber(v[1]))
            :wikitext('[['..v[1]..' DR|'..string.gsub(v[1],'-','−')..' DR]]')
          :done()
          :tag('td'):wikitext(v[2]):done()
        :done()
    end
 
    output:allDone()
 
    return tostring(output)
 
end
 
return RoY
Community content is available under CC-BY-SA unless otherwise noted.