diff --git a/addons/web/__init__.py b/addons/web/__init__.py index 3b447ce748d..e01969ddcca 100644 --- a/addons/web/__init__.py +++ b/addons/web/__init__.py @@ -1,4 +1,5 @@ import http import controllers +import cli wsgi_postload = http.wsgi_postload diff --git a/addons/web/cli/__init__.py b/addons/web/cli/__init__.py new file mode 100644 index 00000000000..823c140bb79 --- /dev/null +++ b/addons/web/cli/__init__.py @@ -0,0 +1 @@ +import test_js diff --git a/addons/web/cli/test_js.py b/addons/web/cli/test_js.py new file mode 100644 index 00000000000..b3a8e634b72 --- /dev/null +++ b/addons/web/cli/test_js.py @@ -0,0 +1,35 @@ +import logging +import optparse +import sys + +import unittest2 + +import openerp +import openerp.addons.web.tests + +_logger = logging.getLogger(__name__) + +class TestJs(openerp.cli.Command): + def run(self, args): + self.parser = parser = optparse.OptionParser() + parser.add_option("-d", "--database", dest="db_name", default=False, help="specify the database name") + parser.add_option("--xmlrpc-port", dest="xmlrpc_port", default=8069, help="specify the TCP port for the XML-RPC protocol", type="int") + # proably need to add both --superadmin-password and --database-admin-password + self.parser.parse_args(args) + + # test ony uses db_name xmlrpc_port admin_passwd, so use the server one for the actual parsing + + config = openerp.tools.config + config.parse_config(args) + # needed until runbot is fixed + config['db_password'] = config['admin_passwd'] + + # run js tests + openerp.netsvc.init_alternative_logger() + suite = unittest2.TestSuite() + suite.addTests(unittest2.TestLoader().loadTestsFromModule(openerp.addons.web.tests.test_js)) + r = unittest2.TextTestRunner(verbosity=2).run(suite) + if r.errors or r.failures: + sys.exit(1) + +# vim:et:ts=4:sw=4: diff --git a/addons/web/doc/index.rst b/addons/web/doc/index.rst index 2e4367ef78f..75a7194406e 100644 --- a/addons/web/doc/index.rst +++ b/addons/web/doc/index.rst @@ -12,17 +12,18 @@ Contents: :maxdepth: 1 module - testing - widget async rpc qweb client_action - form_view + + testing + search_view list_view + form_view changelog-7.0 diff --git a/addons/web/doc/qweb.rst b/addons/web/doc/qweb.rst index 47e5fe7d48f..61668dcb9be 100644 --- a/addons/web/doc/qweb.rst +++ b/addons/web/doc/qweb.rst @@ -16,6 +16,11 @@ XML-based templating language, similar to `Genshi OpenERP Web (and it's possible to use :class:`~instance.web.Widget` without relying on the QWeb integration). +The rationale behind using QWeb instead of a more popular template syntax is +that its extension mechanism is very similar to the openerp view inheritance +mechanism. Like openerp views a QWeb template is an xml tree and therefore +xpath or dom manipulations are easy to performs on it. + Here's an example demonstrating most of the basic QWeb features: .. code-block:: xml diff --git a/addons/web/i18n/es.po b/addons/web/i18n/es.po index 94a5ba81645..c098fde8581 100644 --- a/addons/web/i18n/es.po +++ b/addons/web/i18n/es.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-06 19:10+0000\n" +"PO-Revision-Date: 2012-12-07 19:11+0000\n" "Last-Translator: Eduardo Alberto Calvo \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-07 04:47+0000\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" "X-Generator: Launchpad (build 16341)\n" #. module: web @@ -2373,7 +2373,7 @@ msgstr "Disparador activado desde la vista de búsqueda" #: code:addons/web/static/src/js/search.js:980 #, python-format msgid "Filter" -msgstr "" +msgstr "Filtro" #. module: web #. openerp-web diff --git a/addons/web/i18n/fa.po b/addons/web/i18n/fa.po index 7464ed229e1..7ca8bae970d 100644 --- a/addons/web/i18n/fa.po +++ b/addons/web/i18n/fa.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-06 15:39+0000\n" +"PO-Revision-Date: 2012-12-07 13:23+0000\n" "Last-Translator: fshahy \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-07 04:47+0000\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" "X-Generator: Launchpad (build 16341)\n" #. module: web @@ -36,7 +36,7 @@ msgstr "%d دقیقه پیش" #: code:addons/web/static/src/js/coresetup.js:621 #, python-format msgid "Still loading...
Please be patient." -msgstr "" +msgstr "در حال بارگذاری... لطفا صبر کنید." #. module: web #. openerp-web @@ -59,7 +59,7 @@ msgstr "کوچکتر یا مساوی" #: code:addons/web/static/src/js/chrome.js:393 #, python-format msgid "Please enter your previous password" -msgstr "" +msgstr "لطفا کلمه عبور قبلی خود را وارد کنید." #. module: web #. openerp-web @@ -82,7 +82,7 @@ msgstr "تغییر کلمه عبور اصلی" #: code:addons/web/static/src/js/chrome.js:491 #, python-format msgid "Do you really want to delete the database: %s ?" -msgstr "" +msgstr "آیا پایگاه داده حذف شود: %s ؟" #. module: web #. openerp-web @@ -120,7 +120,7 @@ msgstr "تهیه کپی پشتیبان از پایگاه داده" #: code:addons/web/static/src/js/dates.js:53 #, python-format msgid "'%s' is not a valid date" -msgstr "" +msgstr "'%s' یک تاریخ معتبر نیست" #. module: web #. openerp-web @@ -134,7 +134,7 @@ msgstr "" #: code:addons/web/static/src/js/coresetup.js:592 #, python-format msgid "about a minute ago" -msgstr "" +msgstr "حدود یک دقیقه قبل" #. module: web #. openerp-web @@ -154,7 +154,7 @@ msgstr "هیچ یک از فیلد های کلمه عبور نباید خالی #: code:addons/web/static/src/js/chrome.js:681 #, python-format msgid "Invalid username or password" -msgstr "نام کاربر یا گذرواژهٔ نامعتبر" +msgstr "نام کاربری یا کلمه عبور معتبر نیست" #. module: web #. openerp-web diff --git a/addons/web/i18n/hr.po b/addons/web/i18n/hr.po index ffeb92a4850..1446216b5c7 100644 --- a/addons/web/i18n/hr.po +++ b/addons/web/i18n/hr.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-06 17:55+0000\n" +"PO-Revision-Date: 2012-12-09 18:47+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-07 04:47+0000\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" "X-Generator: Launchpad (build 16341)\n" #. module: web @@ -59,7 +59,7 @@ msgstr "manje ili jednako od" #: code:addons/web/static/src/js/chrome.js:393 #, python-format msgid "Please enter your previous password" -msgstr "" +msgstr "Upišite trenutno važeću lozinku" #. module: web #. openerp-web @@ -82,7 +82,7 @@ msgstr "Promijeni glavnu lozinku" #: code:addons/web/static/src/js/chrome.js:491 #, python-format msgid "Do you really want to delete the database: %s ?" -msgstr "" +msgstr "Zaista želite obrisati bazu podataka: %s ?" #. module: web #. openerp-web @@ -96,7 +96,7 @@ msgstr "Traži %(field)s at: %(value)s" #: code:addons/web/static/src/js/chrome.js:537 #, python-format msgid "Access Denied" -msgstr "" +msgstr "Pristup odbijen / zabranjen" #. module: web #. openerp-web @@ -120,7 +120,7 @@ msgstr "Backup baze podataka" #: code:addons/web/static/src/js/dates.js:53 #, python-format msgid "'%s' is not a valid date" -msgstr "" +msgstr "'%s' nije ispravan datum" #. module: web #. openerp-web @@ -147,7 +147,7 @@ msgstr "Datoteka" #: code:addons/web/controllers/main.py:842 #, python-format msgid "You cannot leave any password empty." -msgstr "" +msgstr "Popunite sva polja." #. module: web #. openerp-web @@ -207,7 +207,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:1242 #, python-format msgid "Widget type '%s' is not implemented" -msgstr "" +msgstr "Widget tipa '%s' nije implementiran" #. module: web #. openerp-web @@ -236,7 +236,7 @@ msgstr "(prazno)" #: code:addons/web/static/src/js/formats.js:282 #, python-format msgid "'%s' is not a correct time" -msgstr "" +msgstr "'%s' nije ispravno vrijeme" #. module: web #. openerp-web @@ -271,7 +271,7 @@ msgstr "Nedefiniran" #: code:addons/web/static/src/js/view_form.js:4831 #, python-format msgid "File Upload" -msgstr "" +msgstr "Slanje datoteke" #. module: web #. openerp-web @@ -335,7 +335,7 @@ msgstr "Promijeni lozinku" #: code:addons/web/static/src/js/view_form.js:3382 #, python-format msgid "View type '%s' is not supported in One2Many." -msgstr "" +msgstr "Pogled tipa '%s' nije podržan za JedanNaViše (One2Many) polja." #. module: web #. openerp-web @@ -350,7 +350,7 @@ msgstr "Preuzimanje" #: code:addons/web/static/src/js/formats.js:266 #, python-format msgid "'%s' is not a correct datetime" -msgstr "" +msgstr "'%s' nije ispravno vrijeme" #. module: web #. openerp-web @@ -378,13 +378,13 @@ msgstr "Odabir:" #: code:addons/web/static/src/js/view_form.js:869 #, python-format msgid "The following fields are invalid:" -msgstr "" +msgstr "Popis neispravnih polja:" #. module: web #: code:addons/web/controllers/main.py:863 #, python-format msgid "Languages" -msgstr "" +msgstr "Jezici" #. module: web #. openerp-web @@ -405,7 +405,7 @@ msgstr "Uvoz" #: code:addons/web/static/src/js/chrome.js:543 #, python-format msgid "Could not restore the database" -msgstr "" +msgstr "Oporavak baze podataka nije uspješno dovršen" #. module: web #. openerp-web @@ -518,7 +518,7 @@ msgstr "Operator %s nije podržan unutar domene %s" #: code:addons/web/static/src/js/formats.js:242 #, python-format msgid "'%s' is not a correct float" -msgstr "" +msgstr "'%s' nije ispravna decimalna vrijednost" #. module: web #. openerp-web @@ -532,7 +532,7 @@ msgstr "Oporavljeno" #: code:addons/web/static/src/js/view_list.js:392 #, python-format msgid "%d-%d of %d" -msgstr "" +msgstr "%d-%d od %d" #. module: web #. openerp-web @@ -546,14 +546,14 @@ msgstr "Kreiraj i uredi" #: code:addons/web/static/src/js/pyeval.js:731 #, python-format msgid "Unknown nonliteral type " -msgstr "" +msgstr "Nepoznat tip podatka " #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:2345 #, python-format msgid "Resource error" -msgstr "" +msgstr "Greška resursa" #. module: web #. openerp-web @@ -574,7 +574,7 @@ msgstr "Ispiši tijek rada" #: code:addons/web/static/src/js/chrome.js:396 #, python-format msgid "Please confirm your new password" -msgstr "" +msgstr "Potvrdite Vašu novu zaporku" #. module: web #. openerp-web @@ -623,7 +623,7 @@ msgstr "Polja %s modela" #: code:addons/web/static/src/js/view_list.js:890 #, python-format msgid "Setting 'id' attribute on existing record %s" -msgstr "" +msgstr "Postavljanje 'id' atributa na postojećem zapisu %s" #. module: web #. openerp-web @@ -668,13 +668,15 @@ msgstr "Action ID:" #, python-format msgid "Your user's preference timezone does not match your browser timezone:" msgstr "" +"Pojasno vrijeme u Vašim korisničkim podacima ne odgovara pojasnom vremenu " +"zadanom u Vašem Internet pretraživaču" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:1238 #, python-format msgid "Field '%s' specified in view could not be found." -msgstr "" +msgstr "Ne postoji polje '%s', a navedeno je u definiciji pogleda." #. module: web #. openerp-web @@ -702,7 +704,7 @@ msgstr "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb" #: code:addons/web/static/src/js/chrome.js:481 #, python-format msgid "The database has been duplicated." -msgstr "" +msgstr "Baza podataka je duplicirana." #. module: web #. openerp-web @@ -731,7 +733,7 @@ msgstr "Spremi kao" #: code:addons/web/static/src/js/view_form.js:2316 #, python-format msgid "E-mail error" -msgstr "" +msgstr "E-mail greška" #. module: web #. openerp-web @@ -793,7 +795,7 @@ msgstr "Graničnik:" #: code:addons/web/static/src/xml/base.xml:458 #, python-format msgid "Browser's timezone" -msgstr "" +msgstr "Pojasno vrijeme internet preglednika" #. module: web #. openerp-web @@ -838,7 +840,7 @@ msgstr "OpenERP.com" #: code:addons/web/static/src/js/view_form.js:2316 #, python-format msgid "Can't send email to invalid e-mail address" -msgstr "" +msgstr "Nije moguće poslati email na neispravne e-mail adrese" #. module: web #. openerp-web @@ -859,7 +861,7 @@ msgstr "Postavke" #: code:addons/web/static/src/js/view_form.js:434 #, python-format msgid "Wrong on change format: %s" -msgstr "" +msgstr "Greška u promjeni formata: %s" #. module: web #. openerp-web @@ -874,7 +876,7 @@ msgstr "Obriši bazu podataka" #: code:addons/web/static/src/xml/base.xml:462 #, python-format msgid "Click here to change your user's timezone." -msgstr "" +msgstr "Kliknite ovdje za promjenu korisničkog pojasnog vremena" #. module: web #. openerp-web @@ -920,21 +922,21 @@ msgstr "Korisničko ime" #: code:addons/web/static/src/js/chrome.js:481 #, python-format msgid "Duplicating database" -msgstr "" +msgstr "Dupliciram bazu podataka" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome.js:563 #, python-format msgid "Password has been changed successfully" -msgstr "" +msgstr "Lozinka uspješno promjenjena" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_list_editable.js:781 #, python-format msgid "The form's data can not be discarded" -msgstr "" +msgstr "Podaci (form's data) se ne mogu odbaciti" #. module: web #. openerp-web @@ -969,6 +971,10 @@ msgid "" "\n" "%s" msgstr "" +"Greška lokalne evaluacije\n" +"%s\n" +"\n" +"%s" #. module: web #. openerp-web @@ -1003,7 +1009,7 @@ msgstr "Kreirano:" #: code:addons/web/controllers/main.py:851 #, python-format msgid "Error, password not changed !" -msgstr "" +msgstr "Greška, lozika nije promjenjena!" #. module: web #. openerp-web @@ -1025,7 +1031,7 @@ msgstr "/web/binary/upload_attachment" #: code:addons/web/static/src/js/chrome.js:563 #, python-format msgid "Changed Password" -msgstr "" +msgstr "Promjenjena lozinka" #. module: web #. openerp-web @@ -1059,14 +1065,14 @@ msgstr "Arhiviranje/Backup" #: code:addons/web/static/src/js/dates.js:80 #, python-format msgid "'%s' is not a valid time" -msgstr "" +msgstr "'%s' nije ispravno vrijeme" #. module: web #. openerp-web #: code:addons/web/static/src/js/formats.js:274 #, python-format msgid "'%s' is not a correct date" -msgstr "" +msgstr "'%s' nije ispravan datum" #. module: web #. openerp-web @@ -1120,7 +1126,7 @@ msgstr "Zadnju promjenu napravio:" #: code:addons/web/static/src/xml/base.xml:466 #, python-format msgid "Timezone mismatch" -msgstr "" +msgstr "Neslaganje vremenskih pojasa" #. module: web #. openerp-web @@ -1189,7 +1195,7 @@ msgstr "Dodaj napredni filter" #: code:addons/web/controllers/main.py:844 #, python-format msgid "The new password and its confirmation must be identical." -msgstr "" +msgstr "Nova lozinka i potvrda lozinke moraju biti identične." #. module: web #. openerp-web @@ -1204,7 +1210,7 @@ msgstr "Povrati bazu podataka" #: code:addons/web/static/src/js/chrome.js:645 #, python-format msgid "Login" -msgstr "" +msgstr "Prijava" #. module: web #. openerp-web @@ -1247,7 +1253,7 @@ msgstr "Grupiraj po: %s" #: code:addons/web/static/src/js/view_form.js:151 #, python-format msgid "No data provided." -msgstr "" +msgstr "Nema podataka." #. module: web #. openerp-web @@ -1290,7 +1296,7 @@ msgstr "Neispravna pretraga" #: code:addons/web/static/src/js/view_list.js:959 #, python-format msgid "Could not find id in dataset" -msgstr "" +msgstr "Id nije pronađen u podacima" #. module: web #. openerp-web @@ -1318,7 +1324,7 @@ msgstr "%(page)d/%(page_count)d" #: code:addons/web/static/src/js/chrome.js:397 #, python-format msgid "The confirmation does not match the password" -msgstr "" +msgstr "Nova lozinka i potvrda su različite" #. module: web #. openerp-web @@ -1357,7 +1363,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:393 #, python-format msgid "99+" -msgstr "" +msgstr "99+" #. module: web #. openerp-web @@ -1371,7 +1377,7 @@ msgstr "1. Uvezi .CSV datoteku" #: code:addons/web/static/src/js/chrome.js:645 #, python-format msgid "No database selected !" -msgstr "" +msgstr "Nije odabrana baza podataka" #. module: web #. openerp-web @@ -1409,7 +1415,7 @@ msgstr "je jednako" #: code:addons/web/static/src/js/views.js:1455 #, python-format msgid "Could not serialize XML" -msgstr "" +msgstr "Could not serialize XML" #. module: web #. openerp-web @@ -1513,14 +1519,14 @@ msgstr "Stablo" #: code:addons/web/controllers/main.py:766 #, python-format msgid "Could not drop database !" -msgstr "" +msgstr "Brisanje baze podataka nije uspjelo!" #. module: web #. openerp-web #: code:addons/web/static/src/js/formats.js:227 #, python-format msgid "'%s' is not a correct integer" -msgstr "" +msgstr "'%s' nije ispravna cjelobrojna vrijednost" #. module: web #. openerp-web @@ -1541,7 +1547,7 @@ msgstr "Nepoznato polje %s unutar domene %s" #: code:addons/web/static/src/js/views.js:1421 #, python-format msgid "Node [%s] is not a JSONified XML node" -msgstr "" +msgstr "Node [%s] nije JSONified XML node" #. module: web #. openerp-web @@ -1555,7 +1561,7 @@ msgstr "Napredno pretraživanje" #: code:addons/web/static/src/js/chrome.js:499 #, python-format msgid "Dropping database" -msgstr "" +msgstr "Brisanje baze podataka" #. module: web #. openerp-web @@ -1578,7 +1584,7 @@ msgstr "Da" #: code:addons/web/static/src/js/view_form.js:4831 #, python-format msgid "There was a problem while uploading your file" -msgstr "" +msgstr "Pojavio se problem kod učitavanja vaše datoteke" #. module: web #. openerp-web @@ -1620,7 +1626,7 @@ msgstr "%d godina prije" #: code:addons/web/static/src/js/view_list.js:1019 #, python-format msgid "Unknown m2m command %s" -msgstr "" +msgstr "Napoznata m2m naredba %s" #. module: web #. openerp-web @@ -1643,14 +1649,14 @@ msgstr "Naziv nove baze podataka:" #: code:addons/web/static/src/js/chrome.js:394 #, python-format msgid "Please enter your new password" -msgstr "" +msgstr "Molim, unesite novu lozinku" #. module: web #. openerp-web #: code:addons/web/static/src/js/views.js:1463 #, python-format msgid "Could not parse string to xml" -msgstr "" +msgstr "Could not parse string to xml" #. module: web #. openerp-web @@ -1699,7 +1705,7 @@ msgstr "Copyright © 2004-TODAY OpenERP SA. Sva prava pridržana." #: code:addons/web/static/src/js/view_form.js:2345 #, python-format msgid "This resource is empty" -msgstr "" +msgstr "Ovaj resurs je prazan" #. module: web #. openerp-web @@ -1757,7 +1763,7 @@ msgstr "Polja pogleda" #: code:addons/web/static/src/xml/base.xml:330 #, python-format msgid "Confirm New Password:" -msgstr "" +msgstr "Potvrda nove zaporke:" #. module: web #. openerp-web @@ -1908,7 +1914,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:319 #, python-format msgid "The record could not be found in the database." -msgstr "" +msgstr "Zapis nije pronađen u bazi podataka." #. module: web #. openerp-web @@ -1929,7 +1935,7 @@ msgstr "Tip:" #: code:addons/web/static/src/js/chrome.js:538 #, python-format msgid "Incorrect super-administrator password" -msgstr "" +msgstr "Neispravna lozinka super-administratora" #. module: web #. openerp-web @@ -1971,6 +1977,8 @@ msgid "" "The type of the field '%s' must be a many2many field with a relation to " "'ir.attachment' model." msgstr "" +"Tip polja '%s' mora biti VišeNaViše (many2many) polje u relaciji sa " +"'ir.attachment' (privici) modelom." #. module: web #. openerp-web @@ -2035,14 +2043,14 @@ msgstr "Učitaj demonstracijske podatke:" #: code:addons/web/static/src/js/dates.js:26 #, python-format msgid "'%s' is not a valid datetime" -msgstr "" +msgstr "'%s' nije ispravno vrijeme" #. module: web #. openerp-web #: code:addons/web/static/src/js/views.js:1471 #, python-format msgid "Could not find a DOM Parser: %s" -msgstr "" +msgstr "Could not find a DOM Parser: %s" #. module: web #. openerp-web @@ -2122,14 +2130,14 @@ msgstr "Preuzimanje \"%s\"" #: code:addons/web/static/src/js/view_form.js:324 #, python-format msgid "New" -msgstr "" +msgstr "Nova(i)" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_list.js:1746 #, python-format msgid "Can't convert value %s to context" -msgstr "" +msgstr "Vrijednost %s ne odgovara za context" #. module: web #. openerp-web @@ -2202,13 +2210,13 @@ msgstr "O OpenERP-u" #: code:addons/web/static/src/js/formats.js:297 #, python-format msgid "'%s' is not a correct date, datetime nor time" -msgstr "" +msgstr "'%s' nije ispravno vrijeme ili datum" #. module: web #: code:addons/web/controllers/main.py:1306 #, python-format msgid "No content found for field '%s' on '%s:%s'" -msgstr "" +msgstr "Nedostaje kontekst za polje '%s' na '%s:%s'" #. module: web #. openerp-web @@ -2236,7 +2244,7 @@ msgstr "Upravljanje bazama podataka" #: code:addons/web/static/src/js/pyeval.js:765 #, python-format msgid "Evaluation Error" -msgstr "" +msgstr "Greška evaluacije" #. module: web #. openerp-web @@ -2269,7 +2277,7 @@ msgstr "Ne" #: code:addons/web/static/src/js/formats.js:309 #, python-format msgid "'%s' is not convertible to date, datetime nor time" -msgstr "" +msgstr "Interpretacija '%s' ne reultira datumom ili vremenom" #. module: web #. openerp-web @@ -2344,7 +2352,7 @@ msgstr "Polje je prazno. Ništa za snimanje !" #: code:addons/web/static/src/js/view_list.js:1327 #, python-format msgid "%s (%d)" -msgstr "" +msgstr "%s (%d)" #. module: web #. openerp-web @@ -2407,7 +2415,7 @@ msgstr "Obrisati privitak?" #: code:addons/web/static/src/js/views.js:838 #, python-format msgid "Technical Translation" -msgstr "" +msgstr "tehnički prijevod" #. module: web #. openerp-web @@ -2421,14 +2429,14 @@ msgstr "Polje:" #: code:addons/web/static/src/js/chrome.js:499 #, python-format msgid "The database %s has been dropped" -msgstr "" +msgstr "Baza podataka %s je obrisana" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:456 #, python-format msgid "User's timezone" -msgstr "" +msgstr "Korisnikov vremenski pojas" #. module: web #. openerp-web @@ -2457,7 +2465,7 @@ msgstr "Posebno:" #, python-format msgid "" "The old password you provided is incorrect, your password was not changed." -msgstr "" +msgstr "Trenutna lozinka nije točno upisana. Lozinka nije promijenjena." #. module: web #. openerp-web diff --git a/addons/web/i18n/pl.po b/addons/web/i18n/pl.po index 7015784bda8..5f5e26e60f7 100644 --- a/addons/web/i18n/pl.po +++ b/addons/web/i18n/pl.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-02-07 20:51+0000\n" -"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" +"PO-Revision-Date: 2012-12-09 20:29+0000\n" +"Last-Translator: Rafał Perczyński \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web #. openerp-web @@ -29,14 +29,14 @@ msgstr "Domyślny język:" #: code:addons/web/static/src/js/coresetup.js:593 #, python-format msgid "%d minutes ago" -msgstr "" +msgstr "%d minut temu" #. module: web #. openerp-web #: code:addons/web/static/src/js/coresetup.js:621 #, python-format msgid "Still loading...
Please be patient." -msgstr "" +msgstr "Trwa ładowanie...
Bądź cierpliwy." #. module: web #. openerp-web @@ -59,7 +59,7 @@ msgstr "równe lub mniejsze niż" #: code:addons/web/static/src/js/chrome.js:393 #, python-format msgid "Please enter your previous password" -msgstr "" +msgstr "Wpisz twoje poprzednie hasło" #. module: web #. openerp-web @@ -68,21 +68,21 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:282 #, python-format msgid "Master password:" -msgstr "Hasło madrzędne:" +msgstr "Hasło nadrzędne" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:274 #, python-format msgid "Change Master Password" -msgstr "" +msgstr "Zmień Hasło Główne" #. module: web #. openerp-web #: code:addons/web/static/src/js/chrome.js:491 #, python-format msgid "Do you really want to delete the database: %s ?" -msgstr "" +msgstr "Jesteś pewny że chcesz usunąć bazę danych: %s ?" #. module: web #. openerp-web @@ -96,14 +96,14 @@ msgstr "" #: code:addons/web/static/src/js/chrome.js:537 #, python-format msgid "Access Denied" -msgstr "" +msgstr "Odmowa dostępu" #. module: web #. openerp-web #: code:addons/web/static/src/js/coresetup.js:594 #, python-format msgid "about an hour ago" -msgstr "" +msgstr "około godziny temu" #. module: web #. openerp-web @@ -112,7 +112,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:216 #, python-format msgid "Backup Database" -msgstr "" +msgstr "Kopia zapasowa bazy danych" #. module: web #. openerp-web @@ -120,7 +120,7 @@ msgstr "" #: code:addons/web/static/src/js/dates.js:53 #, python-format msgid "'%s' is not a valid date" -msgstr "" +msgstr "'%s' nie jest poprawną datą" #. module: web #. openerp-web @@ -134,20 +134,20 @@ msgstr "Oto podgląd pliku, którego nie można zaimportować:" #: code:addons/web/static/src/js/coresetup.js:592 #, python-format msgid "about a minute ago" -msgstr "" +msgstr "około minuty temu" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1272 #, python-format msgid "File" -msgstr "" +msgstr "Plik" #. module: web #: code:addons/web/controllers/main.py:842 #, python-format msgid "You cannot leave any password empty." -msgstr "" +msgstr "hasło nie może być puste" #. module: web #. openerp-web @@ -235,7 +235,7 @@ msgstr "" #: code:addons/web/static/src/js/formats.js:282 #, python-format msgid "'%s' is not a correct time" -msgstr "" +msgstr "'%s' nie jest poprawnym czasem" #. module: web #. openerp-web @@ -270,21 +270,21 @@ msgstr "Niezdefiniowany" #: code:addons/web/static/src/js/view_form.js:4831 #, python-format msgid "File Upload" -msgstr "" +msgstr "Wyślij plik" #. module: web #. openerp-web #: code:addons/web/static/src/js/coresetup.js:598 #, python-format msgid "about a month ago" -msgstr "" +msgstr "około miesiąca temu" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:1575 #, python-format msgid "Custom Filters" -msgstr "" +msgstr "Własne filtry" #. module: web #. openerp-web @@ -305,14 +305,14 @@ msgstr "" #: code:addons/web/static/src/js/search.js:1555 #, python-format msgid "Custom Filter" -msgstr "" +msgstr "Własny filtr" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:159 #, python-format msgid "Duplicate Database" -msgstr "" +msgstr "Duplikuj bazę danych" #. module: web #. openerp-web @@ -349,14 +349,14 @@ msgstr "Pobierz" #: code:addons/web/static/src/js/formats.js:266 #, python-format msgid "'%s' is not a correct datetime" -msgstr "" +msgstr "'%s' nie jest poprawną datą" #. module: web #. openerp-web #: code:addons/web/static/src/js/view_list.js:415 #, python-format msgid "Group" -msgstr "" +msgstr "Grupa" #. module: web #. openerp-web @@ -383,7 +383,7 @@ msgstr "" #: code:addons/web/controllers/main.py:863 #, python-format msgid "Languages" -msgstr "" +msgstr "Języki" #. module: web #. openerp-web @@ -411,7 +411,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:4811 #, python-format msgid "File upload" -msgstr "" +msgstr "Wysyłanie pliku" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt.po b/addons/web/i18n/pt.po index 2f23aadfef2..c9cdd12c09b 100644 --- a/addons/web/i18n/pt.po +++ b/addons/web/i18n/pt.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-05 10:11+0000\n" -"Last-Translator: Rui Franco (multibase.pt) \n" +"PO-Revision-Date: 2012-12-07 11:24+0000\n" +"Last-Translator: Virgílio Oliveira \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" "X-Generator: Launchpad (build 16341)\n" #. module: web @@ -519,7 +519,7 @@ msgstr "Operador não suportado %s no domínio %s" #: code:addons/web/static/src/js/formats.js:242 #, python-format msgid "'%s' is not a correct float" -msgstr "" +msgstr "'%s' não é um número fracional correto" #. module: web #. openerp-web @@ -547,14 +547,14 @@ msgstr "Criar e editar" #: code:addons/web/static/src/js/pyeval.js:731 #, python-format msgid "Unknown nonliteral type " -msgstr "" +msgstr "Tipo não literal desconhecido " #. module: web #. openerp-web #: code:addons/web/static/src/js/view_form.js:2345 #, python-format msgid "Resource error" -msgstr "" +msgstr "Erro de recurso" #. module: web #. openerp-web @@ -596,7 +596,7 @@ msgstr "Para mais informações visite" #: code:addons/web/static/src/xml/base.xml:1834 #, python-format msgid "Add All Info..." -msgstr "" +msgstr "Adicionar toda a informação..." #. module: web #. openerp-web @@ -624,7 +624,7 @@ msgstr "Campos %s modelo" #: code:addons/web/static/src/js/view_list.js:890 #, python-format msgid "Setting 'id' attribute on existing record %s" -msgstr "" +msgstr "Atribuição do atributo 'id' no registo %s já existente" #. module: web #. openerp-web @@ -676,7 +676,7 @@ msgstr "" #: code:addons/web/static/src/js/view_form.js:1238 #, python-format msgid "Field '%s' specified in view could not be found." -msgstr "" +msgstr "Campo '%s' especificado na vista não foi encontrado." #. module: web #. openerp-web @@ -718,7 +718,7 @@ msgstr "Aplicar" #: code:addons/web/static/src/xml/base.xml:1361 #, python-format msgid "Save & New" -msgstr "" +msgstr "Gravar & criar" #. module: web #. openerp-web @@ -733,7 +733,7 @@ msgstr "Guardar como" #: code:addons/web/static/src/js/view_form.js:2316 #, python-format msgid "E-mail error" -msgstr "" +msgstr "Erro de e-mail" #. module: web #. openerp-web @@ -861,7 +861,7 @@ msgstr "Preferências" #: code:addons/web/static/src/js/view_form.js:434 #, python-format msgid "Wrong on change format: %s" -msgstr "" +msgstr "Erro na alteração de formato: %s" #. module: web #. openerp-web @@ -890,7 +890,7 @@ msgstr "Modificadores:" #: code:addons/web/static/src/xml/base.xml:605 #, python-format msgid "Delete this attachment" -msgstr "" +msgstr "Apagar este anexo" #. module: web #. openerp-web @@ -922,7 +922,7 @@ msgstr "Nome de utilizador" #: code:addons/web/static/src/js/chrome.js:481 #, python-format msgid "Duplicating database" -msgstr "" +msgstr "Duplicando a base de dados" #. module: web #. openerp-web @@ -936,7 +936,7 @@ msgstr "A senha foi alterada com êxito" #: code:addons/web/static/src/js/view_list_editable.js:781 #, python-format msgid "The form's data can not be discarded" -msgstr "" +msgstr "A informação no formulário não pode ser descartada" #. module: web #. openerp-web @@ -971,6 +971,10 @@ msgid "" "\n" "%s" msgstr "" +"Falha na avaliação local\n" +"%s\n" +"\n" +"%s" #. module: web #. openerp-web @@ -1012,7 +1016,7 @@ msgstr "Erro, a senha não foi alterada!" #: code:addons/web/static/src/js/view_form.js:4810 #, python-format msgid "The selected file exceed the maximum file size of %s." -msgstr "" +msgstr "O ficheiro selecionado excede o tamanho máximo de %s." #. module: web #. openerp-web @@ -1061,7 +1065,7 @@ msgstr "Cópia de segurança" #: code:addons/web/static/src/js/dates.js:80 #, python-format msgid "'%s' is not a valid time" -msgstr "" +msgstr "'%s' não é uma hora válida" #. module: web #. openerp-web @@ -1249,7 +1253,7 @@ msgstr "Agrupar por: %s" #: code:addons/web/static/src/js/view_form.js:151 #, python-format msgid "No data provided." -msgstr "" +msgstr "Ausência de dados" #. module: web #. openerp-web @@ -1278,7 +1282,7 @@ msgstr "Deve escolher pelo menos um registo." #: code:addons/web/static/src/js/coresetup.js:622 #, python-format msgid "Don't leave yet,
it's still loading..." -msgstr "" +msgstr "Não se vá embora já
porque ainda está carregando..." #. module: web #. openerp-web @@ -1292,7 +1296,7 @@ msgstr "Pesquisa inválida" #: code:addons/web/static/src/js/view_list.js:959 #, python-format msgid "Could not find id in dataset" -msgstr "" +msgstr "O ID não foi encontrado" #. module: web #. openerp-web @@ -1320,7 +1324,7 @@ msgstr "%(page)d/%(page_count)d" #: code:addons/web/static/src/js/chrome.js:397 #, python-format msgid "The confirmation does not match the password" -msgstr "" +msgstr "A confirmação não coincide com a senha" #. module: web #. openerp-web @@ -1411,7 +1415,7 @@ msgstr "é igual a" #: code:addons/web/static/src/js/views.js:1455 #, python-format msgid "Could not serialize XML" -msgstr "" +msgstr "Não foi possível serializar o XML" #. module: web #. openerp-web @@ -1432,7 +1436,7 @@ msgstr "Confirme a nova senha de administração:" #: code:addons/web/static/src/js/coresetup.js:625 #, python-format msgid "Maybe you should consider reloading the application by pressing F5..." -msgstr "" +msgstr "Talvez deva pensar em recarregar a aplicação carregando em F5..." #. module: web #. openerp-web @@ -1522,7 +1526,7 @@ msgstr "Não foi possível eliminar a base de dados!" #: code:addons/web/static/src/js/formats.js:227 #, python-format msgid "'%s' is not a correct integer" -msgstr "" +msgstr "'%s' não é um número inteiro correto" #. module: web #. openerp-web @@ -1543,7 +1547,7 @@ msgstr "Campo desconhecido %s no domínio %s" #: code:addons/web/static/src/js/views.js:1421 #, python-format msgid "Node [%s] is not a JSONified XML node" -msgstr "" +msgstr "O nó [%s] não é do tipo JSONified XML" #. module: web #. openerp-web @@ -1608,7 +1612,7 @@ msgstr "--- Não importar ---" #: code:addons/web/static/src/xml/base.xml:1654 #, python-format msgid "Import-Compatible Export" -msgstr "" +msgstr "Exportação compatível com importação" #. module: web #. openerp-web @@ -1622,7 +1626,7 @@ msgstr "%d anos atrás" #: code:addons/web/static/src/js/view_list.js:1019 #, python-format msgid "Unknown m2m command %s" -msgstr "" +msgstr "Comando m2m %s desconhecio" #. module: web #. openerp-web @@ -1652,7 +1656,7 @@ msgstr "Por favor introduza a sua nova senha" #: code:addons/web/static/src/js/views.js:1463 #, python-format msgid "Could not parse string to xml" -msgstr "" +msgstr "Não foi possível passar o texto para XML" #. module: web #. openerp-web @@ -1724,7 +1728,7 @@ msgstr "A importação falhou devido a:" #: code:addons/web/static/src/xml/base.xml:533 #, python-format msgid "JS Tests" -msgstr "" +msgstr "Testes JS" #. module: web #. openerp-web @@ -1930,7 +1934,7 @@ msgstr "Tipo:" #: code:addons/web/static/src/js/chrome.js:538 #, python-format msgid "Incorrect super-administrator password" -msgstr "" +msgstr "Senha de super-administrador incorreta" #. module: web #. openerp-web @@ -2043,7 +2047,7 @@ msgstr "'%s' não é uma data/hora correta" #: code:addons/web/static/src/js/views.js:1471 #, python-format msgid "Could not find a DOM Parser: %s" -msgstr "" +msgstr "Não foi encontrado o interpretador de DOM: %s" #. module: web #. openerp-web @@ -2403,7 +2407,7 @@ msgstr "Editar fluxo de trabalho" #: code:addons/web/static/src/js/views.js:1172 #, python-format msgid "Do you really want to delete this attachment ?" -msgstr "" +msgstr "Quer mesmo apagar este anexo?" #. module: web #. openerp-web @@ -2469,7 +2473,7 @@ msgstr "" #: code:addons/web/static/src/xml/base.xml:555 #, python-format msgid "Creation User:" -msgstr "" +msgstr "Utilizador de criação:" #. module: web #. openerp-web @@ -2535,7 +2539,7 @@ msgstr "Pesquisar %(field)s por: %(value)s" #: code:addons/web/static/src/xml/base.xml:1252 #, python-format msgid "Delete this file" -msgstr "" +msgstr "Apagar este ficheiro" #. module: web #. openerp-web diff --git a/addons/web/i18n/pt_BR.po b/addons/web/i18n/pt_BR.po index d444a608ce5..f8935f2490f 100644 --- a/addons/web/i18n/pt_BR.po +++ b/addons/web/i18n/pt_BR.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-03 19:25+0000\n" -"Last-Translator: Cristiano Korndörfer \n" +"PO-Revision-Date: 2012-12-07 21:03+0000\n" +"Last-Translator: Luiz Fernando M.França (Sig Informática) \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-04 05:59+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web #. openerp-web @@ -860,7 +860,7 @@ msgstr "Preferências" #: code:addons/web/static/src/js/view_form.js:434 #, python-format msgid "Wrong on change format: %s" -msgstr "" +msgstr "Formato invalido para on change: %s" #. module: web #. openerp-web diff --git a/addons/web/i18n/ro.po b/addons/web/i18n/ro.po index 4875d1c117e..5c971ac3e04 100644 --- a/addons/web/i18n/ro.po +++ b/addons/web/i18n/ro.po @@ -8,28 +8,28 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-03-15 08:11+0000\n" -"Last-Translator: angelescu \n" +"PO-Revision-Date: 2012-12-09 17:26+0000\n" +"Last-Translator: Fekete Mihai \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web #. openerp-web #: code:addons/web/static/src/xml/base.xml:133 #, python-format msgid "Default language:" -msgstr "Limba implicita:" +msgstr "Limba implicită:" #. module: web #. openerp-web #: code:addons/web/static/src/js/coresetup.js:593 #, python-format msgid "%d minutes ago" -msgstr "" +msgstr "acum %d minute" #. module: web #. openerp-web diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 671b076451c..04ff8b48923 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -952,12 +952,18 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. field = $target.closest('td').data('field'), $row = $target.closest('tr'), record_id = self.row_id($row); + + if ($target.attr('disabled')) { + return; + } + $target.attr('disabled', 'disabled'); // note: $.data converts data to number if it's composed only // of digits, nice when storing actual numbers, not nice when // storing strings composed only of digits. Force the action // name to be a string $(self).trigger('action', [field.toString(), record_id, function (id) { + $target.removeAttr('disabled'); return self.reload_record(self.records.get(id)); }]); }) diff --git a/addons/web/tests/qunitsuite/README.rst b/addons/web/tests/qunitsuite/README.rst new file mode 100644 index 00000000000..f1cfb96a508 --- /dev/null +++ b/addons/web/tests/qunitsuite/README.rst @@ -0,0 +1,116 @@ +QUnitSuite is a ``unittest.TestSuite`` able to run QUnit_ test suites +within the normal unittest process, through PhantomJS_. + +QUnitSuite is built upon `Ben Alman`_'s work of for the interfacing +between PhantomJS_ and the host/reporting code: the shims and the +PhantomJS_ configuration files are those of grunt_'s ``qunit`` task. + +Why +--- + +You're a Python shop or developer, you have tools and tests built +around unittest (or compatible with unittests) and your testing +pipeline is predicated upon that, you're doing web development of some +sort these days (as so many are) and you'd like to do some testing of +your web stuff. + +But you don't really want to redo your whole testing stack just for +that. + +QUnitSuite simply grafts QUnit_-based tests, run in PhantomJS_, in +your existing ``unittest``-based architecture. + +What +---- + +QUnitSuite currently provides a single object as part of its API: +``qunitsuite.QUnitSuite(testfile[, timeout])``. + +This produces a ``unittest.TestSuite`` suitable for all the usual +stuff (running it, and giving it to an other test suite which will run +it, that is). + +``testfile`` is the HTML file bootstrapping your qunit tests, as would +usually be accessed via a browser. It can be either a local +(``file:``) url, or an HTTP one. As long as a regular browser can open +and execute it, PhantomJS_ will manage. + +``timeout`` is a check passed to the PhantomJS_ runner: if the runner +produces no information for longer than ``timeout`` milliseconds, the +run will be cancelled and a test error will be generated. This +situation usually means either your ``testfile`` is not a qunit test +file, qunit is not running or qunit's runner was stopped (for an async +test) and never restarted. + +The default value is very conservative, most tests should run +correctly with lower timeouts (especially if all tests are +synchronous). + +How +--- + +``unittest``'s autodiscovery protocol does not directly work with test +suites (it looks for test cases). If you want autodiscovery to work +correctly, you will have to use the ``load_tests`` protocol:: + + # in a testing module + def load_tests(loader, tests, pattern): + tests.addTest(QUnitSuite(qunit_test_path.html)) + return tests + +outside of that specific case, you can use a ``QUnitSuite`` as a +standard ``TestSuite`` instance, running it, adding it to an other +suite or passing it to a ``TestRunner`` + +Complaints and Grievances +------------------------- + +Speed +~~~~~ + +Starting up a phantomjs instance and running a suite turns out to have +a rather high overhead, on the order of a second on this machine +(2.4GHz, 8GB RAM and an SSD). + +As each ``QUnitSuite`` currently creates its own phantomjs instance, +it's probably a good idea to create bigger suites (put many modules & +tests in the same QUnit html file, which doesn't preclude splitting +them across multiple js files). + +Hacks +~~~~~ + +QUnitSuite contains a pretty big hack which may or may not cause +problem depending on your exact setup: in case of case failure or +error, ``unittest.TestResult`` formats the error traceback provided +alongside the test object. This goes through Python's +traceback-formatting code and there are no hooks there. + +One could expect to use a custom ``TestResult``, but for test suites +the ``TestResult`` instance must be provided by the caller, so there +is no direct hook onto it. + +This leaves three options: + +* Create a custom ``TestResult`` class and require that it be the one + provided to the test suite. This requires altered work flows, + customization of the test runner and (as far as I know) isn't + available through Python 2.7's autodiscovery. It's the cleanest + option but completely fails on practicality. + +* Create a custom ``TestResult`` which directly alters the original + result's ``errors`` and ``failures`` attributes as they're part of + the testrunner API. This would work but may put custom results in a + strange state and break e.g. unittest2's ``@failfast``. + +* Lastly, monkeypatch the undocumented and implementation detail + ``_exc_info_to_string`` on the provided ``result``. This is the + route taken, at least for now. + +.. _QUnit: http://qunitjs.com/ + +.. _PhantomJS: http://phantomjs.org/ + +.. _Ben Alman: http://benalman.com/ + +.. _grunt: http://gruntjs.com/ diff --git a/addons/web/tests/qunitsuite/__init__.py b/addons/web/tests/qunitsuite/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/tests/qunitsuite/grunt/bootstrap.js b/addons/web/tests/qunitsuite/grunt/bootstrap.js new file mode 100644 index 00000000000..3d5e38912ca --- /dev/null +++ b/addons/web/tests/qunitsuite/grunt/bootstrap.js @@ -0,0 +1,95 @@ +/* + * grunt + * http://gruntjs.com/ + * + * Copyright (c) 2012 "Cowboy" Ben Alman + * Licensed under the MIT license. + * http://benalman.com/about/license/ + */ + +/*global phantom:true*/ + +'use strict'; + +var fs = require('fs'); + +// The page .html file to load. +var url = phantom.args[0]; +// Extra, optionally overridable stuff. +var options = JSON.parse(phantom.args[1] || {}); + +// Default options. +if (!options.timeout) { options.timeout = 5000; } + +// Keep track of the last time a client message was sent. +var last = new Date(); + +// Messages are sent to the parent by appending them to the tempfile. +var sendMessage = function(arg) { + var args = Array.isArray(arg) ? arg : [].slice.call(arguments); + last = new Date(); + console.log(JSON.stringify(args)); +}; + +// This allows grunt to abort if the PhantomJS version isn't adequate. +sendMessage('private', 'version', phantom.version); + +// Abort if the page doesn't send any messages for a while. +setInterval(function() { + if (new Date() - last > options.timeout) { + sendMessage('fail.timeout'); + phantom.exit(); + } +}, 100); + +// Create a new page. +var page = require('webpage').create(); + +// The client page must send its messages via alert(jsonstring). +page.onAlert = function(args) { + sendMessage(JSON.parse(args)); +}; + +// Keep track if the client-side helper script already has been injected. +var injected; +page.onUrlChanged = function(newUrl) { + injected = false; + sendMessage('onUrlChanged', newUrl); +}; + +// Relay console logging messages. +page.onConsoleMessage = function(message) { + sendMessage('console', message); +}; + +// For debugging. +page.onResourceRequested = function(request) { + sendMessage('onResourceRequested', request.url); +}; + +page.onResourceReceived = function(request) { + if (request.stage === 'end') { + sendMessage('onResourceReceived', request.url); + } +}; + +// Run when the page has finished loading. +page.onLoadFinished = function(status) { + // The window has loaded. + sendMessage('onLoadFinished', status); + if (status === 'success') { + if (options.inject && !injected) { + // Inject client-side helper script, but only if it has not yet been + // injected. + sendMessage('inject', options.inject); + page.injectJs(options.inject); + } + } else { + // File loading failure. + sendMessage('fail.load', url); + phantom.exit(); + } +}; + +// Actually load url. +page.open(url); diff --git a/addons/web/tests/qunitsuite/grunt/license b/addons/web/tests/qunitsuite/grunt/license new file mode 100644 index 00000000000..90c336c39d3 --- /dev/null +++ b/addons/web/tests/qunitsuite/grunt/license @@ -0,0 +1,22 @@ +Copyright (c) 2012 "Cowboy" Ben Alman + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/addons/web/tests/qunitsuite/grunt/phantomjs.json b/addons/web/tests/qunitsuite/grunt/phantomjs.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/addons/web/tests/qunitsuite/grunt/phantomjs.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/addons/web/tests/qunitsuite/grunt/qunit-phantomjs-bridge.js b/addons/web/tests/qunitsuite/grunt/qunit-phantomjs-bridge.js new file mode 100644 index 00000000000..032fe8a3aa0 --- /dev/null +++ b/addons/web/tests/qunitsuite/grunt/qunit-phantomjs-bridge.js @@ -0,0 +1,88 @@ +/* + * grunt + * http://gruntjs.com/ + * + * Copyright (c) 2012 "Cowboy" Ben Alman + * Licensed under the MIT license. + * http://benalman.com/about/license/ + */ + +/*global QUnit:true, alert:true*/ + +'use strict'; + +// Don't re-order tests. +QUnit.config.reorder = false; +// Run tests serially, not in parallel. +QUnit.config.autorun = false; + +// Send messages to the parent PhantomJS process via alert! Good times!! +function sendMessage() { + var args = [].slice.call(arguments); + alert(JSON.stringify(args)); +} + +// These methods connect QUnit to PhantomJS. +QUnit.log(function(obj) { + // What is this I don’t even + if (obj.message === '[object Object], undefined:undefined') { return; } + // Parse some stuff before sending it. + var actual = QUnit.jsDump.parse(obj.actual); + var expected = QUnit.jsDump.parse(obj.expected); + // Send it. + sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source); +}); + +QUnit.testStart(function(obj) { + sendMessage('qunit.testStart', obj.name); +}); + +QUnit.testDone(function(obj) { + sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total); +}); + +QUnit.moduleStart(function(obj) { + sendMessage('qunit.moduleStart', obj.name); +}); + +QUnit.moduleDone(function(obj) { + sendMessage('qunit.moduleDone', obj.name, obj.failed, obj.passed, obj.total); +}); + +QUnit.begin(function() { + sendMessage('qunit.begin'); +}); + +QUnit.done(function(obj) { + sendMessage('qunit.done', obj.failed, obj.passed, obj.total, obj.runtime); +}); + +// PhantomJS (up to and including 1.7) uses a version of webkit so old +// it does not have Function.prototype.bind: +// http://code.google.com/p/phantomjs/issues/detail?id=522 + +// Use moz polyfill: +// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; +} diff --git a/addons/web/tests/qunitsuite/suite.py b/addons/web/tests/qunitsuite/suite.py new file mode 100644 index 00000000000..7f0a0cb4976 --- /dev/null +++ b/addons/web/tests/qunitsuite/suite.py @@ -0,0 +1,131 @@ +import json +import subprocess +import unittest +import os +import time + +ROOT = os.path.join(os.path.dirname(__file__), 'grunt') + +__all__ = ['QUnitSuite'] + +def _exc_info_to_string(err, test): + return err + +class QUnitTest(unittest.TestCase): + def __init__(self, module, name): + self.module = module + self.name = name + self.failed = False + def shortDescription(self): + return None + def __repr__(self): + return '' % (self.module, self.name) + def __str__(self): + return '%s: %s' % (self.module, self.name) + +class QUnitSuite(unittest.TestSuite): + def __init__(self, qunitfile, timeout=5000): + self.testfile = qunitfile + self.timeout = timeout + self._module = None + self._test = None + + def __iter__(self): + return iter([self]) + + def run(self, result): + try: + subprocess.call(['phantomjs', '-v'], + stdout=open(os.devnull, 'w'), + stderr=subprocess.STDOUT) + except OSError: + test = QUnitTest('phantomjs', 'javascript tests') + result.startTest(test) + result.startTest(test) + result.addSkip(test , "phantomjs command not found") + result.stopTest(test) + return + + result._exc_info_to_string = _exc_info_to_string + try: + self._run(result) + finally: + del result._exc_info_to_string + + def _run(self, result): + phantom = subprocess.Popen([ + 'phantomjs', + '--config=%s' % os.path.join(ROOT, 'phantomjs.json'), + os.path.join(ROOT, 'bootstrap.js'), self.testfile, + json.dumps({ + 'timeout': self.timeout, + 'inject': os.path.join(ROOT, 'qunit-phantomjs-bridge.js') + }) + ], stdout=subprocess.PIPE) + + try: + while True: + line = phantom.stdout.readline() + if line: + if self.process(line, result): + break + else: + time.sleep(0.1) + finally: + # If the phantomjs process hasn't quit, kill it + if phantom.poll() is None: + phantom.terminate() + + def process(self, line, result): + args = json.loads(line) + event_name = args[0] + + if event_name == 'qunit.done': + return True + elif event_name == 'fail.load': + self.add_error(result, "PhantomJS unable to load %s" % args[1]) + return True + elif event_name == 'fail.timeout': + self.add_error(result, "PhantomJS timed out, possibly due to a" + " missing QUnit start() call") + return True + + elif event_name == 'qunit.moduleStart': + self._module = args[1].encode('utf-8') + elif event_name == 'qunit.moduleStop': + self._test = None + self._module = None + elif event_name == 'qunit.testStart': + self._test = QUnitTest(self._module, args[1].encode('utf-8')) + result.startTest(self._test) + elif event_name == 'qunit.testDone': + if not self._test.failed: + result.addSuccess(self._test) + result.stopTest(self._test) + self._test = None + elif event_name == 'qunit.log': + if args[1]: + return False + + self._test.failed = True + result.addFailure( + self._test, self.failure_to_str(*args[2:])) + + return False + + def add_error(self, result, s): + test = QUnitTest('phantomjs', 'startup') + result.startTest(test) + result.addError(test, s) + result.stopTest(test) + + def failure_to_str(self, actual, expected, message, source): + if message or actual == expected: + formatted = str(message or '') + else: + formatted = "%s != %s" % (actual, expected) + + if source: + formatted += '\n\n' + source + + return formatted diff --git a/addons/web/tests/test_js.py b/addons/web/tests/test_js.py index a126ce4b2f3..b37c082739f 100644 --- a/addons/web/tests/test_js.py +++ b/addons/web/tests/test_js.py @@ -10,6 +10,12 @@ class WebSuite(QUnitSuite): '/web/tests', 'mod=*&source={db}&supadmin={supadmin}&password={password}'.format( db=tools.config['db_name'], + # al: i dont understand why both are needed, db_password is the + # password for postgres and should not appear here of that i'm + # sure + # + # But runbot provides it with this wrong key so i let it here + # until it's fixed supadmin=tools.config['db_password'] or 'admin', password=tools.config['admin_passwd'] or 'admin'), '' diff --git a/addons/web_calendar/i18n/hr.po b/addons/web_calendar/i18n/hr.po index d50da7b88be..b3964237249 100644 --- a/addons/web_calendar/i18n/hr.po +++ b/addons/web_calendar/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-11-24 18:16+0000\n" +"PO-Revision-Date: 2012-12-09 18:06+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_calendar #. openerp-web @@ -43,7 +43,7 @@ msgstr "Snimi" #: code:addons/web_calendar/static/src/js/calendar.js:99 #, python-format msgid "Calendar view has a 'date_delay' type != float" -msgstr "" +msgstr "U pogledu tipa kalendar polje 'date_delay' tip != float" #. module: web_calendar #. openerp-web @@ -215,6 +215,7 @@ msgstr "Kalendar" #, python-format msgid "Calendar view has not defined 'date_start' attribute." msgstr "" +"U pogledu tipa kalendar obavezno je polje 'date_start' - početno vrijeme." #~ msgid "Navigator" #~ msgstr "Navigator" diff --git a/addons/web_calendar/i18n/pt.po b/addons/web_calendar/i18n/pt.po index 6f593051230..b233679470e 100644 --- a/addons/web_calendar/i18n/pt.po +++ b/addons/web_calendar/i18n/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-04 12:40+0000\n" -"Last-Translator: Andrei Talpa (multibase.pt) \n" +"PO-Revision-Date: 2012-12-07 10:00+0000\n" +"Last-Translator: Rui Franco (multibase.pt) \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_calendar #. openerp-web @@ -64,7 +64,7 @@ msgstr "Semana" #: code:addons/web_calendar/static/src/js/calendar.js:161 #, python-format msgid "Full day" -msgstr "" +msgstr "Dia inteiro" #. module: web_calendar #. openerp-web @@ -79,7 +79,7 @@ msgstr "Descrição" #: code:addons/web_calendar/static/src/js/calendar.js:158 #, python-format msgid "Event will be deleted permanently, are you sure?" -msgstr "" +msgstr "O evento será eliminado. Confirma?" #. module: web_calendar #. openerp-web @@ -136,7 +136,7 @@ msgstr "" #: code:addons/web_calendar/static/src/js/calendar.js:80 #, python-format msgid "Filter" -msgstr "" +msgstr "Filtro" #. module: web_calendar #. openerp-web @@ -179,7 +179,7 @@ msgstr "Mês" #: code:addons/web_calendar/static/src/js/calendar.js:166 #, python-format msgid "Disabled" -msgstr "" +msgstr "Inativo" #. module: web_calendar #. openerp-web diff --git a/addons/web_diagram/i18n/it.po b/addons/web_diagram/i18n/it.po index f08383bdeb5..4ba3419fa05 100644 --- a/addons/web_diagram/i18n/it.po +++ b/addons/web_diagram/i18n/it.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 01:23+0000\n" -"PO-Revision-Date: 2012-02-16 21:55+0000\n" -"Last-Translator: Davide Corio - agilebg.com \n" +"PO-Revision-Date: 2012-12-09 22:40+0000\n" +"Last-Translator: Sergio Corato \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-25 06:41+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_diagram #. openerp-web @@ -35,6 +35,10 @@ msgid "" "\n" "Are you sure ?" msgstr "" +"La cancellazione di questo nodo è irreversibile. \n" +"Saranno cancellate anche tutte le transizioni ad esso correlate.\n" +"\n" +"Sei sicuro ?" #. module: web_diagram #. openerp-web @@ -71,7 +75,7 @@ msgstr "Attività" #: code:addons/web_diagram/static/src/js/diagram.js:422 #, python-format msgid "%d / %d" -msgstr "" +msgstr "%d / %d" #. module: web_diagram #. openerp-web @@ -86,7 +90,7 @@ msgstr "Crea:" #: code:addons/web_diagram/static/src/js/diagram.js:187 #, python-format msgid "Are you sure?" -msgstr "" +msgstr "Sei sicuro?" #. module: web_diagram #. openerp-web @@ -97,3 +101,6 @@ msgid "" "\n" "Are you sure ?" msgstr "" +"La cancellazione di questa transizione è irreversibile.\n" +"\n" +"Sei sicuro?" diff --git a/addons/web_diagram/i18n/pt.po b/addons/web_diagram/i18n/pt.po index 419465502fb..7efdfd009e0 100644 --- a/addons/web_diagram/i18n/pt.po +++ b/addons/web_diagram/i18n/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-24 01:23+0000\n" -"PO-Revision-Date: 2012-06-05 19:47+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2012-12-07 09:55+0000\n" +"Last-Translator: Rui Franco (multibase.pt) \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-25 06:41+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_diagram #. openerp-web @@ -75,7 +75,7 @@ msgstr "Atividade" #: code:addons/web_diagram/static/src/js/diagram.js:422 #, python-format msgid "%d / %d" -msgstr "" +msgstr "%d / %d" #. module: web_diagram #. openerp-web diff --git a/addons/web_graph/i18n/it.po b/addons/web_graph/i18n/it.po index 3217b790c41..77a0fb7d83e 100644 --- a/addons/web_graph/i18n/it.po +++ b/addons/web_graph/i18n/it.po @@ -8,28 +8,28 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-02-16 21:56+0000\n" -"Last-Translator: Davide Corio - agilebg.com \n" +"PO-Revision-Date: 2012-12-09 23:09+0000\n" +"Last-Translator: Sergio Corato \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:12 #, python-format msgid "Bars" -msgstr "" +msgstr "Barre" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:33 #, python-format msgid "Show Data" -msgstr "" +msgstr "Visualizza Dati" #. module: web_graph #. openerp-web @@ -43,95 +43,95 @@ msgstr "Grafico" #: code:addons/web_graph/static/src/xml/web_graph.xml:25 #, python-format msgid "Inside" -msgstr "" +msgstr "Interno" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "í" -msgstr "" +msgstr "í" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:11 #, python-format msgid "Pie" -msgstr "" +msgstr "Torta" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:28 #, python-format msgid "Actions" -msgstr "" +msgstr "Azioni" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:7 #, python-format msgid "Graph Mode" -msgstr "" +msgstr "Modalità Grafico" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:18 #, python-format msgid "Radar" -msgstr "" +msgstr "Rete" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:34 #, python-format msgid "Download as PNG" -msgstr "" +msgstr "Download come PNG" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:26 #, python-format msgid "Top" -msgstr "" +msgstr "In alto" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:24 #, python-format msgid "Hidden" -msgstr "" +msgstr "Nascosto" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "Graph Options" -msgstr "" +msgstr "Opzioni Grafico" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:14 #, python-format msgid "Lines" -msgstr "" +msgstr "Righe" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:20 #, python-format msgid "Legend" -msgstr "" +msgstr "Legenda" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:32 #, python-format msgid "Switch Axis" -msgstr "" +msgstr "Inverti Asse" #. module: web_graph #. openerp-web #: code:addons/web_graph/static/src/xml/web_graph.xml:15 #, python-format msgid "Areas" -msgstr "" +msgstr "Aree" diff --git a/addons/web_graph/i18n/zh_CN.po b/addons/web_graph/i18n/zh_CN.po index 92f3ba7cf22..5e34ec779bd 100644 --- a/addons/web_graph/i18n/zh_CN.po +++ b/addons/web_graph/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-11-29 19:33+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" +"PO-Revision-Date: 2012-12-07 15:34+0000\n" +"Last-Translator: ccdos \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_graph #. openerp-web @@ -50,7 +50,7 @@ msgstr "内部" #: code:addons/web_graph/static/src/xml/web_graph.xml:3 #, python-format msgid "í" -msgstr "" +msgstr "í" #. module: web_graph #. openerp-web diff --git a/addons/web_graph/static/src/css/graph.css b/addons/web_graph/static/src/css/graph.css index f3e69c4687a..a9fff591e39 100644 --- a/addons/web_graph/static/src/css/graph.css +++ b/addons/web_graph/static/src/css/graph.css @@ -42,7 +42,7 @@ position: relative; display: block; padding: 2px 4px 2px 20px; - line-height: 14px; + line-height: 12px; color: #4c4c4c; text-decoration: none; } @@ -59,10 +59,12 @@ .openerp .open .graph-dropdown { display: block; } -.graph-menu { - padding: 3px; + +.openerp .graph-menu { + padding: 0; + margin: 0; } -.graph-menu .active:before { +.openerp .graph-menu .active:before { content: "W"; font-family: "entypoRegular" !important; font-size: 24px; @@ -72,7 +74,7 @@ left: 4px; top: -2px; } -.graph-menu li { - padding: 2px; - margin-left: 10px; +.openerp .graph-menu li { + padding: 0; + list-style-type: none; } diff --git a/addons/web_kanban/i18n/hr.po b/addons/web_kanban/i18n/hr.po index 5087e4db8c7..8d800e989b0 100644 --- a/addons/web_kanban/i18n/hr.po +++ b/addons/web_kanban/i18n/hr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-11-24 18:09+0000\n" +"PO-Revision-Date: 2012-12-09 17:58+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_kanban #. openerp-web @@ -29,7 +29,7 @@ msgstr "Uredi stupac" #: code:addons/web_kanban/static/src/js/kanban.js:413 #, python-format msgid "An error has occured while moving the record to this group." -msgstr "" +msgstr "Greška kod promjene grupe" #. module: web_kanban #. openerp-web @@ -150,7 +150,7 @@ msgstr "ili" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:51 #, python-format msgid "99+" -msgstr "" +msgstr "99+" #. module: web_kanban #. openerp-web diff --git a/addons/web_kanban/i18n/it.po b/addons/web_kanban/i18n/it.po index baa19225b27..5ec66ff2641 100644 --- a/addons/web_kanban/i18n/it.po +++ b/addons/web_kanban/i18n/it.po @@ -8,21 +8,21 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-02-16 21:57+0000\n" -"Last-Translator: Davide Corio - agilebg.com \n" +"PO-Revision-Date: 2012-12-09 22:52+0000\n" +"Last-Translator: Sergio Corato \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:698 #, python-format msgid "Edit column" -msgstr "" +msgstr "Modifica colonna" #. module: web_kanban #. openerp-web @@ -30,6 +30,7 @@ msgstr "" #, python-format msgid "An error has occured while moving the record to this group." msgstr "" +"E' avvenuto un errore durante lo spostamento del record a questo gruppo." #. module: web_kanban #. openerp-web @@ -50,35 +51,35 @@ msgstr "Non definito" #: code:addons/web_kanban/static/src/js/kanban.js:717 #, python-format msgid "Are you sure to remove this column ?" -msgstr "" +msgstr "Sei sicuro di rimuovere questa colonna ?" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:42 #, python-format msgid "Edit" -msgstr "" +msgstr "Modifica" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:188 #, python-format msgid "Add column" -msgstr "" +msgstr "Aggiungi colonna" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/js/kanban.js:1093 #, python-format msgid "Create: " -msgstr "" +msgstr "Crea: " #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:24 #, python-format msgid "Add a new column" -msgstr "" +msgstr "Aggiungi una nuova colonna" #. module: web_kanban #. openerp-web @@ -86,21 +87,21 @@ msgstr "" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:40 #, python-format msgid "Fold" -msgstr "" +msgstr "Arrotola" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:90 #, python-format msgid "Add" -msgstr "" +msgstr "Aggiungi" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:35 #, python-format msgid "Quick create" -msgstr "" +msgstr "Creazione rapida" #. module: web_kanban #. openerp-web @@ -114,7 +115,7 @@ msgstr "Sicuro di voler eliminare questo record?" #: code:addons/web_kanban/static/src/js/kanban.js:688 #, python-format msgid "Unfold" -msgstr "" +msgstr "Allarga" #. module: web_kanban #. openerp-web @@ -128,7 +129,7 @@ msgstr "Mostra altro... (" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:91 #, python-format msgid "Cancel" -msgstr "" +msgstr "Annulla" #. module: web_kanban #. openerp-web @@ -143,21 +144,21 @@ msgstr "rimanenti)" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:90 #, python-format msgid "or" -msgstr "" +msgstr "o" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:51 #, python-format msgid "99+" -msgstr "" +msgstr "99+" #. module: web_kanban #. openerp-web #: code:addons/web_kanban/static/src/xml/web_kanban.xml:43 #, python-format msgid "Delete" -msgstr "" +msgstr "Elimina" #~ msgid "Create" #~ msgstr "Crea" diff --git a/addons/web_kanban/i18n/pt.po b/addons/web_kanban/i18n/pt.po index be4550f243a..0bd5bc83ef5 100644 --- a/addons/web_kanban/i18n/pt.po +++ b/addons/web_kanban/i18n/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-04 12:44+0000\n" +"PO-Revision-Date: 2012-12-07 09:57+0000\n" "Last-Translator: Andrei Talpa (multibase.pt) \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_kanban #. openerp-web @@ -29,7 +29,7 @@ msgstr "Editar coluna" #: code:addons/web_kanban/static/src/js/kanban.js:413 #, python-format msgid "An error has occured while moving the record to this group." -msgstr "" +msgstr "Ocorreu um erro ao mover o registo para este grupo." #. module: web_kanban #. openerp-web @@ -86,7 +86,7 @@ msgstr "Adicionar uma nova coluna" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:40 #, python-format msgid "Fold" -msgstr "" +msgstr "Dobrar" #. module: web_kanban #. openerp-web @@ -100,7 +100,7 @@ msgstr "Adicionar" #: code:addons/web_kanban/static/src/xml/web_kanban.xml:35 #, python-format msgid "Quick create" -msgstr "" +msgstr "Criação rápida" #. module: web_kanban #. openerp-web @@ -114,7 +114,7 @@ msgstr "Tem certeza que quer remover este registo?" #: code:addons/web_kanban/static/src/js/kanban.js:688 #, python-format msgid "Unfold" -msgstr "" +msgstr "Desdobrar" #. module: web_kanban #. openerp-web diff --git a/addons/web_view_editor/i18n/hr.po b/addons/web_view_editor/i18n/hr.po index 84d39cf0f5c..d29e621c55a 100644 --- a/addons/web_view_editor/i18n/hr.po +++ b/addons/web_view_editor/i18n/hr.po @@ -8,21 +8,21 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-11-24 18:01+0000\n" +"PO-Revision-Date: 2012-12-09 17:57+0000\n" "Last-Translator: Goran Kliska \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n" -"X-Generator: Launchpad (build 16319)\n" +"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_view_editor #. openerp-web #: code:addons/web_view_editor/static/src/js/view_editor.js:164 #, python-format msgid "The following fields are invalid :" -msgstr "" +msgstr "Popis neispravnih polja:" #. module: web_view_editor #. openerp-web @@ -36,7 +36,7 @@ msgstr "Kreiraj" #: code:addons/web_view_editor/static/src/js/view_editor.js:986 #, python-format msgid "New Field" -msgstr "" +msgstr "Novo polje" #. module: web_view_editor #. openerp-web @@ -71,7 +71,7 @@ msgstr "Snimi" #: code:addons/web_view_editor/static/src/js/view_editor.js:393 #, python-format msgid "Select an element" -msgstr "" +msgstr "Odaberite element" #. module: web_view_editor #. openerp-web @@ -86,7 +86,7 @@ msgstr "Ažuriraj" #: code:addons/web_view_editor/static/src/js/view_editor.js:263 #, python-format msgid "Please select view in list :" -msgstr "" +msgstr "Odaberite pogled iz popisa:" #. module: web_view_editor #. openerp-web @@ -150,7 +150,7 @@ msgstr "Da li zaista želite obrisati ovaj čvor?" #: code:addons/web_view_editor/static/src/js/view_editor.js:390 #, python-format msgid "Can't Update View" -msgstr "" +msgstr "Ažuriranje pogleda nije moguće" #. module: web_view_editor #. openerp-web diff --git a/addons/web_view_editor/i18n/pt.po b/addons/web_view_editor/i18n/pt.po index 64d597fea5c..9dd7a23756e 100644 --- a/addons/web_view_editor/i18n/pt.po +++ b/addons/web_view_editor/i18n/pt.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-11-30 18:13+0000\n" -"PO-Revision-Date: 2012-12-04 12:42+0000\n" -"Last-Translator: Andrei Talpa (multibase.pt) \n" +"PO-Revision-Date: 2012-12-07 09:56+0000\n" +"Last-Translator: Rui Franco (multibase.pt) \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n" -"X-Generator: Launchpad (build 16335)\n" +"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n" +"X-Generator: Launchpad (build 16341)\n" #. module: web_view_editor #. openerp-web @@ -71,7 +71,7 @@ msgstr "Guardar" #: code:addons/web_view_editor/static/src/js/view_editor.js:393 #, python-format msgid "Select an element" -msgstr "" +msgstr "Selecione um elemento" #. module: web_view_editor #. openerp-web @@ -86,7 +86,7 @@ msgstr "Atualizar" #: code:addons/web_view_editor/static/src/js/view_editor.js:263 #, python-format msgid "Please select view in list :" -msgstr "" +msgstr "Por favor, selecione uma vista da lista" #. module: web_view_editor #. openerp-web @@ -150,7 +150,7 @@ msgstr "Quer mesmo remover este nó?" #: code:addons/web_view_editor/static/src/js/view_editor.js:390 #, python-format msgid "Can't Update View" -msgstr "" +msgstr "Não é possível atualizar a vista" #. module: web_view_editor #. openerp-web