Frontend - Source Excerpt 04
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';