templating.filters

Page actions AI-ready formats and sharing
Open LLM text
Share with AI
Ask Claude Ask ChatGPT Ask Gemini Ask Copilot

Built-in chirp template filters.

These are web-framework-specific filters auto-registered on every chirp kida Environment. They complement Kida's built-in filters with patterns common in server-rendered HTML + htmx apps.

Built-in chirp template filters.

These are web-framework-specific filters auto-registered on every chirp kida Environment. They complement Kida's built-in filters with patterns common in server-rendered HTML + htmx apps.

templating.filters

Name Type Default Description
type
qualified_name
element_type
description
source_file
line_number
is_autodoc
autodoc_element
_autodoc_template
_autodoc_url_path
_autodoc_page_type
title
doc_content_hash

Symbols on this page

function bem

Build chirpui BEM class string: chirpui-{block} chirpui-{block}--{variant} etc.

Jump to symbol
function attr

Output an HTML attribute when value is truthy, else empty string.

Shorthand for optional attributes without{% if %}blocks.

Jump to symbol
function _serialize_attr_value

Serialize attribute value into a stable string.

Jump to symbol
function html_attrs

Render HTML attributes from mapping or legacy raw string.

Contract:

  • dict / Mapping: escaped, deterministic HTML attributes
  • str / Markup: pass through…
Jump to symbol
function field_errors

Extract validation errors for a single form field.

Safely navigates a{field: [messages]}dict, returning an empty list when errorsis None, missing, or…

Jump to symbol
function qs

Append query-string parameters to a URL path.

Omits parameters whose values are falsy (None, "", 0, False) so callers can pass optional filters without…

Jump to symbol
function timeago

Convert a unix timestamp to a human-readable relative time.

Jump to symbol
function pluralize

Pluralize a word based on count.

Jump to symbol
function format_time

Format a unix timestamp asHH:MM:SS(UTC).

Jump to symbol
function url

Safelist URL for href attributes. Uses Kida's url_is_safe.

Returns the URL if the scheme is safe (http, https, relative), otherwise returns fallback. Use when…

Jump to symbol
function island_props

Serialize a value for safe use indata-island-props.

Returns HTML-escaped JSON as Markup so templates can embed props without manual escaping:

<div data-island-props="{{…
Jump to symbol
function island_attrs

Build a safe island mount attribute string.

Designed for framework-agnostic mount roots:

<div{{ island_attrs("editor", props=state, mount_id="editor-root") }}>
    ...
</div>
Jump to symbol
function primitive_attrs

Build island attributes with primitive metadata conventions.

Jump to symbol
function optimistic_attrs

Mount the blessedoptimistic_applyisland primitive.

Sugar overprimitive_attrs("optimistic_apply", ...). Put the htmx trigger (hx-postetc.) on the SAME element; this helper…

Jump to symbol
bem
function
def bem(block: str, variant: str = '', modifier: str = '', cls: str = '') -> str

Build chirpui BEM class string: chirpui-{block} chirpui-{block}--{variant} etc.

Parameters

Name Type Default Description
block str
variant str ''
modifier str ''
cls str ''
attr
function
def attr(value: Any, name: str) -> str | Markup

Output an HTML attribute when value is truthy, else empty string.

Shorthand for optional attributes without{% if %}blocks.

Parameters

Name Type Default Description
value Any
name str
_serialize_attr_value
function
def _serialize_attr_value(value: Any) -> str

Serialize attribute value into a stable string.

Parameters

Name Type Default Description
value Any
html_attrs
function
def html_attrs(value: Any) -> str | Markup

Render HTML attributes from mapping or legacy raw string.

Contract:

  • dict / Mapping: escaped, deterministic HTML attributes
  • str / Markup: pass through (legacy compatibility)
  • None / False: no output

Mapping values follow HTML attribute semantics:

  • True renders as a valueless attribute (e.g. disabled)
  • False / Noneare omitted
  • other values are escaped and rendered askey="value"

Parameters

Name Type Default Description
value Any
field_errors
function
def field_errors(errors: Any, field_name: str) -> list[str]

Extract validation errors for a single form field.

Safely navigates a{field: [messages]}dict, returning an empty list when errors is None, missing, or the field has no errors.

Parameters

Name Type Default Description
errors Any
field_name str
qs
function
def qs(base: str, **params: Any) -> str

Append query-string parameters to a URL path.

Omits parameters whose values are falsy (None, "", 0, False) so callers can pass optional filters without manual guards.

Parameters

Name Type Default Description
base str
**params Any
timeago
function
def timeago(unix_ts: int | float) -> str

Convert a unix timestamp to a human-readable relative time.

Parameters

Name Type Default Description
unix_ts int | float
pluralize
function
def pluralize(count: int, singular: str, plural: str | None = None) -> str

Pluralize a word based on count.

Parameters

Name Type Default Description
count int
singular str
plural str | None None
format_time
function
def format_time(unix_ts: float) -> str

Format a unix timestamp asHH:MM:SS(UTC).

Parameters

Name Type Default Description
unix_ts float
url
function
def url(value: str, fallback: str = '#') -> str

Safelist URL for href attributes. Uses Kida's url_is_safe.

Returns the URL if the scheme is safe (http, https, relative), otherwise returns fallback. Use when building href from user or external data.

Parameters

Name Type Default Description
value str
fallback str '#'
island_props
function
def island_props(value: Any) -> Markup

Serialize a value for safe use indata-island-props.

Returns HTML-escaped JSON as Markup so templates can embed props without manual escaping:

<div data-island-props="{{ props | island_props }}"></div>

Parameters

Name Type Default Description
value Any
island_attrs
function
def island_attrs(name: str, props: Any | None = None, *, mount_id: str | None = None, version: str = '1', src: str | None = None, cls: str = '') -> Markup

Build a safe island mount attribute string.

Designed for framework-agnostic mount roots:

<div{{ island_attrs("editor", props=state, mount_id="editor-root") }}>
    ...
</div>

Parameters

Name Type Default Description
name str
props Any | None None
mount_id str | None None
version str '1'
src str | None None
cls str ''
primitive_attrs
function
def primitive_attrs(primitive: str, props: dict[str, Any] | None = None, *, mount_id: str | None = None, version: str = '1', src: str | None = None, cls: str = '') -> Markup

Build island attributes with primitive metadata conventions.

Parameters

Name Type Default Description
primitive str
props dict[str, Any] | None None
mount_id str | None None
version str '1'
src str | None None
cls str ''
optimistic_attrs
function
def optimistic_attrs(ops: list[dict[str, Any]] | dict[str, Any], *, region: str | None = None, mount_id: str | None = None, version: str = '1', pending_class: str = 'is-optimistic-pending', error_class: str = 'is-optimistic-error', cls: str = '') -> Markup

Mount the blessedoptimistic_applyisland primitive.

Sugar overprimitive_attrs("optimistic_apply", ...). Put the htmx trigger (hx-postetc.) on the SAME element; this helper only adds the optimistic mount metadata. The runtime appliesopslocally and instantly from the client's OWN pre-mutation snapshot, lets htmx do the real request, swaps the authoritative server fragment on success (last-write-wins), and reverts to the snapshot only when no authoritative fragment lands.

<button hx-post="/like" hx-swap="outerHTML"
        {{ optimistic_attrs([{"op": "toggleClass", "value": "liked"}],
                            mount_id="like-1") }}>...</button>

RaisesTypeError for a malformed op (non-object, or a non-string op name) andValueErrorfor a policy violation (unknown op, missing op arguments, or any server-correlation key), so the helper — the authoritative enforcement point — can never emit a mount that would grow per-client server view state. Validity is decided by the shared chirp.contracts.rules_islands.validate_optimistic_op, so the helper and the staticapp.check()contract never drift.

Parameters

Name Type Default Description
ops list[dict[str, Any]] | dict[str, Any]
region str | None None
mount_id str | None None
version str '1'
pending_class str 'is-optimistic-pending'
error_class str 'is-optimistic-error'
cls str ''

View source · /home/runner/work/chirp/chirp/site/../src/chirp/templating/filters.py:1