置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Template Repeat

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. local p = {}
  2. local getArgs = require('Module:Arguments').getArgs
  3. function parse_arg(arg)
  4. if arg == nil or arg == '' then
  5. return nil
  6. end
  7. arg = mw.text.unstripNoWiki(arg)
  8. arg = mw.text.decode(arg)
  9. return arg
  10. end
  11. function p._main(frame, args)
  12. local args_list = {}
  13. local tl = parse_arg(args['template'] or args['tl'] or '')
  14. for k, v in pairs(args) do
  15. local split_pos = string.find(k, "-")
  16. if split_pos then
  17. local arg_group = tonumber(string.sub(k, 1, split_pos - 1))
  18. if arg_group ~= nil then
  19. local arg_key = string.sub(k, split_pos + 1)
  20. if args_list[arg_group] == nil then
  21. args_list[arg_group] = {}
  22. end
  23. args_list[arg_group][arg_key] = v
  24. end
  25. end
  26. end
  27. local arg_groups = {}
  28. for arg_group, _ in pairs(args_list) do
  29. table.insert(arg_groups, arg_group)
  30. end
  31. table.sort(arg_groups)
  32. local output = {}
  33. local separator_default = parse_arg(args['separator'] or '') or ''
  34. for i, arg_group in ipairs(arg_groups) do
  35. args_sub = args_list[arg_group]
  36. local frame_child = frame:newChild({args = args_sub})
  37. local separator = ''
  38. if i < #arg_groups then
  39. separator = parse_arg(args['separator-' .. arg_group] or '') or separator_default
  40. end
  41. table.insert(output, frame_child:preprocess(tl .. separator))
  42. end
  43. return table.concat(output, '')
  44. end
  45. function p.main(frame)
  46. return p._main(frame, getArgs(frame))
  47. end
  48. return p