MenuData: Difference between revisions
From Dune Awakening DB
mNo edit summary |
mNo edit summary |
||
| Line 2: | Line 2: | ||
function p.renderJSON(frame) | function p.renderJSON(frame) | ||
local mainRows = mw.ext.externalData.getExternalData({ | local mainRows = mw.ext.externalData.getExternalData({ | ||
source = "externaldb", | source = "externaldb", | ||
| Line 9: | Line 8: | ||
}) | }) | ||
local subRows = mw.ext.externalData.getExternalData({ | local subRows = mw.ext.externalData.getExternalData({ | ||
source = "externaldb", | source = "externaldb", | ||
| Line 16: | Line 14: | ||
}) | }) | ||
local subMap = {} | local subMap = {} | ||
for _, sub in ipairs(subRows) do | for _, sub in ipairs(subRows) do | ||
local | local cat = sub.menu_category | ||
if not subMap[ | if not subMap[cat] then subMap[cat] = {} end | ||
table.insert(subMap[cat], { | |||
table.insert(subMap[ | |||
name = sub.name, | name = sub.name, | ||
url = sub.url, | url = sub.url, | ||
| Line 30: | Line 25: | ||
end | end | ||
for _, list in pairs(subMap) do | |||
for _, | table.sort(list, function(a, b) | ||
table.sort( | |||
return a.sort_order < b.sort_order | return a.sort_order < b.sort_order | ||
end) | end) | ||
end | end | ||
for _, item in ipairs(mainRows) do | for _, item in ipairs(mainRows) do | ||
item.subcategories = subMap[item.category] or {} | item.subcategories = subMap[item.category] or {} | ||
| Line 43: | Line 36: | ||
local json = mw.text.jsonEncode(mainRows) | local json = mw.text.jsonEncode(mainRows) | ||
return frame:extensionTag{ | return frame:extensionTag{ | ||
name = "script", | |||
content = json, | |||
args = { id = "radialMenuData", type = "application/json" } | |||
} | } | ||
end | end | ||
return p | return p | ||
Revision as of 23:45, 7 April 2025
Documentation for this module may be created at Module:MenuData/doc
local p = {}
function p.renderJSON(frame)
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"
})
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"
})
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
for _, list in pairs(subMap) do
table.sort(list, function(a, b)
return a.sort_order < b.sort_order
end)
end
for _, item in ipairs(mainRows) do
item.subcategories = subMap[item.category] or {}
end
local json = mw.text.jsonEncode(mainRows)
return frame:extensionTag{
name = "script",
content = json,
args = { id = "radialMenuData", type = "application/json" }
}
end
return p
