Finalize search feature for merge

This commit is contained in:
Stéphane Goetz 2016-03-13 21:51:58 +01:00
parent 55ef0b982b
commit d4c78ae3f9
24 changed files with 258 additions and 820 deletions

BIN
daux.phar

Binary file not shown.

View File

@ -0,0 +1,13 @@
Searching in a Daux.io documentation is possible, but only in static mode.
We don't provide this feature in live rendering as it would be too slow.
To enable the generated search, you can set `search` to true in the `html` section of your configuration
```json
{
"html": {
"search": true
}
}
```

View File

@ -30,6 +30,7 @@
"date_modified": false,
"float": false,
"auto_landing": true,
"search": true,
"repo": "",
"twitter": [],

View File

@ -19,6 +19,7 @@ var unusedRules = [
//We only use one glyphicon ...
".glyphicon-",
"!.glyphicon-chevron-right",
"!.glyphicon-search",
//we dont need all buttons
".btn-",

View File

@ -21,7 +21,7 @@ class Generate extends SymfonyCommand
->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('text_search', '-t', InputOption::VALUE_NONE, 'Generate full text search');
->addOption('search', null, InputOption::VALUE_NONE, 'Generate full text search');
}
protected function execute(InputInterface $input, OutputInterface $output)

View File

@ -10,7 +10,6 @@ use Todaymade\Daux\DauxHelper;
use Todaymade\Daux\Format\Base\LiveGenerator;
use Todaymade\Daux\GeneratorHelper;
use Todaymade\Daux\Tree\ComputedRaw;
use Todaymade\Daux\Tree\Content;
use Todaymade\Daux\Tree\Directory;
use Todaymade\Daux\Tree\Entry;
use Todaymade\Daux\Tree\Raw;
@ -22,6 +21,8 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
/** @var Daux */
protected $daux;
protected $indexed_pages = [];
/**
* @param Daux $daux
*/
@ -60,17 +61,18 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
$output->writeLn("Generating ...");
$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);
$params['html']['search'] = $input->getOption('search');
$this->generateRecursive($this->daux->tree, $destination, $params, $output, $width, $params['html']['search']);
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');
if ($params['html']['search']) {
GeneratorHelper::copyRecursive(
$this->daux->local_base . DIRECTORY_SEPARATOR . 'tipuesearch' . DIRECTORY_SEPARATOR,
$destination . DIRECTORY_SEPARATOR . 'tipuesearch'
);
file_put_contents(
$destination . DIRECTORY_SEPARATOR . 'tipuesearch' . DIRECTORY_SEPARATOR . 'tipuesearch_content.json',
json_encode(['pages' => $this->indexed_pages])
);
}
}
@ -110,8 +112,9 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
"\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0", "\n\$0",
"\n\$0", "\n\$0",
),
$text );
return trim (preg_replace('/\s+/', ' ', strip_tags($text)));
$text
);
return trim(preg_replace('/\s+/', ' ', strip_tags($text)));
}
/**
@ -122,10 +125,11 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
* @param \Todaymade\Daux\Config $params
* @param OutputInterface $output
* @param integer $width
* @param boolean $index_pages
* @param string $base_url
* @throws \Exception
*/
private function generateRecursive(Directory $tree, $output_dir, $params, $output, $width, &$index_pages, $base_url = '')
private function generateRecursive(Directory $tree, $output_dir, $params, $output, $width, $index_pages, $base_url = '')
{
DauxHelper::rebaseConfiguration($params, $base_url);
@ -146,7 +150,7 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
"- " . $node->getUrl(),
$output,
$width,
function() use ($node, $output_dir, $key, $params, &$index_pages) {
function() use ($node, $output_dir, $key, $params, $index_pages) {
if ($node instanceof Raw) {
copy($node->getPath(), $output_dir . DIRECTORY_SEPARATOR . $key);
return;
@ -154,13 +158,13 @@ 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, [
if ($index_pages) {
$this->indexed_pages[] =[
'title' => $node->getTitle(),
'text' => utf8_encode($this->strip_html_tags($generated->getContent())),
'text' => utf8_encode($this->strip_html_tags($generated->getPureContent())),
'tags' => "",
'url' => $node->getUrl()
]);
];
}
}
);

View File

@ -99,6 +99,9 @@ class Server
$params['base_page'] .= 'index.php/';
}
// Text search would be too slow on live server
$params['html']['search'] = false;
return $params;
}
@ -144,9 +147,7 @@ class Server
);
}
$params = $this->params;
$params['text_search'] = false;
return $this->daux->getGenerator()->generateOne($file, $params);
return $this->daux->getGenerator()->generateOne($file, $this->params);
}
public function getRequest()

View File

@ -45,16 +45,13 @@
<div class="container">
<div class="row">
<div class="col-sm-10 col-sm-offset-1">
<?php if ($params['text_search']) { ?>
<?php if ($params['html']['search']) { ?>
<div id="tipue_search_content" style="display:none"></div>
<div class="doc_content" style="display:none">
<?= $page['content']; ?>
</div>
<?php } else { ?>
<div class="doc_content">
<?= $page['content']; ?>
</div>
<?php } ?>
<div class="doc_content">
<?= $page['content']; ?>
</div>
</div>
</div>
</div>

View File

@ -23,10 +23,9 @@
echo "<link href='$css' rel='stylesheet' type='text/css'>";
} ?>
<?php if ($params['text_search']) { ?>
<?php if ($params['html']['search']) { ?>
<!-- Tipue Search -->
<link href="<?php echo $base_url; ?>tipuesearch/tipuesearch.css" rel="stylesheet">
<link href="http://fonts.googleapis.com/css?family=Open+Sans:300,400" rel="stylesheet">
<?php } ?>
<!--[if lt IE 9]>
@ -60,10 +59,10 @@
<script src="<?= $base_url; ?>themes/daux/js/daux.js"></script>
<?php if ($params['text_search']) { ?>
<?php if ($params['html']['search']) { ?>
<!-- Tipue Search -->
<script type="text/javascript" src="<?php echo $base_url; ?>tipuesearch/tipuesearch_set.js"></script>
<script type="text/javascript" src="<?php echo $base_url; ?>tipuesearch/tipuesearch.js"></script>
<script type="text/javascript" src="<?php echo $base_url; ?>tipuesearch/tipuesearch.min.js"></script>
<script>
window.onunload = function(){}; // force $(document).ready to be called on back/forward navigation in firefox

View File

@ -60,16 +60,13 @@
<div class="right-column <?= $params['html']['float'] ? 'float-view' : ''; ?> content-area col-sm-9">
<div class="content-page">
<?php if ($params['text_search']) { ?>
<?php if ($params['html']['search']) { ?>
<div id="tipue_search_content" style="display:none"></div>
<div class="doc_content" style="display:none">
<?= $this->section('content'); ?>
</div>
<?php } else { ?>
<div class="doc_content"">
<?= $this->section('content'); ?>
</div>
<?php } ?>
<div class="doc_content"">
<?= $this->section('content'); ?>
</div>
</div>
</div>
</div>

View File

@ -1,9 +1,8 @@
<a class="brand navbar-brand pull-left" href="<?= $params['base_page'] . $params['index']->getUri(); ?>"><?= $params['title']; ?></a>
<?php if ($params['text_search']) { ?>
<p class="navbar-text pull-right">
<div style="margin-top: 11px">
<input type="search" id="tipue_search_input" placeholder="Search..." autocomplete="on" results=25 autosave=text_search>
</div>
</p>
<?php if ($params['html']['search']) { ?>
<div class="navbar-right navbar-form search">
<i class="glyphicon glyphicon-search search__icon">&nbsp;</i>
<input type="search" id="tipue_search_input" class="form-control search__field" placeholder="Search..." autocomplete="on" results=25 autosave=text_search>
</div>
<?php } ?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -19,7 +19,7 @@
@import "code.less";
@import "grid.less";
//@import "tables.less";
//@import "forms.less";
@import "forms.less";
@import "buttons.less";
// Components

View File

@ -284,8 +284,7 @@
// Extension of the `.form-inline` with some extra flavor for optimum display in
// our navbars.
//DAUX.io / onigoetz; removed so we can safely remove forms.less
/*.navbar-form {
.navbar-form {
margin-left: -@navbar-padding-horizontal;
margin-right: -@navbar-padding-horizontal;
padding: 10px @navbar-padding-horizontal;
@ -320,7 +319,7 @@
padding-bottom: 0;
.box-shadow(none);
}
}*/
}
// Dropdown menus

View File

@ -325,3 +325,17 @@ table {
}
}
}
.search {
position: relative;
&__field {
padding-right: 30px;
}
&__icon {
position: absolute;
right: 12px;
top: 10px;
}
}

View File

@ -1 +0,0 @@
/tipuesearch_content.json

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 B

View File

@ -1,4 +1,3 @@
/*
Tipue Search 5.0
Copyright (c) 2015 Tipue
@ -6,193 +5,198 @@ Tipue Search is released under the MIT License
http://www.tipue.com/search
*/
/* bootstrap overrides the search field so let's undo that */
input[type="search"] {
-webkit-appearance: searchfield;
-webkit-appearance: searchfield;
}
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: searchfield-cancel-button;
-webkit-appearance: searchfield-cancel-button;
}
#tipue_search_input
{
width: 170px;
font-size: medium;
#tipue_search_input {
width: 170px;
font-size: medium;
}
#tipue_search_content
{
max-width: 650px;
padding-top: 15px;
margin: 0;
}
#tipue_search_warning
{
font: 300 15px/1.6 'Open Sans', sans-serif;
color: #555;
margin: 7px 0;
}
#tipue_search_warning a
{
color: #396;
text-decoration: none;
}
#tipue_search_warning a:hover
{
color: #555;
}
#tipue_search_results_count
{
font: 300 15px/1.7 'Open Sans', sans-serif;
color: #555;
}
.tipue_search_content_title
{
font: 300 21px/1.7 'Open Sans', sans-serif;
margin-top: 23px;
}
.tipue_search_content_title a
{
color: #333;
text-decoration: none;
}
.tipue_search_content_title a:hover
{
color: #555;
}
.tipue_search_content_url
{
font: 300 14px/1.9 'Open Sans', sans-serif;
word-wrap: break-word;
hyphens: auto;
}
.tipue_search_content_url a
{
color: #396;
text-decoration: none;
}
.tipue_search_content_url a:hover
{
color: #555;
}
.tipue_search_content_text
{
font: 300 15px/1.6 'Open Sans', sans-serif;
color: #555;
word-wrap: break-word;
hyphens: auto;
margin-top: 3px;
}
.tipue_search_content_debug
{
font: 300 13px/1.6 'Open Sans', sans-serif;
color: #555;
margin: 5px 0;
}
.h01
{
color: #333;
font-weight: 400;
#tipue_search_content {
background: #fff;
max-width: 650px;
padding: 15px;
margin: 0;
}
#tipue_search_foot
{
margin: 51px 0 21px 0;
}
#tipue_search_foot_boxes
{
padding: 0;
margin: 0;
font: 12px 'Open Sans', sans-serif;
}
#tipue_search_foot_boxes li
{
list-style: none;
margin: 0;
padding: 0;
display: inline;
}
#tipue_search_foot_boxes li a
{
padding: 10px 17px 11px 17px;
background-color: #fff;
border: 1px solid #e2e2e2;
border-radius: 1px;
color: #333;
margin-right: 7px;
text-decoration: none;
text-align: center;
}
#tipue_search_foot_boxes li.current
{
padding: 10px 17px 11px 17px;
background: #f6f6f6;
border: 1px solid #e2e2e2;
border-radius: 1px;
color: #333;
margin-right: 7px;
text-align: center;
}
#tipue_search_foot_boxes li a:hover
{
background: #f6f6f6;
#tipue_search_warning {
font-weight:300;
font-size:15px;
line-height: 1.6;
color: #555;
margin: 7px 0;
}
#tipue_search_warning a {
color: #396;
text-decoration: none;
}
#tipue_search_warning a:hover {
color: #555;
}
#tipue_search_results_count {
font-weight:300;
font-size:15px;
line-height: 1.7;
color: #555;
}
.tipue_search_content_title {
font-weight:300;
font-size:21px;
line-height: 1.7;
margin-top: 23px;
}
.tipue_search_content_title a {
color: #333;
text-decoration: none;
}
.tipue_search_content_title a:hover {
color: #555;
}
.tipue_search_content_url {
font-weight:300;
font-size:14px;
line-height: 1.9;
word-wrap: break-word;
hyphens: auto;
}
.tipue_search_content_url a {
color: #396;
text-decoration: none;
}
.tipue_search_content_url a:hover {
color: #555;
}
.tipue_search_content_text {
font-weight:300;
font-size:15px;
line-height: 1.6;
color: #555;
word-wrap: break-word;
hyphens: auto;
margin-top: 3px;
}
.tipue_search_content_debug {
font-weight:300;
font-size:13px;
line-height: 1.6;
color: #555;
margin: 5px 0;
}
.h01 {
color: #333;
font-weight: 400;
}
#tipue_search_foot {
margin: 51px 0 21px 0;
padding: 0 10px;
}
#tipue_search_foot_boxes {
padding: 0;
margin: 0;
font-size: 12px;
width: auto;
float: none;
}
#tipue_search_foot_boxes li {
list-style: none;
margin: 0;
padding: 0;
display: inline;
}
#tipue_search_foot_boxes li a {
padding: 10px 17px 11px 17px;
background-color: #fff;
border: 1px solid #e2e2e2;
border-radius: 1px;
color: #333;
margin-right: 7px;
text-decoration: none;
text-align: center;
}
#tipue_search_foot_boxes li.current {
padding: 10px 17px 11px 17px;
background: #f6f6f6;
border: 1px solid #e2e2e2;
border-radius: 1px;
color: #333;
margin-right: 7px;
text-align: center;
}
#tipue_search_foot_boxes li a:hover {
background: #f6f6f6;
}
/* spinner */
.tipue_search_spinner {
padding: 31px 0;
width: 50px;
height: 28px;
}
.tipue_search_spinner
{
padding: 31px 0;
width: 50px;
height: 28px;
.tipue_search_spinner > 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 > 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_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;
}
.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)
}
}
@-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);
}
@keyframes stretchdelay {
0%, 40%, 100% {
transform: scaleY(0.4);
-webkit-transform: scaleY(0.4);
}
20% {
transform: scaleY(1.0);
-webkit-transform: scaleY(1.0);
}
}

View File

@ -1,565 +0,0 @@
/*
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('<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 = 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('<div class="tipue_search_spinner"><div class="tipue_search_rect1"></div><div class="tipue_search_rect2"></div><div class="rect3"></div></div>');
$('#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, "<span class=\"h01\">$1</span>");
}
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, "<span class=\"h01\">$1</span>");
}
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 += '<div id="tipue_search_warning">' + tipuesearch_string_2 + ' ' + d + '. ' + tipuesearch_string_3 + ' <a id="tipue_search_replaced">' + d_r + '</a></div>';
}
if (c == 1)
{
out += '<div id="tipue_search_results_count">' + tipuesearch_string_4 + '</div>';
}
else
{
c_c = c.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
out += '<div id="tipue_search_results_count">' + c_c + ' ' + tipuesearch_string_5 + '</div>';
}
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 += '<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="' + set.base_url + found[i].url + '"' + tipue_search_w + '>' + s_u + '</a></div>';
}
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 += '<div class="tipue_search_content_text">' + t_d + '</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 class="tipue_search_foot_box" id="' + (start - set.show) + '_' + replace + '">' + tipuesearch_string_6 + '</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 class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>';
}
}
}
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 += '<li class="current">' + (f + 1) + '</li>';
}
else
{
out += '<li><a class="tipue_search_foot_box" id="' + (f * set.show) + '_' + replace + '">' + (f + 1) + '</a></li>';
}
}
}
if (page + 1 != pages)
{
out += '<li><a class="tipue_search_foot_box" id="' + (start + set.show) + '_' + replace + '">' + tipuesearch_string_7 + '</a></li>';
}
out += '</ul></div>';
}
}
else
{
out += '<div id="tipue_search_warning">' + tipuesearch_string_8 + '</div>';
}
}
else
{
if (show_stop)
{
out += '<div id="tipue_search_warning">' + tipuesearch_string_8 + '. ' + tipuesearch_string_9 + '</div>';
}
else
{
out += '<div id="tipue_search_warning">' + tipuesearch_string_10 + '</div>';
if (set.minimumLength == 1)
{
out += '<div id="tipue_search_warning">' + tipuesearch_string_11 + '</div>';
}
else
{
out += '<div id="tipue_search_warning">' + tipuesearch_string_12 + ' ' + set.minimumLength + ' ' + tipuesearch_string_13 + '</div>';
}
}
}
$('.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);

View File

@ -1,4 +1,3 @@
/*
Tipue Search 5.0
Copyright (c) 2015 Tipue
@ -7,43 +6,19 @@ http://www.tipue.com/search
*/
/*
Stop words
Stop words list from http://www.ranks.nl/stopwords
*/
// 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'}
]};
var tipuesearch_replace = {'words': []};
// 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}
]};
var tipuesearch_weight = {'weight': []};
// Stemming
var tipuesearch_stem = {'words': [
{'word': 'e-mail', 'stem': 'email'},
{'word': 'javascript', 'stem': 'jquery'},
{'word': 'javascript', 'stem': 'js'}
]};
var tipuesearch_stem = {'words': []};
// Internal strings
var tipuesearch_string_1 = 'No title';
var tipuesearch_string_2 = 'Showing results for';
var tipuesearch_string_3 = 'Search instead for';