diff --git a/static/csslibs/tipuesearch.css b/static/csslibs/tipuesearch.css new file mode 100644 index 0000000..16a4efd --- /dev/null +++ b/static/csslibs/tipuesearch.css @@ -0,0 +1,103 @@ +/*! + * Tipue Search 4.0 + * Copyright (c) 2014 Tipue + * Tipue Search is released under the MIT License + * http://www.tipue.com/search + * + * This is a modified version of the Tipue Search plugin style sheet, + * edited for the pelican mg theme. + * If you are looking for the original Tipue Search plugin style sheet + * check the project home at http://www.tipue.com/search. + */ +#tipue_search_content { + max-width: 650px; + padding-top: 15px; + margin: 0; } + +#tipue_search_loading:before { + padding-top: 60px; + font-family: FontAwesome; + content: "\f013"; + background: #fff no-repeat left; + -webkit-animation: fa-spin 2s infinite linear; + -moz-animation: fa-spin 2s infinite linear; + -o-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +#tipue_search_warning_head { + font: 300 15px/1.6; + color: #555; } + +#tipue_search_warning { + font: 300 13px/1.6; + color: #333; + margin: 7px 0; } + +#tipue_search_warning a { + color: #36c; + font-weight: 300; + text-decoration: none; } + +#tipue_search_warning a:hover { + color: #333; } + +.tipue_search_content_title { + font-size: 2em; + line-height: 42px; + font-weight: 400; + text-transform: none; + margin-top: 0.5em; } + +.tipue_search_content_title a { + color: #444; + text-decoration: none; } + .tipue_search_content_title a:hover { + color: #444; + text-decoration: underline; } + +.tipue_search_content_url { + display: none; } + +.tipue_search_content_text { + margin-top: 3px; } + +.h01 { + font-weight: bold; } + +#tipue_search_foot { + margin: 51px 0 21px 0; } + +#tipue_search_foot_boxes { + font-size: 0.75em; + padding: 0; + margin: 0; } + +#tipue_search_foot_boxes li { + list-style: none; + margin: 0; + padding: 0; + display: inline; } + +#tipue_search_foot_boxes li a { + padding: 9px 15px 10px 15px; + background-color: #f1f1f1; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-decoration: none; + text-align: center; } + +#tipue_search_foot_boxes li.current { + padding: 9px 15px 10px 15px; + background: #fff; + border: 1px solid #dcdcdc; + border-radius: 1px; + color: #333; + margin-right: 7px; + text-align: center; } + +#tipue_search_foot_boxes li a:hover { + border: 1px solid #ccc; + background-color: #f3f3f3; } + diff --git a/static/jslibs/tipuesearch.js b/static/jslibs/tipuesearch.js new file mode 100644 index 0000000..4ef1dee --- /dev/null +++ b/static/jslibs/tipuesearch.js @@ -0,0 +1,444 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +(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(''); + var t_2 = html.toLowerCase().indexOf('', 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); + } + + $(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 standard = true; + var c = 0; + found = new Array(); + + var d = $('#tipue_search_input').val().toLowerCase(); + d = $.trim(d); + + if ((d.match("^\"") && d.match("\"$")) || (d.match("^'") && d.match("'$"))) + { + standard = false; + } + + if (standard) + { + 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(' '); + } + 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_in.pages.length; i++) + { + var score = 1000000000; + 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 -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - 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, "$1"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (d_w[f].match("^-")) + { + pat = new RegExp(d_w[f].substring(1), 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1 || tipuesearch_in.pages[i].text.search(pat) != -1 || tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score = 1000000000; + } + } + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + else + { + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 1000000000; + var s_t = tipuesearch_in.pages[i].text; + var pat = new RegExp(d, 'i'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + score -= (200000 - i); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + score -= (150000 - i); + } + + if (set.highlightTerms) + { + if (set.highlightEveryTerm) + { + var patr = new RegExp('(' + d + ')', 'gi'); + } + else + { + var patr = new RegExp('(' + d + ')', 'i'); + } + s_t = s_t.replace(patr, "$1"); + } + if (tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score -= (100000 - i); + } + + if (score < 1000000000) + { + found[c++] = score + '^' + tipuesearch_in.pages[i].title + '^' + s_t + '^' + tipuesearch_in.pages[i].loc; + } + } + } + + if (c != 0) + { + if (show_replace == 1) + { + out += '
Showing results for ' + d + '
'; + out += '
Search instead for ' + d_r + '
'; + } + if (c == 1) + { + out += '
1 result
'; + } + else + { + c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + out += '
' + c_c + ' results
'; + } + + 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 += '
' + fo[1] + '
'; + + if (set.showURL) + { + out += '
' + fo[3] + '
'; + } + + 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 += '
' + t_d + '
'; + } + l_o++; + } + + if (c > set.show) + { + var pages = Math.ceil(c / set.show); + var page = (start / set.show); + out += '
'; + } + } + else + { + out += '
Nothing found
'; + } + } + else + { + if (show_stop) + { + out += '
Nothing found
Common words are largely ignored
'; + } + else + { + out += '
Search too short
'; + if (set.minimumLength == 1) + { + out += '
Should be one character or more
'; + } + else + { + out += '
Should be ' + set.minimumLength + ' characters or more
'; + } + } + } + + $('#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); + + + + diff --git a/static/jslibs/tipuesearch_set.js b/static/jslibs/tipuesearch_set.js new file mode 100644 index 0000000..8c8f138 --- /dev/null +++ b/static/jslibs/tipuesearch_set.js @@ -0,0 +1,22 @@ + +/* +Tipue Search 4.0 +Copyright (c) 2014 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"]; + +var tipuesearch_replace = {"words": [ + {"word": "tipua", "replace_with": "tipue"}, + {"word": "javscript", "replace_with": "javascript"} +]}; + +var tipuesearch_stem = {"words": [ + {"word": "e-mail", "stem": "email"}, + {"word": "javascript", "stem": "js"}, + {"word": "nightmare.js", "stem": "nightmarejs"} +]}; + diff --git a/templates/base.html b/templates/base.html index cbcb4ad..bc901c7 100644 --- a/templates/base.html +++ b/templates/base.html @@ -54,6 +54,11 @@ {% endif %} {% endblock %} + {% if not DISABLE_SEARCH %} + + + {% endif %} + @@ -106,35 +111,14 @@ {% if EXTRA_ATOM_FEED %} {{ EXTRA_ATOM_FEED['name'] }}{% endif %} - {% if SOCIAL %} + {% if not DISABLE_SEARCH %}
-

Ubiquité

- {% for link_destination, link in SOCIAL %} - - - - {% endfor %} +
{% endif %} - {% if AVATARS %} -
-

Avatars

- {% for img_uri in AVATARS %} - An avatar I use on the web - {% endfor %} -
- {% endif %} - - {% if READINGS %} - -
-

En ce moment je lis

- {{ READINGS[0]['description'] }} -
-
- {% endif %} -
- {% if not DISABLE_SEARCH %} - + {% if SOCIAL %} +
+

Social

+ {% for link_destination, link in SOCIAL %} + + + + {% endfor %} +
+ {% endif %} + + {% if AVATARS %} +
+

Avatars

+ {% for img_uri in AVATARS %} + An avatar I use on the web + {% endfor %} +
+ {% endif %} + + {% if READINGS %} + +
+

Previous Entries

+ {{ READINGS[0]['description'] }} +
+
{% endif %} {% if LINKS %} @@ -266,6 +275,12 @@ +{% if not DISABLE_SEARCH %} + + + +{% endif %} + {% include 'disqus_count.html' %} diff --git a/templates/search.html b/templates/search.html new file mode 100644 index 0000000..9c485c4 --- /dev/null +++ b/templates/search.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% block title %}Search results{% endblock %} +{% block description %}{% endblock %} + +{% include 'common_seo.html' %} + +{% block content %} +
+

Search results

+ +
+ +
+{% endblock %} + + +