SELECT 'dynamic' AS component, sqlpage.run_sql('shell/shell.sql') AS properties;
SELECT 'breadcrumb' as component;
WITH RECURSIVE breadcrumbs AS (
SELECT
COALESCE(abbreviated_caption, caption) AS title,
COALESCE(url, path) AS link,
parent_path, 0 AS level,
namespace
FROM sqlpage_aide_navigation
WHERE namespace = 'prime' AND path='qualityfolio/test_cycle_detail.sql'
UNION ALL
SELECT
COALESCE(nav.abbreviated_caption, nav.caption) AS title,
COALESCE(nav.url, nav.path) AS link,
nav.parent_path, b.level + 1, nav.namespace
FROM sqlpage_aide_navigation nav
INNER JOIN breadcrumbs b ON nav.namespace = b.namespace AND nav.path = b.parent_path
)
SELECT title ,
sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/'||link as link
FROM breadcrumbs ORDER BY level DESC;
-- not including page title from sqlpage_aide_navigation
SELECT 'title' AS component, (SELECT COALESCE(title, caption)
FROM sqlpage_aide_navigation
WHERE namespace = 'prime' AND path = 'qualityfolio/test_cycle_detail.sql/index.sql') as contents;
;
--- Breadcrumbs
SELECT 'breadcrumb' AS component;
SELECT 'Home' AS title, sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/' AS link;
SELECT 'QualityFolio' AS title, sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/index.sql' AS link;
SELECT (SELECT COALESCE(title, test_cycle_id) FROM test_cycle_inner WHERE title = $test_cycle) AS title, '#' AS link;
SELECT 'title'AS component,
(SELECT page_title FROM page_guide WHERE page_identifier = 'qualityfolio/test_cycle_detail.sql' AND page_order = 1) as contents;
SELECT 'text' as component,
(SELECT page_content FROM page_guide WHERE page_identifier = 'qualityfolio/test_cycle_detail.sql' AND page_order = 1) as contents;
-- Hero header from test_cycle_inner view
SELECT 'html' AS component,
COALESCE(
'<section class="requirement-hero" style="background:linear-gradient(90deg,#ffffff,#f7f9fc);padding:22px;border-radius:10px;margin-bottom:18px;border:1px solid #eceff3;">' ||
'<div style="display:flex;gap:20px;align-items:flex-start">' ||
'<div style="flex:1">' ||
'<h1 style="margin:0 0 8px 0;font-size:24px;font-weight:700;color:#1f2937">' || COALESCE(title, title) || '</h1>' ||
'<div style="color:#6b7280;font-size:13px">' ||
COALESCE(created_by, '') ||
CASE WHEN created_by IS NOT NULL AND created_at IS NOT NULL THEN ' • ' ELSE '' END ||
CASE WHEN created_at IS NOT NULL THEN strftime('%d-%m-%Y', created_at) ELSE '' END ||
CASE WHEN version IS NOT NULL THEN ' • v' || version ELSE '' END ||
CASE WHEN tags IS NOT NULL THEN ' • ' || tags ELSE '' END ||
'</div></br>' ||
'<p style="margin:0 0 12px 0;color:#374151;line-height:1.5">' || COALESCE(description, 'No description') || '</p>' ||
'</div>' ||
'<div style="min-width:160px;text-align:right">' ||
'<a href="' || sqlpage.environment_variable('SQLPAGE_SITE_PREFIX') || '/qualityfolio/test_cycle_case.sql?test_cycle=' || REPLACE(REPLACE(title, ' ', '%20'), '&', '%26') || '" style="display:inline-block;background:#eef2ff;color:#3730a3;padding:8px 12px;border-radius:6px;text-decoration:none;font-weight:600">View related test cases</a>' ||
'</div>' ||
'</div>' ||
'</section>',
'<div class="test-cycle-detail"><p>No test cycle found</p></div>'
) AS html
FROM test_cycle_inner WHERE title = $test_cycle;
-- Return content with YAML frontmatter removed (strip leading '--- ... ---' block)
SELECT 'text' AS component,
TRIM(
CASE
WHEN instr(content, '---') = 0 THEN content
ELSE
CASE
WHEN instr(substr(content, instr(content, '---') + 3), '---') = 0 THEN
ltrim(substr(content, instr(content, '---') + 3))
ELSE
ltrim(
substr(
content,
instr(substr(content, instr(content, '---') + 3), '---') + instr(content, '---') + 5
)
)
END
END
) AS contents_md
FROM test_cycle_inner
WHERE title = $test_cycle;