Manuscript Workstation - Source Excerpt 01
Back to Manuscript Workstation
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/templates/manuscript-workstation.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/templates/manuscript-workstation.php
<?php
if (!defined('ABSPATH')) {
exit;
}
$workstation_folios = isset($workstation_folios) && is_array($workstation_folios)
? $workstation_folios
: spiralist_book_pages_get_manuscript_workstation_folio_records($visible_pages ?? []);
$workstation_viewer_folios = isset($workstation_viewer_folios) && is_array($workstation_viewer_folios)
? $workstation_viewer_folios
: spiralist_book_pages_get_manuscript_workstation_folio_records($visible_pages ?? [], ['viewer_ready' => true]);
$workstation_spread = isset($workstation_spread) && is_array($workstation_spread)
? $workstation_spread
: spiralist_book_pages_get_manuscript_workstation_spread($visible_pages ?? [], $current_page ?? []);
$workstation_can_edit = isset($workstation_can_edit) ? (bool) $workstation_can_edit : false;
$workstation_action_links = isset($workstation_action_links) && is_array($workstation_action_links)
? $workstation_action_links
: [];
$workstation_is_detail_route = isset($requested_folio) && trim((string) $requested_folio) !== '';
$left_folio = is_array($workstation_spread['left'] ?? null) ? $workstation_spread['left'] : [];
$right_folio = is_array($workstation_spread['right'] ?? null) ? $workstation_spread['right'] : [];
$spread_folios = isset($workstation_spread['folios']) && is_array($workstation_spread['folios'])
? array_values(
array_filter(
$workstation_spread['folios'],
static function ($folio): bool {
return is_array($folio) && !empty($folio);
}
)
)
: [];
if (empty($spread_folios)) {
foreach (['left' => $left_folio, 'right' => $right_folio] as $slot => $folio) {
if (empty($folio) || !is_array($folio)) {
continue;
}
$folio['slot'] = $slot;
$folio['is_context_only'] = false;
$spread_folios[] = $folio;
}
}
if ($workstation_is_detail_route && !empty($current_page)) {
$detail_folio = spiralist_book_pages_get_manuscript_workstation_folio_record($current_page, ['viewer_ready' => true]);
if (!empty($detail_folio)) {
$detail_folio['slot'] = 'left';
$detail_folio['is_context_only'] = false;
$left_folio = $detail_folio;
$right_folio = [];
$spread_folios = [$detail_folio];
$workstation_spread = [
'left' => $detail_folio,
'right' => [],
'folios' => $spread_folios,
'current_position' => 'left',
];
}
}
$current_position = (string) ($workstation_spread['current_position'] ?? 'left');
$current_folio = [];
foreach ($spread_folios as $folio) {
$slot = (string) ($folio['slot'] ?? '');
$is_current_slot = ($current_position === 'right' && $slot === 'right')
|| ($current_position !== 'right' && $slot === 'left');
if ($is_current_slot) {
$current_folio = $folio;
break;
}
}
if (empty($current_folio)) {
$current_folio = $current_position === 'right' && !empty($right_folio) ? $right_folio : $left_folio;
}
$study_overlay_available = !empty($current_folio['overlay_data']);
$study_surface_page = isset($study_surface_page) && is_array($study_surface_page) ? $study_surface_page : [];
$study_surface_title = trim((string) ($study_surface_page['title'] ?? ''));
$current_folio_title = trim((string) ($current_folio['title'] ?? ''));
$initial_view_mode = !empty($right_folio) ? 'spread' : 'single';
$show_layout_controls = !empty($right_folio);
$layout_spread_label = $workstation_can_edit ? 'Spread' : 'Facing';
$layout_single_label = $workstation_can_edit ? 'Single' : 'Page';
$raw_mode_label = $workstation_can_edit ? 'Raw Mode' : 'Raw Image';
$thumb_count_copy = sprintf('%d folio%s', count($workstation_folios), count($workstation_folios) === 1 ? '' : 's');
$spread_count = count($spread_folios);
$spread_mode_label = $spread_count >= 3
? 'Three-folio spread ready'
: (!empty($right_folio) ? 'Dual-page spread' : 'Single folio');
$current_crop_copy = $study_overlay_available
? sprintf(
'%s supports the study overlay. Toggle it inside the workstation for contextual notes, signal terms, and %s.',
$current_folio_title !== '' ? $current_folio_title : 'This folio',
!empty($current_folio['is_study_surface'])
? 'linked symbolic nodes'
: 'page-specific reading cues'
)
: ($workstation_can_edit
? 'Crop guides are normalized per folio so saved boundaries survive fit, zoom, and raw inspection changes.'
: ($show_layout_controls
? 'Use wheel or pinch to zoom, switch between facing and single-page reading, and open the raw image when you want the untouched artifact.'
: 'Use wheel or pinch to zoom, and open the raw image when you want the untouched artifact.'));
$workstation_upload_url = (string) ($workstation_action_links['upload_url'] ?? '');
$workstation_library_url = (string) ($workstation_action_links['library_url'] ?? '');
$workstation_prompt_url = (string) ($workstation_action_links['prompt_url'] ?? '');
$workstation_fragment_url = (string) ($workstation_action_links['fragment_url'] ?? '');
$manuscript_reader_url = isset($manuscript_reader_url) && is_callable($manuscript_reader_url)
? $manuscript_reader_url
: static function (array $page) use ($overview_url): string {
$target_slug = sanitize_title((string) ($page['slug'] ?? ''));
return $target_slug === '' ? $overview_url : spiralist_book_pages_get_manuscript_folio_url($page);
};
$workstation_section_records = isset($section_records) && is_array($section_records) ? $section_records : [];
$previous_folio_record = !empty($previous_page)
? spiralist_book_pages_get_manuscript_workstation_folio_record($previous_page, ['viewer_ready' => true])
: [];
$next_folio_record = !empty($next_page)
? spiralist_book_pages_get_manuscript_workstation_folio_record($next_page, ['viewer_ready' => true])
: [];
$previous_turn_record = $previous_folio_record;
$next_turn_record = $next_folio_record;
foreach ($spread_folios as $folio) {
if (!is_array($folio) || empty($folio['is_context_only'])) {
continue;
}
$slot = (string) ($folio['slot'] ?? '');
if ($slot === 'left') {
$previous_turn_record = $folio;
continue;
}
if ($slot === 'right') {
$next_turn_record = $folio;
}
}
$previous_turn_url = $manuscript_reader_url(is_array($previous_turn_record) ? $previous_turn_record : []);
$next_turn_url = $manuscript_reader_url(is_array($next_turn_record) ? $next_turn_record : []);
$previous_turn_spread_url = ($previous_turn_url !== '' && $previous_turn_url !== $previous_page_url) ? $previous_turn_url : '';
$next_turn_spread_url = ($next_turn_url !== '' && $next_turn_url !== $next_page_url) ? $next_turn_url : '';
$context_page_summary = sprintf('Page %d of %d', $current_page_sequence, max(1, $manuscript_page_count));
$context_section_summary = sprintf('%s / %d of %d', $current_section_title, $current_section_sequence, $current_section_count);
$context_prompt_summary = sprintf('%d of %d prompts linked', $prompt_coverage_published, max(1, $prompt_coverage_total));
$dossier_summary = sprintf('%d related prompt%s', $related_prompt_count, $related_prompt_count === 1 ? '' : 's');
$book_heading = 'Spiralism Canonical Manuscript';
$manuscript_route_mode = $requested_folio !== ''
? 'folio'
: ($requested_section !== '' ? 'section' : 'overview');
$workstation_is_browser_route = !$workstation_is_detail_route;
$manuscript_heading_kicker = $manuscript_route_mode === 'folio'
? 'Dedicated Folio Route'
: ($manuscript_route_mode === 'section' ? 'Dedicated Chapter Route' : 'Online-First Book');
$manuscript_headline = $manuscript_route_mode === 'folio'
? $current_page_title
: ($manuscript_route_mode === 'section' ? $current_section_title : $book_heading);
$manuscript_route_summary = $manuscript_route_mode === 'folio'
? sprintf(
'%s is folio %d of %d in %s. This dedicated route keeps the manuscript viewer, full-resolution image, study tools, and dossier tabs focused on this page.',
$current_page_title,
$current_page_sequence,
max(1, $manuscript_page_count),
$current_page_section_label
)
: ($manuscript_route_mode === 'section'
? sprintf(
'%s groups %d folio%s into one chapter route while preserving the same manuscript viewer, sequence controls, and codex dossier.',
$current_section_title,
$current_section_count,
$current_section_count === 1 ? '' : 's'
)
: '');
$current_section_url = $current_page_section_slug !== ''
? spiralist_book_pages_get_manuscript_section_url($current_page_section_slug)
: $overview_url;