Documentation for this module may be created at Module:NiceJSON/doc

local p = {}

-- encodes the input into JSON
p.stringify_raw = function(x)
	local js = mw.text.jsonEncode(x, mw.text.JSON_PRETTY)
	js = js:gsub('\r?\n', ' ')
	js = js:gsub('  +', ' ')
	js = mw.text.nowiki(js)
	return js
end
-- encodes input into JSON; returns empty string on error
p.stringify = function(data)
	local ok, json = pcall(p.stringify_raw, data)
	if ok then
		return json
	else
		return ''
	end
end
-- encodes input into JSON and wraps it in the provides tag with class
-- if no_empty is truthy, returns just an empty string on error; if falsey returns the tag (which has no contents)
p.wrap = function (data, tag, class, no_empty)
	local js = p.stringify(data)
	if js == '' and no_empty then
		return ''
	end
	return string.format('<%s class="%s noexcerpt navigation-not-searchable">%s</%s>', tag, class, js, tag)
end
return p