summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/exe/ajax.php51
-rw-r--r--lib/exe/opensearch.php38
2 files changed, 87 insertions, 2 deletions
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index 5218803ea..3f64dc7ac 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -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');
@@ -68,6 +73,48 @@ function ajax_qsearch(){
}
/**
+ * 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
*
* Andreas Gohr <andi@splitbrain.org>
diff --git a/lib/exe/opensearch.php b/lib/exe/opensearch.php
new file mode 100644
index 000000000..e23d16d20
--- /dev/null
+++ b/lib/exe/opensearch.php
@@ -0,0 +1,38 @@
+<?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 :