Module:NavboxGenerator

From Deadlock Wiki
Revision as of 18:06, 25 October 2024 by Sur (talk | contribs) (initial)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Not finished.

Overview

Create's a navbox from a json file for input where keys are a title div container, and value "Display" is the display text. Each title div container gets smaller and smaller the further it is in the json.

Parameters

Within each level of the json:

  • <key> - Title to display in the div/container/box. Can wrap it in <span style="mystyle">key</span> for styling it.
  • Style - Style for the div
  • Display - Text to display below the div
  • <Any other value> - Recursively calls for the contained layer, with <Any other value> as the new <key>

Examples

For understanding the input syntax, it is recommended to view the Simple Example first.

Simple Example

The input can be seen at Data:ItemNavboxSample.json

{{#invoke:NavboxGenerator|createNavbox|Data:ItemNavboxSample.json}}

Outputs

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:NavboxData.json' is not a valid JSON page).

Styled Example

The input can be seen at Data:ItemNavbox.json

{{#invoke:NavboxGenerator|createNavbox|Data:ItemNavbox.json}}

Outputs

Lua error in mw.lua at line 800: bad argument #1 to 'mw.loadJsonData' ('Data:NavboxData.json' is not a valid JSON page).


Needed changes

1. Style/Formatting made prettier 2. A way to have the json iterated in order; for some reason mw.loadJsonData doesn't load the keys in order they appear.


This is not used on any pages currently.


local p = {}

local function generateNavbox(data, level)
    local result = {}
    local boxSize = 5 - level  -- Adjust this to control the box size reduction per level
    local fontSize = 150 - (level * 20)  -- Adjust to decrease font size per level
    
    for key, value in pairs(data) do
        if type(value) == "table" then
            table.insert(result, string.format(
                '<div style="font-size:%d%%; border:1px solid #aaa; padding:5px; margin:2px;">=%s=</div>',
                fontSize, key
            ))
            table.insert(result, generateNavbox(value, level + 1))  -- Recursively process next level
        else
            table.insert(result, string.format(
                '<div style="font-size:%d%%; padding-left:%dpx; margin:2px;">%s</div>',
                fontSize, level * 10, value
            ))
        end
    end
    
    return table.concat(result, "\n")
end

function p.createNavbox(frame)
    local jsonData = mw.loadJsonData("Data:NavboxData.json")
    return generateNavbox(jsonData, 1)
end

return p