Module:Arguments:修订间差异

增加功能
受到保护的"模块:Arguments": 高流量页面: 包含代码 (‎[edit=sysop] (无限期) ‎[move=sysop] (无限期)) [连锁]
 
(未显示同一用户的4个中间版本)
第86行: 第86行:
end
end


function p.merge(obj)
function p.merge(frame, obj)
   if type(obj)~="table" then return obj end
   if type(obj)~="table" then return obj end


第96行: 第96行:
           if v[2] then
           if v[2] then
             --mw.log(v[2],v[1])
             --mw.log(v[2],v[1])
             res[p.merge(v[2])]=p.merge(v[1])
             res[p.merge(frame, v[2])]=p.merge(frame, v[1])
           else
           else
             --mw.log(v[1])
             --mw.log(v[1])
             table.insert(res, p.merge(v[1]))
             table.insert(res, p.merge(frame, v[1]))
           end
           end
         else
         else
           --mw.log(v)
           --mw.log(v)
           table.insert(res, p.merge(v))
           table.insert(res, p.merge(frame, v))
         end
         end
       end
       end
第109行: 第109行:
     return res
     return res
   elseif obj["type"]=="template" then
   elseif obj["type"]=="template" then
     return frame:expandTemplate{title=p.merge(obj[1]), args=p.merge(obj[2])}
    --return "{{" .. p.merge(frame, obj[1]) .. "|" .. table.concat(p.merge(frame, obj[2]), "|") .. "}}"
     return frame:expandTemplate{title=p.merge(frame, obj[1]), args=p.merge(frame, obj[2])}
   elseif obj["type"]=="value" then
   elseif obj["type"]=="value" then
     local res={}
     local res={}
     for i, v in ipairs(obj) do
     for i, v in ipairs(obj) do
       if i~="type" then
       if i~="type" then
         table.insert(res, p.merge(v))
         table.insert(res, p.merge(frame, v))
       end
       end
     end
     end
第135行: 第136行:
   if not argstr then return end
   if not argstr then return end


   local r=p.merge(p.parse_args(argstr, 1))
   local r=p.merge(frame, p.parse_args(argstr, 1))
   local nr={}
   local nr={}
   for i, v in pairs(r) do
   for i, v in pairs(r) do
第155行: 第156行:
   if not argstr then return end
   if not argstr then return end


   local r=p.merge(p.parse_args(argstr, 1))
   local r=p.merge(frame, p.parse_args(argstr, 1))
   local nr={}
   local nr={}
   for i, v in ipairs(r) do
   for i, v in ipairs(r) do
第165行: 第166行:
     end
     end
   end
   end
   return mw.text.nowiki("{{" .. table.concat(nr, "|") .. "}}")
   return mw.text.nowiki("{{") .. table.concat(nr, mw.text.nowiki("|")) .. mw.text.nowiki("}}")
end
end


第172行: 第173行:
   if not argstr then return end
   if not argstr then return end


   local function merge(obj)
   local fakeframe={}
    if type(obj)~="table" then return obj end
  fakeframe.expandTemplate=function(self, value)
 
     return "{{" .. value.title .. "|" .. table.concat(value.args, "|") .. "}}"
    if obj["type"]=="list" then
      local res={}
      for i, v in ipairs(obj) do
        if i~="type" then
          if v["type"]=="arg" then
            if v[2] then
              --mw.log(v[2],v[1])
              res[merge(v[2])]=merge(v[1])
            else
              --mw.log(v[1])
              table.insert(res, merge(v[1]))
            end
          else
            --mw.log(v)
            table.insert(res, merge(v))
          end
        end
      end
      return res
     elseif obj["type"]=="template" then
      return mw.text.nowiki("{{" .. merge(obj[1]) .. "|" .. table.concat(merge(obj[2]), "|") .. "}}")
    elseif obj["type"]=="value" then
      local res={}
      for i, v in ipairs(obj) do
        if i~="type" then
          table.insert(res, merge(v))
        end
      end
      return table.concat(res)
    else
      return obj
    end
   end
   end
 
  setmetatable(fakeframe, {__index=frame})
   local r=merge(p.parse_args(argstr, 1))
   local r=p.merge(fakeframe, p.parse_args(argstr, 1))
   local nr={}
   local nr={}
   for i, v in ipairs(r) do
   for i, v in ipairs(r) do