Skip to content

Commit bf1cb46

Browse files
Merge branch 'ai-search'
2 parents 362abc6 + a7cf367 commit bf1cb46

File tree

15 files changed

+504
-2
lines changed

15 files changed

+504
-2
lines changed

build_docs.cmd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
call hugo server --config config-geekdoc.toml,show-feedback-config.toml
2+
pause

config-geekdoc.toml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,24 @@ pluralizeListTitles = false
5151

5252
disableSearch = false
5353

54+
aiSearchEndpoint = "https://docsearch.api.aspose.cloud/ask"
55+
aiSearchScopes = [ "annotation_net", "annotation_java",
56+
"assembly_net", "assembly_java",
57+
"classification_net",
58+
"comparison_net", "comparison_java", "comparison_python-net", "comparison_nodejs-java",
59+
"conversion_net", "conversion_java", "conversion_python-net", "conversion_nodejs-java",
60+
"editor_net", "editor_java", "editor_nodejs-java",
61+
"merger_net", "merger_java",
62+
"metadata_net", "metadata_java",
63+
"parser_net", "parser_java",
64+
"redaction_net", "redaction_java",
65+
"search_net", "search_java",
66+
"signature_net", "signature_java",
67+
"viewer_net", "viewer_java", "viewer_python-net", "viewer_nodejs-java",
68+
"watermark_net", "watermark_java", "watermark_python-net", "watermark_nodejs-java",
69+
"total_net", "total_java"
70+
]
71+
5472
# Collapse not active menu items by default
5573
GeekdocCollapseAllSections = true
5674
# Disable default Hugo search
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
// AI-powered search
2+
3+
.ai-search-invisible {
4+
display: none !important;
5+
}
6+
7+
.ai-search-form {
8+
display: flex;
9+
align-items: center;
10+
height: 30px;
11+
margin-bottom: 10px;
12+
padding: 0px 8px 0px 8px;
13+
border: solid 1px #cccccc;
14+
border-radius: 3px;
15+
background-color: #ffffff;
16+
margin-bottom: 30px;
17+
margin-right: 1px;
18+
position: relative;
19+
20+
21+
&:hover {
22+
border-color: #b2bac1;
23+
}
24+
25+
#aiSearchField {
26+
flex-grow: 1;
27+
margin-right: 7px;
28+
border: none;
29+
outline: none;
30+
font-family: $font-family-base;
31+
color: #222222;
32+
background-color: transparent;
33+
}
34+
35+
#aiSearchButton {
36+
height: 30px;
37+
padding: 0px 12px;
38+
39+
border: none;
40+
outline: none;
41+
white-space: nowrap;
42+
background-color: #b2bac1;
43+
font-family: $font-family-base;
44+
color: #ffffff;
45+
cursor: pointer;
46+
position: absolute;
47+
right:-1px;
48+
border-bottom-right-radius: 3px;
49+
border-top-right-radius: 3px;
50+
51+
&:hover {
52+
background-color: #8d969d;
53+
}
54+
}
55+
}
56+
57+
#aiSearchResultsCurtain {
58+
z-index: 99;
59+
position: fixed;
60+
top: 0px;
61+
left: 0px;
62+
bottom: 0px;
63+
right: 0px;
64+
background-color: #000000;
65+
opacity: 0.7;
66+
}
67+
68+
#aiSearchResultsForm {
69+
display: flex;
70+
flex-direction: column;
71+
z-index: 100;
72+
position: fixed;
73+
top: 10%;
74+
left: 10%;
75+
bottom: 10%;
76+
right: 10%;
77+
padding: 20px;
78+
border: solid 1px #cccccc;
79+
box-shadow: 0px 0px 5px 3px rgba(68,68,68,1);
80+
background-color: #ffffff;
81+
82+
& > header {
83+
display: flex;
84+
align-items: center;
85+
margin-bottom: 20px;
86+
87+
.ai-search-results-prompt {
88+
display: flex;
89+
flex-grow: 1;
90+
align-items: center;
91+
height: 40px;
92+
padding: 0px 2px 0px 10px;
93+
padding-right: 80px;
94+
border: solid 1px #cccccc;
95+
border-radius: 3px;
96+
background-color: #ffffff;
97+
font-size: 16px;
98+
position: relative;
99+
100+
#aiSearchResultsField {
101+
flex-grow: 1;
102+
margin-right: 7px;
103+
border: none;
104+
outline: none;
105+
font-family: $font-family-base;
106+
color: #222222;
107+
background-color: transparent;
108+
}
109+
110+
#aiSearchResultsButton {
111+
height: 40px;
112+
padding: 0px 18px;
113+
114+
border: none;
115+
outline: none;
116+
white-space: nowrap;
117+
background-color: #558fff;
118+
font-family: $font-family-base;
119+
font-weight: 600;
120+
color: #ffffff;
121+
cursor: pointer;
122+
position: absolute;
123+
right:-1px;
124+
border-top-right-radius: 3px;
125+
border-bottom-right-radius: 3px;
126+
&:hover {
127+
background-color:#4172d4;
128+
}
129+
}
130+
}
131+
132+
.ai-search-results-tools {
133+
margin-left: 15px;
134+
135+
& > img {
136+
width: auto;
137+
height: 25px;
138+
cursor: pointer;
139+
opacity: 1;
140+
141+
&:hover {
142+
opacity: 0.7;
143+
}
144+
}
145+
}
146+
}
147+
148+
& > article {
149+
flex-grow: 1;
150+
overflow: auto;
151+
padding: 10px 0px;
152+
color: rgb(15, 23, 39);
153+
154+
#aiSearchResultsPreloader {
155+
margin-top: 15px;
156+
text-align: center;
157+
158+
& > img {
159+
margin-bottom: 15px;
160+
}
161+
162+
& > p {
163+
color: #666666;
164+
font-style: italic;
165+
}
166+
}
167+
168+
#aiSearchError {
169+
display: none;
170+
font-size: 16px;
171+
font-weight: 500;
172+
color: #aa0000;
173+
}
174+
175+
pre {
176+
padding: 10px;
177+
border: solid 1px #c2c2c2;
178+
background-color: #f8f9fa;
179+
}
180+
}
181+
182+
& > aside {
183+
display: none;
184+
185+
padding: 10px 20px;
186+
border-top: solid 1px #cccccc;
187+
margin: 0 -20px;
188+
margin-top: 20px;
189+
190+
.ai-search-results-title {
191+
margin-top: 5px;
192+
margin-bottom: 15px;
193+
font-weight: 500;
194+
font-size: 18px;
195+
color: rgb(15, 23, 39);
196+
}
197+
198+
#aiSearchRelatedArticles {
199+
display: flex;
200+
flex-wrap: wrap;
201+
align-items: top;
202+
203+
#aiSearchRelatedArticleTemplate {
204+
display: none;
205+
}
206+
207+
& > a {
208+
display: block;
209+
/* min-width: 200px; */
210+
margin: 0px 15px 5px 0px;
211+
padding: 12px 15px;
212+
border-radius: 3px;
213+
214+
text-decoration: none;
215+
white-space: nowrap;
216+
overflow: hidden;
217+
background-color: #f3f5f7;
218+
219+
&:hover {
220+
text-decoration: none;
221+
222+
}
223+
}
224+
}
225+
}
226+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Fonts
2+
3+
$google_font_name: "Arial" !default;
4+
$google_font_family: "Open+Sans:300,300i,400,400i,700,700i" !default;
5+
$web-font-path: "https://fonts.googleapis.com/css?family=#{$google_font_family}";
6+
7+
$td-fonts-serif: sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
8+
9+
// @if $td-enable-google-fonts {
10+
// $td-fonts-serif: prepend($td-fonts-serif, "#{$google_font_name}");
11+
// }
12+
13+
$font-family-sans-serif: $td-fonts-serif !default;
14+
15+
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
16+
$font-family-base: $font-family-sans-serif !default;
17+
$font-size-base: 0.875rem !default;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@import "variables";
2+
@import "ai-search";
3+

themes/hugo-geekdoc/layouts/_default/baseof.html

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,20 @@
3838

3939
{{ partial "site-header" . }}
4040

41+
{{ $aiSearchEnabled := false }}
42+
{{ $url := $.RelPermalink }}
43+
{{ $slittedUrl := split $url "/" }}
44+
{{ $aiSearchScope := (printf "%s_%s" (index $slittedUrl 1) (index $slittedUrl 2)) }}
45+
{{ if in .Site.Params.aiSearchScopes $aiSearchScope }}
46+
{{ $aiSearchEnabled = true }}
47+
{{ end }}
4148

4249
<main class="container flex flex-even">
4350
{{ if $navEnabled }}
4451
<aside class="gdoc-nav">
52+
{{- if $aiSearchEnabled -}}
53+
{{- partial "ai-search-input" . -}}
54+
{{- end -}}
4555
{{ partial "menu" . }}
4656
</aside>
4757
{{ end }}
@@ -58,7 +68,11 @@
5868
</main>
5969

6070
{{ partial "go-top" . }}
61-
71+
72+
{{- if $aiSearchEnabled -}}
73+
{{- partial "ai-search-result" . -}}
74+
{{- end -}}
75+
6276
{{ partial "site-footer" . }}
6377
</div>
6478

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div class="ai-search-form">
2+
<input id="aiSearchField" type="text" maxlength="150" placeholder="What can I help you with?" autocomplete="off" />
3+
<button id="aiSearchButton">Ask AI</button>
4+
</div>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
{{- $close := resources.Get "icons/close.svg" -}}
3+
{{- $preloader := resources.Get "icons/preloader.svg" -}}
4+
5+
<div id="aiSearchResultsCurtain" class="ai-search-invisible"></div>
6+
<div id="aiSearchResultsForm" class="ai-search-invisible">
7+
<header>
8+
<div class="ai-search-results-prompt">
9+
<input id="aiSearchResultsField" type="text" maxlength="150" placeholder="What can I help you with?" autocomplete="off" />
10+
<button id="aiSearchResultsButton">Ask AI</button>
11+
</div>
12+
<div class="ai-search-results-tools">
13+
<img id="aiSearchResultsClose" src="/img/close.svg" alt="Close" title="Close" />
14+
</div>
15+
</header>
16+
<article>
17+
<div id="aiSearchResultsPreloader">
18+
<img src="/img/preloader.svg" alt="Loading" />
19+
<p>Analyzing your prompt, please hold on...</p>
20+
</div>
21+
<p id="aiSearchError">An error occurred while retrieving the results. Please refresh the page and try again.</p>
22+
<div id="aiSearchResultsSummary"></div>
23+
</article>
24+
<aside>
25+
<div class="ai-search-results-title">Related articles</div>
26+
<div id="aiSearchRelatedArticles">
27+
<a id="aiSearchRelatedArticleTemplate" href="#" target="_blank">-</a>
28+
</div>
29+
</aside>
30+
</div>
31+
32+
{{ $url := $.RelPermalink }}
33+
{{ $slittedUrl := split $url "/" }}
34+
{{ $aiSearchScope := (printf "%s_%s" (index $slittedUrl 1) (index $slittedUrl 2)) }}
35+
<script>
36+
const aiSearchScope = "{{ $aiSearchScope }}";
37+
const aiSearchEndpoint = "{{ .Site.Params.aiSearchEndpoint }}";
38+
</script>
39+
<script
40+
src="https://code.jquery.com/jquery-3.3.1.min.js"
41+
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
42+
crossorigin="anonymous">
43+
</script>
44+
<script src="/js/showdown.min.js?v=25.2.0"></script>
45+
<script src="/js/thumbmark.umd.js?v=25.2.0"></script>
46+
<script src="/js/ai-search.js?v=25.2.1"></script>

themes/hugo-geekdoc/layouts/partials/head/others.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
<script src="{{ index (index .Site.Data.assets "main.js") "src" | relURL }}"></script>
22

3+
4+
{{- $scssMain := "scss/main.scss"}}
5+
{{- $css := resources.Get $scssMain | toCSS | resources.Minify | fingerprint -}}
6+
<link rel="preload" href="{{- $css.RelPermalink -}}" as="style">
7+
<link href="{{- $css.RelPermalink -}}" rel="stylesheet" integrity="{{- $css.Data.integrity -}}">
8+
9+
10+
11+
312
<link
413
rel="preload"
514
as="font"
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)