Module:OSF version
Appearance
Documentation for this module may be created at Module:OSF version/doc
-- Module:OSF_version
local json = require("Module:JSON_pipeline")
local p = {}
local PAGE = "JSON:OSF_provenance"
local function fmt_number(n)
if not n then return "—" end
return tostring(n):reverse():gsub("(%d%d%d)", "%1,"):reverse():gsub("^,", "")
end
local function cell(label, value)
return string.format(
'<div class="osf-cell"><div class="osf-label">%s</div><div class="osf-value">%s</div></div>',
label, value
)
end
function p.infobox(frame)
local data, err = json.load(PAGE)
if not data then
return '<span class="error">OSF version data unavailable: ' .. tostring(err) .. '</span>'
end
local counts = type(data.record_counts) == "table" and data.record_counts or {}
local source = data.source or "Orthoptera Species File"
local source_url = data.source_url or ""
local updated = data.last_updated or "unknown"
local n_species = fmt_number(counts.species)
local n_subsp = fmt_number(counts.subspecies)
local n_total = fmt_number(counts.total_taxa)
local source_link = source_url ~= ""
and string.format('[%s %s]', source_url, source)
or source
local header = string.format(
'<div class="osf-header">' ..
'<span class="ib-h-badge ib-h-badge-organization">OSF</span>' ..
'<span class="osf-title">HopperWiki\'s current taxonomy</span>' ..
'<span class="osf-source">%s</span>' ..
'</div>',
source_link
)
local cells = table.concat({
cell("Last updated", updated),
cell("Species", n_species),
cell("Subspecies", n_subsp),
cell("Total taxa", n_total),
})
local html = string.format(
'<div class="ib-h osf-version-box">' ..
'%s' ..
'<div class="ib-h-cells">%s</div>' ..
'</div>',
header, cells
)
return frame:preprocess(html)
end
function p.data()
return json.load(PAGE)
end
function p.field(frame)
local args = frame.args or frame
local key = args[1] or args.key
if not key then return "" end
local data, err = json.load(PAGE)
if not data then return "" end
return tostring(data[key] or "")
end
return p