Tu banner alternativo

Module:Submit an edit request

The importance of Module:Submit an edit request in today's society is undeniable. Whether it is a current topic or a historical event, Module:Submit an edit request plays a vital role in people's lives. Over the years, Module:Submit an edit request has been the subject of debate, analysis and reflection in different areas, from politics and economics to culture and entertainment. In this article, we will explore the impact of Module:Submit an edit request on everyday life, as well as its influence on decision-making and human behavior. From its importance in the workplace to its influence on mental and emotional health, Module:Submit an edit request has a reach that transcends borders and time.

Tu banner alternativo

-- 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 escape = require("Module:String")._escapePattern
local lang = mw.language.getContentLanguage()

local p = {}

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

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

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

local function getLevelInfo(level, field)
	return cfg.protectionLevels
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()
	local basePage = titleObj.basePageTitle.fullText
	if cfg then
		return tostring(mw.uri.fullUrl(message('main-page-request-page')))
	end

	local talkPageName = titleObj.talkPageTitle
	if talkPageName == nil then
		return tostring(mw.uri.fullUrl(message('protected-talk-page-request-page')))
	end
	talkPageName = resolveRedirect(talkPageName.prefixedText)
	if isProtected(talkPageName) then
		return tostring(mw.uri.fullUrl(message('protected-talk-page-request-page')))
	end
	level = validateLevel(level)
	if level == 'manual' then
		return tostring(mw.uri.fullUrl(talkPageName, {
			action = 'edit',
			section = 'new'
		}))
	end
	local sectionname = message(
			'preload-title-text',
			getLevelInfo(level, 'levelText'),
			lang:formatDate(message('preload-title-date-format'))
	)
	local content = mw.title.new(talkPageName):getContent()
	if content and content:find("== *" .. escape(sectionname) .. " *==") then
		local dedup = 2
		while true do
			local newname = message("preload-title-dedup-suffix", sectionname, dedup)
			if not content:find("== *" .. escape(newname) .. " *==") then
				sectionname = newname
				break
			end
			dedup = dedup + 1
		end
	end
	local url = mw.uri.fullUrl(talkPageName, {
		action = 'edit',
		editintro = getLevelInfo(level, 'editintro'),
		preload = message('preload-template'),
		preloadtitle = sectionname,
		section = 'new'
	})
	url = tostring(url)

	-- Add the preload parameters. @TODO: merge this into the mw.uri.fullUrl
	-- query table once ] 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"></span>',
		p.makeRequestUrl(args.type),
		args.display or message('default-display-value')
	)
end

function p._button(args)
	return require('Module:Clickable button').main{
		 = 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