モジュール:Protected edit request

モジュールの解説[表示] [編集] [履歴] [キャッシュを破棄]

このモジュールは{{半保護編集依頼}}や{{拡張半保護編集依頼}}といった保護編集依頼テンプレートの内部で使用されています。編集依頼が有効化されている場合に限り、サブモジュールであるモジュール:Protected edit request/activeが使用されます。

require('strict')

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()
 local title = mw.title.getCurrentTitle()
 local skipCheck = yesno(self.args.demo) or yesno(self.args.skiptalk)
 if not title.isTalkPage and not skipCheck then
  return '<span class="error">エラー: 保護されたページの編集依頼は、'
   .. 'ここではなくノートで出してください。</span>[[Category:ノートでないページで出されている保護編集依頼]]'
 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 == 0 then
  pagesText = ''
 elseif #titles == 1 and mw.title.getCurrentTitle().subjectPageTitle.fullText == titles[1] then
  pagesText = ''
 else 
  for i, v in pairs(titles) do
      if i == 1 then
          pagesText = '「[[:' .. v .. ']]」'
      else
          pagesText = pagesText .. '、「[[:' .. v .. ']]」'
      end
  end
  pagesText = pagesText .. "に対する"
 end
 
 self:setArg('smalltext', pagesText .. "こちらの編集依頼は" ..
  "終了しました。この依頼を再度有効化するには、" ..
  "引数<code style=\"white-space: nowrap;\">&#124;answered&#61;</code>もしくは" .. 
  "<code style=\"white-space: nowrap;\">&#124;ans&#61;</code>の値に'''no'''を指定してください。")
 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:保護編集依頼', 'Template:半保護編集依頼', 'Template:Edit template-protected', 'Template:拡張半保護編集依頼', 'Template:Edit interface-protected'}}))
 end
end

return setmetatable(p, mt)