CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-neoteroi-mkdocs

Plugins for MkDocs and Python Markdown providing OpenAPI documentation, contributor tracking, timelines, cards, advanced tables, and project management features.

Pending
Overview
Eval results
Files

card-layouts.mddocs/

Card Layouts

Displays content in card-based grid layouts with support for images, icons, links, and responsive columns. This Markdown extension provides card components for organizing content in visually appealing grid layouts, supporting both embedded and external data sources with extensive customization options.

Capabilities

Extension Configuration

Configure the cards extension with priority and link behavior options.

class CardsExtension(Extension):
    """
    Markdown extension for card layout components.
    
    Configuration:
    - priority: Extension processing priority (default: 12)
    - blank_target: Whether to open links in new tab (default: False)
    """
    config = {
        "priority": [12, "The priority to be configured for the extension."],
        "blank_target": [False, 'Whether to generate links with target="_blank"'],
    }
    
    def extendMarkdown(self, md): ...

Card Processing

The extension supports two processing modes for different data sources.

class CardsEmbeddedProcessor(BaseCardsProcessor, EmbeddedBlockProcessor):
    """
    Block processor for embedded card data using ::cards:: syntax.
    """

class CardsSourceProcessor(BaseCardsProcessor, SourceBlockProcessor):
    """
    Block processor for external card data using [cards(...)] syntax.
    """

class BaseCardsProcessor:
    """
    Base class for card processors with common functionality.
    """
    @property
    def name(self) -> str:
        """Returns 'cards' as the processor name."""
    
    def norm_obj(self, obj):
        """
        Normalizes card data, converting image objects.
        
        Parameters:
        - obj: List of card item dictionaries
        """
    
    def build_html(self, parent, obj, props) -> None:
        """
        Builds HTML for card components.
        
        Parameters:
        - parent: Parent XML element
        - obj: List of card items
        - props: Configuration properties
        """

Data Models

Card Data Structures

class CardItem:
    """
    Represents a single card item.
    
    Attributes:
    - title: Card title (required)
    - url: Optional link URL
    - content: Card content description
    - icon: Icon identifier (FontAwesome, image, or text)
    - key: Optional unique identifier
    - image: Optional card image
    """
    title: str
    url: Optional[str]
    content: Optional[str]
    icon: Optional[str]
    key: Optional[str]
    image: Optional[Image]

class Cards:
    """
    Represents a collection of card items.
    
    Attributes:
    - items: List of card items
    """
    items: List[CardItem]

HTML Rendering

class CardsViewOptions:
    """
    Configuration options for cards rendering.
    
    Attributes:
    - id: HTML ID attribute
    - class_name: CSS class name
    - cols: Number of columns in grid
    - image_bg: Whether to use images as backgrounds
    - blank_target: Whether to open links in new tab
    """
    id: Optional[str]
    class_name: Optional[str]
    cols: int
    image_bg: bool
    blank_target: bool

class CardsHTMLBuilder:
    """
    Builds HTML for card components.
    """
    def build_html(self, parent, cards: Cards) -> None:
        """
        Builds complete cards grid HTML structure.
        
        Parameters:
        - parent: Parent XML element
        - cards: Cards data to render
        """
    
    def build_item_html(self, parent, item: CardItem) -> None:
        """
        Builds HTML for individual card item.
        
        Parameters:
        - parent: Parent XML element
        - item: Card item to render
        """
    
    def build_image_html(self, wrapper_element, item: CardItem) -> None:
        """
        Builds card image HTML.
        
        Parameters:
        - wrapper_element: Card wrapper element
        - item: Card item with image data
        """

Usage Examples

Basic Card Layout

Use ::cards:: blocks with embedded data:

::cards::
- title: "Getting Started"
  content: "Learn the basics of using our platform"
  url: "/getting-started"
  icon: "play-circle"

- title: "API Reference"
  content: "Complete API documentation and examples"
  url: "/api"
  icon: "book"

- title: "Examples"
  content: "Code examples and tutorials"
  url: "/examples"
  icon: "code"
::end-cards::

Cards with Images

::cards::
- title: "Product A"
  content: "High-quality product with advanced features"
  url: "/products/a"
  image:
    url: "./images/product-a.jpg"
    alt: "Product A"

- title: "Product B"
  content: "Affordable solution for everyday use"
  url: "/products/b"
  image:
    url: "./images/product-b.jpg"
    alt: "Product B"
::end-cards::

Custom Grid Layout

::cards:: cols=4 class="feature-cards"
- title: "Fast"
  content: "Lightning-fast performance"
  icon: "zap"

- title: "Secure"
  content: "Enterprise-grade security"
  icon: "shield"

- title: "Scalable"
  content: "Grows with your business"
  icon: "trending-up"

- title: "Reliable"
  content: "99.9% uptime guarantee"
  icon: "check-circle"
::end-cards::

Cards with Background Images

::cards:: image_bg=true cols=2
- title: "Mountain Adventures"
  content: "Explore breathtaking mountain trails"
  image:
    url: "./images/mountains.jpg"
    alt: "Mountains"
  url: "/adventures/mountain"

- title: "Ocean Expeditions"
  content: "Discover underwater wonders"
  image:
    url: "./images/ocean.jpg"
    alt: "Ocean"
  url: "/adventures/ocean"
::end-cards::

External Card Data

Reference external data sources:

[cards(features.yaml)]

Where features.yaml contains:

- title: "Feature One"
  content: "Description of feature one"
  icon: "star"
- title: "Feature Two"
  content: "Description of feature two"
  icon: "heart"

Complex Card Example

::cards:: id="product-showcase" cols=3 blank_target=true
- title: "Professional Plan"
  content: |
    Perfect for growing teams and businesses.
    
    Features:
    - Unlimited projects
    - Advanced analytics
    - Priority support
    - Custom integrations
  url: "/pricing/professional"
  icon: "briefcase"
  image:
    url: "./images/pro-plan.jpg"
    alt: "Professional Plan"
    width: 300
    height: 200

- title: "Enterprise Plan"
  content: |
    For large organizations with complex needs.
    
    Features:
    - Everything in Professional
    - Dedicated account manager
    - Custom SLA
    - On-premise deployment
  url: "/pricing/enterprise"
  icon: "building"
  image:
    url: "./images/enterprise-plan.jpg"
    alt: "Enterprise Plan"
    width: 300
    height: 200

- title: "Contact Sales"
  content: |
    Need a custom solution? Our sales team can help you find the perfect fit for your organization.
  url: "/contact"
  icon: "phone"
::end-cards::

Data Source Support

Supported Formats

The cards extension supports multiple data formats:

  • YAML: Structured card data (recommended)
  • JSON: JavaScript Object Notation format
  • CSV: Comma-separated values with column headers

External Data Sources

<!-- Local files -->
[cards(./data/products.yaml)]
[cards(../shared/features.json)]

<!-- URLs (if configured) -->
[cards(https://api.example.com/cards.json)]

CSV Format Example

title,content,url,icon
"Guide","User documentation","/docs","book"
"API","Technical reference","/api","code"
"Support","Get help","/support","help-circle"

Image Data Formats

Images can be specified in multiple ways:

# Simple string URL
- title: "Card with Image"
  image: "./images/card.jpg"

# Full image object
- title: "Card with Detailed Image"
  image:
    url: "./images/card.jpg"
    alt: "Card image description"
    width: 400
    height: 300

# Image with responsive attributes
- title: "Responsive Card"
  image:
    url: "./images/responsive-card.jpg"
    alt: "Responsive image"

Styling and Customization

CSS Classes

The cards extension generates semantic HTML with CSS classes:

<div class="cards-container">
  <div class="card">
    <div class="card-image">
      <img src="..." alt="...">
    </div>
    <div class="card-content">
      <h3 class="card-title">Title</h3>
      <p class="card-description">Content</p>
    </div>
    <div class="card-icon">
      <i class="fas fa-icon"></i>
    </div>
  </div>
</div>

Grid Layout Options

  • cols=1: Single column layout
  • cols=2: Two-column grid
  • cols=3: Three-column grid (default)
  • cols=4: Four-column grid
  • cols=6: Six-column grid

Link Behavior

  • blank_target=false: Links open in same tab (default)
  • blank_target=true: Links open in new tab/window

Image Display Modes

  • image_bg=false: Images display as standard img elements (default)
  • image_bg=true: Images display as background images for full-card coverage

Install with Tessl CLI

npx tessl i tessl/pypi-neoteroi-mkdocs

docs

advanced-tables.md

card-layouts.md

contributors-tracking.md

index.md

openapi-documentation.md

project-management.md

timeline-visualization.md

tile.json