Module:Yesno: Difference between revisions
Jump to navigation
Jump to search
(Created page with "-- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki...") |
No edit summary Tag: Reverted |
||
Line 1: | Line 1: | ||
-- | -- <nowiki> | ||
-- It works similarly to the template {{ | --- Yesno module for processing of boolean-like wikitext input. | ||
-- | |||
-- It works similarly to the [[wikipedia:Template:Yesno|Yesno Wikipedia | |||
-- template]]. This module is a consistent Lua interface for wikitext | |||
-- input from templates. | |||
-- | |||
-- Wikitext markup used by MediaWiki templates only permit | |||
-- string parameters like `"0"`, `"yes"`, `"no"` etc. As Lua | |||
-- has a boolean primitive type, Yesno converts this | |||
-- wikitext into boolean output for Lua to process. | |||
-- | |||
-- @script yesno | |||
-- @release stable | |||
-- @author [[User:Dessamator|Dessamator]] | |||
-- @attribution [[wikipedia:User:ATDT|ATDT]] | |||
-- @attribution [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]] | |||
-- @attribution [[wikipedia:Special:PageHistory/Module:Yesno|Other Wikipedia contributors]] | |||
-- @see [[wikipedia:Module:Yesno|Original module on | |||
-- Wikipedia]] | |||
-- @see [[Module:Yesno/testcases|Test cases for this | |||
-- module]] | |||
-- @param {?boolean|string} value Wikitext boolean-style | |||
-- or Lua boolean input. | |||
-- * Truthy wikitext input (`'yes'`, `'y'`, `'1'`, | |||
-- `'t'` or `'on'`) produces `true` as output. | |||
-- * The string representations of Lua's true | |||
-- boolean value (`'true'`) also produces `true`. | |||
-- * Falsy wikitext input (`'no'`, `'n'`, `'0'`, | |||
-- `'f'` or `'off'`) produces `false` as output. | |||
-- * The string representation of Lua's false | |||
-- boolean value (`'false'`) also produces `false`. | |||
-- * Localised text meaning `'yes'` or `'no'` also | |||
-- evaluate to `true` or `false` respectively. | |||
-- @param[opt] {?boolean|string} default Output to return if | |||
-- the Yesno `value` input is unrecognised. | |||
-- @return {?boolean} Boolean output corresponding to | |||
-- `val`: | |||
-- * The strings documented above produce a | |||
-- boolean value. | |||
-- * A `nil` value produces an output of `nil`. | |||
-- As this is falsy, additional logic may be needed | |||
-- to treat missing template parameters as truthy. | |||
-- * Unrecognised values return the `default` | |||
-- parameter. Blank strings are a key example | |||
-- of Yesno's unrecognised values and can evaluate | |||
-- to `true` if there is a default value. | |||
local lower = mw.ustring.lower | |||
local msg = mw.message.new | |||
return function ( | return function(value, default) | ||
value = type(value) == 'string' and lower(value) or value | |||
local yes = lower(msg('htmlform-yes'):plain()) | |||
local no = lower(msg('htmlform-no'):plain()) | |||
local en_yes = lower(msg('htmlform-yes'):inLanguage('en'):plain()) | |||
local en_no = lower(msg('htmlform-no'):inLanguage('en'):plain()) | |||
if value == nil then | |||
return nil | |||
elseif value == true | |||
or value == yes | |||
or value == en_yes | |||
or value == 'y' | |||
or value == 'true' | |||
or value == 't' | |||
or value == 'on' | |||
or tonumber(value) == 1 | |||
then | |||
return true | |||
elseif value == false | |||
or value == no | |||
or value == en_no | |||
or value == 'n' | |||
or value == 'false' | |||
or value == 'f' | |||
or value == 'off' | |||
or tonumber(value) == 0 | |||
then | |||
return false | |||
else | |||
return default | |||
end | |||
end | end | ||
-- </nowiki> |
Revision as of 02:28, 30 April 2021
Documentation for this module may be created at Module:Yesno/doc
-- <nowiki> --- Yesno module for processing of boolean-like wikitext input. -- -- It works similarly to the [[wikipedia:Template:Yesno|Yesno Wikipedia -- template]]. This module is a consistent Lua interface for wikitext -- input from templates. -- -- Wikitext markup used by MediaWiki templates only permit -- string parameters like `"0"`, `"yes"`, `"no"` etc. As Lua -- has a boolean primitive type, Yesno converts this -- wikitext into boolean output for Lua to process. -- -- @script yesno -- @release stable -- @author [[User:Dessamator|Dessamator]] -- @attribution [[wikipedia:User:ATDT|ATDT]] -- @attribution [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]] -- @attribution [[wikipedia:Special:PageHistory/Module:Yesno|Other Wikipedia contributors]] -- @see [[wikipedia:Module:Yesno|Original module on -- Wikipedia]] -- @see [[Module:Yesno/testcases|Test cases for this -- module]] -- @param {?boolean|string} value Wikitext boolean-style -- or Lua boolean input. -- * Truthy wikitext input (`'yes'`, `'y'`, `'1'`, -- `'t'` or `'on'`) produces `true` as output. -- * The string representations of Lua's true -- boolean value (`'true'`) also produces `true`. -- * Falsy wikitext input (`'no'`, `'n'`, `'0'`, -- `'f'` or `'off'`) produces `false` as output. -- * The string representation of Lua's false -- boolean value (`'false'`) also produces `false`. -- * Localised text meaning `'yes'` or `'no'` also -- evaluate to `true` or `false` respectively. -- @param[opt] {?boolean|string} default Output to return if -- the Yesno `value` input is unrecognised. -- @return {?boolean} Boolean output corresponding to -- `val`: -- * The strings documented above produce a -- boolean value. -- * A `nil` value produces an output of `nil`. -- As this is falsy, additional logic may be needed -- to treat missing template parameters as truthy. -- * Unrecognised values return the `default` -- parameter. Blank strings are a key example -- of Yesno's unrecognised values and can evaluate -- to `true` if there is a default value. local lower = mw.ustring.lower local msg = mw.message.new return function(value, default) value = type(value) == 'string' and lower(value) or value local yes = lower(msg('htmlform-yes'):plain()) local no = lower(msg('htmlform-no'):plain()) local en_yes = lower(msg('htmlform-yes'):inLanguage('en'):plain()) local en_no = lower(msg('htmlform-no'):inLanguage('en'):plain()) if value == nil then return nil elseif value == true or value == yes or value == en_yes or value == 'y' or value == 'true' or value == 't' or value == 'on' or tonumber(value) == 1 then return true elseif value == false or value == no or value == en_no or value == 'n' or value == 'false' or value == 'f' or value == 'off' or tonumber(value) == 0 then return false else return default end end -- </nowiki>