Module:BiologicalAgeBiomarkers

Output the biological age biomarkers table.

Data is stored in Module:BiologicalAgeBiomarkers/Data


local p = {}

local data = require('Module:BiologicalAgeBiomarkers/Data')

local biomarkers = data.biomarkers
local rows = data.rows
local studies = data.studies

function p.template(frame, name, arg)
	return frame:expandTemplate({title = name, args = { arg }})
end

function p.createCrossTable(frame)
    for _, study in ipairs(studies) do
    	local count = 0
		for _ in pairs(study.biomarkers) do
			count = count + 1
		end
    	study.count = count
	end
	
    -- Start of the wiki table
    local wikitable = '{| class="wikitable sortable"\n'
    local sep = ''

    for i, row in ipairs(rows) do
        wikitable = wikitable .. sep
        sep = '|-\n'
        wikitable = wikitable .. '! colspan="3" | ' .. row.name .. '\n'
        for _, study in ipairs(studies) do
            local cellValue = study[row.key] or ""
            if (row.rotate) then
				cellValue =  p.template(frame, "VerticalText", cellValue)
			else
			end
			wikitable = wikitable .. '! ' .. cellValue .. '\n'
        end
	end

    -- Column headers: Biomarker and System
    wikitable = wikitable .. '|-\n'
    wikitable = wikitable .. '! System !! Biomarker !! Count '
    for _, study in pairs(studies) do
        wikitable = wikitable .. ' !! ' .. p.template(frame, "pmid", study.pmid)
	end
	wikitable = wikitable .. '\n'

    -- Generate rows for each biomarker
    for _, system in ipairs(biomarkers) do
	    for _, bm in ipairs(system.data) do
	        wikitable = wikitable .. '|-\n'
	        wikitable = wikitable .. '| '  .. system.system .. ' || ' .. bm.name
	        
	        local count = 0
	        for _, study in ipairs(studies) do
	        	if study.biomarkers[bm.key] ~= nil then
    				count = count + 1
	        	end
			end
	        wikitable = wikitable .. string.format(' || %d', count)
	        
	        for _, study in ipairs(studies) do
	            -- Retrieve data value for the current cell, using the nested structure
	            local cellValue = study.biomarkers[bm.key] or ""
	        	if cellValue == "x" then
	        		cellValue = 'style="background-color:gray; color: transparent;" | ' .. cellValue
	        	elseif cellValue ~= "" then
	        		cellValue = 'style="background-color:gray;" | ' .. cellValue
    	        end
 	            wikitable = wikitable .. ' || ' .. cellValue
	        end
			wikitable = wikitable .. '\n'
	    end
    end

    -- End of the table
    wikitable = wikitable .. '\n|}'

    return wikitable
end

return p