Module:Yesno
此模組用於處理類似布林值的 wikitext 輸入。
-- <nowiki>
--- Yesno 模組,用於處理類似布林值的 wikitext 輸入。
--
-- 它的運作方式與 [[wikipedia:Template:Yesno|Yesno 維基百科模板]] 類似。這個模組是用來處理來自模板的 wikitext 輸入,並提供一致的 Lua 介面。
--
-- 維基百科模板所使用的 wikitext 標記僅允許字串參數,如 `"0"`、`"yes"`、`"no"` 等等。由於 Lua 擁有布林值原生類型,Yesno 模組將這些 wikitext 轉換為布林值,以便 Lua 可以進行處理。
--
-- @script yesno
-- @release 穩定版
-- @author [[User:Dessamator|Dessamator]]
-- @attribution [[wikipedia:User:ATDT|ATDT]]
-- @attribution [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]]
-- @attribution [[wikipedia:Special:PageHistory/Module:Yesno|其他維基百科貢獻者]]
-- @see [[wikipedia:Module:Yesno|維基百科原始模組]]
-- @see [[Module:Yesno/testcases|該模組的測試案例]]
-- @param {?boolean|string} value Wikitext 類型的布林值或 Lua 布林值輸入。
-- * 真值的 wikitext 輸入(`'yes'`、`'y'`、`'1'`、`'t'` 或 `'on'`)將返回 `true`。
-- * Lua 中的真值字串(`'true'`)也會返回 `true`。
-- * 假值的 wikitext 輸入(`'no'`、`'n'`、`'0'`、`'f'` 或 `'off'`)將返回 `false`。
-- * Lua 中的假值字串(`'false'`)也會返回 `false`。
-- * 當地化的文字意味著 `'yes'` 或 `'no'` 也會分別評估為 `true` 或 `false`。
-- @param[opt] {?boolean|string} default 當 Yesno 的 `value` 輸入無法識別時,將返回的輸出值。
-- @return {?boolean} 與 `val` 對應的布林值輸出:
-- * 上述字串會產生布林值輸出。
-- * `nil` 值會返回 `nil` 輸出。
-- * 如果無法識別的值返回 `default` 參數。空字串是 Yesno 的一個無法識別的值,並且可以在有預設值的情況下評估為 `true`。
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>