Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/azmelanar/hugo-theme-pixyll.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmytro Slupytskyi <dslupytskyi@gmail.com>2018-09-19 20:28:32 +0300
committerGitHub <noreply@github.com>2018-09-19 20:28:32 +0300
commit32bccaf4545638272c6489a1eed28e627057a0e6 (patch)
tree5318a8a66b6271bc4f642aba45058ecc270be0f4
parent0e0e55816daa105be0dadfcbad41342845854df8 (diff)
parent2f60d490aa0c8bbae18c9ebebecb564d0392f32c (diff)
Merge pull request #29 from azmelanar/compress-search-index
Update Tipue Search to latest version, fix create index script
-rw-r--r--README.md10
-rwxr-xr-xcreate_search_index.py (renamed from create_json.py)30
-rw-r--r--exampleSite/content/search.md6
l---------exampleSite/create_json.py1
l---------exampleSite/create_search_index.py1
-rw-r--r--layouts/_default/terms.html6
-rwxr-xr-xstatic/tipuesearch/tipuesearch.css357
-rw-r--r--static/tipuesearch/tipuesearch.min.js193
-rw-r--r--static/tipuesearch/tipuesearch_set.js112
9 files changed, 584 insertions, 132 deletions
diff --git a/README.md b/README.md
index 790f8cf..9c4402d 100644
--- a/README.md
+++ b/README.md
@@ -39,16 +39,20 @@ disqusShortname = "sitename"
```
## Search
+We decided to use [Tipue Search](http://www.tipue.com/search/) with custom script
+to generate index. Search is being done completely in browser, you don't need to
+run webserver for search. Current version of Tipue Search is 7.0
+
To activate search ensure that `[params]` section has line `search_engine = true`.
Then you need to generate search index:
-1. Copy script `create_json.py` to your website root location,
+1. Copy script `create_search_index.py` to your website root location,
where `config.toml` is located.
1. Install python requirements: `pip install -r requirements.txt`
-1. Run `python2 create_json.py`
+1. Run `python2 create_search_index.py`
Script was tested with python 2.7 only.
-Index will be placed into `public/tipuesearch_content.json`. Every time you add
+Index will be placed into `public/tipuesearch/tipuesearch_content.js`. Every time you add
new article you need to regenerate index with command above.
If you run hugo as a server, please append option `--renderToDisk` othervise hugo
will not pick up files generated by search script.
diff --git a/create_json.py b/create_search_index.py
index 2f70d69..667b2ad 100755
--- a/create_json.py
+++ b/create_search_index.py
@@ -1,8 +1,11 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
# -*- coding: utf-8 -*-
+#
+# Script creates search index for Tipue Search 7.0
+# Check http://www.tipue.com/search/help/ for more info
-import os
import json
+import os
from bs4 import BeautifulSoup
@@ -22,22 +25,26 @@ def parser(page):
node = {}
try:
node['title'] = soup.title.get_text(' ', strip=True).replace('&nbsp;', ' ').replace('^', '&#94;')
- node['loc'] = soup.link['href']
+ node['url'] = soup.link['href']
node['text'] = soup.article.get_text(' ', strip=True).replace('^', '&#94;')
- tags = ['nonetags']
- #for a in soup.find("p", id='tags').find_all("a"):
- # tags.append(a['href'].split('/')[-1])
+ tags = []
+ for a in soup.find("p", class_="post-meta").find_all("a"):
+ tags.append(a['href'].split('/')[-1])
node['tags'] = ' '.join(tags)
return node
- except:
+ except Exception as e:
+ #print(e)
return None
# Json accumulator
def jsoner(nodes):
jdata = {'pages': nodes}
- with open('public/tipuesearch_content.json', 'w') as f:
- json.dump(jdata, f)
+ output = json.dumps(jdata)
+ output = 'var tipuesearch = ' + output + ';'
+ # This is hardcoded http://www.tipue.com/search/help/?d=2
+ with open('public/tipuesearch/tipuesearch_content.js', 'w') as f:
+ f.write(output)
# Sitemap generation
@@ -48,12 +55,13 @@ xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitem
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'''
url = '<url><loc>{0}</loc><changefreq>daily</changefreq><priority>0.5</priority></url>\n'
for n in nodes:
- xml = xml + url.format(n['loc'])
+ xml = xml + url.format(n['url'])
xml = xml + '\n</urlset>'
with open('public/search/sitemap.xml', 'w') as f:
f.write(xml)
-if os.path.exists('./public'):
+
+if os.path.exists('./public/tipuesearch'):
pages = walker('.')
nodes = []
for p in pages:
diff --git a/exampleSite/content/search.md b/exampleSite/content/search.md
index 7b93931..47afc59 100644
--- a/exampleSite/content/search.md
+++ b/exampleSite/content/search.md
@@ -7,16 +7,18 @@ title = "search"
<div>
<link rel="stylesheet" type="text/css" href="../tipuesearch/tipuesearch.css">
-<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
+<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css">
<script type="text/javascript" src="../tipuesearch/tipuesearch_set.js"></script>
<script type="text/javascript" src="../tipuesearch/tipuesearch.min.js"></script>
+<script type="text/javascript" src="../tipuesearch/tipuesearch_content.js"></script>
<script>
$(document).ready(function() {
$('#tipue_search_input').tipuesearch({
'mode' : 'json',
'show': 10,
'newWindow': true,
- 'contentLocation': '../tipuesearch_content.json'
+ 'wholeWords': false
});
});
</script>
diff --git a/exampleSite/create_json.py b/exampleSite/create_json.py
deleted file mode 120000
index 4902329..0000000
--- a/exampleSite/create_json.py
+++ /dev/null
@@ -1 +0,0 @@
-../create_json.py \ No newline at end of file
diff --git a/exampleSite/create_search_index.py b/exampleSite/create_search_index.py
new file mode 120000
index 0000000..4d5cf51
--- /dev/null
+++ b/exampleSite/create_search_index.py
@@ -0,0 +1 @@
+../create_search_index.py \ No newline at end of file
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
index 10b9601..3980a03 100644
--- a/layouts/_default/terms.html
+++ b/layouts/_default/terms.html
@@ -8,16 +8,18 @@
{{ $baseurl := .Site.BaseURL }}
{{ if eq .URL "/search/" }}
<link rel="stylesheet" type="text/css" href="{{ $baseurl }}/tipuesearch/tipuesearch.css">
-<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
+<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css">
<script type="text/javascript" src="{{ $baseurl }}/tipuesearch/tipuesearch_set.js"></script>
<script type="text/javascript" src="{{ $baseurl }}/tipuesearch/tipuesearch.min.js"></script>
+<script type="text/javascript" src="{{ $baseurl }}/tipuesearch/tipuesearch_content.js"></script>
<script>
$(document).ready(function() {
$('#tipue_search_input').tipuesearch({
'mode' : 'json',
'show': 10,
'newWindow': true,
- 'contentLocation': '{{ $baseurl }}/tipuesearch_content.json'
+ 'wholeWords': false
});
});
</script>
diff --git a/static/tipuesearch/tipuesearch.css b/static/tipuesearch/tipuesearch.css
index 4f8b3dc..b79ad5f 100755
--- a/static/tipuesearch/tipuesearch.css
+++ b/static/tipuesearch/tipuesearch.css
@@ -1,88 +1,332 @@
+@import url('https://fonts.googleapis.com/css?family=Open+Sans:300,400|Source+Code+Pro');
+
/*
-Tipue Search 3.0.1
-Copyright (c) 2013 Tipue
+Tipue Search 7.0
+Copyright (c) 2018 Tipue
Tipue Search is released under the MIT License
http://www.tipue.com/search
*/
-#tipue_search_content
+/* basics */
+
+
+.tipue_search_group:after
{
- clear: left;
- max-width: 650px;
- padding: 0 13px 0;
- margin: 0;
+ content: "";
+ display: table;
+ clear: both;
+}
+
+
+/* fonts, colors */
+
+
+#tipue_search_input
+{
+ font: 15px/1 'Open Sans', sans-serif;
+ color: #333;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
-#tipue_search_loading
+.tipue_search_icon
{
- padding-top: 60px;
- background: #fff url('img/loader.gif') no-repeat left;
+ font: 300 24px/1 'Open Sans', sans-serif;
+ color: #777;
}
-#tipue_search_warning
+#tipue_search_results_count, .tipue_search_related, .tipue_search_note
+{
+ font: 12px/1.3 'Source Code Pro', monospace;
+ text-transform: uppercase;
+ color: #999;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+#tipue_search_replace, #tipue_search_error, .tipue_search_content_text
{
- font: 12px/1.6 'open sans', sans-serif;
- color: #333;
- margin: 7px 0;
+ font: 300 16px/1.6 'Open Sans', sans-serif;
+ color: #666;
}
-#tipue_search_warning a
+#tipue_search_replace a
{
+ color: #339e41;
text-decoration: none;
}
-#tipue_search_warning a:hover
+#tipue_search_replace a:hover
{
- padding-bottom: 1px;
- border-bottom: 1px solid #ccc;
+ color: #666;
}
-#tipue_search_results_count, #tipue_search_warning_head
+.tipue_search_related_btn
{
- padding: 5px 5px 15px 5px;
- margin: 20px 0px 20px 0px;
- border-bottom: 1px solid rgb(143, 134, 134);
- font-size: 1.3em;
+ font: 11px/1 'Source Code Pro', monospace;
+ color: #666;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ background-color: #f7f7f7;
}
.tipue_search_content_title
{
- font: 300 23px/1.6 'open sans', sans-serif;
- margin-top: 20px;
+ font: 300 30px/1.2 'Open Sans', sans-serif;
+ color: #333;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
.tipue_search_content_title a
{
- color: #3f72d8;
+ color: #333;
+ text-decoration: none;
+}
+.tipue_search_content_url, .tipue_search_content_debug
+{
+ font: 300 15px/1.7 'Open Sans', sans-serif;
+ color: #333;
+}
+.tipue_search_content_url a
+{
+ color: #339e41;
+ text-decoration: none;
+}
+.tipue_search_content_url a:hover
+{
+ color: #666;
+}
+.tipue_search_content_bold
+{
+ font-weight: 400;
+ color: #333;
+}
+.tipue_search_note a
+{
+ color: #999;
+ text-decoration: none;
+}
+.tipue_search_image_close
+{
+ font: 22px/1 'Source Code Pro', monospace;
+ color: #ccc;
+}
+#tipue_search_zoom_text
+{
+ font: 11px/1.7 'Source Code Pro', monospace;
+ color: #ccc;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+}
+#tipue_search_zoom_text a
+{
+ color: #ccc;
+ text-decoration: none;
+ border-bottom: 2px solid #f7f7f7;
+}
+#tipue_search_zoom_text a:hover
+{
+ border: 0;
+}
+#tipue_search_foot_boxes
+{
+ font: 13px/1 'Source Code Pro', sans-serif;
+ text-transform: uppercase;
+ color: #333;
+}
+#tipue_search_foot_boxes li a
+{
+ background-color: #f7f7f7;
+ color: #666;
+}
+#tipue_search_foot_boxes li.current
+{
+ background: #252525;
+ color: #ccc;
+}
+#tipue_search_foot_boxes li a:hover, .tipue_search_related_btn:hover
+{
+ background: #252525;
+ color: #ccc;
+}
+
+
+/* search box */
+
+
+#tipue_search_input
+{
+ float: left;
+ width: 200px;
+ background-color: #f3f3f3;
+ border: none;
+ padding: 9px 6px 10px 15px;
+ height: 56px;
+ border-radius: 3px;
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ box-sizing: border-box;
+ box-shadow: none;
+ outline: 0;
+ margin: 0;
+}
+.tipue_search_button
+{
+ position: relative;
+ float: left;
+ width: 47px;
+ height: 56px;
+ margin-left: -3px;
+ background-color: #f3f3f3;
+ border: none;
+ border-radius: 3px;
+ box-sizing: border-box;
+ cursor: pointer;
+ outline: 0;
+}
+.tipue_search_icon
+{
+ float: left;
+ transform: rotate(-45deg);
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ box-sizing: border-box;
+ box-shadow: none;
+ outline: 0;
+ margin: -1px 0 0 8px;
+}
+
+
+/* search results */
+
+
+#tipue_search_content
+{
+ max-width: 100%;
+ margin: 0;
+}
+.tipue_search_result
+{
+ padding-top: 21px;
+}
+#tipue_search_results_count
+{
+ padding-top: 9px;
+}
+.tipue_search_related
+{
+ padding-top: 13px;
+}
+.tipue_search_related_block
+{
+ padding-bottom: 6px;
+}
+#tipue_search_warning
+{
+ padding-top: 10px;
+}
+.tipue_search_related_btn
+{
+ display: inline-block;
+ padding: 9px 10px;
text-decoration: none;
+ text-align: center;
+ border-radius: 3px;
+ margin: 9px 9px 0 0;
+ outline: 0;
+ transition: 0.2s;
+ cursor: pointer;
+}
+#tipue_search_replace
+{
+ padding-top: 13px;
}
-.tipue_search_content_title a:hover
+#tipue_search_error
{
- padding-bottom: 1px;
- border-bottom: 1px solid #ccc;
+ padding-top: 13px;
+}
+.tipue_search_content_url
+{
+ padding-top: 3px;
+ word-wrap: break-word;
+ hyphens: auto;
}
.tipue_search_content_text
{
- font-size: 1.25rem;
- line-height: 1.8;
- color: #333;
- text-transform: none;
- padding: 13px 0;
+ word-wrap: break-word;
+ hyphens: auto;
+ margin-top: 1px;
+}
+.tipue_search_note
+{
+ padding-top: 5px;
+}
+.tipue_search_content_debug
+{
+ margin: 5px 0;
}
-.tipue_search_content_text b {
- background-color: #fbfd3d;
+
+/* images */
+
+
+.tipue_search_image
+{
+ padding: 9px 0 6px 0;
+}
+.tipue_search_img
+{
+ width: 200px;
+ max-width: 100%;
+ height: auto;
+ transition: 0.5s;
+ border-radius: 1px;
+}
+.tipue_search_img:hover
+{
+ opacity: 0.7;
+}
+.tipue_search_image_zoom
+{
+ cursor: pointer;
}
-.tipue_search_content_loc
+#tipue_search_image_modal
{
- font: 300 13px/1.7 'open sans', sans-serif;
+ display: none;
+ position: fixed;
+ z-index: 1000;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
overflow: auto;
+ background-color: rgba(0, 0, 0, 0.9);
}
-.tipue_search_content_loc a
+.tipue_search_image_close
{
- text-decoration: none;
- margin-bottom: 1.5rem;
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 25px 30px;
+ cursor: pointer;
+}
+.tipue_search_image_block
+{
+ margin: 0 auto;
+ max-width: 900px;
+ padding: 73px 30px 30px 30px;
+ box-sizing: border-box;
+ color: #fff;
}
-.tipue_search_content_loc a:hover
+#tipue_search_zoom_img
{
- padding-bottom: 1px;
- border-bottom: 1px solid #ccc;
+ max-width: 100%;
+ height: auto;
}
+#tipue_search_zoom_text, .tipue_search_zoom_options
+{
+ padding-top: 9px;
+}
+
+
+/* footer */
+
+
#tipue_search_foot
{
margin: 51px 0 21px 0;
@@ -91,38 +335,29 @@ http://www.tipue.com/search
{
padding: 0;
margin: 0;
- font: 12px/1 'open sans', sans-serif;
+ cursor: pointer;
}
#tipue_search_foot_boxes li
{
+ display: inline;
list-style: none;
margin: 0;
padding: 0;
- display: inline;
}
#tipue_search_foot_boxes li a
{
- padding: 7px 13px 8px 13px;
- background-color: #f1f1f1;
- border: 1px solid #dcdcdc;
- border-radius: 1px;
- color: #333;
+ padding: 10px 17px 11px 17px;
+ border-radius: 3px;
margin-right: 7px;
text-decoration: none;
text-align: center;
+ transition: 0.2s;
}
#tipue_search_foot_boxes li.current
{
- padding: 7px 13px 8px 13px;
- background: #fff;
- border: 1px solid #dcdcdc;
- border-radius: 1px;
- color: #333;
+ padding: 10px 17px 11px 17px;
+ border-radius: 3px;
margin-right: 7px;
text-align: center;
}
-#tipue_search_foot_boxes li a:hover
-{
- border: 1px solid #ccc;
- background-color: #f3f3f3;
-}
+
diff --git a/static/tipuesearch/tipuesearch.min.js b/static/tipuesearch/tipuesearch.min.js
index 6458659..7e8a47e 100644
--- a/static/tipuesearch/tipuesearch.min.js
+++ b/static/tipuesearch/tipuesearch.min.js
@@ -1,12 +1,181 @@
-(function($){$.fn.tipuesearch=function(options){var set=$.extend({"show":7,"newWindow":false,"showURL":true,"minimumLength":3,"descriptiveWords":25,"highlightTerms":true,"highlightEveryTerm":false,"mode":"static","liveDescription":"*","liveContent":"*","contentLocation":"tipuesearch/tipuesearch_content.json"},options);return this.each(function(){var tipuesearch_in={pages:[]};$.ajaxSetup({async:false});if(set.mode=="live")for(var i=0;i<tipuesearch_pages.length;i++)$.get(tipuesearch_pages[i],"",function(html){var cont=
-$(set.liveContent,html).text();cont=cont.replace(/\s+/g," ");var desc=$(set.liveDescription,html).text();desc=desc.replace(/\s+/g," ");var t_1=html.toLowerCase().indexOf("<title>");var t_2=html.toLowerCase().indexOf("</title>",t_1+7);if(t_1!=-1&&t_2!=-1)var tit=html.slice(t_1+7,t_2);else var tit="No title";tipuesearch_in.pages.push({"title":tit,"text":desc,"tags":cont,"loc":tipuesearch_pages[i]})});if(set.mode=="json")$.getJSON(set.contentLocation,function(json){tipuesearch_in=$.extend({},json)});
-if(set.mode=="static")tipuesearch_in=$.extend({},tipuesearch);var tipue_search_w="";if(set.newWindow)tipue_search_w=' target="_blank"';function getURLP(name){return decodeURIComponent(((new RegExp("[?|&]"+name+"="+"([^&;]+?)(&|#|;|$)")).exec(location.search)||[,""])[1].replace(/\+/g,"%20"))||null}if(getURLP("q")){$("#tipue_search_input").val(getURLP("q"));getTipueSearch(0,true)}$("#tipue_search_button").click(function(){getTipueSearch(0,true)});$(this).keyup(function(event){if(event.keyCode=="13")getTipueSearch(0,
-true)});function getTipueSearch(start,replace){$("#tipue_search_content").hide();var out="";var results="";var show_replace=false;var show_stop=false;var d=$("#tipue_search_input").val().toLowerCase();d=$.trim(d);var d_w=d.split(" ");d="";for(var i=0;i<d_w.length;i++){var a_w=true;for(var f=0;f<tipuesearch_stop_words.length;f++)if(d_w[i]==tipuesearch_stop_words[f]){a_w=false;show_stop=true}if(a_w)d=d+" "+d_w[i]}d=$.trim(d);d_w=d.split(" ");if(d.length>=set.minimumLength){if(replace){var d_r=d;for(var i=
-0;i<d_w.length;i++)for(var f=0;f<tipuesearch_replace.words.length;f++)if(d_w[i]==tipuesearch_replace.words[f].word){d=d.replace(d_w[i],tipuesearch_replace.words[f].replace_with);show_replace=true}d_w=d.split(" ")}var d_t=d;for(var i=0;i<d_w.length;i++)for(var f=0;f<tipuesearch_stem.words.length;f++)if(d_w[i]==tipuesearch_stem.words[f].word)d_t=d_t+" "+tipuesearch_stem.words[f].stem;d_w=d_t.split(" ");var c=0;found=new Array;for(var i=0;i<tipuesearch_in.pages.length;i++){var score=1E9;var s_t=tipuesearch_in.pages[i].text;
-for(var f=0;f<d_w.length;f++){var pat=new RegExp(d_w[f],"i");if(tipuesearch_in.pages[i].title.search(pat)!=-1)score-=2E5-i;if(tipuesearch_in.pages[i].text.search(pat)!=-1)score-=15E4-i;if(set.highlightTerms){if(set.highlightEveryTerm)var patr=new RegExp("("+d_w[f]+")","gi");else var patr=new RegExp("("+d_w[f]+")","i");s_t=s_t.replace(patr,"<b>$1</b>")}if(tipuesearch_in.pages[i].tags.search(pat)!=-1)score-=1E5-i}if(score<1E9)found[c++]=score+"^"+tipuesearch_in.pages[i].title+"^"+s_t+"^"+tipuesearch_in.pages[i].loc}if(c!=
-0){if(show_replace==1){out+='<div id="tipue_search_warning_head">Showing results for '+d+"</div>";out+='<div id="tipue_search_warning">Search for <a href="javascript:void(0)" id="tipue_search_replaced">'+d_r+"</a></div>"}if(c==1)out+='<div id="tipue_search_results_count">1 result</div>';else{c_c=c.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");out+='<div id="tipue_search_results_count">'+c_c+" results</div>"}found.sort();var l_o=0;for(var i=0;i<found.length;i++){var fo=found[i].split("^");if(l_o>=
-start&&l_o<set.show+start){out+='<div class="tipue_search_content_title"><a href="'+fo[3]+'"'+tipue_search_w+">"+fo[1]+"</a></div>";var t=fo[2];var t_d="";var t_w=t.split(" ");if(t_w.length<set.descriptiveWords)t_d=t;else for(var f=0;f<set.descriptiveWords;f++)t_d+=t_w[f]+" ";t_d=$.trim(t_d);if(t_d.charAt(t_d.length-1)!=".")t_d+=" ...";out+='<div class="tipue_search_content_text">'+t_d+"</div>";if(set.showURL){t_url=fo[3];if(t_url.length>45)t_url=fo[3].substr(0,45)+" ...";out+='<div class="tipue_search_content_loc"><a href="'+
-fo[3]+'"'+tipue_search_w+">"+t_url+"</a></div>"}}l_o++}if(c>set.show){var pages=Math.ceil(c/set.show);var page=start/set.show;out+='<div id="tipue_search_foot"><ul id="tipue_search_foot_boxes">';if(start>0)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start-set.show)+"_"+replace+'">Prev</a></li>';if(page<=2){var p_b=pages;if(pages>3)p_b=3;for(var f=0;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+
-f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}else{var p_b=page+3;if(p_b>pages)p_b=pages;for(var f=page;f<p_b;f++)if(f==page)out+='<li class="current">'+(f+1)+"</li>";else out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+f*set.show+"_"+replace+'">'+(f+1)+"</a></li>"}if(page+1!=pages)out+='<li><a href="javascript:void(0)" class="tipue_search_foot_box" id="'+(start+set.show)+"_"+replace+'">Next</a></li>';out+="</ul></div>"}}else out+='<div id="tipue_search_warning_head">Nothing found</div>'}else if(show_stop)out+=
-'<div id="tipue_search_warning_head">Nothing found</div><div id="tipue_search_warning">Common words are largely ignored</div>';else{out+='<div id="tipue_search_warning_head">Search too short</div>';if(set.minimumLength==1)out+='<div id="tipue_search_warning">Should be one character or more</div>';else out+='<div id="tipue_search_warning">Should be '+set.minimumLength+" characters or more</div>"}$("#tipue_search_content").html(out);$("#tipue_search_content").slideDown(200);$("#tipue_search_replaced").click(function(){getTipueSearch(0,
-false)});$(".tipue_search_foot_box").click(function(){var id_v=$(this).attr("id");var id_a=id_v.split("_");getTipueSearch(parseInt(id_a[0]),id_a[1])})}})}})(jQuery);
+(function($){$.fn.tipuesearch=function(options){var set=$.extend({'contextBuffer':60,'contextLength':60,'contextStart':90,'debug':false,'descriptiveWords':25,'footerPages':3,'highlightTerms':true,'imageZoom':true,'minimumLength':3,'newWindow':false,'show':10,'showContext':true,'showRelated':true,'showTime':true,'showTitleCount':true,'showURL':true,'wholeWords':true},options);return this.each(function(){var tipuesearch_t_c=0;var tipue_search_w='';if(set.newWindow)
+{tipue_search_w=' target="_blank"';}
+function getURLP(name)
+{var locSearch=location.search;var splitted=(new RegExp('[?|&]'+name+'='+'([^&;]+?)(&|#|;|$)').exec(locSearch)||[,""]);var searchString=splitted[1].replace(/\+/g,'%20');try
+{searchString=decodeURIComponent(searchString);}
+catch(e)
+{searchString=unescape(searchString);}
+return searchString||null;}
+if(getURLP('q'))
+{$('#tipue_search_input').val(getURLP('q'));getTipueSearch(0,true);}
+$(this).keyup(function(event)
+{if(event.keyCode=='13')
+{getTipueSearch(0,true);}});function getTipueSearch(start,replace)
+{window.scrollTo(0,0);var out='';var show_replace=false;var show_stop=false;var standard=true;var c=0;var found=[];var d_o=$('#tipue_search_input').val();d_o=d_o.replace(/\+/g,' ').replace(/\s\s+/g,' ');d_o=$.trim(d_o);var d=d_o.toLowerCase();if((d.match("^\"")&&d.match("\"$"))||(d.match("^'")&&d.match("'$")))
+{standard=false;}
+var d_w=d.split(' ');if(standard)
+{d='';for(var i=0;i<d_w.length;i++)
+{var a_w=true;for(var f=0;f<tipuesearch_stop_words.length;f++)
+{if(d_w[i]==tipuesearch_stop_words[f])
+{a_w=false;show_stop=true;}}
+if(a_w)
+{d=d+' '+d_w[i];}}
+d=$.trim(d);d_w=d.split(' ');}
+else
+{d=d.substring(1,d.length-1);}
+if(d.length>=set.minimumLength)
+{if(standard)
+{if(replace)
+{var d_r=d;for(var i=0;i<d_w.length;i++)
+{for(var f=0;f<tipuesearch_replace.words.length;f++)
+{if(d_w[i]==tipuesearch_replace.words[f].word)
+{d=d.replace(d_w[i],tipuesearch_replace.words[f].replace_with);show_replace=true;}}}
+d_w=d.split(' ');}
+var d_t=d;for(var i=0;i<d_w.length;i++)
+{for(var f=0;f<tipuesearch_stem.words.length;f++)
+{if(d_w[i]==tipuesearch_stem.words[f].word)
+{d_t=d_t+' '+tipuesearch_stem.words[f].stem;}}}
+d_w=d_t.split(' ');for(var i=0;i<tipuesearch.pages.length;i++)
+{var score=0;var s_t=tipuesearch.pages[i].text;for(var f=0;f<d_w.length;f++)
+{if(set.wholeWords)
+{var pat=new RegExp('\\b'+d_w[f]+'\\b','gi');}
+else
+{var pat=new RegExp(d_w[f],'gi');}
+if(tipuesearch.pages[i].title.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].title.match(pat).length;score+=(20*m_c);}
+if(tipuesearch.pages[i].text.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].text.match(pat).length;score+=(20*m_c);}
+if(tipuesearch.pages[i].tags)
+{if(tipuesearch.pages[i].tags.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].tags.match(pat).length;score+=(10*m_c);}}
+if(tipuesearch.pages[i].url.search(pat)!=-1)
+{score+=20;}
+if(score!=0)
+{for(var e=0;e<tipuesearch_weight.weight.length;e++)
+{if(tipuesearch.pages[i].url==tipuesearch_weight.weight[e].url)
+{score+=tipuesearch_weight.weight[e].score;}}}
+if(d_w[f].match('^-'))
+{pat=new RegExp(d_w[f].substring(1),'i');if(tipuesearch.pages[i].title.search(pat)!=-1||tipuesearch.pages[i].text.search(pat)!=-1||tipuesearch.pages[i].tags.search(pat)!=-1)
+{score=0;}}}
+if(score!=0)
+{found.push({"score":score,"title":tipuesearch.pages[i].title,"desc":s_t,"img":tipuesearch.pages[i].img,"url":tipuesearch.pages[i].url,"note":tipuesearch.pages[i].note});c++;}}}
+else
+{for(var i=0;i<tipuesearch.pages.length;i++)
+{var score=0;var s_t=tipuesearch.pages[i].text;var pat=new RegExp(d,'gi');if(tipuesearch.pages[i].title.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].title.match(pat).length;score+=(20*m_c);}
+if(tipuesearch.pages[i].text.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].text.match(pat).length;score+=(20*m_c);}
+if(tipuesearch.pages[i].tags)
+{if(tipuesearch.pages[i].tags.search(pat)!=-1)
+{var m_c=tipuesearch.pages[i].tags.match(pat).length;score+=(10*m_c);}}
+if(tipuesearch.pages[i].url.search(pat)!=-1)
+{score+=20;}
+if(score!=0)
+{for(var e=0;e<tipuesearch_weight.weight.length;e++)
+{if(tipuesearch.pages[i].url==tipuesearch_weight.weight[e].url)
+{score+=tipuesearch_weight.weight[e].score;}}}
+if(score!=0)
+{found.push({"score":score,"title":tipuesearch.pages[i].title,"desc":s_t,"img":tipuesearch.pages[i].img,"url":tipuesearch.pages[i].url,"note":tipuesearch.pages[i].note});c++;}}}
+if(c!=0)
+{if(set.showTitleCount&&tipuesearch_t_c==0)
+{var title=document.title;document.title='('+c+') '+title;tipuesearch_t_c++;}
+if(c==1)
+{out+='<div id="tipue_search_results_count">'+tipuesearch_string_4;}
+else
+{var c_c=c.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");out+='<div id="tipue_search_results_count">'+c_c+' '+tipuesearch_string_5;}
+if(set.showTime)
+{var endTimer=new Date().getTime();var time=(endTimer-startTimer)/ 1000;out+=' ('+time.toFixed(2)+' '+tipuesearch_string_14+')';set.showTime=false;}
+out+='</div>';if(set.showRelated&&standard)
+{f=0;for(var i=0;i<tipuesearch_related.Related.length;i++)
+{if(d==tipuesearch_related.Related[i].search)
+{if(!f)
+{out+='<div class="tipue_search_related">'+tipuesearch_string_10+'</div><div class="tipue_search_related_block">';}
+if(show_replace)
+{d_o=d;}
+if(tipuesearch_related.Related[i].include)
+{var r_d=d_o+' '+tipuesearch_related.Related[i].related;}
+else
+{var r_d=tipuesearch_related.Related[i].related;}
+out+='<a class="tipue_search_related_btn" id="'+r_d+'">'+tipuesearch_related.Related[i].related+'</a>';f++;}}
+if(f)
+{out+='</div>';}}
+if(show_replace)
+{out+='<div id="tipue_search_replace">'+tipuesearch_string_2+' '+d+'. '+tipuesearch_string_3+' <a id="tipue_search_replaced">'+d_r+'</a></div>';}
+found.sort(function(a,b){return b.score-a.score});var l_o=0;if(set.imageZoom)
+{out+='<div id="tipue_search_image_modal"><div class="tipue_search_image_close">&#10005;</div><div class="tipue_search_image_block"><a id="tipue_search_zoom_url"><img id="tipue_search_zoom_img"></a><div id="tipue_search_zoom_text"></div></div></div>';}
+for(var i=0;i<found.length;i++)
+{if(l_o>=start&&l_o<set.show+start)
+{out+='<div class="tipue_search_result">';out+='<div class="tipue_search_content_title"><a href="'+found[i].url+'"'+tipue_search_w+'>'+found[i].title+'</a></div>';if(set.debug)
+{out+='<div class="tipue_search_content_debug">Score: '+found[i].score+'</div>';}
+if(set.showURL)
+{var s_u=found[i].url.toLowerCase();if(s_u.indexOf('http://')==0)
+{s_u=s_u.slice(7);}
+out+='<div class="tipue_search_content_url"><a href="'+found[i].url+'"'+tipue_search_w+'>'+s_u+'</a></div>';}
+if(found[i].img)
+{if(set.imageZoom)
+{out+='<div class="tipue_search_image"><img class="tipue_search_img tipue_search_image_zoom" src="'+found[i].img+'" alt="'+found[i].title+'" data-url="'+found[i].url+'"></div>';}
+else
+{out+='<div class="tipue_search_image"><a href="'+found[i].url+'"'+tipue_search_w+'><img class="tipue_search_img" src="'+found[i].img+'" alt="'+found[i].title+'"></a></div>';}}
+if(found[i].desc)
+{var t=found[i].desc;if(set.showContext)
+{d_w=d.split(' ');var s_1=found[i].desc.toLowerCase().indexOf(d_w[0]);if(s_1>set.contextStart)
+{var t_1=t.substr(s_1-set.contextBuffer);var s_2=t_1.indexOf(' ');t_1=t.substr(s_1-set.contextBuffer+s_2);t_1=$.trim(t_1);if(t_1.length>set.contextLength)
+{t='... '+t_1;}}}
+if(standard)
+{d_w=d.split(' ');for(var f=0;f<d_w.length;f++)
+{if(set.highlightTerms)
+{var patr=new RegExp('('+d_w[f]+')','gi');t=t.replace(patr,"<h0011>$1<h0012>");}}}
+else if(set.highlightTerms)
+{var patr=new RegExp('('+d+')','gi');t=t.replace(patr,"<span class=\"tipue_search_content_bold\">$1</span>");}
+var t_d='';var t_w=t.split(' ');if(t_w.length<set.descriptiveWords)
+{t_d=t;}
+else
+{for(var f=0;f<set.descriptiveWords;f++)
+{t_d+=t_w[f]+' ';}}
+t_d=$.trim(t_d);if(t_d.charAt(t_d.length-1)!='.')
+{t_d+=' ...';}
+t_d=t_d.replace(/h0011/g,'span class=\"tipue_search_content_bold\"');t_d=t_d.replace(/h0012/g,'/span');out+='<div class="tipue_search_content_text">'+t_d+'</div>';}
+if(found[i].note)
+{out+='<div class="tipue_search_note">'+found[i].note+'</div>';}
+out+='</div>';}
+l_o++;}
+if(c>set.show)
+{var pages=Math.ceil(c / set.show);var page=(start / set.show);if(set.footerPages<3)
+{set.footerPages=3;}
+out+='<div id="tipue_search_foot"><ul id="tipue_search_foot_boxes">';if(start>0)
+{out+='<li role="navigation"><a class="tipue_search_foot_box" accesskey="b" id="'+(start-set.show)+'_'+replace+'">'+tipuesearch_string_6+'</a></li>';}
+if(page<=2)
+{var p_b=pages;if(pages>set.footerPages)
+{p_b=set.footerPages;}
+for(var f=0;f<p_b;f++)
+{if(f==page)
+{out+='<li class="current" role="navigation">'+(f+1)+'</li>';}
+else
+{out+='<li role="navigation"><a class="tipue_search_foot_box" id="'+(f*set.show)+'_'+replace+'">'+(f+1)+'</a></li>';}}}
+else
+{var p_b=page+set.footerPages-1;if(p_b>pages)
+{p_b=pages;}
+for(var f=page-1;f<p_b;f++)
+{if(f==page)
+{out+='<li class="current" role="navigation">'+(f+1)+'</li>';}
+else
+{out+='<li role="navigation"><a class="tipue_search_foot_box" id="'+(f*set.show)+'_'+replace+'">'+(f+1)+'</a></li>';}}}
+if(page+1!=pages)
+{out+='<li role="navigation"><a class="tipue_search_foot_box" accesskey="m" id="'+(start+set.show)+'_'+replace+'">'+tipuesearch_string_7+'</a></li>';}
+out+='</ul></div>';}}
+else
+{out+='<div id="tipue_search_error">'+tipuesearch_string_8+'</div>';}}
+else
+{if(show_stop)
+{out+='<div id="tipue_search_error">'+tipuesearch_string_8+' '+tipuesearch_string_9+'</div>';}
+else
+{if(set.minimumLength==1)
+{out+='<div id="tipue_search_error">'+tipuesearch_string_11+'</div>';}
+else
+{out+='<div id="tipue_search_error">'+tipuesearch_string_12+' '+set.minimumLength+' '+tipuesearch_string_13+'</div>';}}}
+$('#tipue_search_content').hide().html(out).slideDown(200);$('#tipue_search_replaced').click(function()
+{getTipueSearch(0,false);});$('.tipue_search_related_btn').click(function()
+{$('#tipue_search_input').val($(this).attr('id'));getTipueSearch(0,true);});$('.tipue_search_image_zoom').click(function()
+{$('#tipue_search_image_modal').fadeIn(300);$('#tipue_search_zoom_img').attr('src',this.src);var z_u=$(this).attr('data-url');$('#tipue_search_zoom_url').attr('href',z_u);var z_o=this.alt+'<div class="tipue_search_zoom_options"><a href="'+this.src+'" target="_blank">'+tipuesearch_string_15+'</a>&nbsp; <a href="'+z_u+'">'+tipuesearch_string_16+'</a></div>';$('#tipue_search_zoom_text').html(z_o);});$('.tipue_search_image_close').click(function()
+{$('#tipue_search_image_modal').fadeOut(300);});$('.tipue_search_foot_box').click(function()
+{var id_v=$(this).attr('id');var id_a=id_v.split('_');getTipueSearch(parseInt(id_a[0]),id_a[1]);});}});};})(jQuery); \ No newline at end of file
diff --git a/static/tipuesearch/tipuesearch_set.js b/static/tipuesearch/tipuesearch_set.js
index 1d9242b..e3e51e0 100644
--- a/static/tipuesearch/tipuesearch_set.js
+++ b/static/tipuesearch/tipuesearch_set.js
@@ -1,52 +1,84 @@
/*
-Tipue Search 3.0.1
-Copyright (c) 2013 Tipue
+Tipue Search 7.0
+Copyright (c) 2018 Tipue
Tipue Search is released under the MIT License
http://www.tipue.com/search
*/
-var tipuesearch_stop_words = ["and", "be", "by", "do", "for", "he", "how", "if", "is", "it", "my", "not", "of", "or", "the", "to", "up", "what", "when"];
+/*
+Stop words
+Stop words list from http://www.ranks.nl/stopwords
+*/
+
+var tipuesearch_stop_words = ["a", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here", "here's", "hers", "herself", "him", "himself", "his", "how", "how's", "i", "i'd", "i'll", "i'm", "i've", "if", "in", "into", "is", "isn't", "it", "it's", "its", "itself", "let's", "me", "more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", "off", "on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", "out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "so", "some", "such", "than", "that", "that's", "the", "their", "theirs", "them", "themselves", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "through", "to", "too", "under", "until", "up", "very", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "were", "weren't", "what", "what's", "when", "when's", "where", "where's", "which", "while", "who", "who's", "whom", "why", "why's", "with", "won't", "would", "wouldn't", "you", "you'd", "you'll", "you're", "you've", "your", "yours", "yourself", "yourselves"];
+
+
+// Word replace
+
+var tipuesearch_replace = {'words': [
+ {'word': 'tip', 'replace_with': 'tipue'},
+ {'word': 'javscript', 'replace_with': 'javascript'},
+ {'word': 'jqeury', 'replace_with': 'jquery'}
+]};
+
+
+// Weighting
-var tipuesearch_replace = {"words": [
- {"word": "tipua", replace_with: "tipue"},
- {"word": "javscript", replace_with: "javascript"}
+var tipuesearch_weight = {'weight': [
+ {'url': 'http://www.tipue.com', 'score': 60},
+ {'url': 'http://www.tipue.com/search', 'score': 60},
+ {'url': 'http://www.tipue.com/tipr', 'score': 30},
+ {'url': 'http://www.tipue.com/support', 'score': 20}
]};
-var tipuesearch_stem = {"words": [
- {"word": "e-mail", stem: "email"},
- {"word": "javascript", stem: "script"},
- {"word": "javascript", stem: "js"}
+
+// Illogical stemming
+
+var tipuesearch_stem = {'words': [
+ {'word': 'e-mail', 'stem': 'email'},
+ {'word': 'javascript', 'stem': 'jquery'},
+ {'word': 'javascript', 'stem': 'js'}
]};
-var tipuesearch_pages;
-
-exclude_pages = ['/archives.html', '/tags.html', '/index.html', '/categories.html', '/search.html'];
-
-function showGetResult()
-{
- var result = new Array();
- var scriptUrl = 'sitemap.xml';
- $.ajax({
- url: scriptUrl,
- type: 'GET',
- dataType: 'xml',
- async: false,
- success: function(xml) {
- $(xml).find('url').each(function(){
- var loc = $(this).find('loc').text();
- if ($.inArray(loc, exclude_pages) < 0) {
- result.push(loc);
- }
- });
- },
- error: function() {
- alert('An error occurred while processing XML file.');
- }
- });
- return result;
-}
-
-var r = showGetResult();
-tipuesearch_pages = r;
+
+// Related
+
+var tipuesearch_related = {'Related': [
+ {'search': 'tipue', 'related': 'Search', 'include': 1},
+ {'search': 'tipue', 'related': 'jQuery'},
+ {'search': 'tipue', 'related': 'Features'},
+ {'search': 'tipue', 'related': 'Support'},
+ {'search': 'tipue search', 'related': 'Help', 'include': 1},
+ {'search': 'tipue search', 'related': 'Support'}
+]};
+
+
+// Internal strings
+
+var tipuesearch_string_1 = 'No title';
+var tipuesearch_string_2 = 'Showing results for';
+var tipuesearch_string_3 = 'Search instead for';
+var tipuesearch_string_4 = '1 result';
+var tipuesearch_string_5 = 'results';
+var tipuesearch_string_6 = '<';
+var tipuesearch_string_7 = '>';
+var tipuesearch_string_8 = 'Nothing found.';
+var tipuesearch_string_9 = 'Common words are largely ignored.';
+var tipuesearch_string_10 = 'Related';
+var tipuesearch_string_11 = 'Search too short. Should be one character or more.';
+var tipuesearch_string_12 = 'Search too short. Should be';
+var tipuesearch_string_13 = 'characters or more.';
+var tipuesearch_string_14 = 'seconds';
+var tipuesearch_string_15 = 'Open Image';
+var tipuesearch_string_16 = 'Goto Page';
+
+
+// Internals
+
+
+// Timer for showTime
+
+var startTimer = new Date().getTime();
+