Run

wippy run wippy/views

Views

Template views and page rendering with Jet templates.

Installation

entries:
  - name: views
    kind: ns.dependency
    component: wippy/views
    version: "*"
    parameters:
      - name: api_router
        value: app:api.public

Defining Pages

entries:
  - name: my_page
    kind: template.jet
    meta:
      type: view.page
      title: My Page
      path: /my-page
    set: my_template_set
    data_func: app:my_data_loader
    resources:
      - app:my_styles

Rendering

local renderer = require("renderer")

local content, err = renderer.render("app:my_page", {
    id = "123"  -- route params
}, {
    sort = "name"  -- query params
})

Page Registry

local page_registry = require("page_registry")

-- Get all pages
local pages, err = page_registry.find_all()

-- Get specific page
local page, err = page_registry.get("app:my_page")

-- Check access
if page_registry.can_access(page) then
    -- render
end

Resource Registry

local resource_registry = require("resource_registry")

-- Get all resources
local resources, err = resource_registry.find_all()

-- Collect resources for a page
local page_resources = resource_registry.collect_for_page(page, page_registry, all_resources)

-- Group by type (css, js, etc.)
local grouped = resource_registry.group_by_type(page_resources)

Environment Variables

Map environment variables to template context:

entries:
  - name: env_mapping
    kind: registry.entry
    meta:
      type: view.env_mapping
    priority: 20
    mappings:
      api_url: API_BASE_URL
      app_name: APP_NAME

In templates:

<script>
  window.API_URL = "{{ env.api_url }}";
</script>

Data Functions

-- app/data_loaders/my_page.lua
local function handler(context)
    local params = context.params  -- route params
    local query = context.query    -- query params

    return {
        items = fetch_items(params.id),
        title = "Page " .. params.id
    }
end

return {handler = handler}

Register as function:

entries:
  - name: my_data_loader
    kind: function.lua
    source: file://data_loaders/my_page.lua
    method: handler

Template Context

Templates receive:

  • data - Data from data function
  • resources - Grouped resources (css, js, etc.)
  • query_params - URL query parameters
  • route_params - URL route parameters
  • env - Resolved environment variables

API Endpoints

When configured with a router, provides:

  • GET /pages - List all accessible pages
  • GET /render/:page_id - Render a page

Contracts

  • wippy.views:env_contract - Environment variable provider interface