summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehonal <yehonal.azeroth@gmail.com>2018-12-23 11:18:54 +0100
committerYehonal <yehonal.azeroth@gmail.com>2018-12-23 15:19:22 +0100
commitf73bd860bb566be9684876c68f6c55fd1940fddf (patch)
tree2be0b4f08eaf3fc5de23a2826b6abce6feb0b5bf
parent55814019cacf484b8d6882c91b90bd7758e295c9 (diff)
downloadwiki-f73bd860bb566be9684876c68f6c55fd1940fddf.tar.gz
wiki-f73bd860bb566be9684876c68f6c55fd1940fddf.tar.bz2
wiki-f73bd860bb566be9684876c68f6c55fd1940fddf.zip
Implemented new js search method (faster)
# Conflicts: # _includes/git-wiki/components/search/se_js.html
-rw-r--r--_config.yml.dist3
-rw-r--r--_includes/git-wiki/components/search/se_js.html19
-rw-r--r--_includes/git-wiki/components/search/se_js_rss.html21
-rw-r--r--_sass/git-wiki-style.scss4
-rw-r--r--assets/js/simple-jekyll-search.min.js6
-rw-r--r--searchdata.js41
-rw-r--r--sitemap_full.xml2
7 files changed, 80 insertions, 16 deletions
diff --git a/_config.yml.dist b/_config.yml.dist
index bdb7142..a6b30e6 100644
--- a/_config.yml.dist
+++ b/_config.yml.dist
@@ -33,7 +33,8 @@ use_github_wiki: false
# service to edit github markdown pages easily
use_prose_io: true
# Select search_engine component from:
-# - js: it uses a built in javascript component that uses generated sitemap_full.xml to search inside your wiki
+# - js: it uses a built in javascript component that uses generated js object
+# - js_rss: it uses a built in javascript component that uses generated sitemap_full.xml to search inside your wiki with lunr library (slow and experimental)
# - github : it uses internal github repository search
# - google : it uses cse search bar, you need to configure google_cse_token
#
diff --git a/_includes/git-wiki/components/search/se_js.html b/_includes/git-wiki/components/search/se_js.html
index 056dd87..85e168c 100644
--- a/_includes/git-wiki/components/search/se_js.html
+++ b/_includes/git-wiki/components/search/se_js.html
@@ -1,16 +1,7 @@
<div class="git-wiki-search-js">
- <div class="container">
- <div class="well" id="searchbox">
- <input id="search-field" placeholder="Search the Site" />
- <ul id="results"></ul>
- </div>
- </div>
+ <input type="text" id="search-input" placeholder="Search..">
+ <ul id="results-container"></ul>
</div>
- <script src="{{ '/assets/js/jquery.camelhunter.min.js' | relative_url }}"></script>
- <script type="text/javascript">
- $("#search-field").camelHunter({
- onKeyUp: true,
- rss: "{{ '/sitemap_full.xml' | relative_url }}",
- results: "#results"
- });
- </script>
+<!-- script pointing to jekyll-search.js -->
+<script src="{{ '/assets/js/simple-jekyll-search.min.js' | relative_url }}"></script>
+<script async src="{{ '/searchdata.js' | relative_url }}"></script>
diff --git a/_includes/git-wiki/components/search/se_js_rss.html b/_includes/git-wiki/components/search/se_js_rss.html
new file mode 100644
index 0000000..d61d976
--- /dev/null
+++ b/_includes/git-wiki/components/search/se_js_rss.html
@@ -0,0 +1,21 @@
+<div class="git-wiki-search-js">
+ <div class="container">
+ <div class="well" id="searchbox">
+ <input id="search-field" placeholder="Search the Site" />
+ <ul id="results"></ul>
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+ $.ajax({
+ url: "{{ '/assets/js/jquery.camelhunter.min.js' | relative_url }}",
+ dataType: "script",
+ success: function () {
+ setTimeout($("#search-field").camelHunter({
+ onKeyUp: true,
+ rss: "{{ '/sitemap_full.xml' | relative_url }}",
+ results: "#results"
+ }), 0);
+ }
+ });
+</script> \ No newline at end of file
diff --git a/_sass/git-wiki-style.scss b/_sass/git-wiki-style.scss
index 78efd6b..b9072d1 100644
--- a/_sass/git-wiki-style.scss
+++ b/_sass/git-wiki-style.scss
@@ -344,3 +344,7 @@ footer {
.post-item {
margin-bottom: 50px;
}
+
+#results-container li {
+ list-style-type: none;
+} \ No newline at end of file
diff --git a/assets/js/simple-jekyll-search.min.js b/assets/js/simple-jekyll-search.min.js
new file mode 100644
index 0000000..465a69f
--- /dev/null
+++ b/assets/js/simple-jekyll-search.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Simple-Jekyll-Search v1.7.2 (https://github.com/christian-fei/Simple-Jekyll-Search)
+ * Copyright 2015-2018, Christian Fei
+ * Licensed under the MIT License.
+ */
+!function(){"use strict";var f={load:function w(t,e){var n=function r(){return window.XMLHttpRequest?new window.XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP")}();n.open("GET",t,!0),n.onreadystatechange=function i(e,n){return function(){if(4===e.readyState&&200===e.status)try{n(null,JSON.parse(e.responseText))}catch(t){n(t,null)}}}(n,e),n.send()}};(function y(t){if(!function e(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(t))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(t);var r=t.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}});var n=function g(t,e){var n=e.length,r=t.length;if(n<r)return!1;if(r===n)return t===e;t:for(var i=0,o=0;i<r;i++){for(var u=t.charCodeAt(i);o<n;)if(e.charCodeAt(o++)===u)continue t;return!1}return!0},e=new function t(){this.matches=function(t,e){return n(e.toLowerCase(),t.toLowerCase())}};var r=new function O(){this.matches=function(e,t){return!!e&&(e=e.trim().toLowerCase(),(t=t.trim().toLowerCase()).split(" ").filter(function(t){return 0<=e.indexOf(t)}).length===t.split(" ").length)}};var l={put:function z(t){if(c(t))return s(t);if(function e(t){return Boolean(t)&&"[object Array]"===Object.prototype.toString.call(t)}(t))return function i(t){var e=[];a();for(var n=0,r=t.length;n<r;n++)c(t[n])&&e.push(s(t[n]));return e}(t);return undefined},clear:a,search:function S(t){return t?function a(t,e,n,r){for(var i=[],o=0;o<t.length&&i.length<r.limit;o++){var u=d(t[o],e,n,r);u&&i.push(u)}return i}(o,t,u.searchStrategy,u).sort(u.sort):[]},setOptions:function q(t){(u=t||{}).fuzzy=t.fuzzy||!1,u.limit=t.limit||10,u.searchStrategy=t.fuzzy?e:r,u.sort=t.sort||i}};function i(){return 0}var o=[],u={};function a(){return o.length=0,o}function c(t){return Boolean(t)&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return o.push(t),o}function d(t,e,n,r){for(var i in t)if(!p(t[i],r.exclude)&&n.matches(t[i],e))return t}function p(t,e){for(var n=!1,r=0,i=(e=e||[]).length;r<i;r++){var o=e[r];!n&&new RegExp(t).test(o)&&(n=!0)}return n}u.fuzzy=!1,u.limit=10,u.searchStrategy=u.fuzzy?e:r,u.sort=i;var h={compile:function j(r){return m.template.replace(m.pattern,function(t,e){var n=m.middleware(e,r[e],m.template);return void 0!==n?n:r[e]||t})},setOptions:function C(t){m.pattern=t.pattern||m.pattern,m.template=t.template||m.template,"function"==typeof t.middleware&&(m.middleware=t.middleware)}},m={};m.pattern=/\{(.*?)\}/g,m.template="",m.middleware=function(){};var v={merge:function L(t,e){var n={};for(var r in t)n[r]=t[r],"undefined"!=typeof e[r]&&(n[r]=e[r]);return n},isJSON:function M(t){try{return!!(t instanceof Object&&JSON.parse(JSON.stringify(t)))}catch(e){return!1}}};!function(t){var o={searchInput:null,resultsContainer:null,json:[],success:Function.prototype,searchResultTemplate:'<li><a href="{url}" title="{desc}">{title}</a></li>',templateMiddleware:Function.prototype,sortMiddleware:function(){return 0},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},n=["searchInput","resultsContainer","json"],r=function y(e){if(!function n(t){return!!t&&"undefined"!=typeof t.required&&t.required instanceof Array}(e))throw new Error("-- OptionsValidator: required options missing");if(!(this instanceof y))return new y(e);var r=e.required;this.getRequiredOptions=function(){return r},this.validate=function(e){var n=[];return r.forEach(function(t){"undefined"==typeof e[t]&&n.push(t)}),n}}({required:n});function i(t){o.success(t),l.put(t),function e(){o.searchInput.addEventListener("keyup",function(t){(function e(t){return-1===[13,16,20,37,38,39,40,91].indexOf(t)})(t.which)&&(u(),c(t.target.value))})}()}function u(){o.resultsContainer.innerHTML=""}function a(t){o.resultsContainer.innerHTML+=t}function c(t){(function e(t){return t&&0<t.length})(t)&&(u(),function i(t,e){var n=t.length;if(0===n)return a(o.noResultsText);for(var r=0;r<n;r++)t[r].query=e,a(h.compile(t[r]))}(l.search(t),t))}function s(t){throw new Error("SimpleJekyllSearch --- "+t)}t.SimpleJekyllSearch=function(t){return 0<r.validate(t).length&&s("You must specify the following required options: "+n),o=v.merge(o,t),h.setOptions({template:o.searchResultTemplate,middleware:o.templateMiddleware}),l.setOptions({fuzzy:o.fuzzy,limit:o.limit,sort:o.sortMiddleware}),v.isJSON(o.json)?i(o.json):function e(n){f.load(n,function(t,e){t&&s("failed to get JSON ("+n+")"),i(e)})}(o.json),{search:c}}}(window)}(); \ No newline at end of file
diff --git a/searchdata.js b/searchdata.js
new file mode 100644
index 0000000..bb6eb25
--- /dev/null
+++ b/searchdata.js
@@ -0,0 +1,41 @@
+---
+layout: null
+---
+
+var jsondata=[
+ {% for post in site.posts %}
+ {
+ "title" : "{{ post.title | escape }}",
+ "category" : "{{ post.category }}",
+ "tags" : "{{ post.tags | join: ', ' }}",
+ "url" : "{{ site.baseurl }}{{ post.url }}",
+ "date" : "{{ post.date }}",
+ "content" : "{{ post.content | strip_html | strip_newlines }}"
+ } {% unless forloop.last %},{% endunless %}
+ {% endfor %}
+ ,
+ {% for page in site.pages %}
+ {
+ {% if page.title != nil %}
+ "title" : "{{ page.title | escape }}",
+ "category" : "{{ page.category }}",
+ "tags" : "{{ page.tags | join: ', ' }}",
+ "url" : "{{ site.baseurl }}{{ page.url }}",
+ "date" : "{{ page.date }}",
+ "content" : "{{ page.content | strip_html | strip_newlines }}"
+ {% endif %}
+ } {% unless forloop.last %},{% endunless %}
+ {% endfor %}
+];
+
+var sjs = SimpleJekyllSearch({
+ searchInput: document.getElementById('search-input'),
+ resultsContainer: document.getElementById('results-container'),
+ json: jsondata,
+ searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>',
+ noResultsText: 'No results found',
+ limit: 10,
+ fuzzy: false,
+ exclude: []
+ })
+
diff --git a/sitemap_full.xml b/sitemap_full.xml
index 2a979f8..5118304 100644
--- a/sitemap_full.xml
+++ b/sitemap_full.xml
@@ -5,7 +5,7 @@ sitemap: false
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
-{% if site.search_engine == "js" %}
+{% if site.search_engine == "js_rss" %}
<title>{{ site.name | xml_escape }}</title>
<description>{{ site.description | xml_escape }}</description>
<link>{{ site.url }}</link>