en>Mr. Stradivarius |
|
(40 intermediate revisions by 20 users not shown) |
Line 1: |
Line 1: |
| local p = {}
| | -- Function allowing for consistent treatment of boolean-like wikitext input. |
|
| | -- It works similarly to the template {{yesno}}. |
| function p.yesno(frame) | | |
|
| | return function (val, default) |
| -- defaults
| | -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you |
| local retvals = {
| | -- should replace "val:lower()" with "mw.ustring.lower(val)" in the |
| yes = "yes",
| | -- following line. |
| no = "",
| | val = type(val) == 'string' and val:lower() or val |
| ["¬"] = ""
| | if val == nil then |
| }
| | return nil |
|
| | elseif val == true |
| -- Allow arguments to override defaults.
| | or val == 'yes' |
| -- 'any' tracks the presence of any arguments at all.
| | or val == 'y' |
| local args = frame.args
| | or val == 'true' |
| local any = false
| | or val == 't' |
| for k,v in pairs(args) do
| | or val == 'on' |
| any = true
| | or tonumber(val) == 1 |
| retvals[k] = v
| | then |
| end
| | return true |
| -- If there are no arguments, try and get them from the parent frame.
| | elseif val == false |
| if any == false then
| | or val == 'no' |
| local pframe = frame:getParent()
| | or val == 'n' |
| args = pframe.args
| | or val == 'false' |
| for k,v in pairs(args) do
| | or val == 'f' |
| any = true
| | or val == 'off' |
| retvals[k] = v
| | or tonumber(val) == 0 |
| end
| | then |
| end
| | return false |
|
| | else |
| val = args[1]
| | return default |
|
| | end |
| -- 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
| |