Documentation for this module may be created at Module:Lua banner/doc

  1. -- This module implements the {{lua}} template.
  2.  
  3. local yesno = require('Module:Yesno')
  4. local mList = require('Module:List')
  5. local mTableTools = require('Module:TableTools')
  6. local mMessageBox = require('Module:Message box')
  7.  
  8. local p = {}
  9.  
  10. function p.main(frame)
  11. local origArgs = frame:getParent().args
  12. local args = {}
  13. for k, v in pairs(origArgs) do
  14. v = v:match('^%s*(.-)%s*$')
  15. if v ~= '' then
  16. args[k] = v
  17. end
  18. end
  19. return p._main(args)
  20. end
  21.  
  22. function p._main(args)
  23. local modules = mTableTools.compressSparseArray(args)
  24. local box = p.renderBox(modules)
  25. local trackingCategories = p.renderTrackingCategories(args, modules)
  26. return box .. trackingCategories
  27. end
  28.  
  29. function p.renderBox(modules)
  30. local boxArgs = {}
  31. if #modules < 1 then
  32. boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
  33. else
  34. local moduleLinks = {}
  35. for i, module in ipairs(modules) do
  36. moduleLinks[i] = string.format('[[:%s]]', module)
  37. end
  38. local moduleList = mList.makeList('bulleted', moduleLinks)
  39. boxArgs.text = 'Uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
  40. end
  41. boxArgs.type = 'notice'
  42. boxArgs.small = true
  43. boxArgs.image = '[[File:Lua-logo-nolabel.svg|30px|alt=Lua logo|link=Wikipedia:Lua]]'
  44. return mMessageBox.main('mbox', boxArgs)
  45. end
  46.  
  47. function p.renderTrackingCategories(args, modules, titleObj)
  48. if yesno(args.nocat) then
  49. return ''
  50. end
  51. local cats = {}
  52. -- Error category
  53. if #modules < 1 then
  54. cats[#cats + 1] = 'Lua templates with errors'
  55. end
  56. -- Lua templates category
  57. titleObj = titleObj or mw.title.getCurrentTitle()
  58. local subpageBlacklist = {
  59. doc = true,
  60. sandbox = true,
  61. sandbox2 = true,
  62. testcases = true
  63. }
  64. if titleObj.namespace == 10
  65. and not subpageBlacklist[titleObj.subpageText]
  66. then
  67. local category = args.category
  68. if not category then
  69. local categories = {
  70. ['Module:String'] = 'Lua String-based templates',
  71. ['Module:Math'] = 'Templates based on the Math Lua module',
  72. ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
  73. ['Module:Citation'] = 'Lua-based citation templates'
  74. }
  75. categories['Module:Citation/CS1'] = categories['Module:Citation']
  76. category = modules[1] and categories[modules[1]]
  77. category = category or 'Lua-based templates'
  78. end
  79. cats[#cats + 1] = category
  80. end
  81. for i, cat in ipairs(cats) do
  82. cats[i] = string.format('[[Category:%s]]', cat)
  83. end
  84. return table.concat(cats)
  85. end
  86.  
  87. return p