Module:PortalConcepts
Documentation for this module may be created at Module:PortalConcepts/doc
-- Module:PortalConcepts
-- Central data + render helpers for Portal:Concepts
-- Phase 1: static lists (future-proofed for expansion)
local p = {}
----------------------------------------------------------------
-- DATA
----------------------------------------------------------------
p.cards = {
{
title = "Foundational Registers",
description = "Core registers structuring subjectivity in Lacanian theory.",
items = {
{ label = "The Real", link = "The Real" },
{ label = "The Symbolic", link = "The Symbolic" },
{ label = "The Imaginary", link = "The Imaginary" }
}
},
{
title = "Desire, Drive, Jouissance",
description = "Concepts articulating lack, satisfaction, and excess.",
items = {
{ label = "Desire", link = "Desire" },
{ label = "Drive", link = "Drive" },
{ label = "Jouissance", link = "Jouissance" },
{ label = "Objet petit a", link = "Objet petit a" }
}
},
{
title = "Language and the Unconscious",
description = "Linguistic and structural dimensions of the unconscious.",
items = {
{ label = "Signifier", link = "Signifier" },
{ label = "Metaphor", link = "Metaphor" },
{ label = "Metonymy", link = "Metonymy" },
{ label = "Point de capiton", link = "Point de capiton" }
}
}
}
p.themes = {
{
title = "Subject & Other",
items = {
{ label = "Subject", link = "Subject" },
{ label = "The Other", link = "The Other" },
{ label = "Big Other", link = "Big Other" },
{ label = "Small other", link = "Small other" }
}
},
{
title = "Structure & Diagnosis",
items = {
{ label = "Neurosis", link = "Neurosis" },
{ label = "Psychosis", link = "Psychosis" },
{ label = "Perversion", link = "Perversion" },
{ label = "Foreclosure", link = "Foreclosure" }
}
},
{
title = "Ethics & Practice",
items = {
{ label = "Ethics of psychoanalysis", link = "Ethics of psychoanalysis" },
{ label = "Desire of the analyst", link = "Desire of the analyst" },
{ label = "Transference", link = "Transference" },
{ label = "Interpretation", link = "Interpretation" }
}
}
}
----------------------------------------------------------------
-- HELPERS
----------------------------------------------------------------
local function renderList(items)
local out = { "<ul>" }
for _, item in ipairs(items) do
table.insert(out, string.format(
'<li>[[%s|%s]]</li>',
item.link,
item.label
))
end
table.insert(out, "</ul>")
return table.concat(out, "\n")
end
----------------------------------------------------------------
-- RENDERERS
----------------------------------------------------------------
function p.renderCards()
local out = { '<div class="mp-card-grid">' }
for _, card in ipairs(p.cards) do
table.insert(out, '<div class="mp-card">')
table.insert(out, '<h3>' .. card.title .. '</h3>')
table.insert(out, '<p>' .. card.description .. '</p>')
table.insert(out, renderList(card.items))
table.insert(out, '</div>')
end
table.insert(out, '</div>')
return table.concat(out, "\n")
end
function p.renderThemes()
local out = { '<div class="mp-theme-grid">' }
for _, theme in ipairs(p.themes) do
table.insert(out, '<div class="mp-theme">')
table.insert(out, '<h4>' .. theme.title .. '</h4>')
table.insert(out, renderList(theme.items))
table.insert(out, '</div>')
end
table.insert(out, '</div>')
return table.concat(out, "\n")
end
return p