8
0

Finalize search feature for merge

Dieser Commit ist enthalten in:
Stéphane Goetz 2016-03-13 21:51:58 +01:00
Ursprung 55ef0b982b
Commit d4c78ae3f9
24 geänderte Dateien mit 258 neuen und 820 gelöschten Zeilen

BIN
daux.phar

Binäre Datei nicht angezeigt.

13
docs/01_Features/Search.md Normale Datei
Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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

Binäre Datei nicht angezeigt.

Vorher

Breite:  |  Höhe:  |  Größe: 368 B

Datei anzeigen

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

Datei anzeigen

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

Datei anzeigen

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