Module:MenuData
From Dune Awakening DB
Documentation for this module may be created at Module:MenuData/doc
local p = {}
function p.renderJSON(frame)
-- Fetch main radial menu items
local mainRows = mw.ext.externalData.getExternalData({
source = "externaldb",
from = "site_radial_menu",
data = "name=name,icon=icon_url,position=position,category=category,url=link_url"
})
-- Fetch submenu items
local subRows = mw.ext.externalData.getExternalData({
source = "externaldb",
from = "site_radial_submenu",
data = "menu_category=menu_category,name=name,url=link_url,sort_order=sort_order"
})
-- Group submenu items by category
local subMap = {}
for _, sub in ipairs(subRows) do
local cat = sub.menu_category
if not subMap[cat] then subMap[cat] = {} end
table.insert(subMap[cat], {
name = sub.name,
url = sub.url,
sort_order = tonumber(sub.sort_order) or 0
})
end
-- Sort submenus
for _, list in pairs(subMap) do
table.sort(list, function(a, b)
return a.sort_order < b.sort_order
end)
end
-- Attach submenus to main menu items
for _, item in ipairs(mainRows) do
item.subcategories = subMap[item.category] or {}
end
-- JSON encode the final structure
local json = mw.text.jsonEncode(mainRows)
-- Safely generate <script> element that MediaWiki won’t escape
local Html = mw.html
local tag = Html.create('div')
:attr('id', 'radialMenuData')
:attr('data-type', 'json')
:addClass('radial-json-data')
:css('display', 'none')
:wikitext(json)
return tostring(tag)
end
return p
