Module:Version

Revision as of 13:36, 25 December 2024 by Inno (talk | contribs)

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

-- Current stable version. Increment this when a new version is released.
-- The version of Elin is made of <major version>.<minor version>
local CURRENT = 23.67
local _, _, CURRENT_major, CURRENT_minor = string.find( CURRENT, "(%d+)%.(%d+)" )
local p = {}

-- This function assume the input is in the form of <major version>.<minor version>, but it doesn't give an error if minor version doesn't exist.
-- Return:
-- 1, the current version is greater; 0, the versions are the same
-- -1, the input version is greater
local function if_greater_function(test_version)
	_, _, major, minor = string.find( test_version, "(%d+)%.(%d+)" )
	
	if CURRENT_major > major then
		return 1
	elseif CURRENT_major < major then
		return -1
	elseif CURRENT_minor > minor then
		return 1
	elseif CURRENT_minor < minor then
		return -1
	else
		return 0
	end
end	
-- 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
      return num
  end
  return nil
end

function p.version_tag(frame)
  local version = parse_version(frame.args[1])
  local current = if_greater_function(version) == 0
  local previ = if_greater_function(version) == 1
  local trunk = if_greater_function(version) == -1
  local unknown = not version
  local version_b = ""
  if version >= 23 then
  	version_b = "EA"
  elseif version <= 22 then
  	version_b = "Beta"
  end
  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 .. "'''''This article pertains to a feature of Elin which is unrelease in stable version.''"
  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 [[Elin:Changelog|latest stable release]] of ''Elin''."
    else
      result = result .. "This article '''may not be''' up to date for the [[Elin:Changelog|latest stable release]] of Elin.''"
    end
  end
  result = result .. "</div>"
  -- The next part is used to add a category, we don't do that just yet.
  --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