# HG changeset patch # User Sylvain Thénault # Date 1328889232 -3600 # Node ID 99ff746e8de818e1b43ad70b792854be796b2753 # Parent ce9556358dbd3e7f1b44be18439032ef466b91e1# Parent 4b32678c21a70831e1d5afa99d9f43928d9f3268 backport stable diff -r ce9556358dbd -r 99ff746e8de8 .hgtags --- a/.hgtags Fri Feb 10 16:31:39 2012 +0100 +++ b/.hgtags Fri Feb 10 16:53:52 2012 +0100 @@ -241,3 +241,5 @@ 6928210da4fc25d086b5b8d5ff2029da41aade2e cubicweb-debian-version-3.14.1-1 049a3819f03dc79d803be054cc3bfe8425313f63 cubicweb-version-3.14.2 17ebd836cee30a9f690e83af7ce98287a7216d57 cubicweb-debian-version-3.14.2-1 +60efdbb455204899103c30bfa8d805c1b15161f6 cubicweb-version-3.14.3 +4d0f5d18e8a07ab218efe90d758af723ea4a1b2b cubicweb-debian-version-3.14.3-1 diff -r ce9556358dbd -r 99ff746e8de8 __pkginfo__.py diff -r ce9556358dbd -r 99ff746e8de8 debian/changelog --- a/debian/changelog Fri Feb 10 16:31:39 2012 +0100 +++ b/debian/changelog Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,9 @@ +cubicweb (3.14.3-1) unstable; urgency=low + + * new upstream release + + -- Sylvain Thénault Fri, 03 Feb 2012 16:53:54 +0100 + cubicweb (3.14.2-1) unstable; urgency=low * new upstream release diff -r ce9556358dbd -r 99ff746e8de8 devtools/fake.py --- a/devtools/fake.py Fri Feb 10 16:31:39 2012 +0100 +++ b/devtools/fake.py Fri Feb 10 16:53:52 2012 +0100 @@ -42,7 +42,7 @@ self['auth-mode'] = 'cookie' self['uid'] = None self['base-url'] = BASE_URL - self['rql-cache-size'] = 100 + self['rql-cache-size'] = 3000 self.datadir_url = BASE_URL + 'data/' def cubes(self, expand=False): diff -r ce9556358dbd -r 99ff746e8de8 entities/wfobjs.py --- a/entities/wfobjs.py Fri Feb 10 16:31:39 2012 +0100 +++ b/entities/wfobjs.py Fri Feb 10 16:53:52 2012 +0100 @@ -256,6 +256,9 @@ """customized class for Transition entities""" __regid__ = 'Transition' + def dc_long_title(self): + return '%s (%s)' % (self.name, self._cw._(self.name)) + def destination(self, entity): try: return self.destination_state[0] @@ -345,6 +348,9 @@ fetch_attrs, cw_fetch_order = fetch_config(['name']) rest_attr = 'eid' + def dc_long_title(self): + return '%s (%s)' % (self.name, self._cw._(self.name)) + @property def workflow(self): # take care, may be missing in multi-sources configuration diff -r ce9556358dbd -r 99ff746e8de8 entity.py --- a/entity.py Fri Feb 10 16:31:39 2012 +0100 +++ b/entity.py Fri Feb 10 16:53:52 2012 +0100 @@ -481,7 +481,9 @@ assert eschema.has_relation(attr, role), '%s %s not found on %s' % (attr, role, eschema) rschema = eschema.subjrels[attr] if role == 'subject' else eschema.objrels[attr] if not rschema.final and isinstance(value, (tuple, list, set, frozenset)): - if len(value) == 1: + if len(value) == 0: + continue # avoid crash with empty IN clause + elif len(value) == 1: value = iter(value).next() else: # prepare IN clause diff -r ce9556358dbd -r 99ff746e8de8 etwist/service.py --- a/etwist/service.py Fri Feb 10 16:31:39 2012 +0100 +++ b/etwist/service.py Fri Feb 10 16:53:52 2012 +0100 @@ -25,9 +25,12 @@ print 'Win32 extensions for Python are likely not installed.' sys.exit(3) +from os.path import join from cubicweb.etwist.server import (CubicWebRootResource, reactor, server) +from logilab.common.shellutils import rm + import logging from logging import getLogger, handlers from cubicweb import set_log_methods @@ -74,6 +77,9 @@ config.init_log(force=True) config.debugmode = False logger.info('starting cubicweb instance %s ', self.instance) + config.info('clear ui caches') + for cachedir in ('uicache', 'uicachehttps'): + rm(join(config.appdatahome, cachedir, '*')) root_resource = CubicWebRootResource(config) website = server.Site(root_resource) # serve it via standard HTTP on port set in the configuration diff -r ce9556358dbd -r 99ff746e8de8 hooks/syncschema.py --- a/hooks/syncschema.py Fri Feb 10 16:31:39 2012 +0100 +++ b/hooks/syncschema.py Fri Feb 10 16:53:52 2012 +0100 @@ -268,9 +268,8 @@ try: rschema = schema[rtype] except KeyError: - if rtype == 'cw_source': - continue # XXX 3.10 migration - raise + self.critical('rtype %s was not handled at cwetype creation time', rtype) + continue sampletype = rschema.subjects()[0] desttype = rschema.objects()[0] rdef = copy(rschema.rdef(sampletype, desttype)) @@ -493,7 +492,7 @@ default = syssource.dbhelper.sql_current_date() elif default == 'NOW': default = syssource.dbhelper.sql_current_timestamp() - session.system_sql('UPDATE %s SET %s=%(default)s' + session.system_sql('UPDATE %s SET %s=%s' % (table, column, default)) else: session.system_sql('UPDATE %s SET %s=%%(default)s' % (table, column), diff -r ce9556358dbd -r 99ff746e8de8 i18n/de.po --- a/i18n/de.po Fri Feb 10 16:31:39 2012 +0100 +++ b/i18n/de.po Fri Feb 10 16:53:52 2012 +0100 @@ -1435,6 +1435,9 @@ msgid "click to edit this field" msgstr "Klicken Sie, um dieses Feld zu editieren" +msgid "close all" +msgstr "" + msgid "comment" msgstr "Kommentar" diff -r ce9556358dbd -r 99ff746e8de8 i18n/en.po --- a/i18n/en.po Fri Feb 10 16:31:39 2012 +0100 +++ b/i18n/en.po Fri Feb 10 16:53:52 2012 +0100 @@ -1389,6 +1389,9 @@ msgid "click to edit this field" msgstr "" +msgid "close all" +msgstr "" + msgid "comment" msgstr "" diff -r ce9556358dbd -r 99ff746e8de8 i18n/es.po --- a/i18n/es.po Fri Feb 10 16:31:39 2012 +0100 +++ b/i18n/es.po Fri Feb 10 16:53:52 2012 +0100 @@ -1447,6 +1447,9 @@ msgid "click to edit this field" msgstr "seleccione para editar este campo" +msgid "close all" +msgstr "" + msgid "comment" msgstr "Comentario" diff -r ce9556358dbd -r 99ff746e8de8 i18n/fr.po --- a/i18n/fr.po Fri Feb 10 16:31:39 2012 +0100 +++ b/i18n/fr.po Fri Feb 10 16:53:52 2012 +0100 @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: cubicweb 2.46.0\n" -"PO-Revision-Date: 2011-11-23 11:09+0100\n" +"PO-Revision-Date: 2012-02-08 17:43+0100\n" "Last-Translator: Logilab Team \n" "Language-Team: fr \n" "Language: \n" @@ -1449,6 +1449,9 @@ msgid "click to edit this field" msgstr "cliquez pour éditer ce champ" +msgid "close all" +msgstr "tout fermer" + msgid "comment" msgstr "commentaire" @@ -2754,7 +2757,7 @@ msgstr "chemin" msgid "i18n_login_popup" -msgstr "s'authentifier" +msgstr "s'identifier" msgid "i18ncard_*" msgstr "0..n" diff -r ce9556358dbd -r 99ff746e8de8 misc/migration/3.14.4_Any.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/migration/3.14.4_Any.py Fri Feb 10 16:53:52 2012 +0100 @@ -0,0 +1,9 @@ +from yams import schema2sql as y2sql + +dbhelper = repo.system_source.dbhelper +rdefdef = schema['CWSource'].rdef('name') +attrtype = y2sql.type_from_constraints(dbhelper, rdefdef.object, rdefdef.constraints).split()[0] + +sql(dbhelper.sql_change_col_type('entities', 'asource', attrtype, False)) +sql(dbhelper.sql_change_col_type('entities', 'source', attrtype, False)) +sql(dbhelper.sql_change_col_type('deleted_entities', 'source', attrtype, False)) diff -r ce9556358dbd -r 99ff746e8de8 pylintext.py --- a/pylintext.py Fri Feb 10 16:31:39 2012 +0100 +++ b/pylintext.py Fri Feb 10 16:53:52 2012 +0100 @@ -35,7 +35,7 @@ for etype in BASE_TYPES: module.locals[etype] = [scoped_nodes.Class(etype, None)] # add data() to uiprops module - if module.name.endswith('.uiprops'): + if module.name.split('.')[-1] == 'uiprops': fake = ASTNGBuilder(MANAGER).string_build(''' def data(string): return u'' diff -r ce9556358dbd -r 99ff746e8de8 server/migractions.py --- a/server/migractions.py Fri Feb 10 16:31:39 2012 +0100 +++ b/server/migractions.py Fri Feb 10 16:53:52 2012 +0100 @@ -1025,15 +1025,15 @@ """ reposchema = self.repo.schema + rschema = self.fs_schema.rschema(rtype) + execute = self._cw.execute if rtype in reposchema: print 'warning: relation type %s is already known, skip addition' % ( rtype) - return - rschema = self.fs_schema.rschema(rtype) - execute = self._cw.execute - # register the relation into CWRType and insert necessary relation - # definitions - ss.execschemarql(execute, rschema, ss.rschema2rql(rschema, addrdef=False)) + else: + # register the relation into CWRType and insert necessary relation + # definitions + ss.execschemarql(execute, rschema, ss.rschema2rql(rschema, addrdef=False)) if addrdef: self.commit() gmap = self.group_mapping() diff -r ce9556358dbd -r 99ff746e8de8 server/serverconfig.py --- a/server/serverconfig.py Fri Feb 10 16:31:39 2012 +0100 +++ b/server/serverconfig.py Fri Feb 10 16:53:52 2012 +0100 @@ -136,7 +136,7 @@ }), ('rql-cache-size', {'type' : 'int', - 'default': 300, + 'default': 3000, 'help': 'size of the parsed rql cache size.', 'group': 'main', 'level': 3, }), diff -r ce9556358dbd -r 99ff746e8de8 server/sources/native.py --- a/server/sources/native.py Fri Feb 10 16:31:39 2012 +0100 +++ b/server/sources/native.py Fri Feb 10 16:53:52 2012 +0100 @@ -1459,8 +1459,8 @@ CREATE TABLE entities ( eid INTEGER PRIMARY KEY NOT NULL, type VARCHAR(64) NOT NULL, - source VARCHAR(64) NOT NULL, - asource VARCHAR(64) NOT NULL, + source VARCHAR(128) NOT NULL, + asource VARCHAR(128) NOT NULL, mtime %s NOT NULL, extid VARCHAR(256) );; @@ -1471,7 +1471,7 @@ CREATE TABLE deleted_entities ( eid INTEGER PRIMARY KEY NOT NULL, type VARCHAR(64) NOT NULL, - source VARCHAR(64) NOT NULL, + source VARCHAR(128) NOT NULL, dtime %s NOT NULL, extid VARCHAR(256) );; diff -r ce9556358dbd -r 99ff746e8de8 skeleton/entities.py.tmpl --- a/skeleton/entities.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/entities.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/hooks.py.tmpl --- a/skeleton/hooks.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/hooks.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/migration/postcreate.py.tmpl --- a/skeleton/migration/postcreate.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/migration/postcreate.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/migration/precreate.py.tmpl --- a/skeleton/migration/precreate.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/migration/precreate.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/schema.py.tmpl --- a/skeleton/schema.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/schema.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/sobjects.py.tmpl --- a/skeleton/sobjects.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/sobjects.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 skeleton/uiprops.py.tmpl --- a/skeleton/uiprops.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/uiprops.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ############################################################################### # # Put here information about external resources / styles used by your cube, diff -r ce9556358dbd -r 99ff746e8de8 skeleton/views.py.tmpl --- a/skeleton/views.py.tmpl Fri Feb 10 16:31:39 2012 +0100 +++ b/skeleton/views.py.tmpl Fri Feb 10 16:53:52 2012 +0100 @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # copyright %(year)s %(author)s, all rights reserved. # contact %(author-web-site)s -- mailto:%(author-email)s # diff -r ce9556358dbd -r 99ff746e8de8 test/unittest_entity.py --- a/test/unittest_entity.py Fri Feb 10 16:31:39 2012 +0100 +++ b/test/unittest_entity.py Fri Feb 10 16:53:52 2012 +0100 @@ -146,6 +146,8 @@ req = self.request() p1 = req.create_entity('Personne', nom=u'di') p2 = req.create_entity('Personne', nom=u'mascio') + t = req.create_entity('Tag', name=u't0', tags=[]) + self.assertItemsEqual(t.tags, []) t = req.create_entity('Tag', name=u't1', tags=p1) self.assertItemsEqual(t.tags, [p1]) t = req.create_entity('Tag', name=u't2', tags=p1.eid) diff -r ce9556358dbd -r 99ff746e8de8 view.py --- a/view.py Fri Feb 10 16:31:39 2012 +0100 +++ b/view.py Fri Feb 10 16:53:52 2012 +0100 @@ -196,7 +196,7 @@ """ rset = self.cw_rset if rset is None: - raise NotImplementedError, (self, "an rset is required") + raise NotImplementedError("%r an rset is required" % self) wrap = self.templatable and len(rset) > 1 and self.add_div_section # avoid re-selection if rset of size 1, we already have the most # specific view @@ -218,7 +218,7 @@ def cell_call(self, row, col, **kwargs): """the view is called for a particular result set cell""" - raise NotImplementedError, self + raise NotImplementedError(repr(self)) def linkable(self): """return True if the view may be linked in a menu @@ -379,7 +379,7 @@ self.entity_call(self.cw_rset.get_entity(row, col), **kwargs) def entity_call(self, entity, **kwargs): - raise NotImplementedError() + raise NotImplementedError('%r %r' % (self.__regid__, self.__class__)) class StartupView(View): diff -r ce9556358dbd -r 99ff746e8de8 web/data/cubicweb.ajax.js --- a/web/data/cubicweb.ajax.js Fri Feb 10 16:31:39 2012 +0100 +++ b/web/data/cubicweb.ajax.js Fri Feb 10 16:53:52 2012 +0100 @@ -709,6 +709,7 @@ function loadNow(eltsel, holesel, reloadable) { var lazydiv = jQuery(eltsel); var hole = lazydiv.children(holesel); + hole.show(); if ((hole.length == 0) && ! reloadable) { /* the hole is already filed */ return; diff -r ce9556358dbd -r 99ff746e8de8 web/data/cubicweb.edition.js --- a/web/data/cubicweb.edition.js Fri Feb 10 16:31:39 2012 +0100 +++ b/web/data/cubicweb.edition.js Fri Feb 10 16:53:52 2012 +0100 @@ -474,7 +474,7 @@ errmsg = descr; } else { _displayValidationerrors(formid, descr[0], descr[1]); - errmsg = _('please correct errors below'); + errmsg = _("please correct errors below"); } updateMessage(errmsg); // ensure the browser does not scroll down diff -r ce9556358dbd -r 99ff746e8de8 web/data/cubicweb.facets.js --- a/web/data/cubicweb.facets.js Fri Feb 10 16:31:39 2012 +0100 +++ b/web/data/cubicweb.facets.js Fri Feb 10 16:53:52 2012 +0100 @@ -181,11 +181,11 @@ $this.find('img').each(function(i) { if (this.getAttribute('cubicweb:unselimg')) { this.setAttribute('src', UNSELECTED_BORDER_IMG); - this.setAttribute('alt', (_('not selected'))); + this.setAttribute('alt', (_("not selected"))); } else { this.setAttribute('src', UNSELECTED_IMG); - this.setAttribute('alt', (_('not selected'))); + this.setAttribute('alt', (_("not selected"))); } }); var index = parseInt($this.attr('cubicweb:idx')); @@ -213,7 +213,7 @@ } jQuery(this).addClass('facetValueSelected'); var $img = jQuery(this).find('img'); - $img.attr('src', SELECTED_IMG).attr('alt', (_('selected'))); + $img.attr('src', SELECTED_IMG).attr('alt', (_("selected"))); } buildRQL.apply(null, jsfacetargs); facet.find('.facetBody').animate({ diff -r ce9556358dbd -r 99ff746e8de8 web/data/cubicweb.preferences.js --- a/web/data/cubicweb.preferences.js Fri Feb 10 16:31:39 2012 +0100 +++ b/web/data/cubicweb.preferences.js Fri Feb 10 16:53:52 2012 +0100 @@ -11,13 +11,13 @@ } function closeFieldset(fieldsetid) { - var linklabel = _('open all'); + var linklabel = _("open all"); var linkhref = 'javascript:openFieldset("' + fieldsetid + '")'; _toggleFieldset(fieldsetid, 1, linklabel, linkhref); } function openFieldset(fieldsetid) { - var linklabel = _('close all'); + var linklabel = _("close all"); var linkhref = 'javascript:closeFieldset("' + fieldsetid + '")'; _toggleFieldset(fieldsetid, 0, linklabel, linkhref); } @@ -37,7 +37,7 @@ fieldset.addClass('hidden'); } else { fieldset.removeClass('hidden'); - linkLabel = (_('open all')); + linkLabel = (_("open all")); } }); } diff -r ce9556358dbd -r 99ff746e8de8 web/formwidgets.py --- a/web/formwidgets.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/formwidgets.py Fri Feb 10 16:53:52 2012 +0100 @@ -429,7 +429,7 @@ an unicode string, or a list of unicode strings. """ vocabulary_widget = True - default_size = 5 + default_size = 10 def __init__(self, attrs=None, multiple=False, **kwargs): super(Select, self).__init__(attrs, **kwargs) @@ -473,6 +473,74 @@ return value in curvalues +class InOutWidget(Select): + needs_js = ('cubicweb.widgets.js', ) + default_size = 10 + template = """ + + + + + + +
%(inoutinput)s
%(addinput)s
+
%(removeinput)s
+
%(resinput)s
+""" + add_button = ('') + remove_button = ('') + + def __init__(self, *args, **kwargs): + super(InOutWidget, self).__init__(*args, **kwargs) + self._multiple = True + + def render_select(self, form, field, name, selected=False): + values, attrs = self.values_and_attributes(form, field) + options = [] + inputs = [] + for option in field.vocabulary(form): + try: + label, value, _oattrs = option + except ValueError: + label, value = option + if selected: + # add values + if value in values: + options.append(tags.option(label, value=value)) + # add hidden inputs + inputs.append(tags.input(value=value, + name=field.dom_id(form), + type="hidden")) + else: + options.append(tags.option(label, value=value)) + if 'size' not in attrs: + attrs['size'] = self.default_size + if 'id' in attrs : + attrs.pop('id') + return tags.select(name=name, multiple=self._multiple, id=name, + options=options, **attrs) + '\n'.join(inputs) + + + def _render(self, form, field, renderer): + domid = field.dom_id(form) + jsnodes = {'widgetid': domid, + 'from': 'from_' + domid, + 'to': 'to_' + domid} + form._cw.add_onload(u'$(cw.jqNode("%s")).cwinoutwidget("%s", "%s");' + % (jsnodes['widgetid'], jsnodes['from'], jsnodes['to'])) + field.required = True + return (self.template % + {'widgetid': jsnodes['widgetid'], + # helpinfo select tag + 'inoutinput' : self.render_select(form, field, jsnodes['from']), + # select tag with resultats + 'resinput' : self.render_select(form, field, jsnodes['to'], selected=True), + 'addinput' : self.add_button % jsnodes, + 'removeinput': self.remove_button % jsnodes + }) + class BitSelect(Select): """Select widget for IntField using a vocabulary with bit masks as values. @@ -1023,55 +1091,3 @@ 'label': label, 'imgsrc': imgsrc, 'domid': self.domid, 'href': self.href} -class InOutWidget(Select): - needs_js = ('cubicweb.widgets.js', ) - template = """ - - - - -
%(inoutinput)s
%(addinput)s
%(removeinput)s
%(resinput)s
-""" - add_button = """""" - remove_button ="""""" - - def __init__(self, attrs=None): - super(InOutWidget, self).__init__(attrs, multiple=True) - - def render_select(self, form, field, name, selected=False): - values, attrs = self.values_and_attributes(form, field) - options = [] - inputs = [] - for _option in field.vocabulary(form): - try: - label, value, oattrs = _option - except ValueError: - label, value = _option - if selected: - # add values - if value in values: - options.append(tags.option(label, value=value)) - # add hidden inputs - inputs.append(tags.input(value=value, name=field.dom_id(form), type="hidden")) - else: - options.append(tags.option(label, value=value)) - if 'size' not in attrs: - attrs['size'] = 5 - if 'id' in attrs : - attrs.pop('id') - return tags.select(name=name, multiple=self._multiple, id=name, - options=options, **attrs) + '\n'.join(inputs) - - - def _render(self, form, field, renderer): - domid = field.dom_id(form) - jsnodes = {'widgetid': domid, 'from': 'from_' + domid, 'to': 'to_' + domid} - form._cw.add_onload(u'$(cw.jqNode("%s")).cwinoutwidget("%s", "%s");' - % (jsnodes['widgetid'], jsnodes['from'], jsnodes['to'])) - field.required=True - return self.template % {'widgetid': jsnodes['widgetid'], - 'inoutinput' : self.render_select(form, field, jsnodes['from']), # helpinfo select tag - 'resinput' : self.render_select(form, field, jsnodes['to'], selected=True), # select tag with resultats - 'addinput' : self.add_button % jsnodes, - 'removeinput': self.remove_button % jsnodes - } diff -r ce9556358dbd -r 99ff746e8de8 web/views/dotgraphview.py --- a/web/views/dotgraphview.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/views/dotgraphview.py Fri Feb 10 16:53:52 2012 +0100 @@ -71,7 +71,7 @@ def node_properties(self, entity): """return default DOT drawing options for a state or transition""" - return {'label': entity.dc_title(), + return {'label': entity.dc_long_title(), 'href': entity.absolute_url(), 'fontname': 'Courier', 'fontsize': 10, 'shape':'box', } diff -r ce9556358dbd -r 99ff746e8de8 web/views/primary.py --- a/web/views/primary.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/views/primary.py Fri Feb 10 16:53:52 2012 +0100 @@ -82,9 +82,6 @@ Renders the relation label next to the relation value if set to `True`. Otherwise, does only display the relation value. - :attr:`skip_none` - Does not render an attribute value that is None if set to `True`. - :attr:`main_related_section` Renders the relations of the entity if set to `True`. @@ -99,7 +96,6 @@ title = _('primary') show_attr_label = True show_rel_label = True - skip_none = True rsection = uicfg.primaryview_section display_ctrl = uicfg.primaryview_display_ctrl main_related_section = True @@ -194,9 +190,7 @@ return u'' def render_entity_attributes(self, entity): - """Renders all attributes and relations in the 'attributes' section. The - :attr:`skip_none` attribute controls the display of `None` valued - attributes. + """Renders all attributes and relations in the 'attributes' section. """ display_attributes = [] for rschema, _, role, dispctrl in self._section_def(entity, 'attributes'): @@ -210,7 +204,7 @@ value = self._cw.view(vid, rset) else: value = None - if not self.skip_none or (value is not None and value != ''): + if value is not None and value != '': display_attributes.append( (rschema, role, dispctrl, value) ) if display_attributes: self.w(u'') @@ -419,7 +413,7 @@ __regid__ = 'attribute' __select__ = EntityView.__select__ & match_kwargs('rtype') - def entity_call(self, entity, rtype, role, **kwargs): + def entity_call(self, entity, rtype, role='subject', **kwargs): if self._cw.vreg.schema.rschema(rtype).final: self.w(entity.printable_value(rtype)) else: diff -r ce9556358dbd -r 99ff746e8de8 web/views/schema.py --- a/web/views/schema.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/views/schema.py Fri Feb 10 16:53:52 2012 +0100 @@ -205,11 +205,11 @@ _ = self._cw._ # inheritance if entity.specializes: - self.w(u'
%s' % _('Parent class:')) + self.w(u'
%s' % _('Parent class:')) self.wview('csv', entity.related('specializes', 'subject')) self.w(u'
') if entity.reverse_specializes: - self.w(u'
%s' % _('Sub-classes:')) + self.w(u'
%s' % _('Sub-classes:')) self.wview('csv', entity.related('specializes', 'object')) self.w(u'
') # entity schema image @@ -566,8 +566,14 @@ def edge_properties(self, rschema, subjnode, objnode): """return default DOT drawing options for a relation schema""" + # Inheritance relation (i.e 'specializes'). + if rschema is None: + kwargs = {'label': 'Parent class', + 'color' : 'grey', 'style' : 'filled', + 'arrowhead': 'empty', + 'fontsize': '10px'} # symmetric rels are handled differently, let yams decide what's best - if rschema.symmetric: + elif rschema.symmetric: kwargs = {'label': rschema.type, 'color': '#887788', 'style': 'dashed', 'dir': 'both', 'arrowhead': 'normal', 'arrowtail': 'normal', diff -r ce9556358dbd -r 99ff746e8de8 web/views/tabs.py --- a/web/views/tabs.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/views/tabs.py Fri Feb 10 16:53:52 2012 +0100 @@ -61,11 +61,11 @@ tabid, xml_escape(self._cw.build_url('json', **urlparams)))) if show_spinbox: # Don't use ``alt`` since image is a *visual* helper for ajax - w(u'' + w(u'' % (xml_escape(self._cw.data_url('loading.gif')), tabid)) else: w(u'
' % tabid) - w(u'' + w(u'' % (xml_escape(self._cw._('Link:')), tabid, xml_escape(self._cw.build_url(**urlparams)), diff -r ce9556358dbd -r 99ff746e8de8 web/views/workflow.py --- a/web/views/workflow.py Fri Feb 10 16:31:39 2012 +0100 +++ b/web/views/workflow.py Fri Feb 10 16:53:52 2012 +0100 @@ -398,10 +398,6 @@ props['fillcolor'] = '#88CC88' else: props['shape'] = 'ellipse' - descr = [] - tr = stateortransition - if descr: - props['label'] += escape('\n'.join(descr)) return props