initial COmmit: Add KB Antora Importer plugin files

This commit is contained in:
Sven Steinert
2026-05-12 14:37:09 +02:00
parent cf253c1367
commit 6abf6f9c3d
39 changed files with 2945 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
<?php
defined('ABSPATH') || exit;
?>
<main class="kb-docs-wrap">
<h1><?php esc_html_e('Knowledgebase', 'kb-antora-importer'); ?></h1>
<?php echo do_shortcode('[kb_search]'); ?>
<div class="kb-product-list">
<?php foreach ((array) $products as $item) : ?>
<?php $term = $item['term']; ?>
<section class="kb-product-card">
<h2><a href="<?php echo esc_url($url_builder::product($term->slug)); ?>"><?php echo esc_html($term->name); ?></a></h2>
<?php if (! empty($item['versions'])) : ?>
<ul>
<?php foreach ($item['versions'] as $version) : ?>
<li><a href="<?php echo esc_url($url_builder::version($term->slug, $version->slug)); ?>"><?php echo esc_html($version->name); ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</section>
<?php endforeach; ?>
</div>
</main>

View File

@@ -0,0 +1,56 @@
<?php
defined('ABSPATH') || exit;
$render_nav = static function (array $nodes) use (&$render_nav, $base_slug, $product_slug, $version_slug): void {
if (! $nodes) {
return;
}
echo '<ul>';
foreach ($nodes as $node) {
$target = (string) ($node['target'] ?? '');
$label = (string) ($node['title'] ?? '');
$href = '';
if ($target) {
$slug = preg_replace('/\.adoc(#.+)?$/', '', basename($target)) ?: basename($target);
$slug = 'index' === $slug ? '' : sanitize_title($slug);
$href = $url_builder::page($product_slug, $version_slug, $slug);
}
echo '<li>';
if ($href) {
printf('<a href="%s">%s</a>', esc_url($href), esc_html($label));
} else {
echo '<span>' . esc_html($label) . '</span>';
}
$render_nav((array) ($node['children'] ?? []));
echo '</li>';
}
echo '</ul>';
};
?>
<main class="kb-docs-wrap kb-doc-layout">
<aside class="kb-sidebar">
<label class="screen-reader-text" for="kb-version-switcher"><?php esc_html_e('Version', 'kb-antora-importer'); ?></label>
<select id="kb-version-switcher">
<?php foreach ((array) $versions as $item) : ?>
<option value="<?php echo esc_attr($item->slug); ?>" data-url="<?php echo esc_url($url_builder::version($product_slug, $item->slug)); ?>" <?php selected($item->slug, $version_slug); ?>><?php echo esc_html($item->name); ?></option>
<?php endforeach; ?>
</select>
<nav class="kb-sidebar-nav" aria-label="<?php esc_attr_e('Documentation navigation', 'kb-antora-importer'); ?>">
<?php $render_nav((array) $nav_tree); ?>
</nav>
</aside>
<article class="kb-doc-content">
<nav class="kb-breadcrumbs">
<a href="<?php echo esc_url($url_builder::docsIndex()); ?>"><?php esc_html_e('Docs', 'kb-antora-importer'); ?></a><span>/</span>
<a href="<?php echo esc_url($url_builder::product($product_slug)); ?>"><?php echo esc_html($product ? $product->name : $product_slug); ?></a><span>/</span>
<a href="<?php echo esc_url($url_builder::version($product_slug, $version_slug)); ?>"><?php echo esc_html($version ? $version->name : $version_slug); ?></a>
</nav>
<h1><?php echo esc_html(get_the_title($post)); ?></h1>
<div class="kb-rendered-content">
<?php echo wp_kses_post($url_builder::rewriteHtml(apply_filters('the_content', $post->post_content))); ?>
</div>
</article>
</main>

View File

@@ -0,0 +1,16 @@
<?php
defined('ABSPATH') || exit;
?>
<main class="kb-docs-wrap">
<nav class="kb-breadcrumbs"><a href="<?php echo esc_url($url_builder::docsIndex()); ?>"><?php esc_html_e('Docs', 'kb-antora-importer'); ?></a><span>/</span><?php echo esc_html($product->name); ?></nav>
<h1><?php echo esc_html($product->name); ?></h1>
<h2><?php esc_html_e('Available Versions', 'kb-antora-importer'); ?></h2>
<ul class="kb-version-list">
<?php foreach ((array) $versions as $index => $version) : ?>
<li>
<a href="<?php echo esc_url($url_builder::version($product->slug, $version->slug)); ?>"><?php echo esc_html($version->name); ?></a>
<?php if (0 === $index) : ?><span class="kb-current-version"><?php esc_html_e('current', 'kb-antora-importer'); ?></span><?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</main>

View File

@@ -0,0 +1,26 @@
<?php
defined('ABSPATH') || exit;
?>
<section class="kb-search">
<h2><?php echo esc_html($title ?? __('Search Documentation', 'kb-antora-importer')); ?></h2>
<form method="get" class="kb-search-form">
<input type="search" name="kbq" value="<?php echo esc_attr($query ?? ''); ?>" placeholder="<?php esc_attr_e('Search documentation', 'kb-antora-importer'); ?>">
<button type="submit"><?php esc_html_e('Search', 'kb-antora-importer'); ?></button>
</form>
<?php if (! empty($results)) : ?>
<ul class="kb-search-results">
<?php foreach ((array) $results as $result) : ?>
<?php
$product = get_post_meta($result->ID, '_kb_product_slug', true);
$version = get_post_meta($result->ID, '_kb_version_slug', true);
$page = get_post_meta($result->ID, '_kb_page_slug', true);
$url = \KbAntoraImporter\Frontend\UrlBuilder::page((string) $product, (string) $version, (string) $page);
?>
<li>
<a href="<?php echo esc_url($url); ?>"><?php echo esc_html(get_the_title($result)); ?></a>
<p><?php echo esc_html(wp_trim_words(wp_strip_all_tags($result->post_content), 24)); ?></p>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</section>

View File

@@ -0,0 +1,17 @@
<?php
defined('ABSPATH') || exit;
?>
<main class="kb-docs-wrap">
<nav class="kb-breadcrumbs">
<a href="<?php echo esc_url($url_builder::docsIndex()); ?>"><?php esc_html_e('Docs', 'kb-antora-importer'); ?></a><span>/</span>
<a href="<?php echo esc_url($url_builder::product($product->slug)); ?>"><?php echo esc_html($product->name); ?></a><span>/</span>
<?php echo esc_html($version->name); ?>
</nav>
<h1><?php echo esc_html($product->name . ' ' . $version->name); ?></h1>
<ul class="kb-page-list">
<?php foreach ((array) $pages as $page) : ?>
<?php $slug = (string) get_post_meta($page->ID, '_kb_page_slug', true); ?>
<li><a href="<?php echo esc_url($url_builder::page($product->slug, $version->slug, $slug)); ?>"><?php echo esc_html(get_the_title($page)); ?></a></li>
<?php endforeach; ?>
</ul>
</main>