Module:URL to diff: Difference between revisions
Appearance
Content deleted Content added
finish the encoding function |
on second thoughts, don't try and validate the URL parameters; MediaWiki already does this when it parses the URL, and we don't really need to duplicate the functionality |
||
Line 4: | Line 4: | ||
local p = {} |
local p = {} |
||
local validDiffValues = { |
|||
cur = true, |
|||
prev = true, |
|||
['next'] = true |
|||
} |
|||
local function validateId(s) |
|||
local id = tonumber(s) |
|||
if id and id > 0 then |
|||
return id |
|||
else |
|||
return nil |
|||
end |
|||
end |
|||
local function validateDiffParam(s) |
|||
if not s then |
|||
return nil |
|||
end |
|||
if validDiffValues[s] then |
|||
return s |
|||
else |
|||
return validateId(s) |
|||
end |
|||
end |
|||
local function decodeUrl(url) |
local function decodeUrl(url) |
||
Line 40: | Line 14: | ||
end |
end |
||
local data = {} |
local data = {} |
||
⚫ | |||
data.title = url.query.title and mw.uri.decode(url.query.title, 'WIKI') |
data.title = url.query.title and mw.uri.decode(url.query.title, 'WIKI') |
||
data. |
data.diff = url.query.diff |
||
⚫ | |||
data.diffonly = url.query.diffonly |
data.diffonly = url.query.diffonly |
||
return data |
return data |
Revision as of 16:23, 1 January 2015
This module implements {{URL to diff}}. Please see the template page for documentation.
-- This module converts Wikipedia diff URLs to the {{diff}} template format.
local newBuffer = require('Module:OutputBuffer')
local p = {}
local function decodeUrl(url)
if type(url) ~= 'string' then
return nil
end
url = mw.uri.new(url)
if not url or url.host ~= 'en.wikipedia.org' then
return nil
end
local data = {}
data.title = url.query.title and mw.uri.decode(url.query.title, 'WIKI')
data.diff = url.query.diff
data.oldid = url.query.oldid
data.diffonly = url.query.diffonly
return data
end
local function encodeDiffTemplate(data)
if not data.title and not data.diff and not data.oldid then
return nil
end
local isNamed = false -- Track whether we need to use named parameters
for k, v in pairs(data) do
if string.find(v, '=') then
isNamed = true
break
end
end
local getBuffer, print, printf = newBuffer()
print('diff')
printf('%s%s', isNamed and 'page=' or '', data.title or '')
printf('%s%s', isNamed and 'diff=' or '', data.diff or '')
printf('%s%s', isNamed and 'oldid=' or '', data.oldid or '')
if data.label then
printf('%s%s', isNamed and 'label=' or '', data.label)
end
if data.diffonly then
printf('diffonly=%s', data.diffonly)
end
local ret = getBuffer('|')
ret = '{{' .. ret .. '}}'
return ret
end
function p._url(args)
local data = decodeUrl(args.url)
if data then
data.label = args.label
return encodeDiffTemplate(data)
else
return nil
end
end
function p.url(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Make diff',
})
return p._url(args)
end
return p