Module:VersionMessageBox: Difference between revisions
From Against the Storm Official Wiki
m modified the styling some more |
Updated with css style classes, and changed version checking to be more robust for major versions only |
||
| Line 1: | Line 1: | ||
---- | --- | ||
-- This module renders the {{Version}} template. | --- This module renders the {{Version}} template. | ||
-- https://hoodedhorse.com/wiki/Against_the_Storm/Template:Version | --- https://hoodedhorse.com/wiki/Against_the_Storm/Template:Version | ||
-- | --- | ||
-- This template #invokes VersionMessageBox.checkVersion(frame), below. | --- This template #invokes VersionMessageBox.checkVersion(frame), below. | ||
-- | --- | ||
-- The template requires one argument provided by wiki page writers using the | --- The template requires one argument provided by wiki page writers using the | ||
-- template, which is the version of the game when the wiki page was last | --- template, which is the version of the game when the wiki page was last | ||
-- updated. There is a second argument provided by the template itself that the | --- updated. There is a second argument provided by the template itself that the | ||
-- page writers canont overwrite, which always refers to the current version of | --- page writers canont overwrite, which always refers to the current version of | ||
-- the game. The current version is identified by the wiki as | --- the game. The current version is identified by the wiki as | ||
-- {{CurrentVersion}}. | --- {{CurrentVersion}}. | ||
-- | --- | ||
-- Depending on the arguments, this module creates a message box that displays | --- Depending on the arguments, this module creates a message box that displays | ||
-- when a reader opens a page that hasn't been reviewed and updated since the | --- when a reader opens a page that hasn't been reviewed and updated since the | ||
-- version changed. The message box tells the reader what version of the game | --- version changed. The message box tells the reader what version of the game | ||
-- the page was udpated with, the current version, and an encouraging note to | --- the page was udpated with, the current version, and an encouraging note to | ||
-- help keep the wiki up to date. | --- help keep the wiki up to date. | ||
-- @module VersionMessageBox | --- @module VersionMessageBox | ||
local VersionMessageBox = {} | local VersionMessageBox = {} | ||
-- | |||
local StyleUtils = require("Module:StyleUtils") | |||
--region Private constants | |||
local PATTERN_CAPTURE_MAJOR_VERSION = "(%d+%.%d+)" | |||
local CSS_VERSION_MESSAGE_BOX = "max-width: 500px; margin-left: auto; padding: 15px; border: 1px solid #8ab3ff; border-radius: 12px; background: #dbe8ff; font-size: 10px" | local CSS_VERSION_MESSAGE_BOX = "max-width: 500px; margin-left: auto; padding: 15px; border: 1px solid #8ab3ff; border-radius: 12px; background: #dbe8ff; font-size: 10px" | ||
--endregion | |||
--region Private methods | |||
-- | --- | ||
-- | --- Renders the message box. | ||
-- | --- | ||
--- Renders a div with the appropriate CSS class for correct display. The div | |||
--- contains the message about the version of the page and the current version | |||
--- of the game. And it includes a statement encouraging people to keep the | |||
--- wiki up to date. | |||
--- | |||
--- @param argLastUpdated string the version of the game when the page was updated | |||
--- @param argCurrentVersion string the current version of the game | |||
--- @return string the HTML markup for a message box | |||
local function renderMessageBox(argLastUpdated, argCurrentVersion) | |||
------------------------------ | local div = mw.html.create('div') | ||
-- Checks whether a message box is necessary. | |||
-- | div:addClass(CSS_CLASS_VERSION_MESSAGE_BOX) | ||
-- If the page is outdated, calls the method to draw the message box and adds | div:cssText(CSS_VERSION_MESSAGE_BOX) | ||
-- the right category to the page. | |||
-- @param frame | messageText = "This page was last updated during version '''" .. argLastUpdated .. "'''." .. | ||
"The game is now in version '''" .. argCurrentVersion .. "'''.<br />" .. | |||
- | "Some information may be out of date. " .. | ||
-- @return | "Help us keep the wiki up to date by comparing this article against the patch notes and updating this page." | ||
-- | |||
div:wikitext("[[File:" .. MESSAGE_BOX_ICON .. "|left|x48px|link=|Out of date]] ") | |||
:tag('div'):cssText("margin-left: 60px") | |||
:wikitext(messageText) | |||
return div | |||
end | |||
--- | |||
--- Extracts just the major version parts of the numbers and returns whether | |||
--- the content is out of date. | |||
--- | |||
---@param versionWhenLastUpdated string the version it was last updated | |||
---@param currentVersion string the current version | |||
---@return boolean true if the last updated is before the current major version | |||
local function isOutOfDate(versionWhenLastUpdated, currentVersion) | |||
local lastUpdated = tonumber(versionWhenLastUpdated:match(PATTERN_CAPTURE_MAJOR_VERSION) or 0) | |||
local current = tonumber(currentVersion:match(PATTERN_CAPTURE_MAJOR_VERSION) or 0) | |||
return current > lastUpdated | |||
end | |||
--endregion | |||
--region Public methods | |||
--- | |||
--- Checks whether a message box is necessary. | |||
--- | |||
--- If the page is outdated, calls the method to draw the message box and adds | |||
--- the right category to the page. | |||
--- | |||
---@param frame table the template's calling context | |||
---@return string wiki markup for a message box, or a blank string if it's up-to-date | |||
function VersionMessageBox.checkVersion(frame) | function VersionMessageBox.checkVersion(frame) | ||
-- extract the arguments we care about from the frame | -- extract the arguments we care about from the frame | ||
local argLastUpdated = frame.args.updated | local argLastUpdated = frame.args.updated | ||
local argCurrentVersion = frame.args.currentVersion | local argCurrentVersion = frame.args.currentVersion | ||
-- validate that there are version values to use | -- validate that there are version values to use | ||
if not argLastUpdated or "" == argLastUpdated then | if not argLastUpdated or "" == argLastUpdated then | ||
| Line 59: | Line 111: | ||
return "Version error: template did not identify current version correctly" | return "Version error: template did not identify current version correctly" | ||
end | end | ||
if isOutOfDate(argLastUpdated, argCurrentVersion) then | |||
local html = renderMessageBox(argLastUpdated, argCurrentVersion) | |||
return tostring(html) | |||
else | |||
-- the page is up to date, nothing else needed | -- the page is up to date, nothing else needed | ||
return "" | return "" | ||
end | end | ||
end | end | ||
--endregion | |||
return VersionMessageBox | return VersionMessageBox | ||
Revision as of 04:43, 24 December 2023
Documentation for this module may be created at Module:VersionMessageBox/doc
---
--- This module renders the {{Version}} template.
--- https://hoodedhorse.com/wiki/Against_the_Storm/Template:Version
---
--- This template #invokes VersionMessageBox.checkVersion(frame), below.
---
--- The template requires one argument provided by wiki page writers using the
--- template, which is the version of the game when the wiki page was last
--- updated. There is a second argument provided by the template itself that the
--- page writers canont overwrite, which always refers to the current version of
--- the game. The current version is identified by the wiki as
--- {{CurrentVersion}}.
---
--- Depending on the arguments, this module creates a message box that displays
--- when a reader opens a page that hasn't been reviewed and updated since the
--- version changed. The message box tells the reader what version of the game
--- the page was udpated with, the current version, and an encouraging note to
--- help keep the wiki up to date.
--- @module VersionMessageBox
local VersionMessageBox = {}
local StyleUtils = require("Module:StyleUtils")
--region Private constants
local PATTERN_CAPTURE_MAJOR_VERSION = "(%d+%.%d+)"
local CSS_VERSION_MESSAGE_BOX = "max-width: 500px; margin-left: auto; padding: 15px; border: 1px solid #8ab3ff; border-radius: 12px; background: #dbe8ff; font-size: 10px"
--endregion
--region Private methods
---
--- Renders the message box.
---
--- Renders a div with the appropriate CSS class for correct display. The div
--- contains the message about the version of the page and the current version
--- of the game. And it includes a statement encouraging people to keep the
--- wiki up to date.
---
--- @param argLastUpdated string the version of the game when the page was updated
--- @param argCurrentVersion string the current version of the game
--- @return string the HTML markup for a message box
local function renderMessageBox(argLastUpdated, argCurrentVersion)
local div = mw.html.create('div')
div:addClass(CSS_CLASS_VERSION_MESSAGE_BOX)
div:cssText(CSS_VERSION_MESSAGE_BOX)
messageText = "This page was last updated during version '''" .. argLastUpdated .. "'''." ..
"The game is now in version '''" .. argCurrentVersion .. "'''.<br />" ..
"Some information may be out of date. " ..
"Help us keep the wiki up to date by comparing this article against the patch notes and updating this page."
div:wikitext("[[File:" .. MESSAGE_BOX_ICON .. "|left|x48px|link=|Out of date]] ")
:tag('div'):cssText("margin-left: 60px")
:wikitext(messageText)
return div
end
---
--- Extracts just the major version parts of the numbers and returns whether
--- the content is out of date.
---
---@param versionWhenLastUpdated string the version it was last updated
---@param currentVersion string the current version
---@return boolean true if the last updated is before the current major version
local function isOutOfDate(versionWhenLastUpdated, currentVersion)
local lastUpdated = tonumber(versionWhenLastUpdated:match(PATTERN_CAPTURE_MAJOR_VERSION) or 0)
local current = tonumber(currentVersion:match(PATTERN_CAPTURE_MAJOR_VERSION) or 0)
return current > lastUpdated
end
--endregion
--region Public methods
---
--- Checks whether a message box is necessary.
---
--- If the page is outdated, calls the method to draw the message box and adds
--- the right category to the page.
---
---@param frame table the template's calling context
---@return string wiki markup for a message box, or a blank string if it's up-to-date
function VersionMessageBox.checkVersion(frame)
-- extract the arguments we care about from the frame
local argLastUpdated = frame.args.updated
local argCurrentVersion = frame.args.currentVersion
-- validate that there are version values to use
if not argLastUpdated or "" == argLastUpdated then
return "Version error: please provide the game version with which you updated this page"
end
if not argCurrentVersion or "" == argCurrentVersion then
return "Version error: template did not identify current version correctly"
end
if isOutOfDate(argLastUpdated, argCurrentVersion) then
local html = renderMessageBox(argLastUpdated, argCurrentVersion)
return tostring(html)
else
-- the page is up to date, nothing else needed
return ""
end
end
--endregion
return VersionMessageBox


