Difference between revisions of "Module:Protected edit request/sandbox"

From blackwiki
Jump to navigation Jump to search
blackwiki>Andrybak
m (Undid revision 945107394 by Andrybak (talk))
blackwiki>SD0001
(temp save, need to figure out why mw.title.getCurrentTitle().subjectNsText == titles[1] isn't working)
Line 14: Line 14:
 
box.__index = box
 
box.__index = box
  
function box.new(protectionType)
+
function box.new(protectionType, args)
 
local obj = {}
 
local obj = {}
 +
obj.args = args
 
setmetatable(obj, box)
 
setmetatable(obj, box)
 
obj.tmboxArgs = {} -- Used to store arguments to be passed to tmbox by the box:export method.
 
obj.tmboxArgs = {} -- Used to store arguments to be passed to tmbox by the box:export method.
Line 30: Line 31:
 
end
 
end
  
function box:export(args)
+
function box:export()
 
if not mw.title.getCurrentTitle().isTalkPage and not self.demo then
 
if not mw.title.getCurrentTitle().isTalkPage and not self.demo then
 
return '<span class="error">Error: Protected edit requests can only be made on the talk page.</span>[[Category:Non-talk pages with an edit request template]]'
 
return '<span class="error">Error: Protected edit requests can only be made on the talk page.</span>[[Category:Non-talk pages with an edit request template]]'
Line 37: Line 38:
 
-- String together page names provided
 
-- String together page names provided
 
local titles = {}
 
local titles = {}
for k, v in pairs(args) do
+
for k, v in pairs(self.args) do
 
if type(k) == 'number' then
 
if type(k) == 'number' then
table.insert(titles, args[k])
+
table.insert(titles, '[[' .. self.args[k] .. ']]')
 
end
 
end
 
end
 
end
local page -- this is helpful for centralized discussion pages
+
local pagesText
for i, v in pairs(titles) do
+
if #titles == 1 and mw.title.getCurrentTitle().subjectNsText == titles[1] then
    if i == 1 then
+
pagesText = ''
        page = titles[1]
+
else
    elseif i == #titles then
+
for i, v in pairs(titles) do
        page = page .. ' and ' .. v
+
    if i == 1 then
    else
+
        pagesText = ' to ' .. titles[1]
        page = page .. ', ' .. v
+
    elseif i == #titles then
    end
+
        pagesText = pagesText .. ' and ' .. v
 +
    else
 +
        pagesText = pagesText .. ', ' .. v
 +
    end
 +
end
 
end
 
end
 
 
self:setArg('smalltext', "This [[Wikipedia:Edit requests|edit request]] to " .. page ..
+
self:setArg('smalltext', "This [[Wikipedia:Edit requests|edit request]]" .. pagesText ..
 
" has been answered. Set the <code style=\"white-space: nowrap;\">&#124;answered&#61;</code> or <code style=\"white-space: nowrap;\">&#124;ans&#61;</code> parameter to '''no''' to reactivate your request.")
 
" has been answered. Set the <code style=\"white-space: nowrap;\">&#124;answered&#61;</code> or <code style=\"white-space: nowrap;\">&#124;ans&#61;</code> parameter to '''no''' to reactivate your request.")
 
self:setArg('small', true)
 
self:setArg('small', true)
Line 74: Line 79:
 
boxType = activeBox
 
boxType = activeBox
 
end
 
end
local requestBox = boxType.new(protectionType)
+
local requestBox = boxType.new(protectionType, args)
return requestBox:export(args)
+
return requestBox:export()
 
end
 
end
  

Revision as of 21:20, 11 March 2020

Documentation for this module may be created at Module:Protected edit request/sandbox/doc

require('Module:No globals')

local yesno = require('Module:Yesno')
local makeMessageBox = require('Module:Message box').main
local getArgs

local activeBox -- lazily initialized if we get an active request

----------------------------------------------------------------------
-- Box class definition
----------------------------------------------------------------------

local box = {}
box.__index = box

function box.new(protectionType, args)
	local obj = {}
	obj.args = args
	setmetatable(obj, box)
	obj.tmboxArgs = {} -- Used to store arguments to be passed to tmbox by the box:export method.
	-- Set data fields.
	obj.tmboxArgs.attrs = { ['data-origlevel'] = protectionType }
	return obj
end

function box:setArg(key, value)
	-- This sets a value to be passed to tmbox.
	if key then
		self.tmboxArgs[key] = value
	end
end

function box:export()
	if not mw.title.getCurrentTitle().isTalkPage and not self.demo then
		return '<span class="error">Error: Protected edit requests can only be made on the talk page.</span>[[Category:Non-talk pages with an edit request template]]'
	end

	-- String together page names provided
	local titles = {}
	for k, v in pairs(self.args) do
		if type(k) == 'number' then
			table.insert(titles, '[[' .. self.args[k] .. ']]')
		end
	end
	local pagesText
	if #titles == 1 and mw.title.getCurrentTitle().subjectNsText == titles[1] then
		pagesText = ''
	else 
		for i, v in pairs(titles) do
		    if i == 1 then
		        pagesText = ' to ' .. titles[1]
		    elseif i == #titles then
		        pagesText = pagesText .. ' and ' .. v
		    else
		        pagesText = pagesText .. ', ' .. v
		    end
		end
	end
	
	self:setArg('smalltext', "This [[Wikipedia:Edit requests|edit request]]" .. pagesText ..
		" has been answered. Set the <code style=\"white-space: nowrap;\">&#124;answered&#61;</code> or <code style=\"white-space: nowrap;\">&#124;ans&#61;</code> parameter to '''no''' to reactivate your request.")
	self:setArg('small', true)
	self:setArg('class', 'editrequest')
	return makeMessageBox('tmbox', self.tmboxArgs)
end

----------------------------------------------------------------------
-- Process arguments and initialise objects
----------------------------------------------------------------------

local p = {}

function p._main(protectionType, args)
	local boxType = box
	if not yesno(args.answered or args.ans, true) then
		if not activeBox then
			activeBox = require('Module:Protected edit request/active')(box, yesno, makeMessageBox)
		end
		boxType = activeBox
	end
	local requestBox = boxType.new(protectionType, args)
	return requestBox:export()
end

local mt = {}

function mt.__index(t, k)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	return function (frame)
		return t._main(k, getArgs(frame, {wrappers = {'Template:Edit fully-protected', 'Template:Edit semi-protected', 'Template:Edit template-protected', 'Template:Edit extended-protected', 'Template:Edit interface-protected'}}))
	end
end

return setmetatable(p, mt)