This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-site.git
The following commit(s) were added to refs/heads/master by this push:
new f2544c634 SLING-12052: add Pagefind for site search (#133)
f2544c634 is described below
commit f2544c63460307262a08c6fb8f7e9ee51f3c0b6b
Author: Bertrand Delacretaz <[email protected]>
AuthorDate: Mon Oct 2 09:51:54 2023 +0200
SLING-12052: add Pagefind for site search (#133)
---
.sling-module.json | 2 +-
README.md | 9 +++++++
pom.xml | 46 +++++++++++++++++++++++++++++++-
src/main/jbake/assets/res/css/site.css | 17 +++++++++---
src/main/jbake/templates/header.tpl | 10 +++++++
src/main/jbake/templates/layout/main.tpl | 3 +++
src/main/jbake/templates/page.tpl | 6 ++++-
7 files changed, 87 insertions(+), 6 deletions(-)
diff --git a/.sling-module.json b/.sling-module.json
index fae36fa51..9f0b43658 100644
--- a/.sling-module.json
+++ b/.sling-module.json
@@ -5,7 +5,7 @@
"branches": {
"master": {
"nodeLabel": "git-websites",
- "additionalMavenParams": "-Ppublish-site -Dmsg=\"Automatic
website deployment from $BUILD_URL\""
+ "additionalMavenParams": "-Ppagefind,publish-site
-Dmsg=\"Automatic website deployment from $BUILD_URL\""
}
},
"jdks": [
diff --git a/README.md b/README.md
index 3e551f9f8..a3c37a1c0 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,10 @@ Clone this repository, run the below Maven command, open
<http://localhost:8820/
This allows you to experiment with your changes before eventually
publishing them.
+To also activate the site search feature, use
+
+ mvn clean package -Ppagefind,run-site
+
## How to publish the website
The publishing process consists out of 2 steps:
@@ -76,6 +80,11 @@ Highlighting can be disabled by specifying an unknown
language in the `<pre>` bl
This will not be highlighted.
</pre>
+## Site search
+
+The site search is based on [Pagefind](https://pagefind.app/), which is also
used by the ASF
+[community](https://community.apache.org/) and [www](https://www.apache.org/)
websites. Searching the source code for "pagefind" shows how the integration
works.
+
## Other Apache projects using JBake
It's sometimes useful to ~~steal ideas~~ get inspiration from other projects
using similar tools, for now we know of:
diff --git a/pom.xml b/pom.xml
index ec70a016d..d1db2a820 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,12 @@
<repos.list.fullpath>${downloads.dir}/github-repositories.xml</repos.list.fullpath>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+ <!-- Must match the JBake output folder -->
+
<pagefind.site.folder>${project.build.directory}/${project.artifactId}-${project.version}</pagefind.site.folder>
+
+ <!-- pagefind needs to run after compile and before package... -->
+ <pagefind.maven.phase>test</pagefind.maven.phase>
</properties>
<build>
@@ -210,6 +216,44 @@
</plugins>
</build>
</profile>
+ <profile>
+ <id>pagefind</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.eirslett</groupId>
+ <artifactId>frontend-maven-plugin</artifactId>
+ <version>1.14.0</version>
+ <configuration>
+
<npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
+
<installDirectory>${project.build.directory}</installDirectory>
+
<workingDirectory>${project.build.directory}</workingDirectory>
+ </configuration>
+ <executions>
+ <execution>
+ <id>Install node and npm</id>
+ <goals>
+ <goal>install-node-and-npm</goal>
+ </goals>
+ <phase>${pagefind.maven.phase}</phase>
+ <configuration>
+ <nodeVersion>v20.7.0</nodeVersion>
+ </configuration>
+ </execution>
+ <execution>
+ <id>Build pagefind index</id>
+ <goals>
+ <goal>npx</goal>
+ </goals>
+ <phase>${pagefind.maven.phase}</phase>
+ <configuration>
+ <arguments>pagefind --site
${pagefind.site.folder}</arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
</profiles>
-
</project>
diff --git a/src/main/jbake/assets/res/css/site.css
b/src/main/jbake/assets/res/css/site.css
index 01bea2c8b..39395e5fc 100644
--- a/src/main/jbake/assets/res/css/site.css
+++ b/src/main/jbake/assets/res/css/site.css
@@ -35,7 +35,7 @@ a:hover {
.sidemenu {
- border-top: 10px solid #f9bb00;
+ border-top: var(--page-border-top-height,10px) solid #f9bb00;
}
.sidemenu ul,.sidemenu p {
@@ -47,7 +47,7 @@ a:hover {
}
.main {
- border-top: 10px solid #cde0ea;
+ border-top: var(--page-border-top-height,10px) solid #cde0ea;
max-width: 1000px;
}
@@ -150,4 +150,15 @@ ul.repolist {
color: #060;
margin: 0;
padding: 0;
-}
\ No newline at end of file
+}
+
+#searchbox {
+ width: 100%;
+ --pagefind-ui-border: #cde0ea;
+ --pagefind-ui-border-width: 1px;
+ --pagefind-ui-border-radius: 1px;
+}
+
+:root {
+ --page-border-top-height: 5px;
+}
diff --git a/src/main/jbake/templates/header.tpl
b/src/main/jbake/templates/header.tpl
index 6b18d31bf..54cabbb34 100644
--- a/src/main/jbake/templates/header.tpl
+++ b/src/main/jbake/templates/header.tpl
@@ -35,4 +35,14 @@ head {
</script>
<!-- End Matomo Code -->
'''
+
+ yieldUnescaped "<link href='/pagefind/pagefind-ui.css'
rel='stylesheet'>"
+ yieldUnescaped "<script src='/pagefind/pagefind-ui.js'
type='text/javascript'></script>"
+ yieldUnescaped '''
+ <script>
+ window.addEventListener('DOMContentLoaded', (event) => {
+ new PagefindUI({ element: "#searchbox" });
+ });
+ </script>
+ '''
}
\ No newline at end of file
diff --git a/src/main/jbake/templates/layout/main.tpl
b/src/main/jbake/templates/layout/main.tpl
index 36e57c265..9b1c8bb77 100644
--- a/src/main/jbake/templates/layout/main.tpl
+++ b/src/main/jbake/templates/layout/main.tpl
@@ -6,6 +6,9 @@ html(lang:'en'){
div(class:"level is-marginless") {
include template: 'logos.tpl'
}
+ section(class:"searchbox level is-marginless") {
+ div(id:"searchbox") {}
+ }
div(class:"columns is-gapless") {
div(class:"column is-narrow sidemenu") {
include template: 'menu.tpl'
diff --git a/src/main/jbake/templates/page.tpl
b/src/main/jbake/templates/page.tpl
index 92da66bd7..a2e465fc5 100644
--- a/src/main/jbake/templates/page.tpl
+++ b/src/main/jbake/templates/page.tpl
@@ -13,13 +13,17 @@ layout 'layout/main.tpl', true,
include template : 'toc-brick.tpl'
},
bodyContents: contents {
- div(class:"row"){
+ div(class:"row","data-pagefind-body":true){
div(){
section(){
yieldUnescaped U.processBody(content, config)
}
}
}
+ // pagefind doesn't seem to index the title that it finds, include
it here, invisible
+
div("data-pagefind-body":"true","data-pagefind-weight":"7.0","style":"display:none;")
{
+ yield " - ( ${ content.title } )"
+ }
},
tags : contents {
include template : 'tags-brick.tpl'