""" open/dulcinea/lib/ui/link_triple.qpy """ from dulcinea.link_triple import get_link_triple_db from dulcinea.ui.user.util import ensure_admin_access from qp.fill.directory import Directory from qp.fill.form import Form from qp.fill.html import href from qp.fill.widget import CompositeWidget, SubmitWidget, StringWidget from qp.pub.common import get_request, redirect, header, footer class LinkTripleWidget(CompositeWidget): """ value: (url:str, text:str, title:str) """ def __init__(self, name, value=None, url_hint=('Where you go when this link is clicked. ' 'e.g. /tool/34/ or http://google.com'), text_hint=('The hypertext for this link. i.e. the ' '"clickable" part'), title_hint=('Title is displayed when the cursor hovers on ' 'the link'), **kwargs): CompositeWidget.__init__(self, name, value=value, **kwargs) self.add(StringWidget, 'url', title='URL', value=value and value[0], size=60, hint=url_hint) self.add(StringWidget, 'text', title='Text', value=value and value[1], size=60, hint=text_hint) self.add(StringWidget, 'title', title='Title', value=value and value[2], size=60, hint=title_hint) def _parse(self, request): if self.get('url') and self.get('text'): self.value = self.get('url'), self.get('text'), self.get('title') else: self.value = None class LinkTripleDirectory(Directory): def get_exports(self): yield ('', '_q_index', 'SideBar Links', None) yield ('new', 'new', 'New', 'Make a new sidebar link.') def _q_index:xml(self): ensure_admin_access() title = 'SideBar Links' header(title) links = get_link_triple_db().get_links() if links: '
' for index, triple in enumerate(links): '
%s
' % href('new?%d' % index, '[Insert New Link]', css_class="smallaction") '
%s
' % _format_link_triple(triple, index) '
' else: '

No sidebar links defined

' href('new', '[Append New Link]', css_class="smallaction") footer(title) def new(self): ensure_admin_access() form = Form() form.add(LinkTripleWidget, 'link', title='Link') form.add(SubmitWidget, 'submit', 'Submit') form.add(SubmitWidget, 'cancel', 'Cancel') if form.get('cancel'): redirect('.') if not form.is_submitted() or form.has_errors(): def render:xml(title): header(title) form.render() footer(title) return render('New SideBar Link') link = form.get('link') if link: try: index = int(get_request().get_query()) except ValueError: index = None get_link_triple_db().insert_link(link, index) redirect('.') def _q_lookup(self, component): try: index = int(component) - 1 triple = get_link_triple_db().get(index) if triple: return LinkTripleEditDirectory(index, triple) except ValueError: return None class LinkTripleEditDirectory(Directory): def __init__(self, index, triple): self.index = index self.triple = triple def get_exports(self): yield ('edit', 'edit', self.triple[1], None) yield ('delete', 'delete', None, None) def edit(self): ensure_admin_access() form = Form() form.add(LinkTripleWidget, 'link', value=self.triple, title='Link') form.add(SubmitWidget, 'submit', 'Save Changes') form.add(SubmitWidget, 'cancel', 'Cancel') if form.get('cancel'): redirect('..') if not form.is_submitted() or form.has_errors(): def render:xml(title): header(title) form.render() footer(title) return render('Edit SideBar Link') link = form.get('link') if link: get_link_triple_db()[self.index] = link redirect('..') def delete(self): ensure_admin_access() form = Form() form.add(SubmitWidget, 'delete', 'Delete') form.add(SubmitWidget, 'cancel', 'Cancel') if form.get('cancel'): redirect('..') if not form.is_submitted(): def render:xml(title): header(title) _format_link_triple(self.triple) form.render() footer(title) return render("Delete SideBar Link") del get_link_triple_db()[self.index] redirect('..') def _format_link_triple:xml(triple, index=None): # If index is provided, it must be an int, and actions are rendered. '' '' """
' href(*triple) if index is not None: href('%d/edit' % (index + 1), '[Edit]', css_class="smallaction") href('%d/delete' % (index + 1), '[Delete]', css_class="smallaction") '
URL%s
Text%s
Title%s
""" % triple