Editing Module:Data to Table
Appearance
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 56: | Line 56: | ||
end | end | ||
if ne(groupName) and groupInfo | if ne(groupName) and groupInfo then | ||
local info = parseInfo(groupInfo, frame) | local info = parseInfo(groupInfo, frame) | ||
local entries = {} | local entries = {} | ||
for _, entry in lib.spairs( | for _, entry in lib.spairs( | ||
info, | info, | ||
function(tVal, a, b) | function(tVal, a, b) | ||
return (tVal[a].page or a) < (tVal[b].page or b) | |||
end | end | ||
) do | ) do | ||
if ne(entry.page) then | if ne(entry.page) then | ||
entries[#entries + 1] = entry.page | entries[#entries + 1] = entry.page | ||
end | end | ||
end | end | ||
groups[groupName] = entries | |||
end | end | ||
| Line 88: | Line 78: | ||
return groups | return groups | ||
end | end | ||
| Line 154: | Line 91: | ||
if tostring(frame.args.json) == '1' then | if tostring(frame.args.json) == '1' then | ||
local groups = getJsonGroups(frame) | local groups = getJsonGroups(frame) | ||
-- If groups were supplied, output the complete | -- If groups were supplied, output the complete grouped object. | ||
if next(groups) ~= nil then | if next(groups) ~= nil then | ||
local jsonText = | local jsonText = mw.text.jsonEncode(groups) | ||
local output = frame:extensionTag( | |||
'syntaxhighlight', | 'syntaxhighlight', | ||
jsonText, | jsonText, | ||
| Line 174: | Line 107: | ||
} | } | ||
) | ) | ||
-- Copy button | |||
if frame.args.copy then | |||
output = require('Module:CopyText')._main({ | |||
output, | |||
frame.args.copy, | |||
'Copy JSON' | |||
}) | |||
end | |||
return output | |||
end | |||
-- Otherwise, retain simple JSON-array mode. | |||
if frame.args.info then | if frame.args.info then | ||
| Line 190: | Line 130: | ||
info, | info, | ||
function(tVal, a, b) | function(tVal, a, b) | ||
return (tVal[a].page or a) < (tVal[b].page or b) | |||
end | end | ||
) do | ) do | ||
if ne(entry.page) then | if ne(entry.page) then | ||
jsonEntries[#jsonEntries + 1] = entry.page | jsonEntries[#jsonEntries + 1] = entry.page | ||
end | end | ||
end | end | ||
local jsonText = mw.text.jsonEncode(jsonEntries) | local jsonText = mw.text.jsonEncode(jsonEntries) | ||
local output = frame:extensionTag( | |||
'syntaxhighlight', | 'syntaxhighlight', | ||
jsonText, | jsonText, | ||
| Line 213: | Line 148: | ||
} | } | ||
) | ) | ||
-- Copy button | |||
if frame.args.copy then | |||
output = require('Module:CopyText')._main({ | |||
output, | |||
frame.args.copy, | |||
'Copy JSON' | |||
}) | |||
end | |||
return output | |||
end | end | ||
| Line 225: | Line 171: | ||
-- Parse DPL data | -- Parse DPL data | ||
if frame.args.info then | if frame.args.info then | ||
info = parseInfo(frame.args.info, frame) | info = parseInfo(frame.args.info, frame) | ||
else | else | ||
return '' | return '' | ||
end | end | ||
-- Parse keys | -- Parse keys | ||
| Line 237: | Line 180: | ||
dataKeys = p.ParseKeys(frame.args.keys) | dataKeys = p.ParseKeys(frame.args.keys) | ||
end | end | ||
-- Parse unquoted/raw keys | -- Parse unquoted/raw keys | ||
| Line 243: | Line 185: | ||
rawKeys = p.ParseKeys(frame.args.unquoted) | rawKeys = p.ParseKeys(frame.args.unquoted) | ||
end | end | ||
-- Block formatting | -- Block formatting | ||
| Line 249: | Line 190: | ||
block = true | block = true | ||
end | end | ||
local sortkey = frame.args.sortkey or 'page' | local sortkey = frame.args.sortkey or 'page' | ||
local subtable = frame.args.subtable | local subtable = frame.args.subtable | ||
-- Constant value mode | -- Constant value mode | ||
| Line 261: | Line 200: | ||
if constantValue ~= nil then | if constantValue ~= nil then | ||
for _, rawKey in ipairs(rawKeys) do | for _, rawKey in ipairs(rawKeys) do | ||
if rawKey == 'value' then | if rawKey == 'value' then | ||
valueUnquoted = true | valueUnquoted = true | ||
break | break | ||
end | end | ||
end | end | ||
end | end | ||
| Line 276: | Line 211: | ||
-- Check whether a key should be output as raw Lua | -- Check whether a key should be output as raw Lua | ||
local function isUnquotedKey(key) | local function isUnquotedKey(key) | ||
for _, rawKey in ipairs(rawKeys) do | for _, rawKey in ipairs(rawKeys) do | ||
if rawKey == key then | if rawKey == key then | ||
return true | return true | ||
end | end | ||
end | end | ||
| Line 297: | Line 229: | ||
info, | info, | ||
function(tVal, a, b) | function(tVal, a, b) | ||
if sortkey == 'INPUT' then | if sortkey == 'INPUT' then | ||
return a < b | return a < b | ||
else | else | ||
return (tVal[a][sortkey] or '') < | return (tVal[a][sortkey] or '') < (tVal[b][sortkey] or '') | ||
end | end | ||
end | end | ||
) do | ) do | ||
if ne(entry.page) then | if ne(entry.page) then | ||
entry.page = clean(entry.page) | entry.page = clean(entry.page) | ||
-- Constant value mode: | |||
-- |value=day produces ['Page'] = 'day' | |||
-- Constant value mode | |||
-- | |||
if constantValue ~= nil and #dataKeys == 0 then | if constantValue ~= nil and #dataKeys == 0 then | ||
| Line 324: | Line 249: | ||
value = clean(constantValue) | value = clean(constantValue) | ||
else | else | ||
value = '\'' .. | value = '\'' .. clean(constantValue) .. '\'' | ||
end | end | ||
| Line 337: | Line 260: | ||
) | ) | ||
-- No data keys: output page as a simple string | |||
-- No data keys | |||
elseif #dataKeys == 0 then | elseif #dataKeys == 0 then | ||
| Line 349: | Line 268: | ||
'\',\n' | '\',\n' | ||
) | ) | ||
else | else | ||
| Line 363: | Line 277: | ||
local valid = false | local valid = false | ||
local values = mw.html.create() | local values = mw.html.create() | ||
-- Entry name | -- Entry name | ||
| Line 371: | Line 284: | ||
'\'] = {' | '\'] = {' | ||
) | ) | ||
-- Build entry | -- Build entry | ||
local function parseLevels(K, level) | local function parseLevels(K, level) | ||
level = level or 1 | level = level or 1 | ||
| Line 393: | Line 304: | ||
) | ) | ||
) | ) | ||
elseif type(K) == 'table' then | elseif type(K) == 'table' then | ||
| Line 408: | Line 318: | ||
'},' | '},' | ||
) | ) | ||
end | end | ||
end | end | ||
parseLevels(dataKeys, 1) | parseLevels(dataKeys, 1) | ||
-- Return table if there is valid data | -- Return table if there is valid data | ||
if valid then | if valid then | ||
values:wikitext('\n') | values:wikitext('\n') | ||
result:node(values) | result:node(values) | ||
else | else | ||
result:wikitext( | result:wikitext( | ||
'\t\'', | '\t\'', | ||
| Line 429: | Line 333: | ||
'\',\n' | '\',\n' | ||
) | ) | ||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
result:wikitext('}') | result:wikitext('}') | ||
-- | -- Wrap output in syntaxhighlight | ||
local luaText = tostring(result) | local luaText = tostring(result) | ||
-- Decode HTML entities introduced by mw.html | -- Decode HTML entities introduced by mw.html | ||
luaText = mw.text.decode(luaText) | luaText = mw.text.decode(luaText) | ||
local output = frame:extensionTag( | local output = frame:extensionTag( | ||
| Line 459: | Line 357: | ||
-- | -- Copy button | ||
if frame.args.copy then | if frame.args.copy then | ||
output = require('Module:CopyText')._main({ | output = require('Module:CopyText')._main({ | ||
output, | output, | ||
| Line 471: | Line 364: | ||
'Copy Table' | 'Copy Table' | ||
}) | }) | ||
end | end | ||
return output | return output | ||
| Line 484: | Line 375: | ||
function p.BuildEntry(value, key, level, subtable, unquoted) | function p.BuildEntry(value, key, level, subtable, unquoted) | ||
level = level or 1 | level = level or 1 | ||
local container = mw.html.create() | local container = mw.html.create() | ||
-- Default missing values | -- Default missing values | ||
| Line 494: | Line 383: | ||
if key == 'number' then | if key == 'number' then | ||
value = '0' | value = '0' | ||
unquoted = true | unquoted = true | ||
else | else | ||
value = '' | value = '' | ||
unquoted = false | unquoted = false | ||
end | end | ||
end | end | ||
| Line 518: | Line 403: | ||
table.concat(value, '\', \'') .. | table.concat(value, '\', \'') .. | ||
' }' | ' }' | ||
elseif unquoted and value ~= '' then | elseif unquoted and value ~= '' then | ||
| Line 524: | Line 408: | ||
-- Raw Lua value | -- Raw Lua value | ||
value = clean(value) | value = clean(value) | ||
else | else | ||
| Line 554: | Line 437: | ||
first[level] = false | first[level] = false | ||
if level > 2 then | if level > 2 then | ||
first[2] = false | first[2] = false | ||
end | end | ||
if level > 1 then | if level > 1 then | ||
| Line 581: | Line 462: | ||
end | end | ||
return container | return container | ||
| Line 592: | Line 472: | ||
function p.ParseKeys(keys) | function p.ParseKeys(keys) | ||
keys = lib.split(keys, ';;') | keys = lib.split(keys, ';;') | ||