Skip to content

Instantly share code, notes, and snippets.

@julianrubisch
Created June 7, 2024 10:02
Show Gist options
  • Save julianrubisch/711224aa8bd7319ae77f211338856bc1 to your computer and use it in GitHub Desktop.
Save julianrubisch/711224aa8bd7319ae77f211338856bc1 to your computer and use it in GitHub Desktop.
Sitepress Pagefind Integration
<div data-controller="search">
<div data-search-target="button">
<div role="button" data-action="click->search#open keydown.meta+k@document->search#open keydown.ctrl+k@document->search#open" class="outline secondary search">
<%= heroicon "magnifying-glass" %>
<span>Search</span>
<kbd>Cmd/Ctrl+K</kbd>
</div>
<dialog data-search-target="dialog">
<article>
<header>
<button aria-label="Close" rel="prev" data-action="search#close"></button>
<p>
<strong>Global Site Search</strong>
</p>
</header>
<div data-search-target="search"></div>
</article>
</dialog>
</div>
</div>
import { Controller } from "@hotwired/stimulus";
import { PagefindUI } from "@pagefind/default-ui";
// Connects to data-controller="search"
export default class extends Controller {
static targets = ["button", "dialog", "search"];
connect() {
this.search = new PagefindUI({
element: this.searchTarget,
highlightParam: "highlight",
autofocus: true,
showImages: false,
});
}
disconnect() {
this.search.destroy();
}
open() {
this.dialogTarget.showModal();
}
close() {
this.dialogTarget.close();
}
}
namespace :sitepress do
namespace :pagefind do
desc "Compile the sitepress site and build a pagefind index"
task build: :environment do
site = Sitepress::Site.new(root_path: "app/content")
build_path = Rails.root.join("tmp/sitepress")
pagefind_output_path = Rails.root.join("public/pagefind")
puts "Purging output directory"
FileUtils.rm_r build_path
compiler = Sitepress::Compiler::Files.new(root_path: build_path, site:)
compiler.compile
puts <<~END
Building Pagefind Index
END
system "npx pagefind --site #{build_path} --output-path #{pagefind_output_path}"
end
end
end
unless ENV["SKIP_SITEPRESS_BUILD"]
if Rake::Task.task_defined?("assets:precompile")
Rake::Task["assets:precompile"].enhance(["sitepress:pagefind:build"])
end
if Rake::Task.task_defined?("test:prepare")
Rake::Task["test:prepare"].enhance(["sitepress:pagefind:build"])
elsif Rake::Task.task_defined?("spec:prepare")
Rake::Task["spec:prepare"].enhance(["sitepress:pagefind:build"])
elsif Rake::Task.task_defined?("db:test:prepare")
Rake::Task["db:test:prepare"].enhance(["sitepress:pagefind:build"])
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment