Actions

Module

MenuData: Difference between revisions

From Dune Awakening DB

Created page with "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..."
 
mNo edit summary
Line 43: Line 43:


   local json = mw.text.jsonEncode(mainRows)
   local json = mw.text.jsonEncode(mainRows)
   return string.format('<script id="radialMenuData" type="application/json">%s</script>', json)
   return frame:extensionTag{
  name = "script",
  content = json,
  args = { id = "radialMenuData", type = "application/json" }
}
 
end
end


return p
return p

Revision as of 23:44, 7 April 2025

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 their menu_category
  local subMap = {}
  for _, sub in ipairs(subRows) do
    local category = sub.menu_category
    if not subMap[category] then
      subMap[category] = {}
    end
    table.insert(subMap[category], {
      name = sub.name,
      url = sub.url,
      sort_order = tonumber(sub.sort_order) or 0
    })
  end

  -- Sort submenu arrays
  for _, subList in pairs(subMap) do
    table.sort(subList, function(a, b)
      return a.sort_order < b.sort_order
    end)
  end

  -- Merge submenus into main menu items
  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