import initial
darcs-hash:20061213214504-f46e9-d1bfba998bd933dfc9abf305a942411b6dbc2682.gz
This commit is contained in:
parent
9492f584c6
commit
d315e506b3
2 changed files with 481 additions and 0 deletions
83
wiki/action/opensearch.py
Normal file
83
wiki/action/opensearch.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
"""
|
||||
MoinMoin - "opensearch" action
|
||||
|
||||
Generate an opensearch xml description.
|
||||
|
||||
@copyright: 2006 by Grégoire Détrez <gdetrez@crans.org>
|
||||
@license: GNU GPL, see COPYING for details.
|
||||
"""
|
||||
|
||||
from MoinMoin import config, wikiutil
|
||||
from MoinMoin.util import MoinMoinNoFooter
|
||||
from MoinMoin.wikixml.util import XMLGenerator
|
||||
import StringIO
|
||||
from xml.sax import saxutils
|
||||
|
||||
def execute(pagename, request):
|
||||
_ = request.getText
|
||||
form = request.form
|
||||
|
||||
if form.has_key('searchtype'):
|
||||
searchtype = form['searchtype'][0]
|
||||
else:
|
||||
searchtype = "Titres"
|
||||
|
||||
request.http_headers(["Content-Type: text/xml; charset=%s" % config.charset ])
|
||||
|
||||
name = request.cfg.sitename + " (%s)" % searchtype
|
||||
if searchtype == "Titres":
|
||||
Desc = "%s, recherche dans les titres" % request.cfg.sitename
|
||||
else:
|
||||
Desc = "%s, recherche dans le texte" % request.cfg.sitename
|
||||
|
||||
if searchtype == "Titres":
|
||||
searchtype_arg = "titlesearch=Titres"
|
||||
else:
|
||||
searchtype_arg = "fullsearch=Texte"
|
||||
server_search_addr = "http://%s%s?action=fullsearch&context=180&value={searchTerms}&%s" % (request.http_host, request.script_name, searchtype_arg)
|
||||
|
||||
# prepare output
|
||||
out = StringIO.StringIO()
|
||||
handler = OpenSearchGenerator(out)
|
||||
|
||||
|
||||
handler.startDocument()
|
||||
|
||||
handler.node('ShortName', name)
|
||||
handler.node('Description', Desc)
|
||||
|
||||
handler.node('Image', 'http://%s/favicon.ico' % request.http_host, {
|
||||
'height': "16",
|
||||
'width': "16",
|
||||
'type': "image/x-icon",
|
||||
})
|
||||
handler.node('Url', None, {
|
||||
'template': server_search_addr,
|
||||
'method': "get",
|
||||
'type': "text/html",
|
||||
})
|
||||
handler.endDocument()
|
||||
request.write(out.getvalue())
|
||||
|
||||
raise MoinMoinNoFooter
|
||||
|
||||
class OpenSearchGenerator(saxutils.XMLGenerator):
|
||||
default_xmlns = {
|
||||
'opensearch':"http://a9.com/-/spec/opensearch/1.1/",
|
||||
}
|
||||
def __init__(self, out):
|
||||
saxutils.XMLGenerator.__init__(self, out=out, encoding=config.charset)
|
||||
#self.xmlns = self.default_xmlns
|
||||
def startDocument(self):
|
||||
saxutils.XMLGenerator.startDocument(self)
|
||||
self.startElement('OpenSearchDescription', {'xmlns': "http://a9.com/-/spec/opensearch/1.1/"})
|
||||
def endDocument(self):
|
||||
self.endElement('OpenSearchDescription')
|
||||
saxutils.XMLGenerator.endDocument(self)
|
||||
def node(self, tag, value, attr={}):
|
||||
self.startElement(tag, attr)
|
||||
if value: self.characters(value)
|
||||
self.endElement(tag)
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue