Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Please sign up or log in to edit the wiki.

Module:DataMaps schema table

From Tolkien Gateway

Documentation for this module may be created at Module:DataMaps schema table/doc

local p = {}
local SCHEMA_VERSION = '17.4'

local function table_concat_escaped(table, sep)
	-- Default separator is empty string
	sep = sep or ''

	local result = ''
	for i, v in ipairs(table) do
		-- Convert element to string using tostring
		local str_v = tostring(v)
		result = result .. (i > 1 and sep or '') .. str_v
	end
	return result
end

--- Returns the table of the current schema
---
--- @return table Table of schema
local function getSchema()
	local schema = mw.loadJsonData(string.format('Module:DataMaps schema table/v%s.json', SCHEMA_VERSION))
	return schema
end

local function createTableHeader()
	local headers = {
		'Key',
		'Name',
		'Description',
		'Type',
		'Default',
		'Enums'
	}
	local trow = mw.html.create('tr')
	for _, header in ipairs(headers) do
		trow:tag('th'):wikitext(header):done()
	end
	return trow
end

local function createPropRow(prop, propKey)
	local trow = mw.html.create('tr')
	local keys = {
		'title',
		'description',
		'type',
		'default',
		'enum'
	}

	trow:tag('td')
		:tag('code')
		:wikitext(propKey)
		:done()
		:done()

	for _, key in pairs(keys) do
		local text = ''
		if type(prop[key]) == 'table' then
			mw.logObject(prop[key])
			text = table_concat_escaped(prop[key], ',')
		else
			text = prop[key]
		end
		text = tostring(text)
		if text ~= 'nil' then
			text = mw.text.trim(text)
			mw.log(text)
		end
		trow:tag('td')
			:wikitext(text)
			:done()
	end
	return trow
end

function p.outputWikitext()
	local defs = getSchema()['$defs']
	--mw.logObject(defs)
	local html = mw.html.create()

	for _, def in pairs(defs) do
		local defHeader = mw.html.create('h3')
		defHeader:wikitext(def['title'])
		html:node(defHeader)

		local table = mw.html.create('table')
		table:addClass('wikitable')
		local thead = createTableHeader()
		table:node(thead)

		for key, prop in pairs(def['properties']) do
			local propRow = createPropRow(prop, key)
			table:node(propRow)
		end

		html:node(table)
	end

	return tostring(html)
end

return p