trying to use Dojo ComboBox for searching...
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1330 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
029632fde7
commit
a843474545
4 changed files with 60 additions and 3 deletions
|
@ -13,6 +13,10 @@ function focusOpener() {
|
|||
}
|
||||
}
|
||||
|
||||
function listConceptsForComboBox() {
|
||||
return [['Zope', 'zope'], ]
|
||||
}
|
||||
|
||||
function submitReplacing(targetId, formId, actionUrl) {
|
||||
dojo.io.updateNode(targetId, {
|
||||
url: actionUrl,
|
||||
|
|
|
@ -23,6 +23,7 @@ loops.search package.
|
|||
$Id$
|
||||
"""
|
||||
|
||||
from zope.app import zapi
|
||||
from zope import interface, component
|
||||
from zope.app.catalog.interfaces import ICatalog
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
|
@ -49,6 +50,16 @@ class Search(BaseView):
|
|||
def macro(self):
|
||||
return template.macros['search']
|
||||
|
||||
def initDojo(self):
|
||||
self.registerDojo()
|
||||
cm = self.controller.macros
|
||||
jsCall = 'dojo.require("dojo.widget.ComboBox")'
|
||||
cm.register('js-execute', jsCall, jsCall=jsCall)
|
||||
|
||||
@Lazy
|
||||
def catalog(self):
|
||||
return component.getUtility(ICatalog)
|
||||
|
||||
@property
|
||||
def rowNum(self):
|
||||
""" Return the rowNum to be used for identifying the current search
|
||||
|
@ -67,6 +78,27 @@ class Search(BaseView):
|
|||
for t in ITypeManager(self.context).types
|
||||
if 'concept' in t.qualifiers]))
|
||||
|
||||
def listConcepts(self):
|
||||
request = self.request
|
||||
request.response.setHeader('Content-Type', 'text/json; charset=UTF-8')
|
||||
text = request.get('searchString', '')
|
||||
print 'text:', text
|
||||
#if not text:
|
||||
# return ''
|
||||
type = request.get('search.3.type', 'loops:concept:*')
|
||||
if type.endswith('*'):
|
||||
start = type[:-1]
|
||||
end = start + '\x7f'
|
||||
else:
|
||||
start = end = type
|
||||
cat = self.catalog
|
||||
if text:
|
||||
result = cat.searchResults(loops_type=(start, end), loops_text=text+'*')
|
||||
else:
|
||||
result = cat.searchResults(loops_type=(start, end))
|
||||
return str([[o.title.encode('UTF-8'), zapi.getName(o).encode('UTF-8')]
|
||||
for o in result])
|
||||
|
||||
def submitReplacing(self, targetId, formId, view):
|
||||
self.registerDojo()
|
||||
return 'return submitReplacing("%s", "%s", "%s")' % (
|
||||
|
@ -93,11 +125,15 @@ class SearchResults(BaseView):
|
|||
result = set()
|
||||
request = self.request
|
||||
r3 = self.queryConcepts()
|
||||
type = request.get('search.1.text', 'loops:resource:*')
|
||||
type = request.get('search.1.text', 'loops:*')
|
||||
text = request.get('search.2.text')
|
||||
if not r3 and not text and '*' in type: # there should be some sort of selection...
|
||||
return result
|
||||
if text or not '*' in type:
|
||||
#if r3 and type != 'loops:*':
|
||||
# typeName = type.split(':')[-1]
|
||||
# r3 = set(o for o in r3 if self.isType(o, typeName))
|
||||
#if text or not '*' in loops:
|
||||
if text or type != 'loops:*': # TODO: this may be highly inefficient! see above
|
||||
useTitle = request.get('search.2.title')
|
||||
useFull = request.get('search.2.full')
|
||||
r1 = set()
|
||||
|
|
|
@ -15,6 +15,14 @@
|
|||
permission="zope.View"
|
||||
/>
|
||||
|
||||
<browser:page
|
||||
name="listConceptsForComboBox.js"
|
||||
for="loops.interfaces.ILoopsObject"
|
||||
class="loops.search.browser.Search"
|
||||
attribute="listConcepts"
|
||||
permission="zope.View"
|
||||
/>
|
||||
|
||||
<browser:page
|
||||
name="searchresults.html"
|
||||
for="loops.interfaces.ILoopsObject"
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
|
||||
<metal:text define-macro="concept">
|
||||
<div>
|
||||
<h3>Search via related conceps</h3>
|
||||
<h3>Search via related concepts</h3>
|
||||
<label for="type"
|
||||
tal:attributes="for string:$idPrefix.type">Type:</label>
|
||||
<select name="type"
|
||||
|
@ -148,6 +148,15 @@
|
|||
<input type="button" value="+"
|
||||
title="Add type"
|
||||
tal:condition="nothing" />
|
||||
<div tal:define="dummy item/initDojo">
|
||||
<select dojoType="comboBox"
|
||||
dataUrl="listConceptsForComboBox.js"
|
||||
dataProviderClass="dojo.widget.incrementalComboBoxDataProvider"
|
||||
tal:attributes="name string:$namePrefix.text1;
|
||||
dataUrl string:${context/@@absolute_url}/listConceptsForComboBox.js?searchString=%{searchString}">
|
||||
<option value="zope">Zope</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</metal:text>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue