Skip to content

Commit 3b179ee

Browse files
again
1 parent 7de9edb commit 3b179ee

File tree

1 file changed

+33
-28
lines changed

1 file changed

+33
-28
lines changed

_plugins/opensearch_suggestions.rb

+33-28
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,53 @@
33
require 'open-uri'
44

55
module Jekyll
6-
class OpenSearchSuggestions < Liquid::Tag
7-
def initialize(tag_name, text, tokens)
8-
super
9-
@search_term = text.strip
10-
end
6+
class OpenSearchSuggestionsGenerator < Generator
7+
safe true
8+
priority :low
119

12-
def render(context)
13-
site = context.registers[:site]
14-
15-
# Use the site's URL from _config.yml
16-
site_url = site.config['url']
17-
sitemap_url = "#{site_url}/sitemap.xml"
18-
19-
debug_info = {
20-
search_term: @search_term,
21-
sitemap_url: sitemap_url
22-
}
10+
def generate(site)
11+
sitemap_url = "#{site.config['url']}/sitemap.xml"
2312

2413
begin
2514
sitemap = URI.open(sitemap_url).read
2615
doc = Nokogiri::XML(sitemap)
2716

2817
urls = doc.xpath('//xmlns:url/xmlns:loc').map(&:text)
29-
debug_info[:total_urls] = urls.length
3018

31-
matches = urls.select { |url| url.downcase.include?(@search_term.downcase) }
32-
debug_info[:matches] = matches
33-
34-
suggestions = matches.map do |url|
19+
suggestions = urls.map do |url|
3520
title = url.split('/').last.gsub('-', ' ').capitalize
3621
[title, url]
3722
end
38-
39-
result = [@search_term, suggestions.map(&:first), suggestions.map(&:last), debug_info]
40-
result.to_json
23+
24+
site.pages << OpenSearchSuggestionsPage.new(site, site.source, "", "opensearch.json", suggestions)
4125
rescue OpenURI::HTTPError => e
42-
{ error: "Failed to fetch sitemap: #{e.message}", debug_info: debug_info }.to_json
26+
Jekyll.logger.error "OpenSearchSuggestionsGenerator:", "Failed to fetch sitemap: #{e.message}"
4327
rescue StandardError => e
44-
{ error: "An error occurred: #{e.message}", debug_info: debug_info }.to_json
28+
Jekyll.logger.error "OpenSearchSuggestionsGenerator:", "An error occurred: #{e.message}"
4529
end
4630
end
4731
end
48-
end
4932

50-
Liquid::Template.register_tag('opensearch_suggestions', Jekyll::OpenSearchSuggestions)
33+
class OpenSearchSuggestionsPage < Page
34+
def initialize(site, base, dir, name, suggestions)
35+
@site = site
36+
@base = base
37+
@dir = dir
38+
@name = name
39+
40+
self.process(name)
41+
self.data = {}
42+
43+
self.content = <<-EOS
44+
function getOpenSearchSuggestions(query) {
45+
query = query.toLowerCase();
46+
var suggestions = #{suggestions.to_json};
47+
var matches = suggestions.filter(function(item) {
48+
return item[0].toLowerCase().includes(query) || item[1].toLowerCase().includes(query);
49+
});
50+
return [query, matches.map(function(item) { return item[0]; }), matches.map(function(item) { return item[1]; })];
51+
}
52+
EOS
53+
end
54+
end
55+
end

0 commit comments

Comments
 (0)