Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Модуль:Yesno: различия между версиями

Материал из Create Wiki
wp>Jack who built the house
(-«x»: решили, что это плохой вариант для true, так как может ассоциироваться как раз с false, при этом, насколько помню, он так нигде и не стал использоваться)
fancw>Joker876
(Created page with "--<pre> -- Function allowing for consistent treatment of boolean-like wikitext input. -- -- Based on <https://en.wikipedia.org/wiki/Module:Yesno> -- see page history there for...")
Строка 1: Строка 1:
--<pre>
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
--
-- Based on <https://en.wikipedia.org/wiki/Module:Yesno>
-- see page history there for contributors
if not _G.mwLogFuncChanged then
local oldLog = mw.log
mw.oldLog = oldLog
local function allToString(...)
local t = { ... }
for i = 1, select('#', ...) do
t[i] = tostring(t[i])
end
return table.concat(t, ' ')
end
function mw.log(...)
return oldLog(getCodeLocation(), allToString(...))
end
function mw.logObject(...)
return oldLog(getCodeLocation(), mw.dumpObject(...))
end
_G.mwLogFuncChanged = true
end
 
 
local list_t = {
    true, 'true', 't', 'tru',
    'yes', 'y',
    'on',
    'valid',
    '1', 1
}
 
local list_f = {
    false, 'false', 'f',
    'no', 'n',
    'not',
    'off',
    '0', 0
}


return function (val, default)
return function (val, default, nil_default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
    -- 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
    -- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
    -- following line.
val = type(val) == 'string' and val:lower() or val
 
if val == nil then
    if not nil_default and default then nil_default = default end
return nil
    val = type(val) == 'string' and val:lower() or val
elseif val == true  
 
or val == 'yes'
    local function contains(array, value)
or val == 'y'
        for i=1,#array do
or val == 'true'
            if array[i] == value then return true end
or val == 't'
        end
or val == 'да'
        return false
or val == 'д'
    end
         or val == '+'
 
or tonumber(val) == 1
    if val == nil then
then
         if nil_default then return nil_default else return nil end
return true
    elseif contains(list_t, val) then return true
elseif val == false
    elseif contains(list_f, val) then return false
or val == 'no'
    else return default
or val == 'n'
    end
or val == 'false'
or val == 'f'
or val == 'нет'
or val == 'н'
or val == '-'
or tonumber(val) == 0
then
return false
else
return default
end
end
end

Версия от 13:53, 14 апреля 2021

Ошибка Lua на строке 6: variable 'mwLogFuncChanged' is not declared.


Module:Yesno provides a consistent interface for processing boolean or boolean-style string input. While Lua allows the true and false boolean values, wikicode templates can only express boolean values through strings such as "yes", "no", etc. This module processes these kinds of strings and turns them into boolean input for Lua to process. It also returns nil values as nil, to allow for distinctions between nil and false. The module also accepts other Lua structures as input, i.e. booleans, numbers, tables, and functions. If it is passed input that it does not recognise as boolean or nil, it is possible to specify a default value to return.


--<pre>
-- Function allowing for consistent treatment of boolean-like wikitext input.
--
-- Based on <https://en.wikipedia.org/wiki/Module:Yesno>
-- see page history there for contributors
if not _G.mwLogFuncChanged then
	local oldLog = mw.log
	mw.oldLog = oldLog
	
	local function allToString(...)
		local t = { ... }
		for i = 1, select('#', ...) do
			t[i] = tostring(t[i])
		end
		return table.concat(t, ' ')
	end
	
	function mw.log(...)
		return oldLog(getCodeLocation(), allToString(...))
	end
	function mw.logObject(...)
		return oldLog(getCodeLocation(), mw.dumpObject(...))
	end
	_G.mwLogFuncChanged = true
end


local list_t = {
    true, 'true', 't', 'tru',
    'yes', 'y',
    'on',
    'valid',
    '1', 1
}

local list_f = {
    false, 'false', 'f',
    'no', 'n',
    'not',
    'off',
    '0', 0
}

return function (val, default, nil_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.

    if not nil_default and default then nil_default = default end
    val = type(val) == 'string' and val:lower() or val

    local function contains(array, value)
        for i=1,#array do
            if array[i] == value then return true end
        end
        return false
    end

    if val == nil then
        if nil_default then return nil_default else return nil end
    elseif contains(list_t, val) then return true
    elseif contains(list_f, val) then return false
    else return default
    end
end
Сайт использует Cookie для нормальной работы