Jump to content

Module:PortalConcepts

From No Subject

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