jekyll-theme-gaeblogx 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|