1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| {%- if config.search -%} <script id="search"> var searchFunc = function(path, search_id, content_id) { 'use strict'; $.ajax({ url: path, dataType: "xml", success: function( xmlResponse ) { var datas = $( "entry", xmlResponse ).map(function() { return { title: $( "title", this ).text(), content: $("content",this).text(), url: $( "url" , this).text() }; }).get();
var $input = document.getElementById(search_id); if (!$input) return; var $resultContent = document.getElementById(content_id);
$input.addEventListener('input', function () { var str = '<section class=\"posts\">'; var keywords = this.value.trim().toLowerCase().split(/[\s\-]+/); $resultContent.innerHTML = ""; if (this.value.trim().length <= 0) { return; } datas.forEach(function (data) { var isMatch = true; var content_index = []; if (!data.title || data.title.trim() === '') { data.title = "Untitled"; } var data_title = data.title.trim().toLowerCase(); var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase(); var data_url = data.url; var index_title = -1; var index_content = -1; var first_occur = -1; if (data_content !== '') { keywords.forEach(function (keyword, i) { index_title = data_title.indexOf(keyword); index_content = data_content.indexOf(keyword);
if (index_title < 0 && index_content < 0) { isMatch = false; } else { if (index_content < 0) { index_content = 0; } if (i == 0) { first_occur = index_content; } } }); } else { isMatch = false; } if (isMatch) { str += ` <article class="post"> <header class="post-header"> <h1 class="post-title"><a class="post-link" href="`+ data_url +`">`+ data_title +`</a> </h1> </header> <div class="post-content"> `; var content = data.content.trim().replace(/<[^>]+>/g, ""); if (first_occur >= 0) { var start = first_occur - 20; var end = first_occur + 80;
if (start < 0) { start = 0; }
if (start == 0) { end = 100; }
if (end > content.length) { end = content.length; }
var match_content = content.substring(start, end);
keywords.forEach(function (keyword) { var regS = new RegExp(keyword, "gi"); match_content = match_content.replace(regS, "<code>" + keyword + "</code>"); });
str += "<p>" + match_content + "...</p>" } str += "</article>"; } }); str += "</section>"; $resultContent.innerHTML = str; }); } }); } var search_path = "{{ config.search.path }}"; if (search_path.length == 0) { search_path = "search.xml"; } var path = "{{ config.root }}" + search_path; searchFunc(path, 'local-search-input', 'local-search-result'); </script> {%- endif -%}
|