Module:VersionMessageBox: Difference between revisions
From Against the Storm Official Wiki
(Updated with css style classes, and changed version checking to be more robust for major versions only) |
(Forgot to update the rendering) |
||
Line 51: | Line 51: | ||
local function renderMessageBox(argLastUpdated, argCurrentVersion) | local function renderMessageBox(argLastUpdated, argCurrentVersion) | ||
messageText = "This page was last updated during version " .. | |||
StyleUtils.BOLD .. argLastUpdated .. StyleUtils.BOLD .. ". " .. | |||
"The game is now in version " .. | |||
StyleUtils.BOLD .. argCurrentVersion .. StyleUtils.BOLD .. "." .. | |||
StyleUtils.BR .. | |||
messageText = "This page was last updated during version | |||
"The game is now in version | |||
"Some information may be out of date. " .. | "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." | "Help us keep the wiki up to date by comparing this article against the patch notes and updating this page." | ||
div | local div = mw.html.create("div") | ||
div:addClass(StyleUtils.CLASS_VERSION_MESSAGE_BOX) | |||
:cssText(CSS_VERSION_MESSAGE_BOX) | |||
:newline() | |||
div:tag("p"):wikitext(messageText) | |||
:done():newline() | |||
:done() | |||
return div | return div |
Revision as of 04:50, 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) messageText = "This page was last updated during version " .. StyleUtils.BOLD .. argLastUpdated .. StyleUtils.BOLD .. ". " .. "The game is now in version " .. StyleUtils.BOLD .. argCurrentVersion .. StyleUtils.BOLD .. "." .. StyleUtils.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." local div = mw.html.create("div") div:addClass(StyleUtils.CLASS_VERSION_MESSAGE_BOX) :cssText(CSS_VERSION_MESSAGE_BOX) :newline() div:tag("p"):wikitext(messageText) :done():newline() :done() 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