Finalize search feature for merge

Cette révision appartient à :
Stéphane Goetz 2016-03-13 21:51:58 +01:00
Parent 55ef0b982b
révision d4c78ae3f9
24 fichiers modifiés avec 258 ajouts et 820 suppressions

BIN
daux.phar

Fichier binaire non affiché.

13
docs/01_Features/Search.md Fichier normal
Voir le fichier

@ -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
}
}
```

Voir le fichier

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

Voir le fichier

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

Voir le fichier

@ -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)

Voir le fichier

@ -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()
]);
];
}
}
);

Voir le fichier

@ -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()

Voir le fichier

@ -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>

Voir le fichier

@ -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

Voir le fichier

@ -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>

Voir le fichier

@ -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 } ?>

Diff de fichier supprimé car une ou plusieurs lignes sont trop longues

Diff de fichier supprimé car une ou plusieurs lignes sont trop longues

Diff de fichier supprimé car une ou plusieurs lignes sont trop longues

Diff de fichier supprimé car une ou plusieurs lignes sont trop longues

Diff de fichier supprimé car une ou plusieurs lignes sont trop longues

Voir le fichier

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

Voir le fichier

@ -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

Voir le fichier

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

Voir le fichier

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

Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 368 B

Voir le fichier

@ -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);
}
}

Voir le fichier

@ -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);

Voir le fichier

@ -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';