Modul:Yesno: Forskjell mellom sideversjoner

Fra Wikisida.no
Hopp til navigering Hopp til søk
(get arguments from the parent frame if the current frame doesn't have any)
m (Én sideversjon ble importert)
 
(39 mellomliggende versjoner av 14 brukere er ikke vist)
Linje 1: Linje 1:
-- Function allowing for consistent treatment of boolean-like wikitext input.
local p = {}
-- It works similarly to the template {{yesno}}.

function p.yesno(frame)
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- defaults
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
local retvals = {
-- following line.
yes = "yes",
val = type(val) == 'string' and val:lower() or val
no = "",
if val == nil then
["¬"] = ""
return nil
}
elseif val == true
or val == 'yes'
-- Allow arguments to override defaults.
or val == 'y'
-- 'any' tracks the presence of any arguments at all.
or val == 'true'
local args = frame.args
or tonumber(val) == 1
local any = false
then
for k,v in pairs(args) do
any = true
return true
elseif val == false
retvals[k] = v
or val == 'no'
end
or val == 'n'
-- If there are no arguments, try and get them from the parent frame.
if any == false then
or val == 'false'
or tonumber(val) == 0
local pframe = frame:getParent()
then
args = pframe.args
return false
for k,v in pairs(args) do
else
any = true
return default
retvals[k] = v
end
end
end
val = args[1]
-- According to the template docs, the input should be considered nil
-- only when no params were provided. If any params at all were present,
-- the value must be considered blank. A bit weird, if you ask me.
if (val == nil and not any) or val == '¬' then
return retvals['¬']
end
val = (val or ''):lower() -- Coerce to blank if nil; make lowercase.
val = val:match'^%s*(.*%S)' or '' -- Trim whitespace.
if val == '' then
return retvals['blank'] ~= nil and retvals['blank'] or retvals['no']
elseif val == 'n' or val == 'no' or val == '0' then
return retvals['no']
elseif val == 'y' or val == 'yes' or val == '1' or retvals['def'] == nil then
return retvals['yes']
else
return retvals['def']
end
end
end
return p

Siste sideversjon per 5. feb. 2025 kl. 22:33

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[rediger kilde]

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[rediger kilde]

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.


-- 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 tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'n'
		or val == 'false'
		or tonumber(val) == 0
	then
		return false
	else
		return default
	end
end