From 61388e1c51fc7caad4f80a7820bfe066d2738e18 Mon Sep 17 00:00:00 2001 From: djohnanderson Date: Mon, 15 Feb 2016 12:14:48 -0800 Subject: [PATCH] First checkin of search for static websites --- daux.phar | Bin 878797 -> 882506 bytes libs/Console/Generate.php | 3 +- libs/Format/HTML/Generator.php | 68 +++- libs/GeneratorHelper.php | 2 +- libs/Server/Server.php | 4 +- templates/home.php | 5 +- templates/layout/00_layout.php | 24 ++ templates/layout/05_page.php | 5 +- templates/partials/navbar_content.php | 8 + tipuesearch/.gitignore | 1 + tipuesearch/img/search.png | Bin 0 -> 368 bytes tipuesearch/tipuesearch.css | 202 +++++++++ tipuesearch/tipuesearch.js | 565 ++++++++++++++++++++++++++ tipuesearch/tipuesearch.min.js | 1 + tipuesearch/tipuesearch_set.js | 59 +++ 15 files changed, 938 insertions(+), 9 deletions(-) mode change 100644 => 100755 libs/Console/Generate.php mode change 100644 => 100755 libs/Format/HTML/Generator.php mode change 100644 => 100755 libs/GeneratorHelper.php mode change 100644 => 100755 libs/Server/Server.php mode change 100644 => 100755 templates/home.php mode change 100644 => 100755 templates/layout/00_layout.php mode change 100644 => 100755 templates/layout/05_page.php mode change 100644 => 100755 templates/partials/navbar_content.php create mode 100644 tipuesearch/.gitignore create mode 100755 tipuesearch/img/search.png create mode 100755 tipuesearch/tipuesearch.css create mode 100644 tipuesearch/tipuesearch.js create mode 100644 tipuesearch/tipuesearch.min.js create mode 100644 tipuesearch/tipuesearch_set.js diff --git a/daux.phar b/daux.phar index 7af873cf3d40fab56153ae9147450f8a9a00ac2a..6df9c6fcce477b571372422b7eba4248ba5dfa10 100755 GIT binary patch delta 9070 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 s!H@0iM+ZvOBfR diff --git a/libs/Console/Generate.php b/libs/Console/Generate.php old mode 100644 new mode 100755 index 4e058c0..9ec08e9 --- a/libs/Console/Generate.php +++ b/libs/Console/Generate.php @@ -20,7 +20,8 @@ class Generate extends SymfonyCommand ->addOption('processor', 'p', InputOption::VALUE_REQUIRED, 'Manipulations on the tree') ->addOption('source', 's', InputOption::VALUE_REQUIRED, 'Where to take the documentation from') ->addOption('delete', null, InputOption::VALUE_NONE, 'Delete pages not linked to a documentation page (confluence)') - ->addOption('destination', 'd', InputOption::VALUE_REQUIRED, $description, 'static'); + ->addOption('destination', 'd', InputOption::VALUE_REQUIRED, $description, 'static') + ->addOption('text_search', '-t', InputOption::VALUE_NONE, 'Generate full text search'); } protected function execute(InputInterface $input, OutputInterface $output) diff --git a/libs/Format/HTML/Generator.php b/libs/Format/HTML/Generator.php old mode 100644 new mode 100755 index d67860f..fd675b5 --- a/libs/Format/HTML/Generator.php +++ b/libs/Format/HTML/Generator.php @@ -59,7 +59,59 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator ); $output->writeLn("Generating ..."); - $this->generateRecursive($this->daux->tree, $destination, $params, $output, $width); + + $text_search = ($input->getOption('text_search')); + $params['text_search'] = $text_search; + if ($text_search) { + $index_pages = []; + } + $this->generateRecursive($this->daux->tree, $destination, $params, $output, $width, $index_pages); + + if ($text_search) { + $tipuesearch_directory = $this->daux->local_base . DIRECTORY_SEPARATOR . 'tipuesearch' . DIRECTORY_SEPARATOR; + file_put_contents($tipuesearch_directory . 'tipuesearch_content.json', json_encode(['pages' => $index_pages])); + GeneratorHelper::copyRecursive ($tipuesearch_directory, $destination . DIRECTORY_SEPARATOR . 'tipuesearch'); + } + + } + + /** + * Remove HTML tags, including invisible text such as style and + * script code, and embedded objects. Add line breaks around + * block-level tags to prevent word joining after tag removal. + * Also collapse whitespace to single space and trim result. + * modified from: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page + */ + private function strip_html_tags($text) + { + $text = preg_replace( + array( + // Remove invisible content + '@]*?>.*?@siu', + '@]*?>.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + '@]*?.*?@siu', + // Add line breaks before and after blocks + '@generateRecursive($node, $new_output_dir, $params, $output, $width, '../' . $base_url); + $this->generateRecursive($node, $new_output_dir, $params, $output, $width, $index_pages, '../' . $base_url); // Rebase configuration again as $params is a shared object DauxHelper::rebaseConfiguration($params, $base_url); @@ -94,7 +146,7 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator "- " . $node->getUrl(), $output, $width, - function() use ($node, $output_dir, $key, $params) { + function() use ($node, $output_dir, $key, $params, &$index_pages) { if ($node instanceof Raw) { copy($node->getPath(), $output_dir . DIRECTORY_SEPARATOR . $key); return; @@ -102,6 +154,14 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator $generated = $this->generateOne($node, $params); file_put_contents($output_dir . DIRECTORY_SEPARATOR . $key, $generated->getContent()); + if (isset($index_pages)) { + array_push($index_pages, [ + 'title' => $node->getTitle(), + 'text' => utf8_encode($this->strip_html_tags($generated->getContent())), + 'tags' => "", + 'url' => $node->getUrl() + ]); + } } ); } diff --git a/libs/GeneratorHelper.php b/libs/GeneratorHelper.php old mode 100644 new mode 100755 index 9e81e95..a5b99eb --- a/libs/GeneratorHelper.php +++ b/libs/GeneratorHelper.php @@ -50,7 +50,7 @@ class GeneratorHelper * @param string $source * @param string $destination */ - protected static function copyRecursive($source, $destination) + public static function copyRecursive($source, $destination) { if (!is_dir($destination)) { mkdir($destination); diff --git a/libs/Server/Server.php b/libs/Server/Server.php old mode 100644 new mode 100755 index 3440178..a08fe43 --- a/libs/Server/Server.php +++ b/libs/Server/Server.php @@ -144,7 +144,9 @@ class Server ); } - return $this->daux->getGenerator()->generateOne($file, $this->params); + $params = $this->params; + $params['text_search'] = false; + return $this->daux->getGenerator()->generateOne($file, $params); } public function getRequest() diff --git a/templates/home.php b/templates/home.php old mode 100644 new mode 100755 index b9dc80d..6bd4334 --- a/templates/home.php +++ b/templates/home.php @@ -45,7 +45,10 @@
- + +
diff --git a/templates/layout/00_layout.php b/templates/layout/00_layout.php old mode 100644 new mode 100755 index 2f5a4b6..c1a1f1d --- a/templates/layout/00_layout.php +++ b/templates/layout/00_layout.php @@ -23,6 +23,12 @@ echo ""; } ?> + + + + + + @@ -53,5 +59,23 @@ } ?> + + + + + + + + + diff --git a/templates/layout/05_page.php b/templates/layout/05_page.php old mode 100644 new mode 100755 index f7ce18f..ce4c415 --- a/templates/layout/05_page.php +++ b/templates/layout/05_page.php @@ -60,7 +60,10 @@
- section('content'); ?> + +
diff --git a/templates/partials/navbar_content.php b/templates/partials/navbar_content.php old mode 100644 new mode 100755 index 7ff8f7e..290fe52 --- a/templates/partials/navbar_content.php +++ b/templates/partials/navbar_content.php @@ -1 +1,9 @@ + + +
+ +
+

+ diff --git a/tipuesearch/.gitignore b/tipuesearch/.gitignore new file mode 100644 index 0000000..10c864c --- /dev/null +++ b/tipuesearch/.gitignore @@ -0,0 +1 @@ +/tipuesearch_content.json diff --git a/tipuesearch/img/search.png b/tipuesearch/img/search.png new file mode 100755 index 0000000000000000000000000000000000000000..8c6943d42ab8e861373162f11056f1d198146ebf GIT binary patch literal 368 zcmV-$0gwKPP)7K``wv zphx>2{0_r#5g#iG#&nVEgc=X!FGs?cTA62~5l& zE5XM}PVJ65P%pNIM82yJAK#80@CP~In49nwXo}dj4c`pfmG1%#c=QkCE2g|7f{hjc O0000 div +{ + background-color: #777; + height: 100%; + width: 3px; + display: inline-block; + margin-right: 2px; + -webkit-animation: stretchdelay 1.2s infinite ease-in-out; + animation: stretchdelay 1.2s infinite ease-in-out; +} +.tipue_search_spinner .tipue_search_rect2 +{ + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; +} +.tipue_search_spinner .tipue_search_rect3 +{ + -webkit-animation-delay: -1.0s; + animation-delay: -1.0s; +} +@-webkit-keyframes stretchdelay +{ + 0%, 40%, 100% + { + -webkit-transform: scaleY(0.4) + } + 20% + { + -webkit-transform: scaleY(1.0) + } +} +@keyframes stretchdelay +{ + 0%, 40%, 100% + { + transform: scaleY(0.4); + -webkit-transform: scaleY(0.4); + } + 20% + { + transform: scaleY(1.0); + -webkit-transform: scaleY(1.0); + } +} + + + + + + diff --git a/tipuesearch/tipuesearch.js b/tipuesearch/tipuesearch.js new file mode 100644 index 0000000..cc0e391 --- /dev/null +++ b/tipuesearch/tipuesearch.js @@ -0,0 +1,565 @@ + +/* +Tipue Search 5.0 +Copyright (c) 2015 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, + 'showTitleCount' : true, + 'minimumLength' : 3, + 'descriptiveWords' : 25, + 'highlightTerms' : true, + 'highlightEveryTerm' : false, + 'mode' : 'static', + 'liveDescription' : '*', + 'liveContent' : '*', + 'contentLocation' : 'tipuesearch/tipuesearch_content.json', + 'debug' : false + + }, options), + getUrlParameters = function () { + var URLParameters = {}, + parameters = window.location.href.split('?')[1], + parameter; + + if (parameters) { + parameters = parameters.split('&'); + for(var i = 0; i < parameters.length; i++){ + parameter = parameters[i].split('='); + URLParameters[decodeURIComponent(parameter[0])] = decodeURIComponent(parameter[1]); + } + } + return URLParameters; + }, + setUrlParameters = function (URLParameters) { + var oldURL = window.location.href, + newURL = oldURL.split('?')[0], + params = []; + + for (var key in URLParameters) { + if (URLParameters.hasOwnProperty (key)) + params.push (encodeURIComponent(key) + '=' + encodeURIComponent(URLParameters[key])); + } + if (params.length) { + params.sort(); + newURL += '?' + params.join('&'); + } + window.location.href = newURL; + }; + + return this.each(function() { + + var tipuesearch_in = { + pages: [] + }; + $.ajaxSetup({ + async: false + }); + var tipuesearch_t_c = 0; + + if (set.mode == 'live') + { + for (var i = 0; i < tipuesearch_pages.length; i++) + { + $.get(tipuesearch_pages[i]) + .done(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 = tipuesearch_string_1; + } + + tipuesearch_in.pages.push( + { + "title": tit, + "text": desc, + "tags": cont, + "url": tipuesearch_pages[i] + }); + }); + } + } + + if (set.mode == 'json') + { + $.getJSON(set.base_url + set.contentLocation) + .done(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"'; + } + + displayResults(); + + if ('onsearch' in document.documentElement) { + // Webkit browsers support a search event that fires everytime a search field + // is cleared or you hit enter. + $('#tipue_search_input')[0].addEventListener ("search", function (args) { + setUrlParameters({'search': $('#tipue_search_input').val(), 'start': 0}); + }); + } else { + // Other browsers + $('#tipue_search_input')[0].addEventListener ("input", function (args) { + var value = $('#tipue_search_input').val(); + + if (value === "") + setUrlParameters({'search': value, 'start': 0}); + }); + + $(this).keyup(function(event) + { + if(event.keyCode == '13') + setUrlParameters({'search': $('#tipue_search_input').val(), 'start': 0}); + }); + } + + function displayResults() { + var URLParams = $.extend({'search': "", 'start': '0'}, getUrlParameters()); + + $('#tipue_search_input').val(URLParams.search); + getTipueSearch (parseInt (URLParams.start, 10), 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 = []; + + var d = $('#tipue_search_input').val().toLowerCase(); + d = $.trim(d); + if (!d) { + $('.doc_content').show(); + return; + } + + $('#tipue_search_content').html('
'); + $('#tipue_search_content').show(); + 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 = 0; + var s_t = tipuesearch_in.pages[i].text; + for (var f = 0; f < d_w.length; f++) + { + var pat = new RegExp(d_w[f], 'gi'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + var m_c = tipuesearch_in.pages[i].title.match(pat).length; + score += (20 * m_c); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + var m_c = tipuesearch_in.pages[i].text.match(pat).length; + score += (20 * m_c); + } + + 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) + { + var m_c = tipuesearch_in.pages[i].tags.match(pat).length; + score += (10 * m_c); + } + + if (tipuesearch_in.pages[i].url.search(pat) != -1) + { + score += 20; + } + + if (score != 0) + { + for (var e = 0; e < tipuesearch_weight.weight.length; e++) + { + if (tipuesearch_in.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_in.pages[i].title.search(pat) != -1 || tipuesearch_in.pages[i].text.search(pat) != -1 || tipuesearch_in.pages[i].tags.search(pat) != -1) + { + score = 0; + } + } + } + + if (score != 0) + { + found.push( + { + "score": score, + "title": tipuesearch_in.pages[i].title, + "desc": s_t, + "url": tipuesearch_in.pages[i].url + }); + c++; + } + } + } + else + { + for (var i = 0; i < tipuesearch_in.pages.length; i++) + { + var score = 0; + var s_t = tipuesearch_in.pages[i].text; + var pat = new RegExp(d, 'gi'); + if (tipuesearch_in.pages[i].title.search(pat) != -1) + { + var m_c = tipuesearch_in.pages[i].title.match(pat).length; + score += (20 * m_c); + } + if (tipuesearch_in.pages[i].text.search(pat) != -1) + { + var m_c = tipuesearch_in.pages[i].text.match(pat).length; + score += (20 * m_c); + } + + 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) + { + var m_c = tipuesearch_in.pages[i].tags.match(pat).length; + score += (10 * m_c); + } + + if (tipuesearch_in.pages[i].url.search(pat) != -1) + { + score += 20; + } + + if (score != 0) + { + for (var e = 0; e < tipuesearch_weight.weight.length; e++) + { + if (tipuesearch_in.pages[i].url == tipuesearch_weight.weight[e].url) + { + score += tipuesearch_weight.weight[e].score; + } + } + } + + if (score != 0) + { + found.push( + { + "score": score, + "title": tipuesearch_in.pages[i].title, + "desc": s_t, + "url": tipuesearch_in.pages[i].url + }); + c++; + } + } + } + + if (c != 0) + { + if (set.showTitleCount && tipuesearch_t_c == 0) + { + var title = document.title; + document.title = '(' + c + ') ' + title; + tipuesearch_t_c++; + } + + if (show_replace == 1) + { + out += '
' + tipuesearch_string_2 + ' ' + d + '. ' + tipuesearch_string_3 + ' ' + d_r + '
'; + } + if (c == 1) + { + out += '
' + tipuesearch_string_4 + '
'; + } + else + { + c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + out += '
' + c_c + ' ' + tipuesearch_string_5 + '
'; + } + + found.sort(function(a, b) { return b.score - a.score } ); + + var l_o = 0; + for (var i = 0; i < found.length; i++) + { + if (l_o >= start && l_o < set.show + start) + { + out += ''; + + if (set.debug) + { + out += '
Score: ' + found[i].score + '
'; + } + + if (set.showURL) + { + var s_u = found[i].url.toLowerCase(); + if(s_u.indexOf('http://') == 0) + { + s_u = s_u.slice(7); + } + out += ''; + } + + if (found[i].desc) + { + var t = found[i].desc; + 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 += '
    '; + + if (start > 0) + { + out += '
  • ' + tipuesearch_string_6 + '
  • '; + } + + 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 += '
  • ' + (f + 1) + '
  • '; + } + else + { + out += '
  • ' + (f + 1) + '
  • '; + } + } + } + else + { + var p_b = page + 2; + if (p_b > pages) + { + p_b = pages; + } + for (var f = page - 1; f < p_b; f++) + { + if (f == page) + { + out += '
  • ' + (f + 1) + '
  • '; + } + else + { + out += '
  • ' + (f + 1) + '
  • '; + } + } + } + + if (page + 1 != pages) + { + out += '
  • ' + tipuesearch_string_7 + '
  • '; + } + + out += '
'; + } + } + else + { + out += '
' + tipuesearch_string_8 + '
'; + } + } + else + { + if (show_stop) + { + out += '
' + tipuesearch_string_8 + '. ' + tipuesearch_string_9 + '
'; + } + else + { + out += '
' + tipuesearch_string_10 + '
'; + if (set.minimumLength == 1) + { + out += '
' + tipuesearch_string_11 + '
'; + } + else + { + out += '
' + tipuesearch_string_12 + ' ' + set.minimumLength + ' ' + tipuesearch_string_13 + '
'; + } + } + } + + $('.doc_content').hide() + $('#tipue_search_content').hide(); + $('#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('_'); + + setUrlParameters({'search': $('#tipue_search_input').val(), 'start': id_a[0]}); + }); + } + + }); + }; + +})(jQuery); diff --git a/tipuesearch/tipuesearch.min.js b/tipuesearch/tipuesearch.min.js new file mode 100644 index 0000000..2a807f8 --- /dev/null +++ b/tipuesearch/tipuesearch.min.js @@ -0,0 +1 @@ +!function(e){e.fn.tipuesearch=function(t){var i=e.extend({show:7,newWindow:!1,showURL:!0,showTitleCount:!0,minimumLength:3,descriptiveWords:25,highlightTerms:!0,highlightEveryTerm:!1,mode:"static",liveDescription:"*",liveContent:"*",contentLocation:"tipuesearch/tipuesearch_content.json",debug:!1},t),r=function(){var e,t={},i=window.location.href.split("?")[1];if(i){i=i.split("&");for(var r=0;r
'),e("#tipue_search_content").show(),(g.match('^"')&&g.match('"$')||g.match("^'")&&g.match("'$"))&&(l=!1),l){var d=g.split(" ");g="";for(var v=0;v=i.minimumLength){if(l){if(r){for(var m=g,v=0;v$1')}if(-1!=n.pages[v].tags.search(C)){var E=n.pages[v].tags.match(C).length;b+=10*E}if(-1!=n.pages[v].url.search(C)&&(b+=20),0!=b)for(var y=0;y$1')}if(-1!=n.pages[v].tags.search(C)){var E=n.pages[v].tags.match(C).length;b+=10*E}if(-1!=n.pages[v].url.search(C)&&(b+=20),0!=b)for(var y=0;y'+tipuesearch_string_2+" "+g+". "+tipuesearch_string_3+' '+m+""),1==_?h+='
'+tipuesearch_string_4+"
":(c_c=_.toString().replace(/\B(?=(\d{3})+(?!\d))/g,","),h+='
'+c_c+" "+tipuesearch_string_5+"
"),found.sort(function(e,t){return t.score-e.score});for(var U=0,v=0;v=t&&U"+found[v].title+"",i.debug&&(h+='
Score: '+found[v].score+"
"),i.showURL){var j=found[v].url.toLowerCase();0==j.indexOf("http://")&&(j=j.slice(7)),h+='"}if(found[v].desc){var k=found[v].desc,I="",O=k.split(" ");if(O.length"}}U++}if(_>i.show){var W=Math.ceil(_/i.show),S=t/i.show;if(h+='
"}}else h+='
'+tipuesearch_string_8+"
"}else u?h+='
'+tipuesearch_string_8+". "+tipuesearch_string_9+"
":(h+='
'+tipuesearch_string_10+"
",h+=1==i.minimumLength?'
'+tipuesearch_string_11+"
":'
'+tipuesearch_string_12+" "+i.minimumLength+" "+tipuesearch_string_13+"
");e(".doc_content").hide(),e("#tipue_search_content").hide(),e("#tipue_search_content").html(h),e("#tipue_search_content").slideDown(200),e("#tipue_search_replaced").click(function(){a(0,!1)}),e(".tipue_search_foot_box").click(function(){var t=e(this).attr("id"),i=t.split("_");s({search:e("#tipue_search_input").val(),start:i[0]})})}var n={pages:[]};e.ajaxSetup({async:!1});var c=0;if("live"==i.mode)for(var h=0;h"),c=t.toLowerCase().indexOf("",a+7);if(-1!=a&&-1!=c)var o=t.slice(a+7,c);else var o=tipuesearch_string_1;n.pages.push({title:o,text:s,tags:r,url:tipuesearch_pages[h]})});"json"==i.mode&&e.getJSON(i.base_url+i.contentLocation).done(function(t){n=e.extend({},t)}),"static"==i.mode&&(n=e.extend({},tipuesearch));var o="";i.newWindow&&(o=' target="_blank"'),t(),"onsearch"in document.documentElement?e("#tipue_search_input")[0].addEventListener("search",function(t){s({search:e("#tipue_search_input").val(),start:0})}):(e("#tipue_search_input")[0].addEventListener("input",function(t){var i=e("#tipue_search_input").val();""===i&&s({search:i,start:0})}),e(this).keyup(function(t){"13"==t.keyCode&&s({search:e("#tipue_search_input").val(),start:0})}))})}}(jQuery); \ No newline at end of file diff --git a/tipuesearch/tipuesearch_set.js b/tipuesearch/tipuesearch_set.js new file mode 100644 index 0000000..eab3f6e --- /dev/null +++ b/tipuesearch/tipuesearch_set.js @@ -0,0 +1,59 @@ + +/* +Tipue Search 5.0 +Copyright (c) 2015 Tipue +Tipue Search is released under the MIT License +http://www.tipue.com/search +*/ + + +/* +Stop words +Stop words list from http://www.ranks.nl/stopwords +*/ + +var tipuesearch_stop_words = ["a", "about", "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': 'tipua', 'replace_with': 'tipue'}, + {'word': 'javscript', 'replace_with': 'javascript'}, + {'word': 'jqeury', 'replace_with': 'jquery'} +]}; + + +// Weighting + +var tipuesearch_weight = {'weight': [ + {'url': 'http://www.tipue.com', 'score': 200}, + {'url': 'http://www.tipue.com/search', 'score': 100}, + {'url': 'http://www.tipue.com/about', 'score': 100} +]}; + + +// Stemming + +var tipuesearch_stem = {'words': [ + {'word': 'e-mail', 'stem': 'email'}, + {'word': 'javascript', 'stem': 'jquery'}, + {'word': 'javascript', 'stem': 'js'} +]}; + + +// 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 = 'Prev'; +var tipuesearch_string_7 = 'Next'; +var tipuesearch_string_8 = 'Nothing found'; +var tipuesearch_string_9 = 'Common words are largely ignored'; +var tipuesearch_string_10 = 'Search too short'; +var tipuesearch_string_11 = 'Should be one character or more'; +var tipuesearch_string_12 = 'Should be'; +var tipuesearch_string_13 = 'characters or more';