Modul:Yesno: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
edit inaccurate comment
change to a simpler Lua-only version
Linje 1: Linje 1:
local p = {}
-- This is a simplified, Lua-only replacement for the template {{yesno}}. It provides a consistent
 
-- interface for users entering boolean or boolean-style input.
function p.yesno(frame)
return function (val, default)
 
     val = type(val) == 'string' and mw.ustring.lower(val) or val -- put in lower case
     -- defaults
     if not val or val == 'no' or val == 'n' or val == 'false' or tonumber(val) == 0 then
     local retvals = {
         return false
        yes  = "yes",
    elseif val == true or val == 'yes' or val == 'y' or val == 'true' or tonumber(val) == 1 then
        no   = "",
         return true
        ["¬"] = ""
    elseif default ~= nil then
    }
         return default
 
    -- Allow arguments to override defaults.
    local args;
    if frame == mw.getCurrentFrame() then
         -- We're being called via #invoke. If the invoking template passed any args, use
        -- them. Otherwise, use the args that were passed into the template.
        args = frame:getParent().args;
         for k, v in pairs(frame.args) do
            args = frame.args;
            break
         end
     else
     else
        -- We're being called from another module or from the debug console, so assume
         return true
        -- the args are passed in directly.
        args = frame;
    end
   
    for k,v in pairs(args) do
        retvals[k] = v
    end
 
    val = args[1]
 
    -- First deal with the case if val is nil, then deal with other cases.
    if val == nil then
         return retvals['¬']
    end
 
    val = val:lower()          -- Make lowercase.
    val = val:match'^%s*(.*%S)' or ''  -- Trim whitespace.
 
    if val == '' then
        return retvals['blank'] or retvals['no']
    elseif val == 'n' or val == 'no'  or tonumber(val) == 0 then
        return retvals['no']
    elseif val == 'y' or val == 'yes' or tonumber(val) == 1 then
        return retvals['yes']
    elseif val == '¬' then
        return retvals['¬']
    else
        return retvals['def'] or retvals['yes']
     end
     end
end
end
return p

Sideversjonen fra 20. sep. 2013 kl. 12:23

Denne modulen tilbyr et konsekvent grensesnitt for å behandle boolske inndata, inkludert boolske tekststrengrepresentasjoner. Mens Lua bruker true og false som boolske verdier kan maler i wikikode bare representere boolske verdier i form av tekststrenger som "ja", "nei" etc. Denne modulen prosesserer slike strenger og konverterer dem til boolske verdier som kan brukes av Lua. Den returnerer også verdien nil som nil slik at man kan skille mellom nil og false. Modulen aksepterer også andre Lua-strukturer som inndata, f.eks. bool, tall, tabeller og funksjoner. Det er mulig å spesifisere en defaultverdi som skal returneres dersom modulen får inndata som den ikke gjenkjenner som en boolsk verdi eller nil.

Syntaks

yesno(value, default)

value er verdien som skal bli testet. Varianter av boolske verdier evalueres til enten true eller false, mens nil alltid evalueres til nil. Andre verdier evalueres til default.

Bruk

Først må du laste modulen. Den kan bare lastes fra andre Lua-moduler, ikke fra vanlige wikisider. Fra vanlige wikisider kan du bruke malen {{yesno}}.

local yesno = require('Module:Yesno')

Noen inndataverdier returnerer alltid true, mens andre alltid returnerer false. nil returnerer alltid nil.

-- Disse skal alltid returnere true:
yesno('ja')
yesno('j')
yesno('yes')
yesno('y')
yesno('true')
yesno('1')
yesno(1)
yesno(true)

-- Disse skal alltid returnere false:
yesno('nei')
yesno('no')
yesno('n')
yesno('false')
yesno('0')
yesno(0)
yesno(false)

-- En nil-verdi returnerer alltid nil:
yesno(nil)

Tekstverdier konverteres til små bokstaver før de blir sammenliknet:

-- Disse skal alltid returnere true:
yesno('JA')
yesno('Yes')
yesno('YES')
yesno('yEs')
yesno('Y')
yesno('tRuE')

-- Disse skal alltid returnere false:
yesno('nEi')
yesno('No')
yesno('NO')
yesno('nO')
yesno('N')
yesno('fALsE')

Du kan angi en defaultverdi som yesno returnerer dersom den får andre inndata enn de som er nevnt over. Dersom du ikke angir en defaultverdi returnerer modulen nil for slike verdier.

-- Disse returnerer nil:
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'This is a function.' end)

-- Disse returnerer true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'This is a function.' end, true)

-- Disse returnerer "bar":
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'This is a function.' end, 'bar')

Legg merke til at en tom streng oppfører seg på samme måte:

yesno('')        -- Returnerer nil.
yesno('', true)  -- Returnerer true.
yesno('', 'bar') -- Returnerer "bar".

Legg merke til: Selv om en tom streng vanligvis blir evaluert til false i wikitekst og til true i Lua evalueres den til nil av denne modulen.


-- This is a simplified, Lua-only replacement for the template {{yesno}}. It provides a consistent
-- interface for users entering boolean or boolean-style input.
return function (val, default)
    val = type(val) == 'string' and mw.ustring.lower(val) or val -- put in lower case
    if not val or val == 'no' or val == 'n' or val == 'false' or tonumber(val) == 0 then
        return false
    elseif val == true or val == 'yes' or val == 'y' or val == 'true' or tonumber(val) == 1 then
        return true
    elseif default ~= nil then
        return default
    else
        return true
    end
end