-- <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
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())
return function(value, default)
value = type(value) == 'string' and lower(value) or value
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 value == 'enable'
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 value == 'disable'
or tonumber(value) == 0
then
return false
else
return default
end
end
-- </nowiki>