Skip to content
Snippets Groups Projects
Commit da96af35 authored by Andreas Gohr's avatar Andreas Gohr
Browse files

OpenSearch support

This adds support for the OpenSearch specification to autodetect
DokuWiki's search engine. The patch was submitted by Mike Frysinger
some time ago.
Some changes were made to the original patch. Only tested in FireFox 2.0

darcs-hash:20061110151453-7ad00-298ad77603854a604a642c0afd3975a997b8dc09.gz
parent 122b469f
No related branches found
No related tags found
No related merge requests found
......@@ -179,6 +179,8 @@ function tpl_metaheaders($alt=true){
// the usual stuff
$head['meta'][] = array( 'name'=>'generator', 'content'=>'DokuWiki '.getVersion() );
$head['link'][] = array( 'rel'=>'search', 'type'=>'application/opensearchdescription+xml',
'href'=>DOKU_BASE.'lib/exe/opensearch.php', 'title'=>$conf['title'] );
$head['link'][] = array( 'rel'=>'start', 'href'=>DOKU_BASE );
$head['link'][] = array( 'rel'=>'contents', 'href'=> wl($ID,'do=index',false,'&'),
'title'=>$lang['btn_index'] );
......
......@@ -23,8 +23,12 @@ header('Content-Type: text/html; charset=utf-8');
//call the requested function
if (!isset($_POST['call'])) { return; }
$call = 'ajax_'.$_POST['call'];
if(isset($_POST['call']))
$call = 'ajax_'.$_POST['call'];
else if(isset($_GET['call']))
$call = 'ajax_'.$_GET['call'];
else
return;
if(function_exists($call)){
$call();
}else{
......@@ -47,6 +51,7 @@ function ajax_qsearch(){
global $lang;
$query = cleanID($_POST['q']);
if(empty($query)) $query = cleanID($_GET['q']);
if(empty($query)) return;
require_once(DOKU_INC.'inc/html.php');
......@@ -67,6 +72,48 @@ function ajax_qsearch(){
print '</ul>';
}
/**
* Support OpenSearch suggestions
*
* @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
* @author Mike Frysinger <vapier@gentoo.org>
*/
function ajax_suggestions() {
global $conf;
global $lang;
$query = cleanID($_POST['q']);
if(empty($query)) $query = cleanID($_GET['q']);
if(empty($query)) return;
require_once(DOKU_INC.'inc/html.php');
require_once(DOKU_INC.'inc/fulltext.php');
require_once(DOKU_INC.'inc/JSON.php');
$data = array();
$data = ft_pageLookup($query);
if(!count($data)) return;
// limit results to 15 hits
$data = array_slice($data, 0, 15);
$data = array_map('trim',$data);
$data = array_map('noNS',$data);
$data = array_unique($data);
sort($data);
/* now construct a json */
$suggestions = array(
$query, // the original query
$data, // some suggestions
array(), // no description
array() // no urls
);
$json = new JSON();
header('Content-Type: application/x-suggestions+json');
print $json->encode($suggestions);
}
/**
* Refresh a page lock and save draft
*
......
<?php
/**
* DokuWiki OpenSearch creator
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @link http://www.opensearch.org/
* @author Mike Frysinger <vapier@gentoo.org>
* @author Andreas Gohr <andi@splitbrain.org>
*/
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
if(!defined('NL')) define('NL',"\n");
require_once(DOKU_INC.'inc/init.php');
// try to be clever about the favicon location
if(file_exists(DOKU_INC.'favicon.ico')){
$ico = DOKU_URL.'favicon.ico';
}elseif(DOKU_TPL.'images/favicon.ico'){
$ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/images/favicon.ico';
}elseif(DOKU_TPL.'favicon.ico'){
$ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/favicon.ico';
}else{
$ico = DOKU_URL.'lib/tpl/default/images/favicon.ico';
}
// output
header('Content-Type: application/opensearchdescription+xml; charset=utf-8');
echo '<?xml version="1.0"?>'.NL;
echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">'.NL;
echo ' <ShortName>'.htmlspecialchars($conf['title']).'</ShortName>'.NL;
echo ' <Image type="image/x-icon">'.$ico.'</Image>'.NL;
echo ' <Url type="text/html" template="'.DOKU_URL.DOKU_SCRIPT.'?do=search&amp;id={searchTerms}" />'.NL;
echo ' <Url type="application/x-suggestions+json" template="'.
DOKU_URL.'lib/exe/ajax.php?call=suggestions&amp;q={searchTerms}" />'.NL;
echo '</OpenSearchDescription>'.NL;
//Setup VIM: ex: et ts=4 enc=utf-8 :
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment