Module:Submit an edit request: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
meta>Mr. Stradivarius
add Lua link function
Ookami (talk | contribs)
m 24 revisions imported
 
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
-- This module implements {{Submit an edit request}}.
-- This module implements {{Submit an edit request}}.


local cfg = {}
local CONFIG_MODULE = 'Module:Submit an edit request/config'
 
cfg['preload-template'] = 'Template:Submit an edit request/preload'
cfg['preload-title-text'] = '$1 edit request on $2'
cfg['preload-title-date-format'] = 'j F Y'
 
cfg['semi-editintro'] = 'Template:Edit semi-protected/editintro'
cfg['semi-request-template'] = 'edit semi-protected'
cfg['semi-protectionlevel'] = 'Semi-protected'
 
cfg['template-editintro'] = 'Template:Edit template-protected/editintro'
cfg['template-request-template'] = 'edit template-protected'
cfg['template-protectionlevel'] = 'Template-protected'
 
cfg['full-editintro'] = 'Template:Edit protected/editintro'
cfg['full-request-template'] = 'edit protected'
cfg['full-protectionlevel'] = 'Protected'


-- Load necessary modules
local mRedirect = require('Module:Redirect')
local mRedirect = require('Module:Redirect')
local cfg = mw.loadData(CONFIG_MODULE)
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local lang = mw.language.getContentLanguage()


local p = {}
local p = {}
local validLevels = {
semi = 'semi',
extended = 'extended',
template = 'template',
full = 'full',
interface = 'interface'
}


local function message(key, ...)
local function message(key, ...)
Line 31: Line 27:
return mw.message.newRawMessage(msg):params(params):plain()
return mw.message.newRawMessage(msg):params(params):plain()
end
end
end
local function isTranscludedOnMainPage(titleObj)
local mainPage = message('main-page')
for i, source in ipairs(titleObj.cascadingProtection.sources) do
if source == mainPage then
return true
end
end
return false
end
local function validateLevel(level)
return level and validLevels[level] or 'full'
end
local function getLevelInfo(level, field)
return cfg.protectionLevels[level][field]
end
local function resolveRedirect(page)
return mRedirect.luaMain(page)
end
local function isProtected(page)
local action = mw.title.new(page).exists and 'edit' or 'create'
return effectiveProtectionLevel(action, page) ~= '*'
end
end


function p.makeRequestUrl(level, titleObj)
function p.makeRequestUrl(level, titleObj)
titleObj = titleObj or mw.title.getCurrentTitle()
titleObj = titleObj or mw.title.getCurrentTitle()
if isTranscludedOnMainPage(titleObj) then
do
return tostring(mw.uri.fullUrl(message('main-page-request-page')))
local levels = {
semi = true,
template = true,
full = true
}
level = levels[level] and level or 'full'
end
end
local talkPageName = resolveRedirect(titleObj.talkPageTitle.prefixedText)
local editintro, requestTemplate, levelText
if isProtected(talkPageName) then
do
return tostring(mw.uri.fullUrl(message('protected-talk-page-request-page')))
local messages = {
semi = {
editintro = 'semi-editintro',
requestTemplate = 'semi-request-template',
levelText = 'semi-protectionlevel'
},
template = {
editintro = 'template-editintro',
requestTemplate = 'template-request-template',
levelText = 'template-protectionlevel'
},
full = {
editintro = 'full-editintro',
requestTemplate = 'full-request-template',
levelText = 'full-protectionlevel'
}
}
local levelMessages = messages[level]
editintro = message(levelMessages.editintro)
requestTemplate = message(levelMessages.requestTemplate)
levelText = message(levelMessages.levelText)
end
end
level = validateLevel(level)
local preloadtitle, talkpagename
local url = mw.uri.fullUrl(talkPageName, {
do
action = 'edit',
-- Get the date text.
editintro = getLevelInfo(level, 'editintro'),
local dateFormat = message('preload-title-date-format')
preload = message('preload-template'),
local lang = mw.language.getContentLanguage()
preloadtitle = message(
local date = lang:formatDate(dateFormat)
'preload-title-text',
getLevelInfo(level, 'levelText'),
-- Get the talk page name, and resolve it if it is a redirect.
lang:formatDate(message('preload-title-date-format'))
local namespace = titleObj.namespace
),
talkpagename = mw.site.namespaces[namespace].talk.name
section = 'new'
.. ':'
})
..  titleObj.text
url = tostring(url)
talkpagename = mRedirect.main{talkpagename}
 
preloadtitle = message('preload-title-text', levelText, date)
-- Add the preload parameters. @TODO: merge this into the mw.uri.fullUrl
end
-- query table once [[phab:T93059]] is fixed.
local function encodeParam(key, val)
local preloadTemplate = message('preload-template')
return string.format('&%s=%s', mw.uri.encode(key), mw.uri.encode(val))
local function encode(key, value)
key = mw.uri.encode(key)
value = mw.uri.encode(value)
return key .. '=' .. value
end
end
url = url .. encodeParam('preloadparams[]', getLevelInfo(level, 'requestTemplate'))
url = url .. encodeParam('preloadparams[]', titleObj.prefixedText)


local query = {}
query[#query + 1] = encode('preload', preloadTemplate)
query[#query + 1] = encode('editintro', editintro)
query[#query + 1] = encode('preloadparams[]', requestTemplate)
query[#query + 1] = encode('preloadtitle', preloadtitle)
query[#query + 1] = 'section=new'
query[#query + 1] = encode('preloadparams[]', titleObj.prefixedText)
local url = mw.uri.fullUrl(talkpagename, {action = 'edit'})
url = tostring(url) .. '&' .. table.concat(query, '&')
return url
return url
end
end


function p.exportLinkToLua(args)
function p._link(args)
return string.format(
return string.format(
'<span class="plainlinks">[%s %s]</span>',
'<span class="plainlinks">[%s %s]</span>',
p.makeRequestUrl(args.type),
p.makeRequestUrl(args.type),
args.display or 'Submit an edit request'
args.display or message('default-display-value')
)
)
end
end
function p._button(args)
return require('Module:Clickable button 2').luaMain{
[1] = args.display or message('default-display-value'),
url = p.makeRequestUrl(args.type),
class = 'mw-ui-progressive'
}
end
local function makeInvokeFunc(func, wrapper)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = {wrapper}
})
return func(args)
end
end
p.link = makeInvokeFunc(p._link, message('link-wrapper-template'))
p.button = makeInvokeFunc(p._button, message('button-wrapper-template'))


return p
return p

Latest revision as of 13:17, 4 September 2020

Documentation for this module may be created at Module:Submit an edit request/doc

-- This module implements {{Submit an edit request}}.

local CONFIG_MODULE = 'Module:Submit an edit request/config'

-- Load necessary modules
local mRedirect = require('Module:Redirect')
local cfg = mw.loadData(CONFIG_MODULE)
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local lang = mw.language.getContentLanguage()

local p = {}

local validLevels = {
	semi = 'semi',
	extended = 'extended',
	template = 'template',
	full = 'full',
	interface = 'interface'
}

local function message(key, ...)
	local params = {...}
	local msg = cfg[key]
	if #params < 1 then
		return msg
	else
		return mw.message.newRawMessage(msg):params(params):plain()
	end
end

local function isTranscludedOnMainPage(titleObj)
	local mainPage = message('main-page')
	for i, source in ipairs(titleObj.cascadingProtection.sources) do
		if source == mainPage then
			return true
		end
	end
	return false
end

local function validateLevel(level)
	return level and validLevels[level] or 'full'
end

local function getLevelInfo(level, field)
	return cfg.protectionLevels[level][field]
end

local function resolveRedirect(page)
	return mRedirect.luaMain(page)
end

local function isProtected(page)
	local action = mw.title.new(page).exists and 'edit' or 'create'
	return effectiveProtectionLevel(action, page) ~= '*'
end

function p.makeRequestUrl(level, titleObj)
	titleObj = titleObj or mw.title.getCurrentTitle()
	if isTranscludedOnMainPage(titleObj) then
		return tostring(mw.uri.fullUrl(message('main-page-request-page')))
	end
	local talkPageName = resolveRedirect(titleObj.talkPageTitle.prefixedText)
	if isProtected(talkPageName) then
		return tostring(mw.uri.fullUrl(message('protected-talk-page-request-page')))
	end
	level = validateLevel(level)
	local url = mw.uri.fullUrl(talkPageName, {
		action = 'edit',
		editintro = getLevelInfo(level, 'editintro'),
		preload = message('preload-template'),
		preloadtitle = message(
			'preload-title-text',
			getLevelInfo(level, 'levelText'),
			lang:formatDate(message('preload-title-date-format'))
		),
		section = 'new'
	})
	url = tostring(url)

	-- Add the preload parameters. @TODO: merge this into the mw.uri.fullUrl
	-- query table once [[phab:T93059]] is fixed.
	local function encodeParam(key, val)
		return string.format('&%s=%s', mw.uri.encode(key), mw.uri.encode(val))
	end
	url = url .. encodeParam('preloadparams[]', getLevelInfo(level, 'requestTemplate'))
	url = url .. encodeParam('preloadparams[]', titleObj.prefixedText)

	return url
end

function p._link(args)
	return string.format(
		'<span class="plainlinks">[%s %s]</span>',
		p.makeRequestUrl(args.type),
		args.display or message('default-display-value')
	)
end

function p._button(args)
	return require('Module:Clickable button 2').luaMain{
		[1] = args.display or message('default-display-value'),
		url = p.makeRequestUrl(args.type),
		class = 'mw-ui-progressive'
	}
end

local function makeInvokeFunc(func, wrapper)
	return function (frame)
		local args = require('Module:Arguments').getArgs(frame, {
			wrappers = {wrapper}
		})
		return func(args)
	end
end

p.link = makeInvokeFunc(p._link, message('link-wrapper-template'))
p.button = makeInvokeFunc(p._button, message('button-wrapper-template'))

return p