# HG changeset patch # User Laurent Peuch # Date 1551194587 -3600 # Node ID 4ed60412d02d363824e28e4a1319750b9d4f57b0 # Parent f5f1db1e68722de6cfaa995820f827b39fdd683d [doc] pep8/retab in code examples diff -r f5f1db1e6872 -r 4ed60412d02d doc/tutorials/advanced/part04_ui-base.rst --- a/doc/tutorials/advanced/part04_ui-base.rst Wed Feb 27 13:41:34 2019 +0100 +++ b/doc/tutorials/advanced/part04_ui-base.rst Tue Feb 26 16:23:07 2019 +0100 @@ -176,6 +176,7 @@ from cubes.folder import entities as folder + class FolderITreeAdapter(folder.FolderITreeAdapter): def different_type_children(self, entities=True): diff -r f5f1db1e6872 -r 4ed60412d02d doc/tutorials/advanced/part05_ui-advanced.rst --- a/doc/tutorials/advanced/part05_ui-advanced.rst Wed Feb 27 13:41:34 2019 +0100 +++ b/doc/tutorials/advanced/part05_ui-advanced.rst Tue Feb 26 16:23:07 2019 +0100 @@ -60,17 +60,17 @@ .. sourcecode:: python class HTMLPageHeader(basetemplates.HTMLPageHeader): - # override this since it's the easier way to have our bg image - # as the first element following - def call(self, **kwargs): + # override this since it's the easier way to have our bg image + # as the first element following + def call(self, **kwargs): self.w(u'background image' % self._cw.datadir_url) - super(HTMLPageHeader, self).call(**kwargs) + super(HTMLPageHeader, self).call(**kwargs) def registration_callback(vreg): - vreg.register_all(globals().values(), __name__, (HTMLPageHeader)) - vreg.register_and_replace(HTMLPageHeader, basetemplates.HTMLPageHeader) + vreg.register_all(globals().values(), __name__, (HTMLPageHeader)) + vreg.register_and_replace(HTMLPageHeader, basetemplates.HTMLPageHeader) As you may have guessed, my background image is in a :file:`background.jpg` file @@ -104,30 +104,30 @@ * avoid pb with the user actions menu */ img#bg-image { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 0; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 0; } div#page, table#header, div#footer { - background: transparent; - position: relative; + background: transparent; + position: relative; } /* add some space around the logo */ img#logo { - padding: 5px 15px 0px 15px; + padding: 5px 15px 0px 15px; } /* more dark font for metadata to have a chance to see them with the background * image */ div.metadata { - color: black; + color: black; } You can see here stuff explained in the cited page, with only a slight modification @@ -193,6 +193,7 @@ from cubes.zone import views as zone from cubes.tag import views as tag + # change bookmarks box selector so it's only displayed on startup views bookmark.BookmarksBox.__select__ = bookmark.BookmarksBox.__select__ & none_rset() # move zone box to the left instead of in the context frame and tweak its order @@ -216,62 +217,65 @@ from cubicweb.web.views import uicfg, component from cubicweb.web.views import basecontrollers + # hide displayed_on relation using uicfg since it will be displayed by the box below uicfg.primaryview_section.tag_object_of(('*', 'displayed_on', '*'), 'hidden') + class PersonBox(component.AjaxEditRelationCtxComponent): - __regid__ = 'sytweb.displayed-on-box' - # box position - order = 101 - context = 'left' - # define relation to be handled - rtype = 'displayed_on' - role = 'object' - target_etype = 'Person' - # messages - added_msg = _('person has been added') - removed_msg = _('person has been removed') - # bind to js_* methods of the json controller - fname_vocabulary = 'unrelated_persons' - fname_validate = 'link_to_person' - fname_remove = 'unlink_person' + __regid__ = 'sytweb.displayed-on-box' + # box position + order = 101 + context = 'left' + # define relation to be handled + rtype = 'displayed_on' + role = 'object' + target_etype = 'Person' + # messages + added_msg = _('person has been added') + removed_msg = _('person has been removed') + # bind to js_* methods of the json controller + fname_vocabulary = 'unrelated_persons' + fname_validate = 'link_to_person' + fname_remove = 'unlink_person' @monkeypatch(basecontrollers.JSonController) @basecontrollers.jsonize def js_unrelated_persons(self, eid): - """return tag unrelated to an entity""" - rql = "Any F + ' ' + S WHERE P surname S, P firstname F, X eid %(x)s, NOT P displayed_on X" - return [name for (name,) in self._cw.execute(rql, {'x' : eid})] + """return tag unrelated to an entity""" + rql = "Any F + ' ' + S WHERE P surname S, P firstname F, X eid %(x)s, NOT P displayed_on X" + return [name for (name,) in self._cw.execute(rql, {'x' : eid})] @monkeypatch(basecontrollers.JSonController) def js_link_to_person(self, eid, people): - req = self._cw - for name in people: - name = name.strip().title() - if not name: - continue - try: - firstname, surname = name.split(None, 1) - except: - raise ValidationError(eid, {('displayed_on', 'object'): 'provide '}) - rset = req.execute('Person P WHERE ' - 'P firstname %(firstname)s, P surname %(surname)s', - locals()) - if rset: - person = rset.get_entity(0, 0) - else: - person = req.create_entity('Person', firstname=firstname, - surname=surname) - req.execute('SET P displayed_on X WHERE ' - 'P eid %(p)s, X eid %(x)s, NOT P displayed_on X', - {'p': person.eid, 'x' : eid}) + req = self._cw + for name in people: + name = name.strip().title() + if not name: + continue + try: + firstname, surname = name.split(None, 1) + except: + raise ValidationError(eid, {('displayed_on', 'object'): 'provide '}) + rset = req.execute('Person P WHERE ' + 'P firstname %(firstname)s, P surname %(surname)s', + locals()) + if rset: + person = rset.get_entity(0, 0) + else: + person = req.create_entity('Person', firstname=firstname, + surname=surname) + req.execute('SET P displayed_on X WHERE ' + 'P eid %(p)s, X eid %(x)s, NOT P displayed_on X', + {'p': person.eid, 'x' : eid}) + @monkeypatch(basecontrollers.JSonController) def js_unlink_person(self, eid, personeid): - self._cw.execute('DELETE P displayed_on X WHERE P eid %(p)s, X eid %(x)s', - {'p': personeid, 'x': eid}) + self._cw.execute('DELETE P displayed_on X WHERE P eid %(p)s, X eid %(x)s', + {'p': personeid, 'x': eid}) You basically subclass to configure with some class attributes. The `fname_*` @@ -327,13 +331,14 @@ from cubicweb.web import facet + class DisplayedOnFacet(facet.RelationFacet): - __regid__ = 'displayed_on-facet' - # relation to be displayed - rtype = 'displayed_on' - role = 'object' - # view to use to display persons - label_vid = 'combobox' + __regid__ = 'displayed_on-facet' + # relation to be displayed + rtype = 'displayed_on' + role = 'object' + # view to use to display persons + label_vid = 'combobox' Let's say we also want to filter according to the `visibility` attribute. This is even simpler as we just have to derive from the :class:`AttributeFacet` class: @@ -341,8 +346,8 @@ .. sourcecode:: python class VisibilityFacet(facet.AttributeFacet): - __regid__ = 'visibility-facet' - rtype = 'visibility' + __regid__ = 'visibility-facet' + rtype = 'visibility' Now if I search for some pictures on my site, I get the following facets available: