def query(self): # parse Query parameters pattern = drink.request.params.get('pattern') query_type = drink.request.params.get('qtype') page_nr = int(drink.request.params.get('page', 1)) results = int(drink.request.params.get('results', 10)) fmt = drink.request.params.get('fmt', 'html') if pattern: pattern = pattern.decode('utf-8') else: return 'Give me a pattern please !' # Let's compute pages, matches = self._query(pattern, query_type, page_nr, results) if fmt == 'js': return dict(pages=pages, items=matches) # make html html = ['<ul class="results">'] for item in matches: if isinstance(item, basestring): continue html.append('<li class="entry"><a href="%(path)s">%(hi_title)s'%item) if item.get('hi', None): html.append('<div class="minipage">%s</div></a></li>'%(item['hi'].replace('\n', '<br/>'))) else: html.append('</a></li>') if pages > 1: html.append('</ul><br/>pages: ') for page in xrange(1, 1+pages): if page == page_nr: html.append( '<span class="page_nr_cur">%s</span>'%page ) else: html.append( '<a href="%s"><span class="page_nr">%s</span></a>'%("%squery?pattern=%s&qtype=%s&page=%s"%(self.path, pattern, query_type, page), page ) ) elif pages == 1: html.append('</ul>') elif not pages: html.append('</ul><br/>No matching documents!') # save log self.lastlog[drink.request.identity.id] = (pattern, matches) # render return drink.default_view(self, html='\n'.join(html))
def view(self, *a, **kw): if self.mime == "folder": if "index.html" in self.keys(): return self["index.html"].view(*a, **kw) return drink.default_view(self, html='<div id="main_list" class="sortable" />') else: mime = get_type(self.id) if mime.startswith("text"): mime += " ; charset=utf-8" else: drink.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % self.id drink.response.headers["Content-Type"] = mime try: drink.response.headers["Content-Length"] = self.o.fd.getsize(self.realpath) except fs.errors.ResourceNotFoundError: return {"error": True, "code": 404, "message": "%r not found" % self.id} if mime.split("/", 1)[0] == "text": return self.o.fd.open(self.realpath, "rb").read() else: root, fname = "/".join((self.local_path, self.realpath)).rsplit("/", 1) return drink.static_file(fname, root, mimetype=mime, download=self.id)
def list(self): return drink.default_view(self, 'main.html', html=u'<h1>%s</h1>\n<ul id="main_list" class="sortable" />'%self.title)
if factory.form_attr: form_opts.append(factory.form_attr) if factory.group != current_group: old_group = current_group current_group = factory.group if old_group: form.append('</div>') form.append('<div class="%s_grp">'%current_group) val = getattr(self, field, '') form.append('<li class="entry"><div class="input">%s</div></li>'%factory.html(field, val)) form.append('''</li></div></ul> <input class="submit" type="submit" value="Save changes please"/> </form>''') form.insert(0, '''<form class="auto_edit_form" id="auto_edit_form" action="edit" %s method="post"><ul class="editable_fields">'''%(' '.join(form_opts))) return drink.default_view(self, html='\n'.join(form)) def _upload(self, obj): self.editable_fields['content'].set(self, 'content', obj) def upload(self): if 'w' not in request.identity.access(self): return drink.unauthorized() try: filename = request.GET.get('qqfile', '').decode('utf-8') except UnicodeError: filename = request.GET['qqfile'].decode('latin1') if not filename: return {'error': True, 'code': 400, 'message': 'Incorrect parameters. Action aborted.'}