Module:Version

Revision as of 15:50, 26 December 2024 by Inno (talk | contribs) (Undo revision 13992 by Inno (talk))

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:
-- 2, the minor version is 21 or more away, or the major version is at least 1 away.
-- 1, the minor version is 1~20 away from the current version.
-- 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 2
	elseif CURRENT_major < major then
		return -1
	elseif CURRENT_minor < minor then
		return -1
	elseif tonumber(CURRENT_minor) > tonumber(minor) + 20 then
		return 2
	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 lang = frame.args[2]
  local current = if_greater_function(version) == 0
  local previ = if_greater_function(version) == 1
  local deprec = if_greater_function(version) == 2
  local trunk = if_greater_function(version) == -1
  local unknown = not version
  local version_b = ""
  if version >= 23 then
  	version_b = "EA"
  elseif version < 23 then
  	version_b = "Beta"
  end
  local bgcolor = "fc6"
  if current then
    bgcolor = "99FF99"
  elseif trunk then
    bgcolor = "BCEBF5"
  elseif previ then
    bgcolor = "ffff99"
  elseif deprec then
  	bgcolor = "ff9999"
  end

  local bordercolor = "f90"
  if current then
    bordercolor = "33FF66"
  elseif trunk then
    bordercolor = "04A0BF"
  elseif previ then
    bordercolor = "ffff66"
  elseif deprec then
  	bordercolor = "ff3366"
  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
  	if lang == "EN" then
        result = result .. "'''''This article pertains to a feature of Elin which is unrelease in stable version.''"
    else
    	result = result .. "'''''この記事は、Elinの未リリースバージョンの機能に関するものです。''"
    end
  else
  	if lang == "EN" then
        result = result .. "'''''Version "
    else
    	result = result .. "'''''バージョン "
    end
    if unknown then
      result = result .. "Unknown"
    else
      result = result .. "".. version_b .."" .. version .. ""
    end
    result = result .. "''': "
    if current then
        if lang == "EN" then
        	result = result .. "This article is up to date for the [[Elin:Changelog|latest stable release]] of ''Elin''."
        else
        	result = result .. "この記事は''Elin''の[[Elin:更新履歴|最新の安定版リリース]]に対応しています。"
        end
    elseif previ then
    	if lang == "EN" then
            result = result .. "This article is behind the [[Elin:Changelog|latest stable release]] of ''Elin'', but maybe close enough to be reliable."
        else
        	result = result .. "この記事は、''Elin'' の[[Elin:更新履歴|最新の安定版リリース]]に遅れをとっていますが、信頼できる範囲にあるかもしれません。"
    	end
    elseif deprec then
     	if lang == "EN" then
            result = result .. "This article is at least 20 minor version or a major version behind the [[Elin:Changelog|latest stable release]] of ''Elin''. Please help update the page."
        else
        	result = result .. "この記事は、''Elin'' の[[Elin:更新履歴|最新の安定版リリース]]に、少なくとも20のマイナーバージョンが遅れています。ページの更新をお願いします。"
    	end   	
    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