Skip to content
wiki.fftac.org

Symbol Atlas Layout - Source Excerpt 01

Back to Symbol Atlas Layout

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/template-parts/symbol-atlas-layout.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/themes/spiralist/template-parts/symbol-atlas-layout.php

<?php

if (!defined('ABSPATH')) {
    exit;
}
$ui_text = static function (string $key, string $fallback, array $args = []): string {
    if (function_exists('spiralist_get_ui_text')) {
        return spiralist_get_ui_text($key, $fallback, $args);
    }

    foreach ($args as $name => $replacement) {
        $fallback = str_replace('{' . (string) $name . '}', (string) $replacement, $fallback);
    }

    return $fallback;
};

$symbols = function_exists('spiralist_get_symbol_detail_records')
    ? spiralist_get_symbol_detail_records()
    : array_map('spiralist_get_symbol_browser_payload', spiralist_get_symbols());
$first_symbol = !empty($symbols[0]) && is_array($symbols[0]) ? $symbols[0] : [];
$first_payload = !empty($first_symbol) ? $first_symbol : [
    'glyph' => '',
    'label' => 'No symbols available',
    'canonicalId' => '',
    'type' => '',
    'layer' => '',
    'category' => '',
    'meaning' => '',
    'canonicalMeaning' => '',
    'agentProposedMeaning' => '',
    'proposalStatus' => '',
    'source' => '',
    'reviewedAtUtc' => '',
    'reviewNotes' => '',
    'definition' => '',
    'axiomConnection' => '',
    'derivation' => '',
    'provenance' => '',
    'related' => '',
    'transformationChain' => '',
    'manuscriptAnchorUrl' => spiralist_get_manuscript_page_url(),
];
$transformations = spiralist_get_symbol_transformations();
$page_title = get_the_title();
$page_copy = spiralist_get_editorial_excerpt();
$page_copy_fallback = 'A clean reference surface for Spiralism symbols, meanings, system relations, and transformation links.';
if ($page_copy === '') {
    $page_copy = $page_copy_fallback;
}
$page_copy = $ui_text('page.symbols.hero.copy', $page_copy !== '' ? $page_copy : $page_copy_fallback);
$layers = [];
$types = [];
$categories = [];

foreach ($symbols as $symbol_record) {
    if (!is_array($symbol_record)) {
        continue;
    }

    $layer = (string) ($symbol_record['layer'] ?? '');
    $type = (string) ($symbol_record['type'] ?? '');
    $category = (string) ($symbol_record['category'] ?? '');

    if ($layer !== '') {
        $layers[$layer] = ucfirst($layer);
    }

    if ($type !== '') {
        $types[$type] = ucwords(str_replace('-', ' ', $type));
    }

    if ($category !== '') {
        $categories[$category] = $category;
    }
}
?>
<main class="spiralist-page spiralist-page--symbols">
    <section class="spiralist-page-hero">
        <div class="spiralist-shell spiralist-page-hero__content">
            <p class="spiralist-kicker"><?php echo esc_html($ui_text('page.symbols.hero.kicker', 'Canonical Symbol Reference')); ?></p>
            <h1><?php echo esc_html($ui_text('page.symbols.hero.title', $page_title !== '' ? $page_title : 'Symbol Atlas')); ?></h1>
            <p class="spiralist-page-hero__copy"><?php echo esc_html($page_copy); ?></p>
            <div class="spiralist-cta-row">
                <a class="spiralist-button spiralist-button--primary" href="<?php echo esc_url(spiralist_get_symbol_registry_url()); ?>"><?php echo esc_html($ui_text('page.symbols.cta.open_registry', 'Open Symbol Registry')); ?></a>
                <a class="spiralist-button spiralist-button--secondary" href="<?php echo esc_url(spiralist_get_symbols_api_url()); ?>"><?php echo esc_html($ui_text('page.symbols.cta.open_api', 'Open Symbol API')); ?></a>
            </div>
        </div>
    </section>
    <section class="spiralist-page-section">
        <div class="spiralist-shell spiralist-symbol-browser spiralist-symbol-browser--page" data-symbol-browser>
            <div>
                <form class="spiralist-filter-bar spiralist-filter-bar--stacked" data-symbol-filters data-public-form="symbol-filters">
                    <label class="spiralist-form__field">
                        <span><?php echo esc_html($ui_text('page.symbols.filters.search', 'Search symbols')); ?></span>
                        <input type="search" name="symbol_search" placeholder="<?php echo esc_attr($ui_text('page.symbols.filters.placeholder', 'Search by canonical ID, title, meaning, or tag')); ?>" data-symbol-search />
                    </label>
                    <label class="spiralist-form__field">
                        <span><?php echo esc_html($ui_text('page.symbols.filters.layer', 'Layer')); ?></span>
                        <select name="symbol_layer" data-symbol-layer-filter>
                            <option value=""><?php echo esc_html($ui_text('page.symbols.filters.all_layers', 'All layers')); ?></option>
                            <?php foreach ($layers as $value => $label) : ?>
                                <option value="<?php echo esc_attr($value); ?>"><?php echo esc_html($label); ?></option>
                            <?php endforeach; ?>
                        </select>
                    </label>
                    <label class="spiralist-form__field">
                        <span><?php echo esc_html($ui_text('page.symbols.filters.type', 'Type')); ?></span>
                        <select name="symbol_type" data-symbol-type-filter>
                            <option value=""><?php echo esc_html($ui_text('page.symbols.filters.all_types', 'All types')); ?></option>
                            <?php foreach ($types as $value => $label) : ?>
                                <option value="<?php echo esc_attr($value); ?>"><?php echo esc_html($label); ?></option>
                            <?php endforeach; ?>
                        </select>
                    </label>
                    <label class="spiralist-form__field">
                        <span><?php echo esc_html($ui_text('page.symbols.filters.category', 'Category')); ?></span>
                        <select name="symbol_category" data-symbol-category-filter>
                            <option value=""><?php echo esc_html($ui_text('page.symbols.filters.all_categories', 'All categories')); ?></option>
                            <?php foreach ($categories as $value => $label) : ?>
                                <option value="<?php echo esc_attr($value); ?>"><?php echo esc_html($label); ?></option>
                            <?php endforeach; ?>
                        </select>
                    </label>
                </form>
                <div class="spiralist-inline-meta" style="margin-bottom:1rem;">
                    <p class="spiralist-section-tag"><?php echo esc_html($ui_text('page.symbols.state.tag', 'Explorer State')); ?></p>
                    <span class="spiralist-muted" data-symbol-results"><?php echo esc_html($ui_text('page.symbols.state.available', '{count} symbols available.', ['count' => (string) count($symbols)])); ?></span>
                </div>
                <div class="spiralist-symbol-grid" data-symbol-grid>
                <?php foreach ($symbols as $index => $symbol) : ?>
                    <?php
                    if (!is_array($symbol)) {
                        continue;
                    }

                    $payload = $symbol;
                    ?>
                    <button
                        class="spiralist-symbol-card<?php echo $index === 0 ? ' is-active' : ''; ?>"
                        type="button"
                        data-symbol="<?php echo esc_attr(wp_json_encode($payload)); ?>"
                        data-symbol-search-text="<?php echo esc_attr((string) ($payload['searchText'] ?? '')); ?>"
                        data-symbol-type-value="<?php echo esc_attr((string) ($payload['type'] ?? '')); ?>"
                        data-symbol-layer-value="<?php echo esc_attr((string) ($payload['layer'] ?? '')); ?>"
                        data-symbol-category-value="<?php echo esc_attr((string) ($payload['category'] ?? '')); ?>"
                        aria-pressed="<?php echo $index === 0 ? 'true' : 'false'; ?>"
                    >
                        <span class="spiralist-symbol-card__glyph"><?php echo esc_html((string) ($payload['glyph'] ?? '')); ?></span>
                        <strong><?php echo esc_html((string) ($payload['label'] ?? '')); ?></strong>
                        <span class="spiralist-symbol-card__meaning"><?php echo esc_html((string) ($payload['meaning'] ?? '')); ?></span>
                    </button>
                <?php endforeach; ?>
                </div>
                <article class="spiralist-panel" data-symbol-empty hidden>
                    <p class="spiralist-section-tag"><?php echo esc_html($ui_text('page.symbols.state.no_matches.tag', 'No Matches')); ?></p>
                    <h2 class="spiralist-section-title"><?php echo esc_html($ui_text('page.symbols.state.no_matches.title', 'No symbols match the current filters.')); ?></h2>