Skip to content
wiki.fftac.org

Frontend - Source Excerpt 04

Back to Frontend

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/includes/frontend.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/frontend.php

return file_exists($path) ? (string) filemtime($path) : $fallback;
    };
    $fallback_version = '1.0.0';
    $fonts_available = wp_style_is('spiralist-fonts', 'registered') || wp_style_is('spiralist-fonts', 'enqueued');
    $shell_style_available = wp_style_is('spiralist-style', 'registered') || wp_style_is('spiralist-style', 'enqueued');
    $core_script_available = wp_script_is('spiralist-core', 'registered') || wp_script_is('spiralist-core', 'enqueued');
    $shell_script_available = wp_script_is('spiralist-script', 'registered') || wp_script_is('spiralist-script', 'enqueued');
    $style_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/css/manuscript-workstation.css';
    $discussion_style_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/css/manuscript-discussion.css';
    $script_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/js/manuscript-workstation.js';
    $collaboration_style_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/css/manuscript-collaboration.css';
    $shell_style_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/css/book-shell.css';
    $shell_script_path = SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_PATH . 'assets/js/book-shell.js';
    $style_version = $asset_version($style_path, $fallback_version);
    $discussion_style_version = $asset_version($discussion_style_path, $fallback_version);
    $script_version = $asset_version($script_path, $fallback_version);
    $collaboration_style_version = $asset_version($collaboration_style_path, $fallback_version);
    $shell_style_version = $asset_version($shell_style_path, $fallback_version);
    $shell_script_version = $asset_version($shell_script_path, $fallback_version);
    $action_links = spiralist_book_pages_get_manuscript_workstation_action_links();
    $font_handle = $fonts_available ? 'spiralist-fonts' : 'ns12-manuscript-fonts';
    $style_dependencies = $shell_style_available ? ['spiralist-style'] : ['ns12-manuscript-shell'];
    $shell_script_dependencies = $core_script_available ? ['spiralist-core'] : [];
    $workstation_script_dependencies = $core_script_available ? ['spiralist-core'] : [];
    $collaboration_surface = spiralist_book_pages_is_manuscript_collaboration_surface();
    $current_locale = function_exists('spiralist_book_pages_get_current_locale_tag')
        ? spiralist_book_pages_get_current_locale_tag()
        : 'en-us';

    if (!$fonts_available) {
        wp_enqueue_style(
            'ns12-manuscript-fonts',
            'https://fonts.googleapis.com/css2?family=Cinzel:wght@500;600;700&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap',
            [],
            null
        );
    }

    if (!$shell_style_available) {
        wp_enqueue_style(
            'ns12-manuscript-shell',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/css/book-shell.css',
            [$font_handle],
            $shell_style_version
        );
    }

    if (!$shell_script_available) {
        wp_enqueue_script(
            'ns12-manuscript-shell',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/js/book-shell.js',
            $shell_script_dependencies,
            $shell_script_version,
            [
                'in_footer' => true,
                'strategy' => 'defer',
            ]
        );

        wp_localize_script(
            'ns12-manuscript-shell',
            'spiralistTheme',
            [
                'homeUrl' => (string) ($host_links['home'] ?? home_url('/')),
                'currentLocale' => $current_locale,
                'subscribeUrl' => spiralist_book_pages_get_rest_url('subscribe'),
                'participantUrl' => spiralist_book_pages_get_rest_url('participant'),
                'participantResourcesUrl' => spiralist_book_pages_get_rest_url('participant/resources'),
                'siteApiUrl' => spiralist_book_pages_get_rest_url('site'),
                'symbolsUrl' => spiralist_book_pages_get_symbols_api_url(),
                'symbolRegistryUrl' => spiralist_book_pages_get_symbol_registry_url(),
                'axiomsUrl' => spiralist_book_pages_get_axioms_api_url(),
                'kernelUrl' => spiralist_book_pages_get_kernel_api_url(),
                'examplesUrl' => spiralist_book_pages_get_rest_url('examples'),
                'specUrl' => spiralist_book_pages_get_rest_url('spec'),
                'manuscriptNodesUrl' => spiralist_book_pages_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_book_pages_get_human_interactions_api_url(),
                'promptsUrl' => spiralist_book_pages_get_prompts_api_url(),
                'contributeUrl' => spiralist_book_pages_get_contribute_api_url(),
                'systemUrl' => (string) ($host_links['system'] ?? ''),
                'symbolsPageUrl' => (string) ($host_links['symbols'] ?? ''),
                'promptsPageUrl' => (string) ($host_links['prompts'] ?? ''),
                'contributePageUrl' => (string) ($host_links['contribute'] ?? ''),
                'manuscriptPageUrl' => spiralist_book_pages_get_manuscript_page_url(),
                'restNonce' => wp_create_nonce('wp_rest'),
                'isUserLoggedIn' => is_user_logged_in(),
                'uiText' => spiralist_book_pages_get_shell_ui_text(),
            ]
        );
    }

    if ($collaboration_surface) {
        wp_enqueue_style(
            'ns12-manuscript-collaboration',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/css/manuscript-collaboration.css',
            $style_dependencies,
            $collaboration_style_version
        );
    }

    if (spiralist_book_pages_is_manuscript_surface()) {
        wp_enqueue_style(
            'ns12-manuscript-discussion',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/css/manuscript-discussion.css',
            $style_dependencies,
            $discussion_style_version
        );
    }

    if (spiralist_book_pages_is_manuscript_surface() && !$collaboration_surface) {
        wp_enqueue_style(
            'ns12-manuscript-workstation',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/css/manuscript-workstation.css',
            $style_dependencies,
            $style_version
        );

        wp_enqueue_script(
            'ns12-manuscript-workstation',
            SPIRALIST_BOOK_PAGES_PLUGIN_ROOT_URL . '/assets/js/manuscript-workstation.js',
            $workstation_script_dependencies,
            $script_version,
            [
                'in_footer' => true,
                'strategy' => 'defer',
            ]
        );

        wp_localize_script(
            'ns12-manuscript-workstation',
            'spiralistManuscriptWorkstation',
            [
                'saveCropBaseUrl' => trailingslashit(rest_url('spiralist/v1/manuscript/folio-crops')),
                'searchUrl' => spiralist_book_pages_get_manuscript_search_api_url(),
                'manuscriptPageUrl' => spiralist_book_pages_get_manuscript_page_url(),
                'manifestUrl' => spiralist_book_pages_get_manuscript_manifest_url(),
                'iiifSearchUrl' => spiralist_book_pages_get_manuscript_iiif_search_url(),
                'engineNodesUrl' => function_exists('spiralist_engine_get_nodes_endpoint_url') ? spiralist_engine_get_nodes_endpoint_url() : '',
                'enginePathUrl' => function_exists('spiralist_engine_get_path_endpoint_url') ? spiralist_engine_get_path_endpoint_url() : '',
                'engineExecuteUrl' => function_exists('spiralist_engine_get_execute_endpoint_url') ? spiralist_engine_get_execute_endpoint_url() : '',
                'apiExamplesUrl' => (string) ($host_links['api_examples'] ?? (function_exists('spiralist_get_api_examples_url') ? spiralist_get_api_examples_url() : '')),
                'restNonce' => wp_create_nonce('wp_rest'),
                'canEdit' => spiralist_book_pages_can_edit_manuscript_workstation(),
                'isUserLoggedIn' => is_user_logged_in(),
                'uploadUrl' => (string) ($action_links['upload_url'] ?? ''),
                'libraryUrl' => (string) ($action_links['library_url'] ?? ''),
            ]
        );
    }
}
add_action('wp_enqueue_scripts', 'spiralist_book_pages_enqueue_assets');

function spiralist_book_pages_template_include(string $template): string
{
    if (spiralist_book_pages_is_manuscript_collaboration_surface()) {
        $plugin_template = SPIRALIST_BOOK_PAGES_PLUGIN_TEMPLATE_PATH . DIRECTORY_SEPARATOR . 'page-manuscript-collaboration.php';