--- a/.hgtags Mon Feb 03 16:30:07 2014 +0100
+++ b/.hgtags Mon Feb 17 15:32:50 2014 +0100
@@ -323,9 +323,18 @@
838d58a30f7efc6a8f83ac27ae8de7d79b84b2bb cubicweb-version-3.17.12
838d58a30f7efc6a8f83ac27ae8de7d79b84b2bb cubicweb-debian-version-3.17.12-1
838d58a30f7efc6a8f83ac27ae8de7d79b84b2bb cubicweb-centos-version-3.17.12-1
+09b4ebb9b0f179009491410c07cd013a60258fc6 cubicweb-version-3.17.13
+09b4ebb9b0f179009491410c07cd013a60258fc6 cubicweb-debian-version-3.17.13-1
+09b4ebb9b0f179009491410c07cd013a60258fc6 cubicweb-centos-version-3.17.13-1
db37bf35a1474843ded0a537f9cb4838f4a78cda cubicweb-version-3.18.0
db37bf35a1474843ded0a537f9cb4838f4a78cda cubicweb-debian-version-3.18.0-1
db37bf35a1474843ded0a537f9cb4838f4a78cda cubicweb-centos-version-3.18.0-1
60322cb8636c0402cdac025d3297626c41583023 cubicweb-version-3.18.1
60322cb8636c0402cdac025d3297626c41583023 cubicweb-debian-version-3.18.1-1
60322cb8636c0402cdac025d3297626c41583023 cubicweb-centos-version-3.18.1-1
+6880674c1a2669e3635abd688755116dda72e65e cubicweb-version-3.18.2
+6880674c1a2669e3635abd688755116dda72e65e cubicweb-debian-version-3.18.2-1
+6880674c1a2669e3635abd688755116dda72e65e cubicweb-centos-version-3.18.2-1
+afd21fea201a745051357b7aa6be3c7da1ae5bd2 cubicweb-version-3.18.3
+afd21fea201a745051357b7aa6be3c7da1ae5bd2 cubicweb-debian-version-3.18.3-1
+afd21fea201a745051357b7aa6be3c7da1ae5bd2 cubicweb-centos-version-3.18.3-1
--- a/__pkginfo__.py Mon Feb 03 16:30:07 2014 +0100
+++ b/__pkginfo__.py Mon Feb 17 15:32:50 2014 +0100
@@ -22,14 +22,13 @@
modname = distname = "cubicweb"
-numversion = (3, 18, 2)
+numversion = (3, 18, 3)
version = '.'.join(str(num) for num in numversion)
description = "a repository of entities / relations for knowledge management"
author = "Logilab"
author_email = "contact@logilab.fr"
web = 'http://www.cubicweb.org'
-ftp = 'ftp://ftp.logilab.org/pub/cubicweb'
license = 'LGPL'
classifiers = [
--- a/_exceptions.py Mon Feb 03 16:30:07 2014 +0100
+++ b/_exceptions.py Mon Feb 17 15:32:50 2014 +0100
@@ -180,9 +180,9 @@
:param txuuid: Unique identifier of the partialy undone transaction
:type errors: list
- :param errors: List of errors occured during undoing
+ :param errors: List of errors occurred during undoing
"""
- msg = u"The following error(s) occured while undoing transaction #%d : %s"
+ msg = u"The following error(s) occurred while undoing transaction #%d : %s"
def __init__(self, txuuid, errors):
super(UndoTransactionException, self).__init__(txuuid, errors)
--- a/cubicweb.spec Mon Feb 03 16:30:07 2014 +0100
+++ b/cubicweb.spec Mon Feb 17 15:32:50 2014 +0100
@@ -7,7 +7,7 @@
%endif
Name: cubicweb
-Version: 3.18.2
+Version: 3.18.3
Release: logilab.1%{?dist}
Summary: CubicWeb is a semantic web application framework
Source0: http://download.logilab.org/pub/cubicweb/cubicweb-%{version}.tar.gz
--- a/dataimport.py Mon Feb 03 16:30:07 2014 +0100
+++ b/dataimport.py Mon Feb 17 15:32:50 2014 +0100
@@ -873,7 +873,7 @@
return getattr(self, 'gen_%s' % rtype)(entity)
def gen_cwuri(self, entity):
- return u'%seid/%s' % (self.baseurl, entity.eid)
+ return u'%s%s' % (self.baseurl, entity.eid)
def gen_creation_date(self, entity):
return self.time
@@ -1115,9 +1115,9 @@
def _handle_source_relation_sql(self, session, sql, attrs):
self._append_to_entities(sql, attrs)
- # XXX add_info is similar to the one in NativeSQLSource. It is rewritten
- # here to correctly used the _handle_xxx of the SQLGenSourceWrapper. This
- # part should be rewritten in a more clearly way.
+ # add_info is _copypasted_ from the one in NativeSQLSource. We want it
+ # there because it will use the _handlers of the SQLGenSourceWrapper, which
+ # are not like the ones in the native source.
def add_info(self, session, entity, source, extid, complete):
"""add type and source info for an eid into the system table"""
# begin by inserting eid/type/source/extid into the entities table
--- a/debian/changelog Mon Feb 03 16:30:07 2014 +0100
+++ b/debian/changelog Mon Feb 17 15:32:50 2014 +0100
@@ -1,3 +1,9 @@
+cubicweb (3.18.3-1) unstable; urgency=low
+
+ * new upstream release
+
+ -- Julien Cristau <julien.cristau@logilab.fr> Fri, 14 Feb 2014 16:03:55 +0100
+
cubicweb (3.18.2-1) unstable; urgency=low
* new upstream release.
@@ -16,6 +22,12 @@
-- Julien Cristau <julien.cristau@logilab.fr> Fri, 10 Jan 2014 17:14:18 +0100
+cubicweb (3.17.13-1) unstable; urgency=low
+
+ * new upstream release
+
+ -- Aurelien Campeas <aurelien.campeas@logilab.fr> Mon, 10 Feb 2014 17:57:58 +0100
+
cubicweb (3.17.12-1) unstable; urgency=low
* new upstream release
--- a/debian/copyright Mon Feb 03 16:30:07 2014 +0100
+++ b/debian/copyright Mon Feb 17 15:32:50 2014 +0100
@@ -1,5 +1,5 @@
This package was debianized by Logilab <contact@logilab.fr>.
-It was downloaded from ftp://ftp.logilab.org/pub/cubicweb
+It was downloaded from http://download.logilab.org/pub/cubicweb
Upstream Author:
@@ -8,7 +8,7 @@
Copyright:
- Copyright (c) 2003-2013 LOGILAB S.A. (Paris, FRANCE).
+ Copyright (c) 2003-2014 LOGILAB S.A. (Paris, FRANCE).
http://www.logilab.fr/ -- mailto:contact@logilab.fr
License:
--- a/devtools/devctl.py Mon Feb 03 16:30:07 2014 +0100
+++ b/devtools/devctl.py Mon Feb 17 15:32:50 2014 +0100
@@ -619,7 +619,7 @@
% (cubesdir, err))
cubedir = osp.join(cubesdir, cubename)
if osp.exists(cubedir):
- self.fail("%s already exists !" % cubedir)
+ self.fail("%s already exists!" % cubedir)
skeldir = osp.join(BASEDIR, 'skeleton')
default_name = 'cubicweb-%s' % cubename.lower().replace('_', '-')
if verbose:
--- a/devtools/fill.py Mon Feb 03 16:30:07 2014 +0100
+++ b/devtools/fill.py Mon Feb 17 15:32:50 2014 +0100
@@ -384,10 +384,10 @@
def composite_relation(rschema):
for obj in rschema.objects():
- if obj.rdef(rschema, 'object').composite == 'subject':
+ if obj.rdef(rschema, 'object', takefirst=True).composite == 'subject':
return True
for obj in rschema.subjects():
- if obj.rdef(rschema, 'subject').composite == 'object':
+ if obj.rdef(rschema, 'subject', takefirst=True).composite == 'object':
return True
return False
--- a/doc/book/en/admin/ldap.rst Mon Feb 03 16:30:07 2014 +0100
+++ b/doc/book/en/admin/ldap.rst Mon Feb 17 15:32:50 2014 +0100
@@ -45,8 +45,27 @@
be overridden in some subsequent source synchronisation).
-Configurations options of an LDAPfeed source
---------------------------------------------
+Configuration of an LDAPfeed source
+-----------------------------------
+
+Additional sources are created at cube creation time or later through the
+user interface.
+
+Configure an `ldapfeed` source from the user interface under `Manage` then
+`data sources`:
+
+* At this point `type` has been set to `ldapfeed`.
+
+* The `parser` attribute shall be set to `ldapfeed`.
+
+* The `url` attribute shall be set to an URL such as ldap://ldapserver.domain/.
+
+* The `configuration` attribute contains many options. They are described in
+ detail in the next paragraph.
+
+
+Options of an LDAPfeed source
+-----------------------------
Let us enumerate the options by categories (LDAP server connection,
LDAP schema mapping information).
@@ -109,5 +128,5 @@
source, it (automatically) is activated again
* You can use the :class:`CWSourceHostConfig` to have variants for a source
- configuration according to the host the instance is running on. To do so go on
- the source's view from the sources management view.
+ configuration according to the host the instance is running on. To do so
+ go on the source's view from the sources management view.
--- a/doc/book/en/conf.py Mon Feb 03 16:30:07 2014 +0100
+++ b/doc/book/en/conf.py Mon Feb 17 15:32:50 2014 +0100
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb.
@@ -65,7 +65,7 @@
# General substitutions.
project = 'CubicWeb'
-copyright = '2001-2011, Logilab'
+copyright = '2001-2014, Logilab'
# The default replacements for |version| and |release|, also used in various
# other places throughout the built documents.
--- a/doc/book/en/devrepo/fti.rst Mon Feb 03 16:30:07 2014 +0100
+++ b/doc/book/en/devrepo/fti.rst Mon Feb 17 15:32:50 2014 +0100
@@ -47,8 +47,8 @@
See :class:`~cubicweb.entities.adapters.IFTIndexableAdapter` for more documentation.
-Yams and ``fultext_container``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Yams and ``fulltext_container``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It is possible in the datamodel to indicate that fulltext-indexed
attributes defined for an entity type will be used to index not the
--- a/etwist/server.py Mon Feb 03 16:30:07 2014 +0100
+++ b/etwist/server.py Mon Feb 17 15:32:50 2014 +0100
@@ -238,6 +238,7 @@
key, pdict = parse_header(ctype)
if key == 'application/x-www-form-urlencoded':
self.args.update(http.parse_qs(self.content.read(), 1))
+ self.content.seek(0)
elif key == 'multipart/form-data':
# defer this as it can be extremely time consumming
# with big files
--- a/etwist/test/data/views.py Mon Feb 03 16:30:07 2014 +0100
+++ b/etwist/test/data/views.py Mon Feb 17 15:32:50 2014 +0100
@@ -22,7 +22,7 @@
class PutView(View):
__regid__ = 'put'
- __select__ = match_http_method('PUT')
+ __select__ = match_http_method('PUT') | match_http_method('POST')
binary = True
def call(self):
--- a/etwist/test/unittest_server.py Mon Feb 03 16:30:07 2014 +0100
+++ b/etwist/test/unittest_server.py Mon Feb 17 15:32:50 2014 +0100
@@ -17,6 +17,7 @@
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
import os, os.path as osp, glob
+import urllib
from cubicweb.devtools.testlib import CubicWebTC
from cubicweb.devtools.httptest import CubicWebServerTC
@@ -57,9 +58,14 @@
class ETwistHTTPTC(CubicWebServerTC):
def test_put_content(self):
- body = 'hop'
+ data = {'hip': 'hop'}
+ headers = {'Content-Type': 'application/x-www-form-urlencoded'}
+ body = urllib.urlencode(data)
response = self.web_request('?vid=put', method='PUT', body=body)
self.assertEqual(body, response.body)
+ response = self.web_request('?vid=put', method='POST', body=body,
+ headers=headers)
+ self.assertEqual(body, response.body)
if __name__ == '__main__':
from logilab.common.testlib import unittest_main
--- a/ext/rest.py Mon Feb 03 16:30:07 2014 +0100
+++ b/ext/rest.py Mon Feb 17 15:32:50 2014 +0100
@@ -127,7 +127,7 @@
view = _cw.vreg['views'].select(vid, _cw, rset=rset)
content = view.render()
except Exception as exc:
- content = 'an error occured while interpreting this rql directive: %r' % exc
+ content = 'an error occurred while interpreting this rql directive: %r' % exc
set_classes(options)
return [nodes.raw('', content, format='html')], []
@@ -184,7 +184,7 @@
view = _cw.vreg['views'].select(vid, _cw, rset=rset)
content = view.render()
except Exception, exc:
- content = 'An error occured while interpreting directive bookmark: %r' % exc
+ content = 'An error occurred while interpreting directive bookmark: %r' % exc
set_classes(options)
return [nodes.raw('', content, format='html')], []
--- a/ext/test/unittest_rest.py Mon Feb 03 16:30:07 2014 +0100
+++ b/ext/test/unittest_rest.py Mon Feb 17 15:32:50 2014 +0100
@@ -68,7 +68,7 @@
def test_rql_role_with_unknown_vid(self):
context = self.context()
out = rest_publish(context, ':rql:`Any X WHERE X is CWUser:toto`')
- self.assertTrue(out.startswith("<p>an error occured while interpreting this rql directive: ObjectNotFound(u'toto',)</p>"))
+ self.assertTrue(out.startswith("<p>an error occurred while interpreting this rql directive: ObjectNotFound(u'toto',)</p>"))
def test_rql_role_without_vid(self):
context = self.context()
--- a/i18n/de.po Mon Feb 03 16:30:07 2014 +0100
+++ b/i18n/de.po Mon Feb 17 15:32:50 2014 +0100
@@ -468,7 +468,7 @@
msgid "Detected problems"
msgstr ""
-msgid "Do you want to delete the following element(s) ?"
+msgid "Do you want to delete the following element(s)?"
msgstr "Wollen Sie das/die folgend(n) Element(e) löschen?"
msgid "Download schema as OWL"
@@ -4501,8 +4501,8 @@
msgstr "Mittwoch"
#, python-format
-msgid "welcome %s !"
-msgstr "Willkommen %s !"
+msgid "welcome %s!"
+msgstr "Willkommen %s!"
msgid "wf_info_for"
msgstr "Chronik von"
@@ -4595,115 +4595,3 @@
#, python-format
msgid "you should un-inline relation %s which is supported and may be crossed "
msgstr ""
-
-#~ msgid "%(cstr)s constraint failed for value %(value)r"
-#~ msgstr "%(cstr)s Einschränkung verletzt für Wert %(value)r"
-
-#~ msgid "%(value)r doesn't match the %(regexp)r regular expression"
-#~ msgstr "%(value)r entspricht nicht dem regulären Ausdruck %(regexp)r"
-
-#~ msgid "%s not estimated"
-#~ msgstr "%s unbekannt(e)"
-
-#~ msgid ""
-#~ "Can't restore relation %(rtype)s of entity %(eid)s, this relation does "
-#~ "not exists anymore in the schema."
-#~ msgstr ""
-#~ "Kann die Relation %(rtype)s der Entität %(eid)s nicht wieder herstellen, "
-#~ "diese Relation existiert nicht mehr in dem Schema."
-
-#~ msgid "Data connection graph for %s"
-#~ msgstr "Graf der Datenverbindungen für %s"
-
-#~ msgid "From:"
-#~ msgstr "Von:"
-
-#~ msgid "Got rhythm?"
-#~ msgstr "Hast Du Rhythmus ?"
-
-#~ msgid "Recipients:"
-#~ msgstr "Adressaten:"
-
-#~ msgid "Subject:"
-#~ msgstr "Subjekt :"
-
-#~ msgid "What's new?"
-#~ msgstr "Was ist neu?"
-
-#~ msgid "You can use any of the following substitutions in your text"
-#~ msgstr "Sie können die folgenden Ersetzungen in Ihrem Text verwenden:"
-
-#~ msgid "can't change the %s attribute"
-#~ msgstr "Kann das Attribut %s nicht ändern."
-
-#~ msgid "cost"
-#~ msgstr "Kosten"
-
-#~ msgid "emails successfully sent"
-#~ msgstr "E-Mails erfolgreich versandt."
-
-#~ msgid "embed"
-#~ msgstr "einbetten"
-
-#~ msgid "embedding this url is forbidden"
-#~ msgstr "Einbettung dieses URLs ist nicht erlaubt."
-
-#~ msgid "error while embedding page"
-#~ msgstr "Fehler beim Einbetten der Seite"
-
-#~ msgid "eta_date"
-#~ msgstr "Enddatum"
-
-#~ msgid "expected:"
-#~ msgstr "erwartet:"
-
-#~ msgid "external page"
-#~ msgstr "externe Seite"
-
-#~ msgid "incorrect value (%(value)s) for type \"%(type)s\""
-#~ msgstr "Wert %(value)s ungültig für den Typ \"%(type)s\""
-
-#~ msgid "initial estimation %s"
-#~ msgstr "Erste Schätzung %s"
-
-#~ msgid "invalid value %(value)s, it must be one of %(choices)s"
-#~ msgstr "Wert %(value)s ungültig, er muss zwischen %(choices)s"
-
-#~ msgid "milestone"
-#~ msgstr "Meilenstein"
-
-#~ msgid "no related project"
-#~ msgstr "kein verknüpftes Projekt"
-
-#~ msgid "progress"
-#~ msgstr "Fortschritt"
-
-#~ msgid "progress bar"
-#~ msgstr "Fortschrittsbalken"
-
-#~ msgid "project"
-#~ msgstr "Projekt"
-
-#~ msgid "send email"
-#~ msgstr "E-Mail senden"
-
-#~ msgid "sioc"
-#~ msgstr "sioc"
-
-#~ msgid "task progression"
-#~ msgstr "Fortschritt der Aufgabe"
-
-#~ msgid "todo_by"
-#~ msgstr "zu erledigen bis"
-
-#~ msgid "toggle filter"
-#~ msgstr "filter verbergen/zeigen"
-
-#~ msgid "violates unique_together constraints (%s)"
-#~ msgstr "Verletzung der unique_together-Einschränkung (%s)"
-
-#~ msgid "workflow already have a state of that name"
-#~ msgstr "Der Workflow hat bereits einen Zustand desselben Namens."
-
-#~ msgid "workflow already have a transition of that name"
-#~ msgstr "Der Workflow hat bereits einen Übergang desselben Namens."
--- a/i18n/en.po Mon Feb 03 16:30:07 2014 +0100
+++ b/i18n/en.po Mon Feb 17 15:32:50 2014 +0100
@@ -446,7 +446,7 @@
msgid "Detected problems"
msgstr ""
-msgid "Do you want to delete the following element(s) ?"
+msgid "Do you want to delete the following element(s)?"
msgstr ""
msgid "Download schema as OWL"
@@ -4390,7 +4390,7 @@
msgstr ""
#, python-format
-msgid "welcome %s !"
+msgid "welcome %s!"
msgstr ""
msgid "wf_info_for"
@@ -4482,12 +4482,3 @@
#, python-format
msgid "you should un-inline relation %s which is supported and may be crossed "
msgstr ""
-
-#~ msgid "eta_date"
-#~ msgstr "ETA date"
-
-#~ msgid "todo_by"
-#~ msgstr "to do by"
-
-#~ msgid "violates unique_together constraints (%s)"
-#~ msgstr "violates unique_together constraints (%s)"
--- a/i18n/es.po Mon Feb 03 16:30:07 2014 +0100
+++ b/i18n/es.po Mon Feb 17 15:32:50 2014 +0100
@@ -468,7 +468,7 @@
msgid "Detected problems"
msgstr "Problemas detectados"
-msgid "Do you want to delete the following element(s) ?"
+msgid "Do you want to delete the following element(s)?"
msgstr "Desea eliminar el(los) elemento(s) siguiente(s)"
msgid "Download schema as OWL"
@@ -4547,8 +4547,8 @@
msgstr "Miércoles"
#, python-format
-msgid "welcome %s !"
-msgstr "¡ Bienvenido %s !"
+msgid "welcome %s!"
+msgstr "¡ Bienvenido %s !"
msgid "wf_info_for"
msgstr "Histórico de"
@@ -4644,123 +4644,3 @@
msgstr ""
"usted debe quitar la puesta en línea de la relación %s que es aceptada y "
"puede ser cruzada"
-
-#~ msgid "%(cstr)s constraint failed for value %(value)r"
-#~ msgstr "el valor %(value)r no satisface la condición %(cstr)s"
-
-#~ msgid "%(value)r doesn't match the %(regexp)r regular expression"
-#~ msgstr "%(value)r no corresponde a la expresión regular %(regexp)r"
-
-#~ msgid "%s not estimated"
-#~ msgstr "%s no estimado(s)"
-
-#~ msgid ""
-#~ "Can't restore relation %(rtype)s of entity %(eid)s, this relation does "
-#~ "not exists anymore in the schema."
-#~ msgstr ""
-#~ "No puede restaurar la relación %(rtype)s de la entidad %(eid)s, esta "
-#~ "relación ya no existe en el esquema."
-
-#~ msgid "Data connection graph for %s"
-#~ msgstr "Gráfica de conexión de datos para %s"
-
-#~ msgid "From:"
-#~ msgstr "De: "
-
-#~ msgid "Got rhythm?"
-#~ msgstr "Tenemos Ritmo?"
-
-#~ msgid "Recipients:"
-#~ msgstr "Destinatarios :"
-
-#~ msgid "Subject:"
-#~ msgstr "Sujeto:"
-
-#~ msgid "What's new?"
-#~ msgstr "Lo más reciente"
-
-#~ msgid "You can use any of the following substitutions in your text"
-#~ msgstr ""
-#~ "Puede realizar cualquiera de las siguientes sustituciones en el contenido "
-#~ "de su email."
-
-#~ msgid "can't change the %s attribute"
-#~ msgstr "no puede modificar el atributo %s"
-
-#~ msgid "can't change this relation"
-#~ msgstr "no puede modificar esta relación"
-
-#~ msgid "cost"
-#~ msgstr "Costo"
-
-#~ msgid "emails successfully sent"
-#~ msgstr "Mensajes enviados con éxito"
-
-#~ msgid "embed"
-#~ msgstr "Incrustado"
-
-#~ msgid "embedding this url is forbidden"
-#~ msgstr "La inclusión de este url esta prohibida"
-
-#~ msgid "error while embedding page"
-#~ msgstr "Error durante la inclusión de la página"
-
-#~ msgid "eta_date"
-#~ msgstr "Fecha de fin"
-
-#~ msgid "expected:"
-#~ msgstr "Previsto :"
-
-#~ msgid "external page"
-#~ msgstr "Página externa"
-
-#~ msgid "incorrect value (%(value)s) for type \"%(type)s\""
-#~ msgstr "valor %(value)s incorrecto para el tipo \"%(type)s\""
-
-#~ msgid "initial estimation %s"
-#~ msgstr "Estimación inicial %s"
-
-#~ msgid "invalid value %(value)s, it must be one of %(choices)s"
-#~ msgstr "Valor %(value)s incorrecto, debe estar entre %(choices)s"
-
-#~ msgid "milestone"
-#~ msgstr "Milestone"
-
-#~ msgid "no related project"
-#~ msgstr "No tiene proyecto relacionado"
-
-#~ msgid "progress"
-#~ msgstr "Progreso"
-
-#~ msgid "progress bar"
-#~ msgstr "Barra de Progreso"
-
-#~ msgid "project"
-#~ msgstr "Proyecto"
-
-#~ msgid "send email"
-#~ msgstr "Enviar email"
-
-#~ msgid "sioc"
-#~ msgstr "SIOC"
-
-#~ msgid "task progression"
-#~ msgstr "Progreso de la Acción"
-
-#~ msgid "todo_by"
-#~ msgstr "Asignada a"
-
-#~ msgid "toggle filter"
-#~ msgstr "esconder/mostrar el filtro"
-
-#~ msgid "unknown source type"
-#~ msgstr "tipo de fuente desconocida"
-
-#~ msgid "violates unique_together constraints (%s)"
-#~ msgstr "viola el principio (o restricción) de singularidad (%s)"
-
-#~ msgid "workflow already have a state of that name"
-#~ msgstr "El Workflow ya tiene un Estado con ese nombre"
-
-#~ msgid "workflow already have a transition of that name"
-#~ msgstr "El Workflow ya tiene una transición con ese nombre"
--- a/i18n/fr.po Mon Feb 03 16:30:07 2014 +0100
+++ b/i18n/fr.po Mon Feb 17 15:32:50 2014 +0100
@@ -471,7 +471,7 @@
msgid "Detected problems"
msgstr "Problèmes détectés"
-msgid "Do you want to delete the following element(s) ?"
+msgid "Do you want to delete the following element(s)?"
msgstr "Voulez-vous supprimer le(s) élément(s) suivant(s) ?"
msgid "Download schema as OWL"
@@ -4569,7 +4569,7 @@
msgstr "mercredi"
#, python-format
-msgid "welcome %s !"
+msgid "welcome %s!"
msgstr "bienvenue %s !"
msgid "wf_info_for"
--- a/misc/migration/3.18.0_Any.py Mon Feb 03 16:30:07 2014 +0100
+++ b/misc/migration/3.18.0_Any.py Mon Feb 17 15:32:50 2014 +0100
@@ -138,4 +138,7 @@
# all attributes perms have to be refreshed ...
for rschema in schema.relations():
if rschema.final:
- sync_schema_props_perms(rschema.type, syncprops=False)
+ if rschema.type in fsschema:
+ sync_schema_props_perms(rschema.type, syncprops=False, ask_confirm=False)
+ else:
+ print 'WARNING: attribute %s missing from fs schema' % rschema.type
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/migration/3.18.4_Any.py Mon Feb 17 15:32:50 2014 +0100
@@ -0,0 +1,2 @@
+sync_schema_props_perms('CWSource')
+sync_schema_props_perms('CWSourceHostConfig')
--- a/misc/migration/bootstrapmigration_repository.py Mon Feb 03 16:30:07 2014 +0100
+++ b/misc/migration/bootstrapmigration_repository.py Mon Feb 17 15:32:50 2014 +0100
@@ -157,7 +157,7 @@
type, source, extid = session.describe(eid)
if source == 'system':
rql('SET X cwuri %(u)s WHERE X eid %(x)s',
- {'x': eid, 'u': base_url + u'eid/%s' % eid})
+ {'x': eid, 'u': u'%s%s' % (base_url, eid)})
isession.commit()
session.set_shared_data('do-not-insert-cwuri', False)
--- a/misc/scripts/chpasswd.py Mon Feb 03 16:30:07 2014 +0100
+++ b/misc/scripts/chpasswd.py Mon Feb 17 15:32:50 2014 +0100
@@ -26,15 +26,15 @@
if __args__:
login = __args__.pop()
else:
- login = raw_input("login ? ")
+ login = raw_input("login? ")
rset = rql('Any U WHERE U is CWUser, U login %(login)s', {'login': login})
if len(rset) != 1:
sys.exit("user '%s' does not exist!" % login)
-pass1 = getpass.getpass(prompt='Enter new password ? ')
-pass2 = getpass.getpass(prompt='Confirm ? ')
+pass1 = getpass.getpass(prompt='Enter new password? ')
+pass2 = getpass.getpass(prompt='Confirm? ')
if pass1 != pass2:
sys.exit("passwords don't match!")
--- a/misc/scripts/ldapuser2ldapfeed.py Mon Feb 03 16:30:07 2014 +0100
+++ b/misc/scripts/ldapuser2ldapfeed.py Mon Feb 17 15:32:50 2014 +0100
@@ -90,7 +90,7 @@
source_ent.cw_set(type=u"ldapfeed", parser=u"ldapfeed")
-if raw_input('Commit ?') in 'yY':
+if raw_input('Commit?') in 'yY':
print 'committing'
commit()
else:
--- a/schemas/base.py Mon Feb 03 16:30:07 2014 +0100
+++ b/schemas/base.py Mon Feb 17 15:32:50 2014 +0100
@@ -247,6 +247,7 @@
'source\'s type'),
__permissions__={
'read': ('managers',),
+ 'add': ('managers',),
'update': ('managers',),
})
# put this here and not in a subclass even if it's only for some sources
@@ -284,6 +285,7 @@
'values defined on the source.'),
__permissions__={
'read': ('managers',),
+ 'add': ('managers',),
'update': ('managers',),
})
--- a/server/checkintegrity.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/checkintegrity.py Mon Feb 17 15:32:50 2014 +0100
@@ -55,8 +55,8 @@
eids[eid] = False
return False
elif len(result) > 1:
- msg = (' More than one entity with eid %s exists in source !\n'
- ' WARNING : Unable to fix this, do it yourself !\n')
+ msg = (' More than one entity with eid %s exists in source!\n'
+ ' WARNING : Unable to fix this, do it yourself!\n')
sys.stderr.write(msg % eid)
eids[eid] = True
return True
--- a/server/rqlannotation.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/rqlannotation.py Mon Feb 17 15:32:50 2014 +0100
@@ -35,15 +35,6 @@
#if server.DEBUG:
# print '-------- sql annotate', repr(rqlst)
getrschema = annotator.schema.rschema
- need_distinct = rqlst.distinct
- for rel in rqlst.iget_nodes(Relation):
- if getrschema(rel.r_type).symmetric and not isinstance(rel.parent, Exists):
- for vref in rel.iget_nodes(VariableRef):
- stinfo = vref.variable.stinfo
- if not stinfo['constnode'] and stinfo['selected']:
- need_distinct = True
- # XXX could mark as not invariant
- break
for var in rqlst.defined_vars.itervalues():
stinfo = var.stinfo
if stinfo.get('ftirels'):
@@ -158,7 +149,6 @@
for col_alias in rqlst.aliases.itervalues():
if col_alias.stinfo.get('ftirels'):
has_text_query = True
- rqlst.need_distinct = need_distinct
return has_text_query
--- a/server/session.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/session.py Mon Feb 17 15:32:50 2014 +0100
@@ -1740,7 +1740,7 @@
class InternalSession(Session):
- """special session created internaly by the repository"""
+ """special session created internally by the repository"""
is_internal_session = True
running_dbapi_query = False
--- a/server/sources/datafeed.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/sources/datafeed.py Mon Feb 17 15:32:50 2014 +0100
@@ -192,7 +192,7 @@
myuris = self.source_cwuris(session)
parser = self._get_parser(session, sourceuris=myuris, import_log=importlog)
if self.process_urls(parser, self.urls, raise_on_error):
- self.warning("some error occured, don't attempt to delete entities")
+ self.warning("some error occurred, don't attempt to delete entities")
else:
parser.handle_deletion(self.config, session, myuris)
self.update_latest_retrieval(session)
--- a/server/sources/native.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/sources/native.py Mon Feb 17 15:32:50 2014 +0100
@@ -372,7 +372,7 @@
self._eid_creation_cnx.close()
self._eid_creation_cnx = None
- # XXX deprecates [un]map_attribute ?
+ # XXX deprecates [un]map_attribute?
def map_attribute(self, etype, attr, cb, sourcedb=True):
self._rql_sqlgen.attr_map['%s.%s' % (etype, attr)] = (cb, sourcedb)
--- a/server/sources/rql2sql.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/sources/rql2sql.py Mon Feb 17 15:32:50 2014 +0100
@@ -116,7 +116,6 @@
continue
unstable.remove(varname)
newselect = Select()
- newselect.need_distinct = False
myunion = Union()
myunion.append(newselect)
# extract aliases / selection
@@ -688,7 +687,7 @@
Groups and sort are not handled here since they should not be handled at
this level (see cubicweb.server.querier)
- we should not have errors here !
+ we should not have errors here!
WARNING: a CubicWebSQLGenerator instance is not thread safe, but generate is
protected by a lock
@@ -703,9 +702,6 @@
}
if not self.dbhelper.union_parentheses_support:
self.union_sql = self.noparen_union_sql
- if self.dbhelper.fti_need_distinct:
- self.__union_sql = self.union_sql
- self.union_sql = self.has_text_need_distinct_union_sql
self._lock = threading.Lock()
if attrmap is None:
attrmap = {}
@@ -739,12 +735,6 @@
finally:
self._lock.release()
- def has_text_need_distinct_union_sql(self, union, needalias=False):
- if getattr(union, 'has_text_query', False):
- for select in union.children:
- select.need_distinct = True
- return self.__union_sql(union, needalias)
-
def union_sql(self, union, needalias=False): # pylint: disable=E0202
if len(union.children) == 1:
return self.select_sql(union.children[0], needalias)
@@ -772,7 +762,12 @@
:needwrap: boolean telling if the query will be wrapped in an outer
query (to deal with aggregat and/or grouping)
"""
- distinct = selectsortterms = select.need_distinct
+ if select.distinct:
+ distinct = True
+ elif self.dbhelper.fti_need_distinct:
+ distinct = getattr(select.parent, 'has_text_query', False)
+ else:
+ distinct = False
sorts = select.orderby
groups = select.groupby
having = select.having
@@ -796,6 +791,7 @@
# selection (union or distinct query) and wrapping (union with groups)
needwrap = False
sols = select.solutions
+ selectsortterms = distinct
if len(sols) > 1:
# remove invariant from solutions
sols, existssols, unstable = remove_unused_solutions(
--- a/server/test/unittest_querier.py Mon Feb 03 16:30:07 2014 +0100
+++ b/server/test/unittest_querier.py Mon Feb 17 15:32:50 2014 +0100
@@ -706,17 +706,17 @@
self.execute("INSERT Personne X: X nom 'trucmuche'")
self.execute("SET X connait Y WHERE X nom 'chouette', Y nom 'bidule'")
self.execute("SET X connait Y WHERE X nom 'machin', Y nom 'chouette'")
- rset = self.execute('Any P where P connait P2')
- self.assertEqual(len(rset.rows), 3, rset.rows)
- rset = self.execute('Any P where NOT P connait P2')
+ rset = self.execute('Any P WHERE P connait P2')
+ self.assertEqual(len(rset.rows), 4, rset.rows)
+ rset = self.execute('Any P WHERE NOT P connait P2')
self.assertEqual(len(rset.rows), 1, rset.rows) # trucmuche
- rset = self.execute('Any P where P connait P2, P2 nom "bidule"')
+ rset = self.execute('Any P WHERE P connait P2, P2 nom "bidule"')
self.assertEqual(len(rset.rows), 1, rset.rows)
- rset = self.execute('Any P where P2 connait P, P2 nom "bidule"')
+ rset = self.execute('Any P WHERE P2 connait P, P2 nom "bidule"')
self.assertEqual(len(rset.rows), 1, rset.rows)
- rset = self.execute('Any P where P connait P2, P2 nom "chouette"')
+ rset = self.execute('Any P WHERE P connait P2, P2 nom "chouette"')
self.assertEqual(len(rset.rows), 2, rset.rows)
- rset = self.execute('Any P where P2 connait P, P2 nom "chouette"')
+ rset = self.execute('Any P WHERE P2 connait P, P2 nom "chouette"')
self.assertEqual(len(rset.rows), 2, rset.rows)
def test_select_inline(self):
--- a/setup.py Mon Feb 03 16:30:07 2014 +0100
+++ b/setup.py Mon Feb 17 15:32:50 2014 +0100
@@ -188,7 +188,7 @@
MyInstallMoreData.run(self)
self.install_dir = _old_install_dir
try:
- import setuptools.command.easy_install # only if easy_install avaible
+ import setuptools.command.easy_install # only if easy_install available
# monkey patch: Crack SandboxViolation verification
from setuptools.sandbox import DirectorySandbox as DS
old_ok = DS._ok
--- a/skeleton/setup.py Mon Feb 03 16:30:07 2014 +0100
+++ b/skeleton/setup.py Mon Feb 17 15:32:50 2014 +0100
@@ -150,7 +150,7 @@
old_install_data.run(self)
self.install_dir = _old_install_dir
try:
- import setuptools.command.easy_install # only if easy_install avaible
+ import setuptools.command.easy_install # only if easy_install available
# monkey patch: Crack SandboxViolation verification
from setuptools.sandbox import DirectorySandbox as DS
old_ok = DS._ok
--- a/sobjects/ldapparser.py Mon Feb 03 16:30:07 2014 +0100
+++ b/sobjects/ldapparser.py Mon Feb 17 15:32:50 2014 +0100
@@ -201,7 +201,7 @@
{'addr': emailaddr})
if not rset:
# not found, create it. first forge an external id
- emailextid = userdict['dn'] + '@@' + emailaddr
+ emailextid = userdict['dn'] + '@@' + emailaddr.encode('utf-8')
email = self.extid2entity(emailextid, 'EmailAddress',
address=emailaddr)
entity.cw_set(use_email=email)
--- a/uilib.py Mon Feb 03 16:30:07 2014 +0100
+++ b/uilib.py Mon Feb 17 15:32:50 2014 +0100
@@ -215,7 +215,7 @@
ALLOWED_TAGS = (defs.general_block_tags | defs.list_tags | defs.table_tags |
defs.phrase_tags | defs.font_style_tags |
- set(('span', 'a', 'br', 'img', 'map', 'area', 'sub', 'sup'))
+ set(('span', 'a', 'br', 'img', 'map', 'area', 'sub', 'sup', 'canvas'))
)
CLEANER = clean.Cleaner(allow_tags=ALLOWED_TAGS, remove_unknown_tags=False,
--- a/utils.py Mon Feb 03 16:30:07 2014 +0100
+++ b/utils.py Mon Feb 17 15:32:50 2014 +0100
@@ -375,9 +375,9 @@
if skiphead:
# Don't insert <script> tags directly as they would be
# interpreted directly by some browsers (e.g. IE).
- # Use <pre class="script"> tags instead and let
+ # Use <cubicweb:script> tags instead and let
# `loadAjaxHtmlHead` handle the script insertion / execution.
- w(u'<pre class="script" src="%s"></pre>\n' %
+ w(u'<cubicweb:script src="%s"></cubicweb:script>\n' %
xml_escape(jsfile))
# FIXME: a probably better implementation might be to add
# JS or CSS urls in a JS list that loadAjaxHtmlHead
@@ -392,9 +392,9 @@
if self.post_inlined_scripts:
if skiphead:
for script in self.post_inlined_scripts:
- w(u'<pre class="script">')
+ w(u'<cubicweb:script>')
w(xml_escape(script))
- w(u'</pre>')
+ w(u'</cubicweb:script>')
else:
w(self.script_opening)
w(u'\n\n'.join(self.post_inlined_scripts))
@@ -455,8 +455,8 @@
attrs = ' '.join('%s="%s"' % (attr, xml_escape(value))
for attr, value in self._htmlattrs)
if attrs:
- return '<html %s>' % attrs
- return '<html>'
+ return '<html xmlns:cubicweb="http://www.cubicweb.org" %s>' % attrs
+ return '<html xmlns:cubicweb="http://www.cubicweb.org">'
def getvalue(self):
"""writes HTML headers, closes </head> tag and writes HTML body"""
--- a/view.py Mon Feb 03 16:30:07 2014 +0100
+++ b/view.py Mon Feb 17 15:32:50 2014 +0100
@@ -356,7 +356,7 @@
class StartupView(View):
"""base class for views which doesn't need a particular result set to be
- displayed (so they can always be displayed !)
+ displayed (so they can always be displayed!)
"""
__select__ = none_rset()
--- a/web/component.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/component.py Mon Feb 17 15:32:50 2014 +0100
@@ -108,12 +108,8 @@
view = self.cw_extra_kwargs.get('view')
if view is not None and hasattr(view, 'page_navigation_url'):
url = view.page_navigation_url(self, path, params)
- elif path in ('json', 'ajax'):
- # 'ajax' is the new correct controller, but the old 'json'
- # controller should still be supported
+ else:
url = self.ajax_page_url(**params)
- else:
- url = self._cw.build_url(path, **params)
# XXX hack to avoid opening a new page containing the evaluation of the
# js expression on ajax call
if url.startswith('javascript:'):
@@ -122,9 +118,9 @@
def ajax_page_url(self, **params):
divid = params.setdefault('divid', 'pageContent')
+ params['fname'] = 'view'
params['rql'] = self.cw_rset.printable_rql()
- return js_href("$(%s).loadxhtml(AJAX_PREFIX_URL, %s, 'get', 'swap')" % (
- json_dumps('#'+divid), js.ajaxFuncArgs('view', params)))
+ return self._cw.build_url('ajax', **params)
def page_link(self, path, params, start, stop, content):
url = xml_escape(self.page_url(path, params, start, stop))
--- a/web/data/cubicweb.ajax.js Mon Feb 03 16:30:07 2014 +0100
+++ b/web/data/cubicweb.ajax.js Mon Feb 17 15:32:50 2014 +0100
@@ -200,7 +200,7 @@
},
_loadAjaxScripts: function($responseHead, $head) {
- $responseHead.find('pre.script').each(function(i) {
+ $responseHead.find('cubicweb\\:script').each(function(i) {
var $srcnode = $(this);
var url = $srcnode.attr('src');
if (url) {
@@ -222,7 +222,7 @@
jQuery.globalEval($srcnode.text());
}
});
- $responseHead.find('pre.script').remove();
+ $responseHead.find('cubicweb\\:script').remove();
}
});
--- a/web/data/cubicweb.js Mon Feb 03 16:30:07 2014 +0100
+++ b/web/data/cubicweb.js Mon Feb 17 15:32:50 2014 +0100
@@ -222,6 +222,9 @@
cw.utils.nodeWalkDepthFirst(elem, function (elem) {
var name = elem.name;
if (name && name.length) {
+ if (elem.disabled) {
+ return null;
+ }
var tagName = elem.tagName.toUpperCase();
if (tagName === "INPUT" && (elem.type == "radio" || elem.type == "checkbox") && !elem.checked) {
return null;
--- a/web/data/cubicweb.widgets.js Mon Feb 03 16:30:07 2014 +0100
+++ b/web/data/cubicweb.widgets.js Mon Feb 17 15:32:50 2014 +0100
@@ -415,17 +415,16 @@
var url = linode.attr('cubicweb:loadurl');
if (url) {
linode.find('ul.placeholder').remove();
- linode.loadxhtml(url, {
- callback: function(domnode) {
+ var d = linode.loadxhtml(url, null, 'post', 'append');
+ d.addCallback(function(domnode) {
linode.removeAttr('cubicweb:loadurl');
- jQuery(domnode).treeview({
+ linode.find('> ul.treeview').treeview({
toggle: toggleTree,
prerendered: true
});
return null;
}
- },
- 'post', 'append');
+ );
}
}
Binary file web/data/images/animated-overlay.gif has changed
Binary file web/data/images/loadingAnimation.gif has changed
Binary file web/data/images/ui-bg_diagonals-thick_18_b81900_40x40.png has changed
Binary file web/data/images/ui-bg_diagonals-thick_20_666666_40x40.png has changed
Binary file web/data/images/ui-bg_flat_0_aaaaaa_40x100.png has changed
Binary file web/data/images/ui-bg_flat_10_000000_40x100.png has changed
Binary file web/data/images/ui-bg_flat_75_ffffff_40x100.png has changed
Binary file web/data/images/ui-bg_glass_100_f6f6f6_1x400.png has changed
Binary file web/data/images/ui-bg_glass_100_fdf5ce_1x400.png has changed
Binary file web/data/images/ui-bg_glass_55_fbf9ee_1x400.png has changed
Binary file web/data/images/ui-bg_glass_75_dadada_1x400.png has changed
Binary file web/data/images/ui-bg_glass_75_e6e6e6_1x400.png has changed
Binary file web/data/images/ui-bg_glass_95_fef1ec_1x400.png has changed
Binary file web/data/images/ui-bg_gloss-wave_35_f6a828_500x100.png has changed
Binary file web/data/images/ui-bg_highlight-soft_100_eeeeee_1x100.png has changed
Binary file web/data/images/ui-bg_highlight-soft_75_cccccc_1x100.png has changed
Binary file web/data/images/ui-bg_highlight-soft_75_ffe45c_1x100.png has changed
Binary file web/data/images/ui-icons_228ef1_256x240.png has changed
Binary file web/data/images/ui-icons_2e83ff_256x240.png has changed
Binary file web/data/images/ui-icons_454545_256x240.png has changed
Binary file web/data/images/ui-icons_888888_256x240.png has changed
Binary file web/data/images/ui-icons_cd0a0a_256x240.png has changed
Binary file web/data/images/ui-icons_ef8c08_256x240.png has changed
Binary file web/data/images/ui-icons_ffd27a_256x240.png has changed
Binary file web/data/images/ui-icons_ffffff_256x240.png has changed
--- a/web/facet.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/facet.py Mon Feb 17 15:32:50 2014 +0100
@@ -880,7 +880,7 @@
though linked to a different address entity. There is a great chance your
users won't understand that...
- That's where this class come in ! It's used to said that you want to filter
+ That's where this class come in! It's used to said that you want to filter
according to the *attribute value* of a relatied entity, not to the entity
itself. Now here is the source code for the facet:
--- a/web/test/unittest_views_baseviews.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/test/unittest_views_baseviews.py Mon Feb 17 15:32:50 2014 +0100
@@ -133,7 +133,7 @@
html_source = self.view('my-view').source
source_lines = [line.strip() for line in html_source.splitlines(False)
if line.strip()]
- self.assertListEqual(['<!DOCTYPE html>', '<html lang="en">'], source_lines[:2])
+ self.assertListEqual(['<!DOCTYPE html>', '<html xmlns:cubicweb="http://www.cubicweb.org" lang="en">'], source_lines[:2])
def test_set_doctype_no_reset_xmldecl(self):
"""
@@ -151,7 +151,7 @@
html_source = self.view('my-view').source
source_lines = [line.strip() for line in html_source.splitlines(False)
if line.strip()]
- self.assertListEqual([html_doctype, '<html lang="cz">', '<head>'],
+ self.assertListEqual([html_doctype, '<html xmlns:cubicweb="http://www.cubicweb.org" lang="cz">', '<head>'],
source_lines[:3])
if __name__ == '__main__':
--- a/web/views/ajaxcontroller.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/ajaxcontroller.py Mon Feb 17 15:32:50 2014 +0100
@@ -246,7 +246,7 @@
view.render(**kwargs)
extresources = self._cw.html_headers.getvalue(skiphead=True)
if extresources:
- stream.write(u'<div class="ajaxHtmlHead">\n') # XXX use a widget ?
+ stream.write(u'<div class="ajaxHtmlHead">\n') # XXX use a widget?
stream.write(extresources)
stream.write(u'</div>\n')
if divid == 'pageContent':
--- a/web/views/autoform.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/autoform.py Mon Feb 17 15:32:50 2014 +0100
@@ -289,7 +289,7 @@
def keep_entity(self, form, entity):
if not entity.has_eid():
return True
- # are we regenerating form because of a validation error ?
+ # are we regenerating form because of a validation error?
if form.form_previous_values:
cdvalues = self._cw.list_form_param(eid_param(self.rtype, self.peid),
form.form_previous_values)
--- a/web/views/editforms.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/editforms.py Mon Feb 17 15:32:50 2014 +0100
@@ -80,7 +80,7 @@
w(u'<script type="text/javascript">updateMessage(\'%s\');</script>\n'
% _('this action is not reversible!'))
# XXX above message should have style of a warning
- w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s) ?'))
+ w(u'<h4>%s</h4>\n' % _('Do you want to delete the following element(s)?'))
form = self._cw.vreg['forms'].select(self.__regid__, req,
rset=self.cw_rset,
onsubmit=onsubmit)
--- a/web/views/facets.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/facets.py Mon Feb 17 15:32:50 2014 +0100
@@ -143,7 +143,7 @@
:param vid: ID of the view display in the div
:type vid: string
- :param paginate: Is the view paginated ?
+ :param paginate: Is the view paginated?
:type paginate: boolean
:param cssclass: Additional css classes to put on the form.
--- a/web/views/json.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/json.py Mon Feb 17 15:32:50 2014 +0100
@@ -93,7 +93,7 @@
title = _('json-export-view')
def call(self):
- # XXX mimic w3c recommandations to serialize SPARQL results in json ?
+ # XXX mimic w3c recommandations to serialize SPARQL results in json?
# http://www.w3.org/TR/rdf-sparql-json-res/
self.wdata(self.cw_rset.rows)
--- a/web/views/navigation.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/navigation.py Mon Feb 17 15:32:50 2014 +0100
@@ -55,6 +55,7 @@
from logilab.mtconverter import xml_escape
from logilab.common.deprecation import deprecated
+from cubicweb.utils import json_dumps
from cubicweb.predicates import paginated_rset, sorted_rset, adaptable
from cubicweb.uilib import cut
from cubicweb.view import EntityAdapter
@@ -280,6 +281,13 @@
nav = req.vreg['components'].select_or_none(
'navigation', req, rset=rset, page_size=page_size, view=view)
if nav:
+ domid = getattr(view, 'domid', 'pageContent')
+ view._cw.add_onload('''
+ jQuery('div.displayAllLink a, div.pagination a').click(function() {
+ cw.jqNode(%s).loadxhtml(this.href, null, 'get', 'swap');
+ return false;
+ });
+ ''' % json_dumps(domid))
if w is None:
w = view.w
if req.form.get('__force_display'):
--- a/web/views/reledit.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/reledit.py Mon Feb 17 15:32:50 2014 +0100
@@ -258,7 +258,7 @@
_new_entity.eid = self._cw.varmaker.next()
edit_entity = _new_entity
# XXX see forms.py ~ 276 and entities.linked_to method
- # is there another way ?
+ # is there another way?
self._cw.form['__linkto'] = '%s:%s:%s' % (rschema, entity.eid, neg_role(role))
assert edit_entity
return label, edit_entity
--- a/web/views/sessions.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/sessions.py Mon Feb 17 15:32:50 2014 +0100
@@ -88,7 +88,7 @@
# reopening. Is it actually a problem?
if 'last_login_time' in req.vreg.schema:
self._update_last_login_time(session)
- req.set_message(req._('welcome %s !') % session.user.login)
+ req.set_message(req._('welcome %s!') % session.user.login)
def _update_last_login_time(self, session):
# XXX should properly detect missing permission / non writeable source
--- a/web/views/tableview.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/tableview.py Mon Feb 17 15:32:50 2014 +0100
@@ -1068,7 +1068,7 @@
"""Build an url to the current view using the <navcomp> attributes
:param navcomp: a NavigationComponent to call an url method on.
- :param path: expected to be json here ?
+ :param path: expected to be json here?
:param params: params to give to build_url method
this is called by :class:`cubiweb.web.component.NavigationComponent`
--- a/web/views/urlrewrite.py Mon Feb 03 16:30:07 2014 +0100
+++ b/web/views/urlrewrite.py Mon Feb 17 15:32:50 2014 +0100
@@ -127,7 +127,7 @@
req.form.update(infos)
break
elif inputurl.match(uri): # it's a regexp
- # XXX what about i18n ? (vtitle for instance)
+ # XXX what about i18n? (vtitle for instance)
for param, value in infos.items():
if isinstance(value, basestring):
req.form[param] = inputurl.sub(value, uri)