Module:ConceptRelations9
Jump to navigation
Jump to search
Documentation for this module may be created at Module:ConceptRelations9/doc
-- Module:ConceptRelations
-- Handles rendering of contributor blocks and conceptual relationships for Infobox_concept
local p = {}
-- Mapping of contribution types to CSS classes
local contributionTypes = {
["originator"] = "originator",
["reinterpretation"] = "reinterpretation",
["elaboration"] = "elaboration",
["systematic elaboration"] = "systematic-elaboration",
["systematic-elaboration"] = "systematic-elaboration",
["clinical extension"] = "clinical-extension",
["clinical-extension"] = "clinical-extension",
["clinical"] = "clinical",
["interdisciplinary application"] = "interdisciplinary-application",
["interdisciplinary-application"] = "interdisciplinary-application",
["interdisciplinary"] = "interdisciplinary",
["critique"] = "critique",
["influence"] = "elaboration"
}
-- Mapping of relationship types to CSS classes
local relationTypes = {
["foundational"] = "foundational",
["foundational dependency"] = "foundational-dependency",
["foundational-dependency"] = "foundational-dependency",
["prerequisite"] = "prerequisite",
["elaborates"] = "elaborates",
["extension"] = "extension",
["elaborates-refines"] = "elaborates-refines",
["elaborates/refines"] = "elaborates-refines",
["clinical manifestation"] = "clinical-manifestation",
["clinical-manifestation"] = "clinical-manifestation",
["clinical application"] = "clinical-application",
["clinical-application"] = "clinical-application",
["clinical"] = "clinical",
["opposition"] = "opposition",
["theoretical opposition"] = "theoretical-opposition",
["theoretical-opposition"] = "theoretical-opposition",
["contradicts"] = "contradicts",
["supersedes"] = "supersedes",
["interdisciplinary"] = "interdisciplinary",
["interdisciplinary parallel"] = "interdisciplinary-parallel",
["interdisciplinary-parallel"] = "interdisciplinary-parallel",
["interdisciplinary influence"] = "interdisciplinary-influence",
["interdisciplinary-influence"] = "interdisciplinary-influence",
["translation"] = "translation",
["school translation"] = "school-translation",
["school-translation"] = "school-translation",
["lacanian translation"] = "lacanian-translation",
["lacanian-translation"] = "lacanian-translation",
["theoretical evolution"] = "theoretical-evolution",
["theoretical-evolution"] = "theoretical-evolution"
}
-- Render contributor blocks
function p.contributors(frame)
local args = frame:getParent().args
local output = {}
for i = 1, 20 do
local name = args['contributor_' .. i .. '_name']
local year = args['contributor_' .. i .. '_year']
local ctype = args['contributor_' .. i .. '_type']
local content = args['contributor_' .. i .. '_content']
if name and name ~= '' then
local typeLower = (ctype or ''):lower()
local cssClass = contributionTypes[typeLower] or 'elaboration'
table.insert(output, '<div class="contributor-block ' .. cssClass .. '">')
-- Name with auto-linking
local linkedName = name
if not name:match('%[%[') then
linkedName = '[[' .. name .. ']]'
end
table.insert(output, '<div class="contributor-name">' .. linkedName)
-- Type tag
if ctype and ctype ~= '' then
table.insert(output, '<span class="contributor-type-tag">' .. ctype .. '</span>')
end
table.insert(output, '</div>')
-- Year
if year and year ~= '' then
table.insert(output, '<div class="contributor-year">' .. year .. '</div>')
end
-- Content
if content and content ~= '' then
table.insert(output, '<div class="contributor-content">' .. content .. '</div>')
end
table.insert(output, '</div>')
end
end
return table.concat(output, '\n')
end
-- Render relationship blocks
function p.relations(frame)
local args = frame:getParent().args
local output = {}
for i = 1, 50 do
local target = args['relation_' .. i .. '_target']
local rtype = args['relation_' .. i .. '_type']
local content = args['relation_' .. i .. '_content']
if target and target ~= '' then
local typeLower = (rtype or ''):lower()
local cssClass = relationTypes[typeLower] or 'foundational'
table.insert(output, '<div class="relation-block ' .. cssClass .. '">')
-- Target with auto-linking
local linkedTarget = target
if not target:match('%[%[') then
linkedTarget = '[[' .. target .. ']]'
end
table.insert(output, '<div class="relation-target">' .. linkedTarget)
-- Type tag
if rtype and rtype ~= '' then
table.insert(output, '<span class="relation-type-tag">' .. rtype .. '</span>')
end
table.insert(output, '</div>')
-- Content
if content and content ~= '' then
table.insert(output, '<div class="relation-content">' .. content .. '</div>')
end
table.insert(output, '</div>')
end
end
return table.concat(output, '\n')
end
return p