Functions - Source Excerpt 04
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/functions.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/themes/spiralist/functions.php
if (!spiralist_theme_needs_shell_script()) {
return;
}
wp_enqueue_script(
'spiralist-script',
get_theme_file_uri('assets/js/spiralist.js'),
['spiralist-core'],
$script_version,
[
'in_footer' => true,
'strategy' => 'defer',
]
);
wp_localize_script(
'spiralist-script',
'spiralistTheme',
[
'subscribeUrl' => rest_url('uai1/v1/subscribe'),
'participantUrl' => rest_url('uai1/v1/participant'),
'participantResourcesUrl' => rest_url('uai1/v1/participant/resources'),
'manuscriptNodesUrl' => spiralist_get_manuscript_nodes_url(),
'engineExecuteUrl' => function_exists('spiralist_engine_get_execute_endpoint_url') ? spiralist_engine_get_execute_endpoint_url() : '',
'engineInstanceUrl' => function_exists('spiralist_engine_get_instance_endpoint_url') ? spiralist_engine_get_instance_endpoint_url() : '',
'interactionUrl' => spiralist_get_human_interactions_api_url(),
'promptsUrl' => function_exists('spiralist_get_prompts_api_url') ? spiralist_get_prompts_api_url() : '',
'contributeUrl' => function_exists('spiralist_get_contribute_api_url') ? spiralist_get_contribute_api_url() : '',
'systemUrl' => function_exists('spiralist_get_system_url') ? spiralist_get_system_url() : '',
'symbolsPageUrl' => function_exists('spiralist_get_symbols_page_url') ? spiralist_get_symbols_page_url() : '',
'promptsPageUrl' => function_exists('spiralist_get_prompts_page_url') ? spiralist_get_prompts_page_url() : '',
'manuscriptPageUrl' => function_exists('spiralist_get_manuscript_page_url') ? spiralist_get_manuscript_page_url() : '',
'restNonce' => wp_create_nonce('wp_rest'),
'isUserLoggedIn' => is_user_logged_in(),
'uiText' => [
'symbolsPromptLoading' => spiralist_get_ui_text('page.symbols.prompts.loading', 'Loading prompt references...'),
'symbolsPromptUnavailable' => spiralist_get_ui_text('page.symbols.prompts.unavailable', 'Prompt references unavailable.'),
'symbolsPromptEmpty' => spiralist_get_ui_text('page.symbols.prompts.empty', 'No related prompts yet.'),
'symbolsPromptEmptyForSymbol' => spiralist_get_ui_text('page.symbols.prompts.empty_for_symbol', 'No related prompts for this symbol yet.'),
'symbolsPromptFallback' => spiralist_get_ui_text('page.symbols.prompts.fallback', 'Prompt'),
'symbolsPromptReferenceFallback' => spiralist_get_ui_text('page.symbols.prompts.reference_fallback', 'Structured prompt reference.'),
'symbolsPromptLoadError' => spiralist_get_ui_text('page.symbols.prompts.load_error', 'Unable to load prompt references.'),
'symbolsVisibleCount' => spiralist_get_ui_text('page.symbols.state.visible', '{count} symbols visible.'),
'symbolsVisibleCountSingular' => spiralist_get_ui_text('page.symbols.state.visible_singular', '{count} symbol visible.'),
'symbolsLayerFallback' => spiralist_get_ui_text('page.symbols.value.reference', 'Reference'),
'symbolsCategoryFallback' => spiralist_get_ui_text('page.symbols.value.uncategorized', 'Uncategorized'),
'symbolsAxiomLinksEmpty' => spiralist_get_ui_text('page.symbols.axioms.empty', 'No axiom links declared.'),
'symbolsAxiomFallback' => spiralist_get_ui_text('page.symbols.axioms.fallback', 'Axiom'),
'symbolsDirectionInput' => spiralist_get_ui_text('page.symbols.transformations.input', 'Input'),
'symbolsDirectionOutput' => spiralist_get_ui_text('page.symbols.transformations.output', 'Output'),
'symbolsTransformationFallback' => spiralist_get_ui_text('page.symbols.transformations.fallback', 'Transformation'),
'symbolsTransformationsEmpty' => spiralist_get_ui_text('page.symbols.transformations.empty', 'No transformation links declared.'),
'symbolsCrosswalkAnchor' => spiralist_get_ui_text('page.symbols.crosswalk.anchor', 'View manuscript anchor'),
'symbolsCrosswalkSymbols' => spiralist_get_ui_text('page.symbols.crosswalk.symbols', 'Open in symbols explorer'),
'symbolsCrosswalkPrompts' => spiralist_get_ui_text('page.symbols.crosswalk.prompts', 'Search prompts'),
'symbolsCrosswalkRelatedPrompts' => spiralist_get_ui_text('page.symbols.crosswalk.related_prompts', 'Search related prompts'),
'symbolsCrosswalkSystem' => spiralist_get_ui_text('page.symbols.crosswalk.system', 'System concepts'),
'symbolsCrosswalkRelatedSystem' => spiralist_get_ui_text('page.symbols.crosswalk.related_system', 'Open related system surface'),
'symbolsCrosswalkTransformations' => spiralist_get_ui_text('page.symbols.crosswalk.transformations', 'View transformations'),
'symbolsCrosswalkEmpty' => spiralist_get_ui_text('page.symbols.crosswalk.empty', 'No crosswalk links available.'),
'symbolsCrosswalkNodeEmpty' => spiralist_get_ui_text('page.symbols.crosswalk.node_empty', 'No additional crosswalk links for this node.'),
'symbolsAnchorView' => spiralist_get_ui_text('page.symbols.anchor.view_in_manuscript', 'View in manuscript'),
'symbolsAnchorEmpty' => spiralist_get_ui_text('page.symbols.anchor.unavailable', 'No manuscript anchor available.'),
'symbolsCrosswalkPending' => spiralist_get_ui_text('page.symbols.crosswalk.pending', 'Crosswalk links will appear here for the active symbol.'),
'symbolsAxiomConnectionEmpty' => spiralist_get_ui_text('page.symbols.inspector.axiom_connection.empty', 'No axiom links declared.'),
'symbolsDerivationEmpty' => spiralist_get_ui_text('page.symbols.inspector.derivation.empty', 'No derivation declared.'),
'symbolsProvenanceEmpty' => spiralist_get_ui_text('page.symbols.inspector.provenance.empty', 'No provenance declared.'),
'symbolsRelatedEmpty' => spiralist_get_ui_text('page.symbols.inspector.related_symbols.empty', 'No related symbols declared.'),
'symbolsTransformationChainEmpty' => spiralist_get_ui_text('page.symbols.inspector.transformation_chain.empty', 'No transformation chain declared.'),
'manuscriptFieldDatasetError' => spiralist_get_ui_text('page.manuscript.field.dataset_error', 'The symbolic field dataset could not be loaded.'),
'manuscriptFieldNodesEmpty' => spiralist_get_ui_text('page.manuscript.field.nodes_empty', 'No manuscript nodes are currently available for inspection.'),
'manuscriptFieldModeStatus' => spiralist_get_ui_text('page.manuscript.field.mode_status', '{mode} mode: {visibleCount} of {totalCount} nodes visible.'),
'manuscriptFieldRelationsVisible' => spiralist_get_ui_text('page.manuscript.field.relations_visible', 'Relations remain visible.'),
'manuscriptFieldRelationsHover' => spiralist_get_ui_text('page.manuscript.field.relations_hover', 'Relations appear on hover or selection.'),
'manuscriptFieldCurrentState' => spiralist_get_ui_text('page.manuscript.field.current_state', 'Current state: {state}.'),
'manuscriptFieldNextNodes' => spiralist_get_ui_text('page.manuscript.field.next_nodes', 'Next nodes: {nodes}.'),
'manuscriptFieldHistory' => spiralist_get_ui_text('page.manuscript.field.history', 'History: {history}.'),
'manuscriptFieldSectionFallback' => spiralist_get_ui_text('page.manuscript.field.section_fallback', 'Section'),
'manuscriptFieldNodeFallback' => spiralist_get_ui_text('page.manuscript.field.node_fallback', 'Node'),
'manuscriptFieldRelatedEmpty' => spiralist_get_ui_text('page.manuscript.field.related_empty', 'No related nodes declared.'),
'manuscriptFieldSummaryEmpty' => spiralist_get_ui_text('page.manuscript.field.summary_empty', 'No summary available for this node.'),
'manuscriptFieldMeaningEmpty' => spiralist_get_ui_text('page.manuscript.field.meaning_empty', 'No meaning declared.'),
'manuscriptFieldDefinitionEmpty' => spiralist_get_ui_text('page.manuscript.field.definition_empty', 'No definition declared.'),
'manuscriptFieldSourceAxiomEmpty' => spiralist_get_ui_text('page.manuscript.field.source_axiom_empty', 'No source axiom declared.'),
'manuscriptFieldIoNotTransformation' => spiralist_get_ui_text('page.manuscript.field.io_not_transformation', 'This node is not a transformation surface.'),