Module:Yesno: Difference between revisions

From fattwiki
m (1 revision imported)
(copy over from Fandom)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- <nowiki>
-- It works similarly to the template {{yesno}}.
--- 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 (val, default)
local yes = lower(msg('htmlform-yes'):plain())
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
local no = lower(msg('htmlform-no'):plain())
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
local en_yes = lower(msg('htmlform-yes'):inLanguage('en'):plain())
-- following line.
local en_no = lower(msg('htmlform-no'):inLanguage('en'):plain())
val = type(val) == 'string' and val:lower() or val
 
if val == nil then
return function(value, default)
return nil
    value = type(value) == 'string' and lower(value) or value
elseif val == true  
 
or val == 'yes'
    if value == nil then
or val == 'y'
        return nil
or val == 'true'
 
or val == 't'
    elseif value == true
or val == 'on'
        or value == yes
or tonumber(val) == 1
        or value == en_yes
then
        or value == 'y'
return true
        or value == 'true'
elseif val == false
        or value == 't'
or val == 'no'
        or value == 'on'
or val == 'n'
        or value == 'enable'
or val == 'false'
        or tonumber(value) == 1
or val == 'f'
    then
or val == 'off'
        return true
or tonumber(val) == 0
 
then
    elseif value == false
return false
        or value == no
else
        or value == en_no
return default
        or value == 'n'
end
        or value == 'false'
        or value == 'f'
        or value == 'off'
        or value == 'disable'
        or tonumber(value) == 0
    then
        return false
 
    else
        return default
    end
end
end
--  </nowiki>

Latest revision as of 16:18, 12 July 2022

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

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>