Module:Version

From CrawlWiki
Jump to: navigation, search

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

-- Current stable version. Increment this when a new version is released.
local STABLE = 31
local RECENT = 30

local p = {}

-- Tries to parse a version number
-- returns either a version number, "trunk", or nil (meaning unknown)
local function parse_version(version)
  if type(version) == "number" or version == "trunk" then
    return version
  end
  local num = tonumber(version)
  if num then
    -- convert 0.17 to 17
    if num < 1 then
      num = 100*num
    end
    if num > STABLE then
      return "trunk"
    else
      return num
    end
  end
  return nil
end

function p.version_tag(frame)
  local version = parse_version(frame.args[1])
  local current = version == STABLE
  local previ = version == RECENT
  local trunk = version == "trunk"
  local unknown = not version

  local bgcolor = "fc6"
  if current then
    bgcolor = "99FF99"
  elseif trunk then
    bgcolor = "BCEBF5"
  elseif previ then
    bgcolor = "e0fae0"
  end

  local bordercolor = "f90"
  if current then
    bordercolor = "33FF66"
  elseif trunk then
    bordercolor = "04A0BF"
  elseif previ then
    bordercolor = "33FF66"
  end

  local result = [[<div style="border: 1px solid #%s; background-color: #%s; border-left: 15px solid #%s; margin-bottom: 20px; width: 100%%; padding: 4px 10px; line-height: 1.1em; width: auto;">]]
  result = result:format(bordercolor, bgcolor, bordercolor)
  if trunk then
    result = result .. "'''''[[Trunk]]-only''': This article pertains to a feature of Crawl which is being tested. It will likely change before the next release, and may even be removed entirely.''"
  else
    result = result .. "'''''Version "
    if unknown then
      result = result .. "Unknown"
    else
      result = result .. "[[0." .. version .. "]]"
    end
    result = result .. "''': "
    if current then
      result = result .. "This article is up to date for the [[0." .. STABLE .. "|latest stable release]] of ''Dungeon Crawl Stone Soup''."
    else
      result = result .. "This article '''may not be''' up to date for the [[0." .. STABLE .. "|latest stable release]] of Crawl.''"
    end
  end
  result = result .. "</div>"

  result = result .. "\n[[Category:"
  if trunk then
    result = result .. "Trunk"
  elseif unknown then
    result = result .. "Unknown"
  else
    result = result .. "0." .. version
  end
  result = result .. " articles]]"

  return result
end

function p.version_list(frame)
  local prev_versions = {}
  for version = STABLE - 1, 1, -1 do
    table.insert(prev_versions, "[[0." .. version .. "]]")
  end

  local result = [=[{| cellspacing="0" cellpadding="0" style="margin:0em 0em 1em 0em; width:100%; background-color:white"
| style="width:50%; vertical-align:top; border:1px solid #CC6600; background-color:#FF9966;" |
<div style="border-bottom:0px solid #CC6600; background-color:#FF6633; padding:0.2em 0.5em 0.2em 0.5em; font-size:110%; font-weight:bold;">[[:Category:Crawl Versions|Versions]]</div>
<div style="border-bottom:0px solid #CC6600; padding:0.4em 1em 1em 1em;">
The Crawl Wiki is kept up to date with the latest stable release: [[0.]=]
  result = result .. STABLE .. "]]\n"
  result = result .. "* Previous releases: " .. table.concat(prev_versions, " | ") .. "\n"
  result = result .. "* In [[trunk]] development: [[0." .. STABLE + 1 .. "]]</div>\n|}"
  return result
end

return p