Runtime - Source Excerpt 16
Summary
This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php so readers can inspect the evidence without opening the full source file.
**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/runtime.php
(string) ($page['section_summary'] ?? $page['section_title'] ?? $page['section_label'] ?? 'Section')
),
'items' => [],
];
}
$sections[$sectionSlug]['items'][] = [
'id' => $canvasId,
'type' => 'Canvas',
];
}
foreach ($sections as $sectionRange) {
$sectionRanges[] = $sectionRange;
}
$topThumbnail = [];
if (!empty($pages[0])) {
$sources = function_exists('spiralist_book_pages_get_book_page_asset_source_urls')
? spiralist_book_pages_get_book_page_asset_source_urls((array) $pages[0], true)
: [];
$thumbnailUrl = (string) ($sources['thumbnail_url'] ?? $sources['interactive_url'] ?? $pages[0]['url'] ?? '');
if ($thumbnailUrl !== '') {
$topThumbnail[] = [
'id' => $thumbnailUrl,
'type' => 'Image',
'format' => spiralist_book_pages_get_manuscript_iiif_image_format((array) $pages[0]),
];
}
}
return [
'@context' => 'http://iiif.io/api/presentation/3/context.json',
'id' => $manifestUrl,
'type' => 'Manifest',
'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
'summary' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestSummary),
'behavior' => ['paged'],
'viewingDirection' => 'left-to-right',
'homepage' => [
[
'id' => $overviewUrl,
'type' => 'Text',
'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
'format' => 'text/html',
],
],
'provider' => [
[
'id' => home_url('/'),
'type' => 'Agent',
'label' => spiralist_book_pages_get_manuscript_iiif_label_map($siteName !== '' ? $siteName : 'Spiralist'),
],
],
'metadata' => [
spiralist_book_pages_get_manuscript_iiif_metadata_entry('Folio Count', (string) count($pages)),
spiralist_book_pages_get_manuscript_iiif_metadata_entry('Section Count', (string) count($sections)),
spiralist_book_pages_get_manuscript_iiif_metadata_entry('Platform', 'Spiralist Manuscript for WordPress'),
],
'service' => [$searchService],
'thumbnail' => $topThumbnail,
'items' => $items,
'structures' => !empty($sectionRanges)
? [
[
'id' => untrailingslashit($manifestUrl) . '/range/table-of-contents',
'type' => 'Range',
'label' => spiralist_book_pages_get_manuscript_iiif_label_map('Table of Contents'),
'items' => $sectionRanges,
],
]
: [],
];
}
function spiralist_book_pages_get_manuscript_search_payload(string $query, int $limit = 8): array
{
$normalizedQuery = function_exists('spiralist_book_pages_normalize_text_for_index')
? spiralist_book_pages_normalize_text_for_index($query)
: trim($query);
$limit = max(1, min(24, $limit));
$allResults = $normalizedQuery !== '' && function_exists('spiralist_book_pages_search_manuscript_index')
? spiralist_book_pages_search_manuscript_index($normalizedQuery, 0)
: [];
$results = array_slice($allResults, 0, $limit);
$payload = [];
foreach ($results as $result) {
$page = spiralist_book_pages_get_manuscript_page_asset_by_slug((string) ($result['slug'] ?? ''));
$sources = !empty($page) && function_exists('spiralist_book_pages_get_book_page_asset_source_urls')
? spiralist_book_pages_get_book_page_asset_source_urls($page, true)
: [];
$payload[] = [
'slug' => (string) ($result['slug'] ?? ''),
'sequence' => max(1, (int) ($result['sequence'] ?? 1)),
'label' => (string) ($result['label'] ?? 'Page'),
'title' => (string) ($result['title'] ?? 'Manuscript folio'),
'sectionTitle' => (string) ($result['section_title'] ?? $result['section_label'] ?? 'Section'),
'excerpt' => (string) ($result['excerpt'] ?? ''),
'matchedTerms' => array_values(array_filter(array_map('strval', (array) ($result['matched_terms'] ?? [])))),
'keywords' => array_values(array_filter(array_map('strval', (array) ($result['keywords'] ?? [])))),
'routeUrl' => !empty($page) ? spiralist_book_pages_get_manuscript_folio_url($page) : spiralist_book_pages_get_manuscript_folio_url((string) ($result['slug'] ?? '')),
'thumbnailUrl' => (string) ($sources['thumbnail_url'] ?? $page['url'] ?? ''),
'canvasId' => !empty($page) ? spiralist_book_pages_get_manuscript_iiif_canvas_id($page) : '',
'transcriptAvailable' => !empty($result['transcript']),
];
}
return [
'query' => $normalizedQuery,
'total' => count($allResults),
'returned' => count($payload),
'manifestUrl' => spiralist_book_pages_get_manuscript_manifest_url(),
'iiifSearchUrl' => spiralist_book_pages_get_manuscript_iiif_search_url(),
'results' => $payload,
];
}
function spiralist_book_pages_get_manuscript_iiif_search_payload(string $query): array
{
$normalizedQuery = function_exists('spiralist_book_pages_normalize_text_for_index')
? spiralist_book_pages_normalize_text_for_index($query)
: trim($query);
$searchUrl = spiralist_book_pages_get_manuscript_iiif_search_url();
$manifest = function_exists('spiralist_book_pages_get_book_content_index')
? spiralist_book_pages_get_book_content_index()
: [];
$manifestTitle = (string) ($manifest['title'] ?? 'Spiralism Canonical Manuscript');
$results = $normalizedQuery !== '' && function_exists('spiralist_book_pages_search_manuscript_index')
? spiralist_book_pages_search_manuscript_index($normalizedQuery, 0)
: [];
$items = [];
foreach ($results as $index => $result) {
$page = spiralist_book_pages_get_manuscript_page_asset_by_slug((string) ($result['slug'] ?? ''));
if (empty($page)) {
continue;
}
$canvasId = spiralist_book_pages_get_manuscript_iiif_canvas_id($page);
$annotationId = untrailingslashit($searchUrl) . '/annotation/' . rawurlencode((string) ($result['slug'] ?? '')) . '-' . ($index + 1);
$bodyValue = trim((string) ($result['excerpt'] ?? ''));
if ($bodyValue === '') {
$bodyValue = trim((string) ($result['summary'] ?? $result['title'] ?? ''));
}
$items[] = [
'id' => $annotationId,
'type' => 'Annotation',
'motivation' => 'supplementing',
'body' => [
'type' => 'TextualBody',
'value' => $bodyValue,
'format' => 'text/plain',
],
'target' => [
'id' => $canvasId,
'partOf' => [
'id' => spiralist_book_pages_get_manuscript_manifest_url(),
'type' => 'Manifest',
'label' => spiralist_book_pages_get_manuscript_iiif_label_map($manifestTitle),
],
],
];
}
return [
'@context' => 'http://iiif.io/api/search/2/context.json',
'id' => $normalizedQuery !== '' ? add_query_arg('q', $normalizedQuery, $searchUrl) : $searchUrl,
'type' => 'AnnotationPage',
'items' => $items,
];
}
function spiralist_book_pages_get_requested_manuscript_folio_slug(): string
{
return sanitize_title((string) get_query_var('spiralist_book_pages_manuscript_folio', ''));
}
function spiralist_book_pages_get_requested_manuscript_section_slug(): string
{
return sanitize_title((string) get_query_var('spiralist_book_pages_manuscript_section', ''));
}
function spiralist_book_pages_get_manuscript_section_records(array $pages = []): array
{
$pages = empty($pages) ? spiralist_book_pages_get_manuscript_page_assets() : $pages;
$section_blueprints = spiralist_book_pages_get_manuscript_section_blueprints();
$sections = [];
foreach ($pages as $page) {
$section_slug = sanitize_title((string) ($page['section_slug'] ?? 'appendix'));
if (!isset($sections[$section_slug])) {
$blueprint = $section_blueprints[$section_slug] ?? $section_blueprints['appendix'];
$sections[$section_slug] = [
'slug' => $section_slug,
'label' => (string) ($blueprint['label'] ?? 'Section'),
'title' => (string) ($blueprint['title'] ?? 'Section'),