Module:Yesno: Difference between revisions

From The Satanic Wiki
Jump to navigation Jump to search
No edit summary
Tag: Reverted
No edit summary
Tag: Manual revert
 
Line 1: Line 1:
-- <nowiki>
-- Function allowing for consistent treatment of boolean-like wikitext input.
--- Yesno module for processing of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
--
--  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)
return function (val, default)
    value = type(value) == 'string' and lower(value) or value
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
 
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
    local yes = lower(msg('htmlform-yes'):plain())
-- following line.
    local no = lower(msg('htmlform-no'):plain())
val = type(val) == 'string' and val:lower() or val
    local en_yes = lower(msg('htmlform-yes'):inLanguage('en'):plain())
if val == nil then
    local en_no = lower(msg('htmlform-no'):inLanguage('en'):plain())
return nil
 
elseif val == true  
    if value == nil then
or val == 'yes'
        return nil
or val == 'y'
 
or val == 'true'
    elseif value == true
or val == 't'
        or value == yes
or val == 'on'
        or value == en_yes
or tonumber(val) == 1
        or value == 'y'
then
        or value == 'true'
return true
        or value == 't'
elseif val == false
        or value == 'on'
or val == 'no'
        or tonumber(value) == 1
or val == 'n'
    then
or val == 'false'
        return true
or val == 'f'
 
or val == 'off'
    elseif value == false
or tonumber(val) == 0
        or value == no
then
        or value == en_no
return false
        or value == 'n'
else
        or value == 'false'
return default
        or value == 'f'
end
        or value == 'off'
        or tonumber(value) == 0
    then
        return false
 
    else
        return default
    end
end
end
--  </nowiki>

Latest revision as of 23:01, 19 June 2021

Documentation for this module may be created at Module:Yesno/doc

-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.

return function (val, default)
	-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
	-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
	-- following line.
	val = type(val) == 'string' and val:lower() or val
	if val == nil then
		return nil
	elseif val == true 
		or val == 'yes'
		or val == 'y'
		or val == 'true'
		or val == 't'
		or val == 'on'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'n'
		or val == 'false'
		or val == 'f'
		or val == 'off'
		or tonumber(val) == 0
	then
		return false
	else
		return default
	end
end