jekyll-theme-gaeblogx 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +1 -1
- data/_includes/algolia.html +1 -1
- data/_includes/footer.html +1 -1
- data/_includes/sidebar-search.html +14 -13
- data/_layouts/home.html +37 -1
- data/_sass/_index.scss +6 -0
- data/_sass/_page.scss +49 -0
- data/assets/js/node_modules/simpleblogsearch/LICENSE +21 -0
- data/assets/js/node_modules/simpleblogsearch/README.md +50 -0
- data/assets/js/node_modules/simpleblogsearch/index.js +104 -0
- data/assets/js/node_modules/simpleblogsearch/package.json +55 -0
- data/assets/js/package-lock.json +11 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ee5475293b588cc17ee3d4d40fa4f6fd52c3f7143bebc1e7c3b5a57ef5ef360f
|
4
|
+
data.tar.gz: 1fa715906f4eaf44565efbc7aaf2229a44f1034a2d987dd461d8bded350a894f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc35875bdfb49b343db7dce5590050697c64d1cc8d19a4d2594786839cac001b37dcc54df01ca43afa3d21d6504ce81da6ab09f2e6d4b9c8ad0b43d3c1188a8f
|
7
|
+
data.tar.gz: 489b4171d36ea5a27ffcfc9d350084dae5882e6554d67a36374301f43b2b17679e4886e452d853bb53f8efe7504dd1c8d83822ab4432d41dabd15aeb11d3be3a
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ My personal blog Github Page: https://github.com/SeraphRoy/SeraphRoy.github.io
|
|
5
5
|
## Major features
|
6
6
|
|
7
7
|
- Categories, Tags, Archives
|
8
|
-
- Site-wide search provided by Algolia and Simple
|
8
|
+
- Site-wide search provided by Algolia and [Simple-Blog-Search](https://github.com/SeraphRoy/SimpleBlogSearch)
|
9
9
|
- Clean responsive design
|
10
10
|
- Disqus Comments and Google Analytics support
|
11
11
|
- SEO best practices via Jekyll SEO Tag
|
data/_includes/algolia.html
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js/dist/instantsearch.min.js"></script>
|
1
|
+
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.10.4/dist/instantsearch.min.js"></script>
|
2
2
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
|
3
3
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
|
4
4
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">
|
data/_includes/footer.html
CHANGED
@@ -5,21 +5,22 @@
|
|
5
5
|
<div id="site_search">
|
6
6
|
<input type="text" id="search_box" placeholder="Search..." >
|
7
7
|
</div>
|
8
|
-
|
9
|
-
<ul class="content-ul" id="search_results" recent></ul>
|
8
|
+
<div id="search_results"></div>
|
10
9
|
|
11
10
|
<link rel="stylesheet" type="text/css" href="{{ site.url }}/assets/stylesheets/main.css">
|
12
11
|
<script type="text/javascript" src="{{ site.url }}/assets/js/search.js"></script>
|
13
|
-
<script src="{{ site.url }}/assets/js/
|
12
|
+
<script type="text/javascript" src="{{ site.url }}/assets/js/node_modules/simpleblogsearch/index.js"></script>
|
13
|
+
|
14
|
+
<script>
|
15
|
+
SimpleBlogSearch({
|
16
|
+
searchDataPath: '{{ site.baseurl }}/assets/search_data.json',
|
17
|
+
dataType: 'json',
|
18
|
+
processDataFunc: function(data){ return data },
|
19
|
+
searchInputID: 'search_box',
|
20
|
+
resultsDivID: 'search_results',
|
21
|
+
resultULClass: 'content-ul search-ul content-side',
|
22
|
+
highlightKeywordClass: 'search_keyword',
|
23
|
+
limit: 4,
|
14
24
|
|
15
|
-
|
16
|
-
SimpleJekyllSearch({
|
17
|
-
searchInput: document.getElementById('search_box'),
|
18
|
-
resultsContainer: document.getElementById('search_results'),
|
19
|
-
json: '{{ site.baseurl }}/assets/search_data.json',
|
20
|
-
searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>',
|
21
|
-
noResultsText: 'No results found',
|
22
|
-
limit: 10,
|
23
|
-
fuzzy: false,
|
24
|
-
})
|
25
|
+
});
|
25
26
|
</script>
|
data/_layouts/home.html
CHANGED
@@ -54,7 +54,43 @@ layout: default
|
|
54
54
|
<span class="previous disable"><i class="fa fa-angle-double-left"></i></span>
|
55
55
|
<span class="previous disable"><i class="fa fa-angle-left"></i></span>
|
56
56
|
{% endif %}
|
57
|
-
<span class="page_number
|
57
|
+
<span class="page_number">
|
58
|
+
<script>
|
59
|
+
function isNum(val){
|
60
|
+
if(val === "" || val ==null){
|
61
|
+
return false;
|
62
|
+
}
|
63
|
+
if(!isNaN(val)){
|
64
|
+
return true;
|
65
|
+
}
|
66
|
+
else{
|
67
|
+
return false;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
</script>
|
71
|
+
<script>
|
72
|
+
function onPressEnter(){
|
73
|
+
var pageid = document.getElementById("page_jumper_input").value
|
74
|
+
if(isNum(pageid)==false){
|
75
|
+
alert("Invalid Page Number!")
|
76
|
+
return
|
77
|
+
}
|
78
|
+
number = parseInt(pageid)
|
79
|
+
minn = 1
|
80
|
+
maxn = {{paginator.total_pages}}
|
81
|
+
if(number < minn)
|
82
|
+
number = minn
|
83
|
+
if(number > maxn)
|
84
|
+
number = maxn
|
85
|
+
if(number == 1)
|
86
|
+
location.href='/'
|
87
|
+
else
|
88
|
+
location.href='/page'+number.toString()
|
89
|
+
}
|
90
|
+
</script>
|
91
|
+
<input id="page_jumper_input" onkeydown="if(event.keyCode==13) {onPressEnter()}"
|
92
|
+
placeholder="{{ paginator.page }}">/{{ paginator.total_pages }}
|
93
|
+
</span>
|
58
94
|
{% if paginator.next_page %}
|
59
95
|
<a href="{{ paginator.next_page_path }}" class="next"><i class="fa fa-angle-right"></i></a>
|
60
96
|
<a href="{{ site.baseurl }}/page{{ paginator.total_pages }}" class="next"><i class="fa fa-angle-double-right"></i></a>
|
data/_sass/_index.scss
CHANGED
data/_sass/_page.scss
CHANGED
@@ -150,6 +150,55 @@
|
|
150
150
|
padding-left: 20px;
|
151
151
|
}
|
152
152
|
}
|
153
|
+
.search-ul {
|
154
|
+
line-height: 1.8;
|
155
|
+
margin: 0;
|
156
|
+
list-style: none;
|
157
|
+
padding: 0;
|
158
|
+
li {
|
159
|
+
font-size: 14px;
|
160
|
+
a {
|
161
|
+
display: block;
|
162
|
+
width: 100%;
|
163
|
+
padding: 2px 0;
|
164
|
+
border-bottom: 1px solid #eee;
|
165
|
+
&:hover {
|
166
|
+
background-color: #dbdfee;
|
167
|
+
.badge {
|
168
|
+
background-color: #dbdfee;
|
169
|
+
transform: scale(1.2) rotate(360deg);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
.name {
|
173
|
+
padding-left: 15px;
|
174
|
+
}
|
175
|
+
.badge {
|
176
|
+
display: block;
|
177
|
+
|
178
|
+
// width: 20px;
|
179
|
+
float: right;
|
180
|
+
text-align: center;
|
181
|
+
margin-right: 15px;
|
182
|
+
margin-top: 3px;
|
183
|
+
padding: 0 10px;
|
184
|
+
font-size: 12px;
|
185
|
+
color: #fff;
|
186
|
+
background-color: #bbb;
|
187
|
+
border-radius: 50%;
|
188
|
+
transition: 0.5s ease-in-out;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
.keyword {
|
192
|
+
background-color: #dbdfee;
|
193
|
+
}
|
194
|
+
&:last-of-type a {
|
195
|
+
border: none;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
.search_keyword {
|
200
|
+
color: #2a7ae2;
|
201
|
+
}
|
153
202
|
}
|
154
203
|
}
|
155
204
|
@media screen and (max-width:1200px) and (min-width: 770px) {
|
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019 Baby Pepper
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# SimpleBlogSearch
|
2
|
+
|
3
|
+
A small library that does searching in your static blog contents. In theory should
|
4
|
+
work with any blog generator like Jekyll and Hexo as long as it generates
|
5
|
+
data for all of your blog posts.
|
6
|
+
|
7
|
+
This is motivated by [hexo-theme-freemind](https://github.com/wzpan/hexo-theme-freemind/blob/master/source/js/search.js),
|
8
|
+
and [Simple-Jekyll-Search](https://github.com/christian-fei/Simple-Jekyll-Search).
|
9
|
+
The hexo one is just too buggy and lacks features I want, so I end up rewriting it
|
10
|
+
to fit my needs. The codes currently are very simple and don't support as many features
|
11
|
+
as Simple-Jekyll-Search, so I think the best thing to do is to have
|
12
|
+
Simple-Jekyll-Search integrate the functionalities that are useful.
|
13
|
+
|
14
|
+
## Features
|
15
|
+
|
16
|
+
- Custom data processing function to make it work with any static blog generator
|
17
|
+
- Search in post contents and title
|
18
|
+
- Highlight matched contents
|
19
|
+
- Regex support
|
20
|
+
- Skip math sections
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
`npm install simpleblogsearch`
|
25
|
+
|
26
|
+
## Demo
|
27
|
+
|
28
|
+
See [my own blog](https://www.gaeblogx.com).
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
Add the following script to your html file (change parameters accordingly):
|
33
|
+
|
34
|
+
```
|
35
|
+
<script>
|
36
|
+
SimpleBlogSearch({
|
37
|
+
searchDataPath: '{{ site.baseurl }}/assets/search_data.json',
|
38
|
+
dataType: 'json',
|
39
|
+
processDataFunc: function(data){ return data },
|
40
|
+
searchInputID: 'search_box',
|
41
|
+
resultsDivID: 'search_results',
|
42
|
+
resultULClass: 'content-ul search-ul content-side',
|
43
|
+
highlightKeywordClass: 'search_keyword',
|
44
|
+
limit: 4,
|
45
|
+
|
46
|
+
});
|
47
|
+
</script>
|
48
|
+
```
|
49
|
+
|
50
|
+
See [my own theme](https://github.com/SeraphRoy/GaeBlogx) as an example.
|
@@ -0,0 +1,104 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var SimpleBlogSearch = function(args) {
|
4
|
+
'use strict';
|
5
|
+
$.ajax({
|
6
|
+
url: args.searchDataPath,
|
7
|
+
dataType: args.dataType,
|
8
|
+
success: function( response ) {
|
9
|
+
// get the contents from search data
|
10
|
+
var datas = args.processDataFunc(response);
|
11
|
+
var $input = document.getElementById(args.searchInputID);
|
12
|
+
if (!$input) return;
|
13
|
+
var $resultContent = document.getElementById(args.resultsDivID);
|
14
|
+
if ($("#" + args.searchInputID).length > 0) {
|
15
|
+
$input.addEventListener('input', function () {
|
16
|
+
var str = `<ul class="${args.resultULClass}">`;
|
17
|
+
var keywordRegex = new RegExp(this.value.toLowerCase(), "g")
|
18
|
+
$resultContent.innerHTML = "";
|
19
|
+
if (this.value.trim().length <= 0) {
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
// perform local searching
|
23
|
+
var count = 0
|
24
|
+
datas.some(function (data) {
|
25
|
+
var isMatch = false;
|
26
|
+
var content_index = [];
|
27
|
+
if (!data.title || data.title.trim() === '') {
|
28
|
+
data.title = "Untitled";
|
29
|
+
}
|
30
|
+
var data_title = data.title.trim().toLowerCase();
|
31
|
+
var data_content = data.content.trim().replace(/(\r\n\t|\n|\r\t|\s)+/gm, " ")
|
32
|
+
var data_content_lowercase = data_content.toLowerCase()
|
33
|
+
var data_url = data.url;
|
34
|
+
var index_content = -1;
|
35
|
+
var first_occur = -1;
|
36
|
+
// only match artiles with not empty contents
|
37
|
+
if (data_content_lowercase !== '') {
|
38
|
+
var matchTitles = data_title.match(keywordRegex)
|
39
|
+
var matchContents = data_content_lowercase.match(keywordRegex)
|
40
|
+
if (matchTitles != null) {
|
41
|
+
isMatch = true
|
42
|
+
}
|
43
|
+
if (matchContents != null) {
|
44
|
+
isMatch = true
|
45
|
+
index_content = data_content_lowercase.indexOf(matchContents[0]);
|
46
|
+
}
|
47
|
+
if (index_content < 0) {
|
48
|
+
index_content = 0
|
49
|
+
}
|
50
|
+
first_occur = index_content
|
51
|
+
}
|
52
|
+
|
53
|
+
// show search results
|
54
|
+
if (isMatch) {
|
55
|
+
str += `<li><a href='${data_url}'>${data.title}</a>`;
|
56
|
+
var content = data.content.trim();
|
57
|
+
if (first_occur >= 0) {
|
58
|
+
// cut out 100 characters
|
59
|
+
var start = first_occur - 20;
|
60
|
+
var end = first_occur + 80;
|
61
|
+
|
62
|
+
if (start < 0) {
|
63
|
+
start = 0;
|
64
|
+
}
|
65
|
+
|
66
|
+
if (start == 0) {
|
67
|
+
end = 100;
|
68
|
+
}
|
69
|
+
|
70
|
+
if (end > data_content.length) {
|
71
|
+
end = data_content.length;
|
72
|
+
}
|
73
|
+
var match_content = data_content.substring(start, end);
|
74
|
+
|
75
|
+
|
76
|
+
// highlight search result
|
77
|
+
if (matchContents != null) {
|
78
|
+
var regStr;
|
79
|
+
if (match_content.toLowerCase().includes(matchContents[0])) {
|
80
|
+
regStr = matchContents[0]
|
81
|
+
} else {
|
82
|
+
regStr = match_content.substring(20)
|
83
|
+
}
|
84
|
+
var reg = new RegExp(regStr.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), "gi");
|
85
|
+
match_content = match_content.replace(reg,
|
86
|
+
`<em class="${args.highlightKeywordClass}">${regStr}</em>`);
|
87
|
+
}
|
88
|
+
|
89
|
+
str += `<p class="${args.resultParagraphClass}">${match_content}...</p>`
|
90
|
+
}
|
91
|
+
str += "</li>";
|
92
|
+
count += 1;
|
93
|
+
}
|
94
|
+
return count == args.limit;
|
95
|
+
});
|
96
|
+
str += "</ul>";
|
97
|
+
$resultContent.innerHTML = str;
|
98
|
+
});
|
99
|
+
}
|
100
|
+
}
|
101
|
+
});
|
102
|
+
}
|
103
|
+
|
104
|
+
module.exports = SimpleBlogSearch;
|
@@ -0,0 +1,55 @@
|
|
1
|
+
{
|
2
|
+
"_from": "simpleblogsearch",
|
3
|
+
"_id": "simpleblogsearch@0.0.7",
|
4
|
+
"_inBundle": false,
|
5
|
+
"_integrity": "sha512-Qu1C+/H/nyInxpSS1GRTcC0FJVKoNQaWnKoRW+nVz05WElUSlLU95s4zB09nSEoUCl9vHUG4dwOyk3Gsn5ByGQ==",
|
6
|
+
"_location": "/simpleblogsearch",
|
7
|
+
"_phantomChildren": {},
|
8
|
+
"_requested": {
|
9
|
+
"type": "tag",
|
10
|
+
"registry": true,
|
11
|
+
"raw": "simpleblogsearch",
|
12
|
+
"name": "simpleblogsearch",
|
13
|
+
"escapedName": "simpleblogsearch",
|
14
|
+
"rawSpec": "",
|
15
|
+
"saveSpec": null,
|
16
|
+
"fetchSpec": "latest"
|
17
|
+
},
|
18
|
+
"_requiredBy": [
|
19
|
+
"#USER",
|
20
|
+
"/"
|
21
|
+
],
|
22
|
+
"_resolved": "https://registry.npmjs.org/simpleblogsearch/-/simpleblogsearch-0.0.7.tgz",
|
23
|
+
"_shasum": "ee6aeae76249ab4ab3c8f23b9862f8efc7e1a8cb",
|
24
|
+
"_spec": "simpleblogsearch",
|
25
|
+
"_where": "/Users/yanxichen/Documents/GaeBlogx",
|
26
|
+
"author": {
|
27
|
+
"name": "Yanxi Chen",
|
28
|
+
"email": "royxagain@gmail.com",
|
29
|
+
"url": "https://www.gaeblogx.com"
|
30
|
+
},
|
31
|
+
"bugs": {
|
32
|
+
"url": "https://github.com/SeraphRoy/SimpleBlogSearch/issues"
|
33
|
+
},
|
34
|
+
"bundleDependencies": false,
|
35
|
+
"deprecated": false,
|
36
|
+
"description": "A simple search function for static blog websites like Jekyll.",
|
37
|
+
"homepage": "https://github.com/SeraphRoy/SimpleBlogSearch#readme",
|
38
|
+
"keywords": [
|
39
|
+
"Jekyll",
|
40
|
+
"blog",
|
41
|
+
"Javascript",
|
42
|
+
"Node"
|
43
|
+
],
|
44
|
+
"license": "MIT",
|
45
|
+
"main": "index.js",
|
46
|
+
"name": "simpleblogsearch",
|
47
|
+
"repository": {
|
48
|
+
"type": "git",
|
49
|
+
"url": "git+https://github.com/SeraphRoy/SimpleBlogSearch.git"
|
50
|
+
},
|
51
|
+
"scripts": {
|
52
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
53
|
+
},
|
54
|
+
"version": "0.0.7"
|
55
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{
|
2
|
+
"requires": true,
|
3
|
+
"lockfileVersion": 1,
|
4
|
+
"dependencies": {
|
5
|
+
"simpleblogsearch": {
|
6
|
+
"version": "0.0.7",
|
7
|
+
"resolved": "https://registry.npmjs.org/simpleblogsearch/-/simpleblogsearch-0.0.7.tgz",
|
8
|
+
"integrity": "sha512-Qu1C+/H/nyInxpSS1GRTcC0FJVKoNQaWnKoRW+nVz05WElUSlLU95s4zB09nSEoUCl9vHUG4dwOyk3Gsn5ByGQ=="
|
9
|
+
}
|
10
|
+
}
|
11
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-theme-gaeblogx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Baby Pepper
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -136,6 +136,11 @@ files:
|
|
136
136
|
- assets/js/lunr.min.js
|
137
137
|
- assets/js/main.js
|
138
138
|
- assets/js/masonry.pkgd.min.js
|
139
|
+
- assets/js/node_modules/simpleblogsearch/LICENSE
|
140
|
+
- assets/js/node_modules/simpleblogsearch/README.md
|
141
|
+
- assets/js/node_modules/simpleblogsearch/index.js
|
142
|
+
- assets/js/node_modules/simpleblogsearch/package.json
|
143
|
+
- assets/js/package-lock.json
|
139
144
|
- assets/js/pageContent.js
|
140
145
|
- assets/js/search.js
|
141
146
|
- assets/js/smooth-scroll.min.js
|
@@ -167,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
172
|
version: '0'
|
168
173
|
requirements: []
|
169
174
|
rubyforge_project:
|
170
|
-
rubygems_version: 2.
|
175
|
+
rubygems_version: 2.7.7
|
171
176
|
signing_key:
|
172
177
|
specification_version: 4
|
173
178
|
summary: 'Jekyll theme with: tags, categories, archives, and searches'
|