From 11a5c8bcbd8939307c5fbf486263970926a929f8 Mon Sep 17 00:00:00 2001
From: Sushant
Date: Fri, 4 Oct 2019 17:29:04 +0530
Subject: [PATCH] Susahnt | MPOC-631 Training: OpenERP - Duplicate Currency is
Shown
---
auth_signup/.___init__.py | Bin 0 -> 222 bytes
auth_signup/.___openerp__.py | Bin 0 -> 222 bytes
auth_signup/._auth_signup_data.xml | Bin 0 -> 222 bytes
auth_signup/._controllers | Bin 0 -> 222 bytes
auth_signup/._i18n | Bin 0 -> 222 bytes
auth_signup/._res_config.py | Bin 0 -> 222 bytes
auth_signup/._res_config.xml | Bin 0 -> 222 bytes
auth_signup/._res_users.py | Bin 0 -> 222 bytes
auth_signup/._res_users_view.xml | Bin 0 -> 222 bytes
auth_signup/._static | Bin 0 -> 222 bytes
auth_signup/__init__.py | 24 +
auth_signup/__openerp__.py | 45 +
auth_signup/auth_signup_data.xml | 71 +
auth_signup/controllers/.___init__.py | Bin 0 -> 222 bytes
auth_signup/controllers/._main.py | Bin 0 -> 222 bytes
auth_signup/controllers/__init__.py | 3 +
auth_signup/controllers/main.py | 84 +
auth_signup/i18n/._ar.po | Bin 0 -> 222 bytes
auth_signup/i18n/._auth_signup.pot | Bin 0 -> 222 bytes
auth_signup/i18n/._de.po | Bin 0 -> 222 bytes
auth_signup/i18n/._en_GB.po | Bin 0 -> 222 bytes
auth_signup/i18n/._es.po | Bin 0 -> 222 bytes
auth_signup/i18n/._fr.po | Bin 0 -> 222 bytes
auth_signup/i18n/._hr.po | Bin 0 -> 222 bytes
auth_signup/i18n/._hu.po | Bin 0 -> 222 bytes
auth_signup/i18n/._it.po | Bin 0 -> 222 bytes
auth_signup/i18n/._mk.po | Bin 0 -> 222 bytes
auth_signup/i18n/._mn.po | Bin 0 -> 222 bytes
auth_signup/i18n/._nb.po | Bin 0 -> 222 bytes
auth_signup/i18n/._nl.po | Bin 0 -> 222 bytes
auth_signup/i18n/._pl.po | Bin 0 -> 222 bytes
auth_signup/i18n/._pt.po | Bin 0 -> 222 bytes
auth_signup/i18n/._pt_BR.po | Bin 0 -> 222 bytes
auth_signup/i18n/._ro.po | Bin 0 -> 222 bytes
auth_signup/i18n/._ru.po | Bin 0 -> 222 bytes
auth_signup/i18n/._sl.po | Bin 0 -> 222 bytes
auth_signup/i18n/._tr.po | Bin 0 -> 222 bytes
auth_signup/i18n/._zh_CN.po | Bin 0 -> 222 bytes
auth_signup/i18n/ar.po | 277 +
auth_signup/i18n/auth_signup.pot | 272 +
auth_signup/i18n/de.po | 287 +
auth_signup/i18n/en_GB.po | 277 +
auth_signup/i18n/es.po | 297 +
auth_signup/i18n/fr.po | 297 +
auth_signup/i18n/hr.po | 277 +
auth_signup/i18n/hu.po | 277 +
auth_signup/i18n/it.po | 292 +
auth_signup/i18n/mk.po | 292 +
auth_signup/i18n/mn.po | 289 +
auth_signup/i18n/nb.po | 277 +
auth_signup/i18n/nl.po | 294 +
auth_signup/i18n/pl.po | 278 +
auth_signup/i18n/pt.po | 277 +
auth_signup/i18n/pt_BR.po | 290 +
auth_signup/i18n/ro.po | 293 +
auth_signup/i18n/ru.po | 279 +
auth_signup/i18n/sl.po | 277 +
auth_signup/i18n/tr.po | 277 +
auth_signup/i18n/zh_CN.po | 277 +
auth_signup/res_config.py | 52 +
auth_signup/res_config.xml | 30 +
auth_signup/res_users.py | 289 +
auth_signup/res_users_view.xml | 32 +
auth_signup/static/._src | Bin 0 -> 222 bytes
auth_signup/static/src/._js | Bin 0 -> 222 bytes
auth_signup/static/src/._xml | Bin 0 -> 222 bytes
auth_signup/static/src/js/._auth_signup.js | Bin 0 -> 222 bytes
auth_signup/static/src/js/auth_signup.js | 175 +
auth_signup/static/src/xml/._auth_signup.xml | Bin 0 -> 222 bytes
auth_signup/static/src/xml/auth_signup.xml | 36 +
web/.___init__.py | Bin 0 -> 222 bytes
web/.___openerp__.py | Bin 0 -> 222 bytes
web/._cli | Bin 0 -> 222 bytes
web/._controllers | Bin 0 -> 222 bytes
web/._doc | Bin 0 -> 222 bytes
web/._http.py | Bin 0 -> 222 bytes
web/._i18n | Bin 0 -> 222 bytes
web/._session.py | Bin 0 -> 222 bytes
web/._static | Bin 0 -> 222 bytes
web/._tests | Bin 0 -> 222 bytes
web/__init__.py | 5 +
web/__openerp__.py | 89 +
web/cli/.___init__.py | Bin 0 -> 222 bytes
web/cli/._test_js.py | Bin 0 -> 222 bytes
web/cli/__init__.py | 1 +
web/cli/test_js.py | 35 +
web/controllers/.___init__.py | Bin 0 -> 222 bytes
web/controllers/._main.py | Bin 0 -> 222 bytes
web/controllers/._testing.py | Bin 0 -> 222 bytes
web/controllers/__init__.py | 2 +
web/controllers/main.py | 1710 ++
web/controllers/testing.py | 165 +
web/doc/._Makefile | Bin 0 -> 222 bytes
web/doc/.__static | Bin 0 -> 222 bytes
web/doc/.__templates | Bin 0 -> 222 bytes
web/doc/.__themes | Bin 0 -> 222 bytes
web/doc/._addon-structure.txt | Bin 0 -> 222 bytes
web/doc/._async.rst | Bin 0 -> 222 bytes
web/doc/._changelog-7.0.rst | Bin 0 -> 222 bytes
web/doc/._client_action.rst | Bin 0 -> 222 bytes
web/doc/._conf.py | Bin 0 -> 222 bytes
web/doc/._form_view.rst | Bin 0 -> 222 bytes
web/doc/._guidelines.rst | Bin 0 -> 222 bytes
web/doc/._images | Bin 0 -> 222 bytes
web/doc/._index.rst | Bin 0 -> 222 bytes
web/doc/._list_view.rst | Bin 0 -> 222 bytes
web/doc/._make.bat | Bin 0 -> 222 bytes
web/doc/._module | Bin 0 -> 222 bytes
web/doc/._module.rst | Bin 0 -> 222 bytes
web/doc/._qweb.rst | Bin 0 -> 222 bytes
web/doc/._rpc.rst | Bin 0 -> 222 bytes
web/doc/._search_view.rst | Bin 0 -> 222 bytes
web/doc/._test-report.txt | Bin 0 -> 222 bytes
web/doc/._testing.rst | Bin 0 -> 222 bytes
web/doc/._widget.rst | Bin 0 -> 222 bytes
web/doc/Makefile | 154 +
web/doc/_static/._openerp.png | Bin 0 -> 222 bytes
web/doc/_static/openerp.png | Bin 0 -> 3981 bytes
web/doc/_templates/._sidebarintro.html | Bin 0 -> 222 bytes
web/doc/_templates/._sidebarlogo.html | Bin 0 -> 222 bytes
web/doc/_templates/sidebarintro.html | 16 +
web/doc/_templates/sidebarlogo.html | 3 +
web/doc/_themes/._LICENSE | Bin 0 -> 222 bytes
web/doc/_themes/._README | Bin 0 -> 222 bytes
web/doc/_themes/._flask | Bin 0 -> 222 bytes
web/doc/_themes/._flask_small | Bin 0 -> 222 bytes
web/doc/_themes/._flask_theme_support.py | Bin 0 -> 222 bytes
web/doc/_themes/LICENSE | 37 +
web/doc/_themes/README | 31 +
web/doc/_themes/flask/._layout.html | Bin 0 -> 222 bytes
web/doc/_themes/flask/._relations.html | Bin 0 -> 222 bytes
web/doc/_themes/flask/._static | Bin 0 -> 222 bytes
web/doc/_themes/flask/._theme.conf | Bin 0 -> 222 bytes
web/doc/_themes/flask/layout.html | 25 +
web/doc/_themes/flask/relations.html | 19 +
web/doc/_themes/flask/static/._flasky.css_t | Bin 0 -> 222 bytes
.../_themes/flask/static/._small_flask.css | Bin 0 -> 222 bytes
web/doc/_themes/flask/static/flasky.css_t | 395 +
web/doc/_themes/flask/static/small_flask.css | 70 +
web/doc/_themes/flask/theme.conf | 9 +
web/doc/_themes/flask_small/._layout.html | Bin 0 -> 222 bytes
web/doc/_themes/flask_small/._static | Bin 0 -> 222 bytes
web/doc/_themes/flask_small/._theme.conf | Bin 0 -> 222 bytes
web/doc/_themes/flask_small/layout.html | 22 +
.../_themes/flask_small/static/._flasky.css_t | Bin 0 -> 222 bytes
.../_themes/flask_small/static/flasky.css_t | 287 +
web/doc/_themes/flask_small/theme.conf | 10 +
web/doc/_themes/flask_theme_support.py | 86 +
web/doc/addon-structure.txt | 12 +
web/doc/async.rst | 344 +
web/doc/changelog-7.0.rst | 123 +
web/doc/client_action.rst | 113 +
web/doc/conf.py | 257 +
web/doc/form_view.rst | 55 +
web/doc/guidelines.rst | 77 +
web/doc/images/._db-query.png | Bin 0 -> 222 bytes
web/doc/images/._runner.png | Bin 0 -> 222 bytes
web/doc/images/._runner2.png | Bin 0 -> 222 bytes
web/doc/images/._tests.png | Bin 0 -> 222 bytes
web/doc/images/._tests2.png | Bin 0 -> 222 bytes
web/doc/images/._tests3.png | Bin 0 -> 222 bytes
web/doc/images/db-query.png | Bin 0 -> 7142 bytes
web/doc/images/runner.png | Bin 0 -> 3963 bytes
web/doc/images/runner2.png | Bin 0 -> 6807 bytes
web/doc/images/tests.png | Bin 0 -> 65388 bytes
web/doc/images/tests2.png | Bin 0 -> 20114 bytes
web/doc/images/tests3.png | Bin 0 -> 20382 bytes
web/doc/index.rst | 38 +
web/doc/list_view.rst | 531 +
web/doc/make.bat | 170 +
web/doc/module.rst | 283 +
web/doc/module/.___init__.py | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py.1.diff | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py.2.diff | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py.3.diff | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py.4.diff | Bin 0 -> 222 bytes
web/doc/module/.___openerp__.py.5.diff | Bin 0 -> 222 bytes
web/doc/module/._static | Bin 0 -> 222 bytes
web/doc/module/._web_example.xml | Bin 0 -> 222 bytes
web/doc/module/__init__.py | 0
web/doc/module/__openerp__.py | 7 +
web/doc/module/__openerp__.py.1.diff | 11 +
web/doc/module/__openerp__.py.2.diff | 11 +
web/doc/module/__openerp__.py.3.diff | 12 +
web/doc/module/__openerp__.py.4.diff | 13 +
web/doc/module/__openerp__.py.5.diff | 14 +
web/doc/module/static/._src | Bin 0 -> 222 bytes
web/doc/module/static/src/._css | Bin 0 -> 222 bytes
web/doc/module/static/src/._js | Bin 0 -> 222 bytes
web/doc/module/static/src/._xml | Bin 0 -> 222 bytes
.../module/static/src/css/._web_example.css | Bin 0 -> 222 bytes
.../static/src/css/._web_example.css.1.diff | Bin 0 -> 222 bytes
web/doc/module/static/src/css/web_example.css | 6 +
.../static/src/css/web_example.css.1.diff | 17 +
.../module/static/src/js/._first_module.js | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.1.diff | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.2.diff | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.3.diff | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.4.diff | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.5.diff | Bin 0 -> 222 bytes
.../static/src/js/._first_module.js.6.diff | Bin 0 -> 222 bytes
web/doc/module/static/src/js/first_module.js | 2 +
.../static/src/js/first_module.js.1.diff | 8 +
.../static/src/js/first_module.js.2.diff | 11 +
.../static/src/js/first_module.js.3.diff | 18 +
.../static/src/js/first_module.js.4.diff | 15 +
.../static/src/js/first_module.js.5.diff | 23 +
.../static/src/js/first_module.js.6.diff | 55 +
.../module/static/src/xml/._web_example.xml | Bin 0 -> 222 bytes
web/doc/module/static/src/xml/web_example.xml | 11 +
web/doc/module/web_example.xml | 11 +
web/doc/qweb.rst | 546 +
web/doc/rpc.rst | 279 +
web/doc/search_view.rst | 549 +
web/doc/test-report.txt | 25 +
web/doc/testing.rst | 693 +
web/doc/widget.rst | 287 +
web/http.py | 595 +
web/i18n/._ar.po | Bin 0 -> 222 bytes
web/i18n/._bg.po | Bin 0 -> 222 bytes
web/i18n/._bn.po | Bin 0 -> 222 bytes
web/i18n/._bs.po | Bin 0 -> 222 bytes
web/i18n/._ca.po | Bin 0 -> 222 bytes
web/i18n/._cs.po | Bin 0 -> 222 bytes
web/i18n/._da.po | Bin 0 -> 222 bytes
web/i18n/._de.po | Bin 0 -> 222 bytes
web/i18n/._en_AU.po | Bin 0 -> 222 bytes
web/i18n/._en_GB.po | Bin 0 -> 222 bytes
web/i18n/._es.po | Bin 0 -> 222 bytes
web/i18n/._es_CL.po | Bin 0 -> 222 bytes
web/i18n/._es_CR.po | Bin 0 -> 222 bytes
web/i18n/._es_DO.po | Bin 0 -> 222 bytes
web/i18n/._es_EC.po | Bin 0 -> 222 bytes
web/i18n/._es_MX.po | Bin 0 -> 222 bytes
web/i18n/._et.po | Bin 0 -> 222 bytes
web/i18n/._eu.po | Bin 0 -> 222 bytes
web/i18n/._fa.po | Bin 0 -> 222 bytes
web/i18n/._fi.po | Bin 0 -> 222 bytes
web/i18n/._fr.po | Bin 0 -> 222 bytes
web/i18n/._fr_CA.po | Bin 0 -> 222 bytes
web/i18n/._gl.po | Bin 0 -> 222 bytes
web/i18n/._gu.po | Bin 0 -> 222 bytes
web/i18n/._hi.po | Bin 0 -> 222 bytes
web/i18n/._hr.po | Bin 0 -> 222 bytes
web/i18n/._hu.po | Bin 0 -> 222 bytes
web/i18n/._id.po | Bin 0 -> 222 bytes
web/i18n/._it.po | Bin 0 -> 222 bytes
web/i18n/._ja.po | Bin 0 -> 222 bytes
web/i18n/._ka.po | Bin 0 -> 222 bytes
web/i18n/._ko.po | Bin 0 -> 222 bytes
web/i18n/._lo.po | Bin 0 -> 222 bytes
web/i18n/._lt.po | Bin 0 -> 222 bytes
web/i18n/._mk.po | Bin 0 -> 222 bytes
web/i18n/._mn.po | Bin 0 -> 222 bytes
web/i18n/._nb.po | Bin 0 -> 222 bytes
web/i18n/._nl.po | Bin 0 -> 222 bytes
web/i18n/._nl_BE.po | Bin 0 -> 222 bytes
web/i18n/._pl.po | Bin 0 -> 222 bytes
web/i18n/._pt.po | Bin 0 -> 222 bytes
web/i18n/._pt_BR.po | Bin 0 -> 222 bytes
web/i18n/._ro.po | Bin 0 -> 222 bytes
web/i18n/._ru.po | Bin 0 -> 222 bytes
web/i18n/._sk.po | Bin 0 -> 222 bytes
web/i18n/._sl.po | Bin 0 -> 222 bytes
web/i18n/._sq.po | Bin 0 -> 222 bytes
web/i18n/._sr@latin.po | Bin 0 -> 222 bytes
web/i18n/._sv.po | Bin 0 -> 222 bytes
web/i18n/._th.po | Bin 0 -> 222 bytes
web/i18n/._tr.po | Bin 0 -> 222 bytes
web/i18n/._uk.po | Bin 0 -> 222 bytes
web/i18n/._web.pot | Bin 0 -> 222 bytes
web/i18n/._zh_CN.po | Bin 0 -> 222 bytes
web/i18n/._zh_TW.po | Bin 0 -> 222 bytes
web/i18n/ar.po | 2608 +++
web/i18n/bg.po | 2611 +++
web/i18n/bn.po | 2614 +++
web/i18n/bs.po | 2602 +++
web/i18n/ca.po | 2602 +++
web/i18n/cs.po | 2623 +++
web/i18n/da.po | 2610 +++
web/i18n/de.po | 2628 +++
web/i18n/en_AU.po | 2625 +++
web/i18n/en_GB.po | 2610 +++
web/i18n/es.po | 2636 +++
web/i18n/es_CL.po | 2604 +++
web/i18n/es_CR.po | 2614 +++
web/i18n/es_DO.po | 2618 +++
web/i18n/es_EC.po | 2631 +++
web/i18n/es_MX.po | 2630 +++
web/i18n/et.po | 2605 +++
web/i18n/eu.po | 2602 +++
web/i18n/fa.po | 2602 +++
web/i18n/fi.po | 2606 +++
web/i18n/fr.po | 2639 +++
web/i18n/fr_CA.po | 2602 +++
web/i18n/gl.po | 2614 +++
web/i18n/gu.po | 2602 +++
web/i18n/hi.po | 2602 +++
web/i18n/hr.po | 2627 +++
web/i18n/hu.po | 2626 +++
web/i18n/id.po | 2602 +++
web/i18n/it.po | 2629 +++
web/i18n/ja.po | 2606 +++
web/i18n/ka.po | 2613 +++
web/i18n/ko.po | 2612 +++
web/i18n/lo.po | 2602 +++
web/i18n/lt.po | 2602 +++
web/i18n/mk.po | 2602 +++
web/i18n/mn.po | 2629 +++
web/i18n/nb.po | 2602 +++
web/i18n/nl.po | 2633 +++
web/i18n/nl_BE.po | 2620 +++
web/i18n/pl.po | 2619 +++
web/i18n/pt.po | 2634 +++
web/i18n/pt_BR.po | 2627 +++
web/i18n/ro.po | 2634 +++
web/i18n/ru.po | 2632 +++
web/i18n/sk.po | 2602 +++
web/i18n/sl.po | 2618 +++
web/i18n/sq.po | 2602 +++
web/i18n/sr@latin.po | 2611 +++
web/i18n/sv.po | 2610 +++
web/i18n/th.po | 2602 +++
web/i18n/tr.po | 2617 +++
web/i18n/uk.po | 2602 +++
web/i18n/web.pot | 2587 +++
web/i18n/zh_CN.po | 2615 +++
web/i18n/zh_TW.po | 2606 +++
web/session.py | 196 +
web/static/._lib | Bin 0 -> 222 bytes
web/static/._src | Bin 0 -> 222 bytes
web/static/._test | Bin 0 -> 222 bytes
web/static/lib/._backbone | Bin 0 -> 222 bytes
web/static/lib/._cleditor | Bin 0 -> 222 bytes
web/static/lib/._datejs | Bin 0 -> 222 bytes
web/static/lib/._jquery | Bin 0 -> 222 bytes
web/static/lib/._jquery.MD5 | Bin 0 -> 222 bytes
web/static/lib/._jquery.autosize | Bin 0 -> 222 bytes
web/static/lib/._jquery.ba-bbq | Bin 0 -> 222 bytes
web/static/lib/._jquery.blockUI | Bin 0 -> 222 bytes
web/static/lib/._jquery.form | Bin 0 -> 222 bytes
web/static/lib/._jquery.scrollTo | Bin 0 -> 222 bytes
web/static/lib/._jquery.textext | Bin 0 -> 222 bytes
web/static/lib/._jquery.timeago | Bin 0 -> 222 bytes
web/static/lib/._jquery.tipsy | Bin 0 -> 222 bytes
web/static/lib/._jquery.ui | Bin 0 -> 222 bytes
web/static/lib/._jquery.ui.bootstrap | Bin 0 -> 222 bytes
web/static/lib/._jquery.ui.notify | Bin 0 -> 222 bytes
web/static/lib/._jquery.ui.timepicker | Bin 0 -> 222 bytes
web/static/lib/._jquery.validate | Bin 0 -> 222 bytes
web/static/lib/._py.js | Bin 0 -> 222 bytes
web/static/lib/._qunit | Bin 0 -> 222 bytes
web/static/lib/._qweb | Bin 0 -> 222 bytes
web/static/lib/._spinjs | Bin 0 -> 222 bytes
web/static/lib/._underscore | Bin 0 -> 222 bytes
web/static/lib/backbone/._backbone.js | Bin 0 -> 222 bytes
web/static/lib/backbone/backbone.js | 1431 ++
web/static/lib/cleditor/._images | Bin 0 -> 222 bytes
web/static/lib/cleditor/._jquery.cleditor.css | Bin 0 -> 222 bytes
web/static/lib/cleditor/._jquery.cleditor.js | Bin 0 -> 222 bytes
.../lib/cleditor/._jquery.cleditor.min.js | Bin 0 -> 222 bytes
web/static/lib/cleditor/images/._buttons.gif | Bin 0 -> 222 bytes
web/static/lib/cleditor/images/._toolbar.gif | Bin 0 -> 222 bytes
web/static/lib/cleditor/images/buttons.gif | Bin 0 -> 3064 bytes
web/static/lib/cleditor/images/toolbar.gif | Bin 0 -> 68 bytes
web/static/lib/cleditor/jquery.cleditor.css | 24 +
web/static/lib/cleditor/jquery.cleditor.js | 1137 ++
.../lib/cleditor/jquery.cleditor.min.js | 31 +
web/static/lib/datejs/._core.js | Bin 0 -> 222 bytes
web/static/lib/datejs/._date.js | Bin 0 -> 222 bytes
web/static/lib/datejs/._extras.js | Bin 0 -> 222 bytes
web/static/lib/datejs/._globalization | Bin 0 -> 222 bytes
web/static/lib/datejs/._parser.js | Bin 0 -> 222 bytes
web/static/lib/datejs/._sugarpak.js | Bin 0 -> 222 bytes
web/static/lib/datejs/._time.js | Bin 0 -> 222 bytes
web/static/lib/datejs/core.js | 864 +
web/static/lib/datejs/date.js | 21 +
web/static/lib/datejs/extras.js | 331 +
.../lib/datejs/globalization/._ab-RU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._af-ZA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._am-ET.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-AE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-AR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-BH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-DZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-EG.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-IQ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-JO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-KW.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-LB.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-LY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-MA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-OM.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-QA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-SA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-SY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-TN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ar-YE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._az-Cyrl-AZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._az-Latn-AZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._be-BY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._bg-BG.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._bs-BS.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._bs-Latn-BA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ca-ES.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._cs-CZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._cy-GB.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._da-DK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._de-AT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._de-CH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._de-DE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._de-LI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._de-LU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._dv-MV.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._el-GR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-029.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-AU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-BZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-CA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-GB.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-IE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-JM.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-NZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-PH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-TT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-US.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-ZA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._en-ZW.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-AR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-BO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-CL.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-CO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-CR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-DO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-EC.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-ES.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-GT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-HN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-MX.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-NI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-PA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-PE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-PR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-PY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-SV.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-UY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._es-VE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._et-EE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._eu-ES.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fa-IR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fi-FI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fo-FO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-BE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-CA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-CH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-FR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-LU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._fr-MC.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._gl-ES.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._gu-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._he-IL.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._hi-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._hr-BA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._hr-HR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._hu-HU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._hy-AM.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._id-ID.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._is-IS.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._it-CH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._it-IT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._iu-CA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ja-JP.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ka-GE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._kk-KZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._kn-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ko-KP.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ko-KR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._kok-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ky-KG.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._lt-LT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._lv-LV.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._mi-NZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._mk-MK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ml-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._mn-MN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._mr-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ms-BN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ms-MY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._mt-MT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._nb-NO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._nl-BE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._nl-NL.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._nn-NO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ns-ZA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._oc-FR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._pa-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._pl-PL.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._pt-BR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._pt-PT.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._quz-BO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._quz-EC.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._quz-PE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ro-RO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ru-RU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sa-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._se-FI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._se-NO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._se-SE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._si-LK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sk-SK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sl-SI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sma-NO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sma-SE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._smj-NO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._smj-SE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._smn-FI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sms-FI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sq-AL.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr-Cyrl-BA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr-Cyrl-CS.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr-Latn-BA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr-Latn-CS.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr-RS.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sr@latin.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sv-FI.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sv-SE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._sw-KE.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._syr-SY.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ta-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._te-IN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._th-TH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._tlh-TLH.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._tn-ZA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._tr-TR.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._tt-RU.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._uk-UA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._ur-PK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._uz-Cyrl-UZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._uz-Latn-UZ.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._vi-VN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._xh-ZA.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zh-CN.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zh-HK.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zh-MO.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zh-SG.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zh-TW.js | Bin 0 -> 222 bytes
.../lib/datejs/globalization/._zu-ZA.js | Bin 0 -> 222 bytes
web/static/lib/datejs/globalization/ab-RU.js | 0
web/static/lib/datejs/globalization/af-ZA.js | 195 +
web/static/lib/datejs/globalization/am-ET.js | 195 +
web/static/lib/datejs/globalization/ar-AE.js | 195 +
web/static/lib/datejs/globalization/ar-AR.js | 0
web/static/lib/datejs/globalization/ar-BH.js | 195 +
web/static/lib/datejs/globalization/ar-DZ.js | 195 +
web/static/lib/datejs/globalization/ar-EG.js | 195 +
web/static/lib/datejs/globalization/ar-IQ.js | 195 +
web/static/lib/datejs/globalization/ar-JO.js | 195 +
web/static/lib/datejs/globalization/ar-KW.js | 195 +
web/static/lib/datejs/globalization/ar-LB.js | 195 +
web/static/lib/datejs/globalization/ar-LY.js | 195 +
web/static/lib/datejs/globalization/ar-MA.js | 195 +
web/static/lib/datejs/globalization/ar-OM.js | 195 +
web/static/lib/datejs/globalization/ar-QA.js | 195 +
web/static/lib/datejs/globalization/ar-SA.js | 195 +
web/static/lib/datejs/globalization/ar-SY.js | 195 +
web/static/lib/datejs/globalization/ar-TN.js | 195 +
web/static/lib/datejs/globalization/ar-YE.js | 195 +
.../lib/datejs/globalization/az-Cyrl-AZ.js | 195 +
.../lib/datejs/globalization/az-Latn-AZ.js | 195 +
web/static/lib/datejs/globalization/be-BY.js | 195 +
web/static/lib/datejs/globalization/bg-BG.js | 195 +
web/static/lib/datejs/globalization/bs-BS.js | 0
.../lib/datejs/globalization/bs-Latn-BA.js | 195 +
web/static/lib/datejs/globalization/ca-ES.js | 195 +
web/static/lib/datejs/globalization/cs-CZ.js | 195 +
web/static/lib/datejs/globalization/cy-GB.js | 195 +
web/static/lib/datejs/globalization/da-DK.js | 195 +
web/static/lib/datejs/globalization/de-AT.js | 195 +
web/static/lib/datejs/globalization/de-CH.js | 195 +
web/static/lib/datejs/globalization/de-DE.js | 195 +
web/static/lib/datejs/globalization/de-LI.js | 195 +
web/static/lib/datejs/globalization/de-LU.js | 195 +
web/static/lib/datejs/globalization/dv-MV.js | 195 +
web/static/lib/datejs/globalization/el-GR.js | 195 +
web/static/lib/datejs/globalization/en-029.js | 195 +
web/static/lib/datejs/globalization/en-AU.js | 195 +
web/static/lib/datejs/globalization/en-BZ.js | 195 +
web/static/lib/datejs/globalization/en-CA.js | 195 +
web/static/lib/datejs/globalization/en-GB.js | 195 +
web/static/lib/datejs/globalization/en-IE.js | 195 +
web/static/lib/datejs/globalization/en-JM.js | 195 +
web/static/lib/datejs/globalization/en-NZ.js | 195 +
web/static/lib/datejs/globalization/en-PH.js | 195 +
web/static/lib/datejs/globalization/en-TT.js | 195 +
web/static/lib/datejs/globalization/en-US.js | 195 +
web/static/lib/datejs/globalization/en-ZA.js | 195 +
web/static/lib/datejs/globalization/en-ZW.js | 195 +
web/static/lib/datejs/globalization/es-AR.js | 195 +
web/static/lib/datejs/globalization/es-BO.js | 195 +
web/static/lib/datejs/globalization/es-CL.js | 195 +
web/static/lib/datejs/globalization/es-CO.js | 195 +
web/static/lib/datejs/globalization/es-CR.js | 195 +
web/static/lib/datejs/globalization/es-DO.js | 195 +
web/static/lib/datejs/globalization/es-EC.js | 195 +
web/static/lib/datejs/globalization/es-ES.js | 195 +
web/static/lib/datejs/globalization/es-GT.js | 195 +
web/static/lib/datejs/globalization/es-HN.js | 195 +
web/static/lib/datejs/globalization/es-MX.js | 195 +
web/static/lib/datejs/globalization/es-NI.js | 195 +
web/static/lib/datejs/globalization/es-PA.js | 195 +
web/static/lib/datejs/globalization/es-PE.js | 195 +
web/static/lib/datejs/globalization/es-PR.js | 195 +
web/static/lib/datejs/globalization/es-PY.js | 195 +
web/static/lib/datejs/globalization/es-SV.js | 195 +
web/static/lib/datejs/globalization/es-UY.js | 195 +
web/static/lib/datejs/globalization/es-VE.js | 195 +
web/static/lib/datejs/globalization/et-EE.js | 195 +
web/static/lib/datejs/globalization/eu-ES.js | 195 +
web/static/lib/datejs/globalization/fa-IR.js | 195 +
web/static/lib/datejs/globalization/fi-FI.js | 195 +
web/static/lib/datejs/globalization/fo-FO.js | 195 +
web/static/lib/datejs/globalization/fr-BE.js | 195 +
web/static/lib/datejs/globalization/fr-CA.js | 195 +
web/static/lib/datejs/globalization/fr-CH.js | 195 +
web/static/lib/datejs/globalization/fr-FR.js | 195 +
web/static/lib/datejs/globalization/fr-LU.js | 195 +
web/static/lib/datejs/globalization/fr-MC.js | 195 +
web/static/lib/datejs/globalization/gl-ES.js | 195 +
web/static/lib/datejs/globalization/gu-IN.js | 195 +
web/static/lib/datejs/globalization/he-IL.js | 195 +
web/static/lib/datejs/globalization/hi-IN.js | 195 +
web/static/lib/datejs/globalization/hr-BA.js | 195 +
web/static/lib/datejs/globalization/hr-HR.js | 195 +
web/static/lib/datejs/globalization/hu-HU.js | 195 +
web/static/lib/datejs/globalization/hy-AM.js | 195 +
web/static/lib/datejs/globalization/id-ID.js | 195 +
web/static/lib/datejs/globalization/is-IS.js | 195 +
web/static/lib/datejs/globalization/it-CH.js | 195 +
web/static/lib/datejs/globalization/it-IT.js | 195 +
web/static/lib/datejs/globalization/iu-CA.js | 0
web/static/lib/datejs/globalization/ja-JP.js | 195 +
web/static/lib/datejs/globalization/ka-GE.js | 195 +
web/static/lib/datejs/globalization/kk-KZ.js | 195 +
web/static/lib/datejs/globalization/kn-IN.js | 195 +
web/static/lib/datejs/globalization/ko-KP.js | 0
web/static/lib/datejs/globalization/ko-KR.js | 195 +
web/static/lib/datejs/globalization/kok-IN.js | 195 +
web/static/lib/datejs/globalization/ky-KG.js | 195 +
web/static/lib/datejs/globalization/lt-LT.js | 195 +
web/static/lib/datejs/globalization/lv-LV.js | 195 +
web/static/lib/datejs/globalization/mi-NZ.js | 195 +
web/static/lib/datejs/globalization/mk-MK.js | 195 +
web/static/lib/datejs/globalization/ml-IN.js | 0
web/static/lib/datejs/globalization/mn-MN.js | 195 +
web/static/lib/datejs/globalization/mr-IN.js | 195 +
web/static/lib/datejs/globalization/ms-BN.js | 195 +
web/static/lib/datejs/globalization/ms-MY.js | 195 +
web/static/lib/datejs/globalization/mt-MT.js | 195 +
web/static/lib/datejs/globalization/nb-NO.js | 195 +
web/static/lib/datejs/globalization/nl-BE.js | 195 +
web/static/lib/datejs/globalization/nl-NL.js | 195 +
web/static/lib/datejs/globalization/nn-NO.js | 195 +
web/static/lib/datejs/globalization/ns-ZA.js | 195 +
web/static/lib/datejs/globalization/oc-FR.js | 0
web/static/lib/datejs/globalization/pa-IN.js | 195 +
web/static/lib/datejs/globalization/pl-PL.js | 195 +
web/static/lib/datejs/globalization/pt-BR.js | 195 +
web/static/lib/datejs/globalization/pt-PT.js | 195 +
web/static/lib/datejs/globalization/quz-BO.js | 195 +
web/static/lib/datejs/globalization/quz-EC.js | 195 +
web/static/lib/datejs/globalization/quz-PE.js | 195 +
web/static/lib/datejs/globalization/ro-RO.js | 195 +
web/static/lib/datejs/globalization/ru-RU.js | 195 +
web/static/lib/datejs/globalization/sa-IN.js | 195 +
web/static/lib/datejs/globalization/se-FI.js | 195 +
web/static/lib/datejs/globalization/se-NO.js | 195 +
web/static/lib/datejs/globalization/se-SE.js | 195 +
web/static/lib/datejs/globalization/si-LK.js | 0
web/static/lib/datejs/globalization/sk-SK.js | 195 +
web/static/lib/datejs/globalization/sl-SI.js | 195 +
web/static/lib/datejs/globalization/sma-NO.js | 195 +
web/static/lib/datejs/globalization/sma-SE.js | 195 +
web/static/lib/datejs/globalization/smj-NO.js | 195 +
web/static/lib/datejs/globalization/smj-SE.js | 195 +
web/static/lib/datejs/globalization/smn-FI.js | 195 +
web/static/lib/datejs/globalization/sms-FI.js | 195 +
web/static/lib/datejs/globalization/sq-AL.js | 195 +
.../lib/datejs/globalization/sr-Cyrl-BA.js | 195 +
.../lib/datejs/globalization/sr-Cyrl-CS.js | 195 +
.../lib/datejs/globalization/sr-Latn-BA.js | 195 +
.../lib/datejs/globalization/sr-Latn-CS.js | 195 +
web/static/lib/datejs/globalization/sr-RS.js | 0
.../lib/datejs/globalization/sr@latin.js | 0
web/static/lib/datejs/globalization/sv-FI.js | 195 +
web/static/lib/datejs/globalization/sv-SE.js | 195 +
web/static/lib/datejs/globalization/sw-KE.js | 195 +
web/static/lib/datejs/globalization/syr-SY.js | 195 +
web/static/lib/datejs/globalization/ta-IN.js | 195 +
web/static/lib/datejs/globalization/te-IN.js | 195 +
web/static/lib/datejs/globalization/th-TH.js | 195 +
.../lib/datejs/globalization/tlh-TLH.js | 0
web/static/lib/datejs/globalization/tn-ZA.js | 195 +
web/static/lib/datejs/globalization/tr-TR.js | 195 +
web/static/lib/datejs/globalization/tt-RU.js | 195 +
web/static/lib/datejs/globalization/uk-UA.js | 195 +
web/static/lib/datejs/globalization/ur-PK.js | 195 +
.../lib/datejs/globalization/uz-Cyrl-UZ.js | 195 +
.../lib/datejs/globalization/uz-Latn-UZ.js | 195 +
web/static/lib/datejs/globalization/vi-VN.js | 195 +
web/static/lib/datejs/globalization/xh-ZA.js | 195 +
web/static/lib/datejs/globalization/zh-CN.js | 195 +
web/static/lib/datejs/globalization/zh-HK.js | 195 +
web/static/lib/datejs/globalization/zh-MO.js | 195 +
web/static/lib/datejs/globalization/zh-SG.js | 195 +
web/static/lib/datejs/globalization/zh-TW.js | 195 +
web/static/lib/datejs/globalization/zu-ZA.js | 195 +
web/static/lib/datejs/parser.js | 1116 ++
web/static/lib/datejs/sugarpak.js | 475 +
web/static/lib/datejs/time.js | 269 +
web/static/lib/jquery.MD5/._README.md | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/._README.txt | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/._jquery.md5.js | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/._tests | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/README.md | 32 +
web/static/lib/jquery.MD5/README.txt | 32 +
web/static/lib/jquery.MD5/jquery.md5.js | 269 +
web/static/lib/jquery.MD5/tests/._index.html | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/tests/._tests.js | Bin 0 -> 222 bytes
web/static/lib/jquery.MD5/tests/index.html | 43 +
web/static/lib/jquery.MD5/tests/tests.js | 57 +
.../lib/jquery.autosize/._jquery.autosize.js | Bin 0 -> 222 bytes
.../lib/jquery.autosize/jquery.autosize.js | 165 +
.../lib/jquery.ba-bbq/._jquery.ba-bbq.js | Bin 0 -> 222 bytes
.../lib/jquery.ba-bbq/._jquery.ba-bbq.min.js | Bin 0 -> 222 bytes
web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js | 1137 ++
.../lib/jquery.ba-bbq/jquery.ba-bbq.min.js | 18 +
.../lib/jquery.blockUI/._jquery.blockUI.js | Bin 0 -> 222 bytes
.../lib/jquery.blockUI/jquery.blockUI.js | 499 +
web/static/lib/jquery.form/._jquery.form.js | Bin 0 -> 222 bytes
web/static/lib/jquery.form/jquery.form.js | 911 +
web/static/lib/jquery.scrollTo/._changes.txt | Bin 0 -> 222 bytes
.../jquery.scrollTo/._jquery.scrollTo-min.js | Bin 0 -> 222 bytes
.../lib/jquery.scrollTo/._jquery.scrollTo.js | Bin 0 -> 222 bytes
web/static/lib/jquery.scrollTo/changes.txt | 91 +
.../jquery.scrollTo/jquery.scrollTo-min.js | 11 +
.../lib/jquery.scrollTo/jquery.scrollTo.js | 215 +
.../lib/jquery.textext/._jquery.textext.css | Bin 0 -> 222 bytes
.../lib/jquery.textext/._jquery.textext.js | Bin 0 -> 222 bytes
.../lib/jquery.textext/jquery.textext.css | 148 +
.../lib/jquery.textext/jquery.textext.js | 4776 +++++
.../lib/jquery.timeago/._jquery.timeago.js | Bin 0 -> 222 bytes
.../lib/jquery.timeago/jquery.timeago.js | 165 +
web/static/lib/jquery.tipsy/._jquery.tipsy.js | Bin 0 -> 222 bytes
web/static/lib/jquery.tipsy/._tipsy.css | Bin 0 -> 222 bytes
web/static/lib/jquery.tipsy/jquery.tipsy.js | 250 +
web/static/lib/jquery.tipsy/tipsy.css | 25 +
.../lib/jquery.ui.bootstrap/._README.md | Bin 0 -> 222 bytes
.../lib/jquery.ui.bootstrap/._bootstrap | Bin 0 -> 222 bytes
web/static/lib/jquery.ui.bootstrap/._css | Bin 0 -> 222 bytes
.../lib/jquery.ui.bootstrap/._third-party | Bin 0 -> 222 bytes
web/static/lib/jquery.ui.bootstrap/README.md | 31 +
.../bootstrap/._bootstrap.css | Bin 0 -> 222 bytes
.../lib/jquery.ui.bootstrap/bootstrap/._js | Bin 0 -> 222 bytes
.../bootstrap/bootstrap.css | 2476 +++
.../bootstrap/js/._bootstrap-alerts.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-buttons.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-dropdown.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-modal.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-popover.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-scrollspy.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-tabs.js | Bin 0 -> 222 bytes
.../bootstrap/js/._bootstrap-twipsy.js | Bin 0 -> 222 bytes
.../bootstrap/js/bootstrap-alerts.js | 124 +
.../bootstrap/js/bootstrap-buttons.js | 64 +
.../bootstrap/js/bootstrap-dropdown.js | 55 +
.../bootstrap/js/bootstrap-modal.js | 260 +
.../bootstrap/js/bootstrap-popover.js | 90 +
.../bootstrap/js/bootstrap-scrollspy.js | 107 +
.../bootstrap/js/bootstrap-tabs.js | 80 +
.../bootstrap/js/bootstrap-twipsy.js | 321 +
.../jquery.ui.bootstrap/css/._custom-theme | Bin 0 -> 222 bytes
.../lib/jquery.ui.bootstrap/css/._demo.css | Bin 0 -> 222 bytes
web/static/lib/jquery.ui.bootstrap/css/._less | Bin 0 -> 222 bytes
.../css/custom-theme/._images | Bin 0 -> 222 bytes
.../custom-theme/._jquery-ui-1.9.0.custom.css | Bin 0 -> 222 bytes
.../css/custom-theme/._jquery.ui.1.9.0.ie.css | Bin 0 -> 222 bytes
.../images/._ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_75_ffffff_1x400.png | Bin 0 -> 222 bytes
...._ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 222 bytes
.../._ui-bg_inset-soft_95_fef1ec_1x100.png | Bin 0 -> 222 bytes
.../images/._ui-icons_222222_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_2e83ff_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_454545_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_888888_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_cd0a0a_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_f6cf3b_256x240.png | Bin 0 -> 222 bytes
.../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes
.../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes
.../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes
.../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes
.../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes
.../images/ui-bg_glass_75_ffffff_1x400.png | Bin 0 -> 107 bytes
.../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes
.../ui-bg_inset-soft_95_fef1ec_1x100.png | Bin 0 -> 123 bytes
.../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_f6cf3b_256x240.png | Bin 0 -> 8884 bytes
.../custom-theme/jquery-ui-1.9.0.custom.css | 1387 ++
.../css/custom-theme/jquery.ui.1.9.0.ie.css | 16 +
.../lib/jquery.ui.bootstrap/css/demo.css | 117 +
.../css/less/._bootstrap.less | Bin 0 -> 222 bytes
.../jquery.ui.bootstrap/css/less/._forms.less | Bin 0 -> 222 bytes
.../css/less/._mixins.less | Bin 0 -> 222 bytes
.../css/less/._patterns.less | Bin 0 -> 222 bytes
.../jquery.ui.bootstrap/css/less/._reset.less | Bin 0 -> 222 bytes
.../css/less/._scaffolding.less | Bin 0 -> 222 bytes
.../css/less/._tables.less | Bin 0 -> 222 bytes
.../jquery.ui.bootstrap/css/less/._type.less | Bin 0 -> 222 bytes
.../css/less/._variables.less | Bin 0 -> 222 bytes
.../css/less/bootstrap.less | 26 +
.../jquery.ui.bootstrap/css/less/forms.less | 479 +
.../jquery.ui.bootstrap/css/less/mixins.less | 222 +
.../css/less/patterns.less | 1065 ++
.../jquery.ui.bootstrap/css/less/reset.less | 142 +
.../css/less/scaffolding.less | 139 +
.../jquery.ui.bootstrap/css/less/tables.less | 224 +
.../jquery.ui.bootstrap/css/less/type.less | 187 +
.../css/less/variables.less | 60 +
.../third-party/._jQuery-UI-Date-Range-Picker | Bin 0 -> 222 bytes
.../third-party/._jQuery-UI-FileInput | Bin 0 -> 222 bytes
.../jquery.ui.bootstrap/third-party/._wijmo | Bin 0 -> 222 bytes
.../jQuery-UI-Date-Range-Picker/._css | Bin 0 -> 222 bytes
.../jQuery-UI-Date-Range-Picker/._index.html | Bin 0 -> 222 bytes
.../jQuery-UI-Date-Range-Picker/._js | Bin 0 -> 222 bytes
.../css/._ui.daterangepicker.css | Bin 0 -> 222 bytes
.../css/ui.daterangepicker.css | 146 +
.../jQuery-UI-Date-Range-Picker/index.html | 66 +
.../jQuery-UI-Date-Range-Picker/js/._date.js | Bin 0 -> 222 bytes
.../js/._daterangepicker.jQuery.compressed.js | Bin 0 -> 222 bytes
.../js/._daterangepicker.jQuery.js | Bin 0 -> 222 bytes
.../jQuery-UI-Date-Range-Picker/js/date.js | 375 +
.../js/daterangepicker.jQuery.compressed.js | 1 +
.../js/daterangepicker.jQuery.js | 374 +
.../third-party/jQuery-UI-FileInput/._css | Bin 0 -> 222 bytes
.../third-party/jQuery-UI-FileInput/._images | Bin 0 -> 222 bytes
.../third-party/jQuery-UI-FileInput/._js | Bin 0 -> 222 bytes
.../jQuery-UI-FileInput/css/._enhanced.css | Bin 0 -> 222 bytes
.../jQuery-UI-FileInput/css/enhanced.css | 47 +
.../images/._icon-generic.gif | Bin 0 -> 222 bytes
.../images/._icon-image.gif | Bin 0 -> 222 bytes
.../images/._icon-media.gif | Bin 0 -> 222 bytes
.../jQuery-UI-FileInput/images/._icon-zip.gif | Bin 0 -> 222 bytes
.../images/icon-generic.gif | Bin 0 -> 341 bytes
.../jQuery-UI-FileInput/images/icon-image.gif | Bin 0 -> 355 bytes
.../jQuery-UI-FileInput/images/icon-media.gif | Bin 0 -> 359 bytes
.../jQuery-UI-FileInput/images/icon-zip.gif | Bin 0 -> 355 bytes
.../jQuery-UI-FileInput/js/._enhance.min.js | Bin 0 -> 222 bytes
.../js/._fileinput.jquery.js | Bin 0 -> 222 bytes
.../jQuery-UI-FileInput/js/enhance.min.js | 6 +
.../js/fileinput.jquery.js | 98 +
.../wijmo/._jquery.bgiframe-2.1.3-pre.js | Bin 0 -> 222 bytes
.../wijmo/._jquery.mousewheel.min.js | Bin 0 -> 222 bytes
.../wijmo/._jquery.wijmo-open.1.5.0.css | Bin 0 -> 222 bytes
.../wijmo/._jquery.wijmo-open.1.5.0.min.js | Bin 0 -> 222 bytes
.../wijmo/jquery.bgiframe-2.1.3-pre.js | 39 +
.../wijmo/jquery.mousewheel.min.js | 12 +
.../wijmo/jquery.wijmo-open.1.5.0.css | 1833 ++
.../wijmo/jquery.wijmo-open.1.5.0.min.js | 30 +
web/static/lib/jquery.ui.notify/._css | Bin 0 -> 222 bytes
web/static/lib/jquery.ui.notify/._js | Bin 0 -> 222 bytes
.../lib/jquery.ui.notify/css/._ui.notify.css | Bin 0 -> 222 bytes
.../lib/jquery.ui.notify/css/ui.notify.css | 13 +
.../jquery.ui.notify/js/._jquery.notify.js | Bin 0 -> 222 bytes
.../lib/jquery.ui.notify/js/jquery.notify.js | 140 +
web/static/lib/jquery.ui.timepicker/._css | Bin 0 -> 222 bytes
web/static/lib/jquery.ui.timepicker/._js | Bin 0 -> 222 bytes
.../css/._jquery-ui-timepicker-addon.css | Bin 0 -> 222 bytes
.../css/jquery-ui-timepicker-addon.css | 6 +
.../js/._jquery-ui-timepicker-addon.js | Bin 0 -> 222 bytes
.../js/jquery-ui-timepicker-addon.js | 1326 ++
web/static/lib/jquery.ui/._css | Bin 0 -> 222 bytes
web/static/lib/jquery.ui/._js | Bin 0 -> 222 bytes
web/static/lib/jquery.ui/css/._smoothness | Bin 0 -> 222 bytes
.../lib/jquery.ui/css/smoothness/._images | Bin 0 -> 222 bytes
.../smoothness/._jquery-ui-1.9.1.custom.css | Bin 0 -> 222 bytes
.../._jquery-ui-1.9.1.custom.min.css | Bin 0 -> 222 bytes
.../images/._ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 222 bytes
.../images/._ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 222 bytes
.../images/._ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 222 bytes
...._ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 222 bytes
.../images/._ui-icons_222222_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_2e83ff_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_454545_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_888888_256x240.png | Bin 0 -> 222 bytes
.../images/._ui-icons_cd0a0a_256x240.png | Bin 0 -> 222 bytes
.../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes
.../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes
.../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 144 bytes
.../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes
.../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes
.../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes
.../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes
.../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes
.../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 5355 bytes
.../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes
.../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes
.../css/smoothness/jquery-ui-1.9.1.custom.css | 461 +
.../smoothness/jquery-ui-1.9.1.custom.min.css | 5 +
.../jquery.ui/js/._jquery-ui-1.9.1.custom.js | Bin 0 -> 222 bytes
.../jquery.ui/js/jquery-ui-1.9.1.custom.js | 14824 ++++++++++++++++
.../lib/jquery.validate/._jquery.validate.js | Bin 0 -> 222 bytes
.../lib/jquery.validate/jquery.validate.js | 1166 ++
web/static/lib/jquery/._jquery-1.8.3.js | Bin 0 -> 222 bytes
web/static/lib/jquery/jquery-1.8.3.js | 9472 ++++++++++
web/static/lib/py.js/._.hg_archival.txt | Bin 0 -> 222 bytes
web/static/lib/py.js/._LICENSE | Bin 0 -> 222 bytes
web/static/lib/py.js/._README.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/._TODO.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/._doc | Bin 0 -> 222 bytes
web/static/lib/py.js/._lib | Bin 0 -> 222 bytes
web/static/lib/py.js/.hg_archival.txt | 5 +
web/static/lib/py.js/LICENSE | 13 +
web/static/lib/py.js/README.rst | 196 +
web/static/lib/py.js/TODO.rst | 47 +
web/static/lib/py.js/doc/._Makefile | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._builtins.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._conf.py | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._differences.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._index.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._make.bat | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._types.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/._utility.rst | Bin 0 -> 222 bytes
web/static/lib/py.js/doc/Makefile | 153 +
web/static/lib/py.js/doc/builtins.rst | 55 +
web/static/lib/py.js/doc/conf.py | 247 +
web/static/lib/py.js/doc/differences.rst | 64 +
web/static/lib/py.js/doc/index.rst | 161 +
web/static/lib/py.js/doc/make.bat | 190 +
web/static/lib/py.js/doc/types.rst | 248 +
web/static/lib/py.js/doc/utility.rst | 248 +
web/static/lib/py.js/lib/._py.js | Bin 0 -> 222 bytes
web/static/lib/py.js/lib/py.js | 1336 ++
web/static/lib/qunit/._qunit.css | Bin 0 -> 222 bytes
web/static/lib/qunit/._qunit.js | Bin 0 -> 222 bytes
web/static/lib/qunit/qunit.css | 231 +
web/static/lib/qunit/qunit.js | 1932 ++
web/static/lib/qweb/._qweb-benchmark.html | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-benchmark.xml | Bin 0 -> 222 bytes
.../lib/qweb/._qweb-test-attributes.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test-call.xml | Bin 0 -> 222 bytes
.../lib/qweb/._qweb-test-conditionals.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test-extend.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test-foreach.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test-output.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test-set.xml | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb-test.js.html | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb.js | Bin 0 -> 222 bytes
web/static/lib/qweb/._qweb2.js | Bin 0 -> 222 bytes
web/static/lib/qweb/qweb-benchmark.html | 57 +
web/static/lib/qweb/qweb-benchmark.xml | 60 +
web/static/lib/qweb/qweb-test-attributes.xml | 22 +
web/static/lib/qweb/qweb-test-call.xml | 30 +
.../lib/qweb/qweb-test-conditionals.xml | 59 +
web/static/lib/qweb/qweb-test-extend.xml | 32 +
web/static/lib/qweb/qweb-test-foreach.xml | 17 +
web/static/lib/qweb/qweb-test-output.xml | 51 +
web/static/lib/qweb/qweb-test-set.xml | 15 +
web/static/lib/qweb/qweb-test.js.html | 270 +
web/static/lib/qweb/qweb.js | 413 +
web/static/lib/qweb/qweb2.js | 706 +
web/static/lib/spinjs/._spin.js | Bin 0 -> 222 bytes
web/static/lib/spinjs/spin.js | 320 +
web/static/lib/underscore/._underscore-min.js | Bin 0 -> 222 bytes
web/static/lib/underscore/._underscore.js | Bin 0 -> 222 bytes
.../lib/underscore/._underscore.string.js | Bin 0 -> 222 bytes
.../lib/underscore/._underscore.string.min.js | Bin 0 -> 222 bytes
web/static/lib/underscore/underscore-min.js | 31 +
web/static/lib/underscore/underscore.js | 999 ++
.../lib/underscore/underscore.string.js | 468 +
.../lib/underscore/underscore.string.min.js | 14 +
web/static/src/._css | Bin 0 -> 222 bytes
web/static/src/._font | Bin 0 -> 222 bytes
web/static/src/._img | Bin 0 -> 222 bytes
web/static/src/._js | Bin 0 -> 222 bytes
web/static/src/._xml | Bin 0 -> 222 bytes
web/static/src/css/._Makefile | Bin 0 -> 222 bytes
web/static/src/css/._base.css | Bin 0 -> 222 bytes
web/static/src/css/._base.sass | Bin 0 -> 222 bytes
web/static/src/css/._data_export.css | Bin 0 -> 222 bytes
web/static/src/css/._full.css | Bin 0 -> 222 bytes
web/static/src/css/Makefile | 3 +
web/static/src/css/base.css | 3357 ++++
web/static/src/css/base.sass | 2633 +++
web/static/src/css/data_export.css | 84 +
web/static/src/css/full.css | 12 +
web/static/src/font/._entypo-webfont.eot | Bin 0 -> 222 bytes
web/static/src/font/._entypo-webfont.svg | Bin 0 -> 222 bytes
web/static/src/font/._entypo-webfont.ttf | Bin 0 -> 222 bytes
web/static/src/font/._entypo-webfont.woff | Bin 0 -> 222 bytes
.../src/font/._mnmliconsv21-webfont.eot | Bin 0 -> 222 bytes
.../src/font/._mnmliconsv21-webfont.svg | Bin 0 -> 222 bytes
.../src/font/._mnmliconsv21-webfont.ttf | Bin 0 -> 222 bytes
.../src/font/._mnmliconsv21-webfont.woff | Bin 0 -> 222 bytes
web/static/src/font/entypo-webfont.eot | Bin 0 -> 29428 bytes
web/static/src/font/entypo-webfont.svg | 198 +
web/static/src/font/entypo-webfont.ttf | Bin 0 -> 29264 bytes
web/static/src/font/entypo-webfont.woff | Bin 0 -> 18772 bytes
web/static/src/font/mnmliconsv21-webfont.eot | Bin 0 -> 24173 bytes
web/static/src/font/mnmliconsv21-webfont.svg | 149 +
web/static/src/font/mnmliconsv21-webfont.ttf | Bin 0 -> 39912 bytes
web/static/src/font/mnmliconsv21-webfont.woff | Bin 0 -> 26348 bytes
web/static/src/img/._accessories-archiver.png | Bin 0 -> 222 bytes
web/static/src/img/._add-shortcut.png | Bin 0 -> 222 bytes
web/static/src/img/._attachments-close.png | Bin 0 -> 222 bytes
web/static/src/img/._back-enable.jpg | Bin 0 -> 222 bytes
web/static/src/img/._box-a-header-a.gif | Bin 0 -> 222 bytes
web/static/src/img/._collapse.gif | Bin 0 -> 222 bytes
web/static/src/img/._db.png | Bin 0 -> 222 bytes
web/static/src/img/._down-arrow.png | Bin 0 -> 222 bytes
web/static/src/img/._expand.gif | Bin 0 -> 222 bytes
web/static/src/img/._favicon.ico | Bin 0 -> 222 bytes
web/static/src/img/._form_sheetbg.png | Bin 0 -> 222 bytes
web/static/src/img/._form_steps.png | Bin 0 -> 222 bytes
web/static/src/img/._gradientlinebg.gif | Bin 0 -> 222 bytes
web/static/src/img/._graph_background.png | Bin 0 -> 222 bytes
web/static/src/img/._header.gif | Bin 0 -> 222 bytes
web/static/src/img/._icons | Bin 0 -> 222 bytes
web/static/src/img/._iconset-a-help.gif | Bin 0 -> 222 bytes
web/static/src/img/._iconset-a-help.png | Bin 0 -> 222 bytes
web/static/src/img/._iconset-b-remove.png | Bin 0 -> 222 bytes
web/static/src/img/._iconset-d-drop.gif | Bin 0 -> 222 bytes
web/static/src/img/._logo.png | Bin 0 -> 222 bytes
web/static/src/img/._logo2.png | Bin 0 -> 222 bytes
web/static/src/img/._nologo.png | Bin 0 -> 222 bytes
web/static/src/img/._pager_first.png | Bin 0 -> 222 bytes
web/static/src/img/._pager_last.png | Bin 0 -> 222 bytes
web/static/src/img/._pager_next.png | Bin 0 -> 222 bytes
web/static/src/img/._pager_previous.png | Bin 0 -> 222 bytes
web/static/src/img/._partner.png | Bin 0 -> 222 bytes
web/static/src/img/._pencil.gif | Bin 0 -> 222 bytes
web/static/src/img/._placeholder.png | Bin 0 -> 222 bytes
web/static/src/img/._product.png | Bin 0 -> 222 bytes
web/static/src/img/._remove-shortcut.png | Bin 0 -> 222 bytes
web/static/src/img/._search_reset.gif | Bin 0 -> 222 bytes
web/static/src/img/._sep-a.gif | Bin 0 -> 222 bytes
web/static/src/img/._stock_person.png | Bin 0 -> 222 bytes
web/static/src/img/._throbber.gif | Bin 0 -> 222 bytes
web/static/src/img/._toggle-a-bg.png | Bin 0 -> 222 bytes
web/static/src/img/._ui | Bin 0 -> 222 bytes
web/static/src/img/._user_menu_avatar.png | Bin 0 -> 222 bytes
web/static/src/img/._view_empty_arrow.png | Bin 0 -> 222 bytes
web/static/src/img/._views-icons-a.png | Bin 0 -> 222 bytes
web/static/src/img/._warning.png | Bin 0 -> 222 bytes
web/static/src/img/accessories-archiver.png | Bin 0 -> 822 bytes
web/static/src/img/add-shortcut.png | Bin 0 -> 395 bytes
web/static/src/img/attachments-close.png | Bin 0 -> 486 bytes
web/static/src/img/back-enable.jpg | Bin 0 -> 28373 bytes
web/static/src/img/bahmniLogo.png | Bin 0 -> 38053 bytes
web/static/src/img/box-a-header-a.gif | Bin 0 -> 91 bytes
web/static/src/img/collapse.gif | Bin 0 -> 80 bytes
web/static/src/img/db.png | Bin 0 -> 2042 bytes
web/static/src/img/down-arrow.png | Bin 0 -> 263 bytes
web/static/src/img/expand.gif | Bin 0 -> 81 bytes
web/static/src/img/favicon.ico | Bin 0 -> 1150 bytes
web/static/src/img/flag_of_mozambique.png | Bin 0 -> 31709 bytes
web/static/src/img/form_sheetbg.png | Bin 0 -> 97 bytes
web/static/src/img/form_steps.png | Bin 0 -> 361 bytes
web/static/src/img/gradientlinebg.gif | Bin 0 -> 182 bytes
web/static/src/img/graph_background.png | Bin 0 -> 3920 bytes
web/static/src/img/header.gif | Bin 0 -> 182 bytes
web/static/src/img/icons/._STOCK_ABOUT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ADD.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_APPLY.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_BOLD.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CANCEL.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CDROM.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CLEAR.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CLOSE.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_COLOR_PICKER.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CONNECT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CONVERT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_COPY.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_CUT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_DELETE.png | Bin 0 -> 222 bytes
.../icons/._STOCK_DIALOG_AUTHENTICATION.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIALOG_ERROR.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIALOG_INFO.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIALOG_QUESTION.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIALOG_WARNING.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIRECTORY.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DIRECTORY_MENU.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DISCONNECT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_DND.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_DND_MULTIPLE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_EDIT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_EXECUTE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_FILE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_FIND.png | Bin 0 -> 222 bytes
.../img/icons/._STOCK_FIND_AND_REPLACE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_FLOPPY.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_FULLSCREEN.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_GOTO_BOTTOM.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_GOTO_FIRST.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_GOTO_LAST.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_GOTO_TOP.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_GO_BACK.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_GO_DOWN.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_GO_FORWARD.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_GO_UP.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_HARDDISK.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_HELP.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_HOME.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_INDENT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_INDEX.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_INFO.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ITALIC.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_JUMP_TO.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_JUSTIFY_CENTER.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_JUSTIFY_FILL.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_JUSTIFY_LEFT.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_JUSTIFY_RIGHT.png | Bin 0 -> 222 bytes
.../img/icons/._STOCK_LEAVE_FULLSCREEN.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_FORWARD.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_NEXT.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_PAUSE.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_PLAY.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_PREVIOUS.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_RECORD.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_REWIND.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MEDIA_STOP.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_MISSING_IMAGE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_NETWORK.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_NEW.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_NO.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_OK.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_OPEN.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_PASTE.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_PREFERENCES.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_PRINT.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_PRINT_PREVIEW.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_PROPERTIES.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_QUIT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_REDO.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_REFRESH.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_REMOVE.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_REVERT_TO_SAVED.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_SAVE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_SAVE_AS.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_SELECT_COLOR.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_SELECT_FONT.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_SORT_ASCENDING.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_SORT_DESCENDING.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_SPELL_CHECK.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_STOP.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_STRIKETHROUGH.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_UNDELETE.png | Bin 0 -> 222 bytes
.../src/img/icons/._STOCK_UNDERLINE.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_UNDO.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_UNINDENT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_YES.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ZOOM_100.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ZOOM_FIT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ZOOM_IN.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._STOCK_ZOOM_OUT.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._color-picker.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-about.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-add.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-apply.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-bold.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-cancel.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-cdrom.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-clear.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-close.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-color-picker.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-connect.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-convert.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-copy.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-cut.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-delete.png | Bin 0 -> 222 bytes
.../img/icons/._gtk-dialog-authentication.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-dialog-error.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-dialog-info.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-dialog-question.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-dialog-warning.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-directory-remote.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-directory.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-disconnect.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-dnd-multiple.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-dnd.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-edit.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-execute.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-file.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-find-and-replace.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-find.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-floppy.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-fullscreen.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-go-back.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-go-down.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-go-forward.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-go-up.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-goto-bottom.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-goto-first.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-goto-last.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-goto-top.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-harddisk.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-help.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-home.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-indent.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-index.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-info.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-italic.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-jump-to.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-justify-center.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-justify-fill.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-justify-left.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-justify-right.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-leave-fullscreen.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-media-forward.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-media-next.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-media-pause.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-media-play.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-media-previous.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-media-record.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-media-rewind.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-media-stop.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-missing-image.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-network.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-new.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-no.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-ok.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-open.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-paste-v.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-paste.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-preferences.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-print-preview.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-print.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-properties.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-quit.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-redo.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-refresh.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-remove.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-revert-to-saved.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-save-as.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-save.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-select-color.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-select-font.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-sort-ascending.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-sort-descending.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-spell-check.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-stop.png | Bin 0 -> 222 bytes
.../src/img/icons/._gtk-strikethrough.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-undelete.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-underline.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-undo.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-unindent.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-yes.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-zoom-100.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-zoom-fit.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-zoom-in.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._gtk-zoom-out.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._index1.jpeg | Bin 0 -> 222 bytes
web/static/src/img/icons/._index2.jpeg | Bin 0 -> 222 bytes
web/static/src/img/icons/._kanban-apply.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._kanban-pause.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._kanban-stop.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._save-document.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._star-off.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._star-on.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock_calendar.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock_gantt.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock_graph.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock_log.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._stock_person.png | Bin 0 -> 222 bytes
.../src/img/icons/._stock_translate.png | Bin 0 -> 222 bytes
.../icons/._terp-accessories-archiver+.png | Bin 0 -> 222 bytes
.../._terp-accessories-archiver-minus.png | Bin 0 -> 222 bytes
.../img/icons/._terp-accessories-archiver.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-account.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-administration.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-calendar.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-call-start.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-camera_test.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-check.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-crm.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-dialog-close.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-document-new.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-dolar.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-dolar_ok!.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-emblem-important.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-face-plain.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-folder-blue.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-folder-green.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-folder-orange.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-folder-violet.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-folder-yellow.png | Bin 0 -> 222 bytes
.../img/icons/._terp-gdu-smart-failing.png | Bin 0 -> 222 bytes
.../._terp-gnome-cpu-frequency-applet+.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-go-home.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-go-month.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-go-today.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-go-week.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-go-year.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-graph.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-go-back-ltr.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-go-back-rtl.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-jump-to-ltr.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-jump-to-rtl.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-media-pause.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-gtk-select-all.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-gtk-stop.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-hr.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-idea.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-locked.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-mail-.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-mail-forward.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-mail-message-new.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-mail-replied.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-mail_delete.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-marketing.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-mrp.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-partner.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-personal+.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-personal-.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-personal.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-product.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-project.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-purchase.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-rating-rated.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-report.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-sale.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-stage.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-stock.png | Bin 0 -> 222 bytes
.../img/icons/._terp-stock_align_left_24.png | Bin 0 -> 222 bytes
.../._terp-stock_effects-object-colorize.png | Bin 0 -> 222 bytes
.../img/icons/._terp-stock_format-default.png | Bin 0 -> 222 bytes
.../icons/._terp-stock_format-scientific.png | Bin 0 -> 222 bytes
.../icons/._terp-stock_symbol-selection.png | Bin 0 -> 222 bytes
.../src/img/icons/._terp-stock_zoom.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-tools.png | Bin 0 -> 222 bytes
web/static/src/img/icons/._terp-translate.png | Bin 0 -> 222 bytes
web/static/src/img/icons/STOCK_ABOUT.png | Bin 0 -> 523 bytes
web/static/src/img/icons/STOCK_ADD.png | Bin 0 -> 212 bytes
web/static/src/img/icons/STOCK_APPLY.png | Bin 0 -> 709 bytes
web/static/src/img/icons/STOCK_BOLD.png | Bin 0 -> 604 bytes
web/static/src/img/icons/STOCK_CANCEL.png | Bin 0 -> 407 bytes
web/static/src/img/icons/STOCK_CDROM.png | Bin 0 -> 711 bytes
web/static/src/img/icons/STOCK_CLEAR.png | Bin 0 -> 682 bytes
web/static/src/img/icons/STOCK_CLOSE.png | Bin 0 -> 274 bytes
.../src/img/icons/STOCK_COLOR_PICKER.png | Bin 0 -> 470 bytes
web/static/src/img/icons/STOCK_CONNECT.png | Bin 0 -> 558 bytes
web/static/src/img/icons/STOCK_CONVERT.png | Bin 0 -> 500 bytes
web/static/src/img/icons/STOCK_COPY.png | Bin 0 -> 339 bytes
web/static/src/img/icons/STOCK_CUT.png | Bin 0 -> 626 bytes
web/static/src/img/icons/STOCK_DELETE.png | Bin 0 -> 531 bytes
.../img/icons/STOCK_DIALOG_AUTHENTICATION.png | Bin 0 -> 590 bytes
.../src/img/icons/STOCK_DIALOG_ERROR.png | Bin 0 -> 559 bytes
.../src/img/icons/STOCK_DIALOG_INFO.png | Bin 0 -> 687 bytes
.../src/img/icons/STOCK_DIALOG_QUESTION.png | Bin 0 -> 491 bytes
.../src/img/icons/STOCK_DIALOG_WARNING.png | Bin 0 -> 428 bytes
web/static/src/img/icons/STOCK_DIRECTORY.png | Bin 0 -> 392 bytes
.../src/img/icons/STOCK_DIRECTORY_MENU.png | Bin 0 -> 698 bytes
web/static/src/img/icons/STOCK_DISCONNECT.png | Bin 0 -> 566 bytes
web/static/src/img/icons/STOCK_DND.png | Bin 0 -> 585 bytes
.../src/img/icons/STOCK_DND_MULTIPLE.png | Bin 0 -> 501 bytes
web/static/src/img/icons/STOCK_EDIT.png | Bin 0 -> 350 bytes
web/static/src/img/icons/STOCK_EXECUTE.png | Bin 0 -> 318 bytes
web/static/src/img/icons/STOCK_FILE.png | Bin 0 -> 289 bytes
web/static/src/img/icons/STOCK_FIND.png | Bin 0 -> 465 bytes
.../src/img/icons/STOCK_FIND_AND_REPLACE.png | Bin 0 -> 580 bytes
web/static/src/img/icons/STOCK_FLOPPY.png | Bin 0 -> 565 bytes
web/static/src/img/icons/STOCK_FULLSCREEN.png | Bin 0 -> 450 bytes
.../src/img/icons/STOCK_GOTO_BOTTOM.png | Bin 0 -> 574 bytes
web/static/src/img/icons/STOCK_GOTO_FIRST.png | Bin 0 -> 573 bytes
web/static/src/img/icons/STOCK_GOTO_LAST.png | Bin 0 -> 575 bytes
web/static/src/img/icons/STOCK_GOTO_TOP.png | Bin 0 -> 580 bytes
web/static/src/img/icons/STOCK_GO_BACK.png | Bin 0 -> 570 bytes
web/static/src/img/icons/STOCK_GO_DOWN.png | Bin 0 -> 572 bytes
web/static/src/img/icons/STOCK_GO_FORWARD.png | Bin 0 -> 575 bytes
web/static/src/img/icons/STOCK_GO_UP.png | Bin 0 -> 596 bytes
web/static/src/img/icons/STOCK_HARDDISK.png | Bin 0 -> 354 bytes
web/static/src/img/icons/STOCK_HELP.png | Bin 0 -> 789 bytes
web/static/src/img/icons/STOCK_HOME.png | Bin 0 -> 477 bytes
web/static/src/img/icons/STOCK_INDENT.png | Bin 0 -> 276 bytes
web/static/src/img/icons/STOCK_INDEX.png | Bin 0 -> 590 bytes
web/static/src/img/icons/STOCK_INFO.png | Bin 0 -> 738 bytes
web/static/src/img/icons/STOCK_ITALIC.png | Bin 0 -> 529 bytes
web/static/src/img/icons/STOCK_JUMP_TO.png | Bin 0 -> 591 bytes
.../src/img/icons/STOCK_JUSTIFY_CENTER.png | Bin 0 -> 251 bytes
.../src/img/icons/STOCK_JUSTIFY_FILL.png | Bin 0 -> 243 bytes
.../src/img/icons/STOCK_JUSTIFY_LEFT.png | Bin 0 -> 240 bytes
.../src/img/icons/STOCK_JUSTIFY_RIGHT.png | Bin 0 -> 254 bytes
.../src/img/icons/STOCK_LEAVE_FULLSCREEN.png | Bin 0 -> 448 bytes
.../src/img/icons/STOCK_MEDIA_FORWARD.png | Bin 0 -> 704 bytes
web/static/src/img/icons/STOCK_MEDIA_NEXT.png | Bin 0 -> 693 bytes
.../src/img/icons/STOCK_MEDIA_PAUSE.png | Bin 0 -> 466 bytes
web/static/src/img/icons/STOCK_MEDIA_PLAY.png | Bin 0 -> 556 bytes
.../src/img/icons/STOCK_MEDIA_PREVIOUS.png | Bin 0 -> 686 bytes
.../src/img/icons/STOCK_MEDIA_RECORD.png | Bin 0 -> 594 bytes
.../src/img/icons/STOCK_MEDIA_REWIND.png | Bin 0 -> 704 bytes
web/static/src/img/icons/STOCK_MEDIA_STOP.png | Bin 0 -> 421 bytes
.../src/img/icons/STOCK_MISSING_IMAGE.png | Bin 0 -> 330 bytes
web/static/src/img/icons/STOCK_NETWORK.png | Bin 0 -> 324 bytes
web/static/src/img/icons/STOCK_NEW.png | Bin 0 -> 405 bytes
web/static/src/img/icons/STOCK_NO.png | Bin 0 -> 751 bytes
web/static/src/img/icons/STOCK_OK.png | Bin 0 -> 795 bytes
web/static/src/img/icons/STOCK_OPEN.png | Bin 0 -> 418 bytes
web/static/src/img/icons/STOCK_PASTE.png | Bin 0 -> 473 bytes
.../src/img/icons/STOCK_PREFERENCES.png | Bin 0 -> 339 bytes
web/static/src/img/icons/STOCK_PRINT.png | Bin 0 -> 411 bytes
.../src/img/icons/STOCK_PRINT_PREVIEW.png | Bin 0 -> 616 bytes
web/static/src/img/icons/STOCK_PROPERTIES.png | Bin 0 -> 313 bytes
web/static/src/img/icons/STOCK_QUIT.png | Bin 0 -> 394 bytes
web/static/src/img/icons/STOCK_REDO.png | Bin 0 -> 430 bytes
web/static/src/img/icons/STOCK_REFRESH.png | Bin 0 -> 753 bytes
web/static/src/img/icons/STOCK_REMOVE.png | Bin 0 -> 176 bytes
.../src/img/icons/STOCK_REVERT_TO_SAVED.png | Bin 0 -> 413 bytes
web/static/src/img/icons/STOCK_SAVE.png | Bin 0 -> 599 bytes
web/static/src/img/icons/STOCK_SAVE_AS.png | Bin 0 -> 560 bytes
.../src/img/icons/STOCK_SELECT_COLOR.png | Bin 0 -> 656 bytes
.../src/img/icons/STOCK_SELECT_FONT.png | Bin 0 -> 598 bytes
.../src/img/icons/STOCK_SORT_ASCENDING.png | Bin 0 -> 371 bytes
.../src/img/icons/STOCK_SORT_DESCENDING.png | Bin 0 -> 370 bytes
.../src/img/icons/STOCK_SPELL_CHECK.png | Bin 0 -> 485 bytes
web/static/src/img/icons/STOCK_STOP.png | Bin 0 -> 678 bytes
.../src/img/icons/STOCK_STRIKETHROUGH.png | Bin 0 -> 459 bytes
web/static/src/img/icons/STOCK_UNDELETE.png | Bin 0 -> 875 bytes
web/static/src/img/icons/STOCK_UNDERLINE.png | Bin 0 -> 539 bytes
web/static/src/img/icons/STOCK_UNDO.png | Bin 0 -> 459 bytes
web/static/src/img/icons/STOCK_UNINDENT.png | Bin 0 -> 295 bytes
web/static/src/img/icons/STOCK_YES.png | Bin 0 -> 830 bytes
web/static/src/img/icons/STOCK_ZOOM_100.png | Bin 0 -> 469 bytes
web/static/src/img/icons/STOCK_ZOOM_FIT.png | Bin 0 -> 466 bytes
web/static/src/img/icons/STOCK_ZOOM_IN.png | Bin 0 -> 446 bytes
web/static/src/img/icons/STOCK_ZOOM_OUT.png | Bin 0 -> 463 bytes
web/static/src/img/icons/color-picker.png | Bin 0 -> 767 bytes
web/static/src/img/icons/gtk-about.png | Bin 0 -> 523 bytes
web/static/src/img/icons/gtk-add.png | Bin 0 -> 212 bytes
web/static/src/img/icons/gtk-apply.png | Bin 0 -> 709 bytes
web/static/src/img/icons/gtk-bold.png | Bin 0 -> 604 bytes
web/static/src/img/icons/gtk-cancel.png | Bin 0 -> 407 bytes
web/static/src/img/icons/gtk-cdrom.png | Bin 0 -> 711 bytes
web/static/src/img/icons/gtk-clear.png | Bin 0 -> 682 bytes
web/static/src/img/icons/gtk-close.png | Bin 0 -> 274 bytes
web/static/src/img/icons/gtk-color-picker.png | Bin 0 -> 470 bytes
web/static/src/img/icons/gtk-connect.png | Bin 0 -> 558 bytes
web/static/src/img/icons/gtk-convert.png | Bin 0 -> 500 bytes
web/static/src/img/icons/gtk-copy.png | Bin 0 -> 339 bytes
web/static/src/img/icons/gtk-cut.png | Bin 0 -> 626 bytes
web/static/src/img/icons/gtk-delete.png | Bin 0 -> 531 bytes
.../img/icons/gtk-dialog-authentication.png | Bin 0 -> 590 bytes
web/static/src/img/icons/gtk-dialog-error.png | Bin 0 -> 559 bytes
web/static/src/img/icons/gtk-dialog-info.png | Bin 0 -> 687 bytes
.../src/img/icons/gtk-dialog-question.png | Bin 0 -> 491 bytes
.../src/img/icons/gtk-dialog-warning.png | Bin 0 -> 428 bytes
.../src/img/icons/gtk-directory-remote.png | Bin 0 -> 455 bytes
web/static/src/img/icons/gtk-directory.png | Bin 0 -> 392 bytes
web/static/src/img/icons/gtk-disconnect.png | Bin 0 -> 566 bytes
web/static/src/img/icons/gtk-dnd-multiple.png | Bin 0 -> 501 bytes
web/static/src/img/icons/gtk-dnd.png | Bin 0 -> 585 bytes
web/static/src/img/icons/gtk-edit.png | Bin 0 -> 350 bytes
web/static/src/img/icons/gtk-execute.png | Bin 0 -> 318 bytes
web/static/src/img/icons/gtk-file.png | Bin 0 -> 289 bytes
.../src/img/icons/gtk-find-and-replace.png | Bin 0 -> 580 bytes
web/static/src/img/icons/gtk-find.png | Bin 0 -> 465 bytes
web/static/src/img/icons/gtk-floppy.png | Bin 0 -> 565 bytes
web/static/src/img/icons/gtk-fullscreen.png | Bin 0 -> 450 bytes
web/static/src/img/icons/gtk-go-back.png | Bin 0 -> 570 bytes
web/static/src/img/icons/gtk-go-down.png | Bin 0 -> 572 bytes
web/static/src/img/icons/gtk-go-forward.png | Bin 0 -> 575 bytes
web/static/src/img/icons/gtk-go-up.png | Bin 0 -> 596 bytes
web/static/src/img/icons/gtk-goto-bottom.png | Bin 0 -> 574 bytes
web/static/src/img/icons/gtk-goto-first.png | Bin 0 -> 573 bytes
web/static/src/img/icons/gtk-goto-last.png | Bin 0 -> 575 bytes
web/static/src/img/icons/gtk-goto-top.png | Bin 0 -> 580 bytes
web/static/src/img/icons/gtk-harddisk.png | Bin 0 -> 354 bytes
web/static/src/img/icons/gtk-help.png | Bin 0 -> 789 bytes
web/static/src/img/icons/gtk-home.png | Bin 0 -> 477 bytes
web/static/src/img/icons/gtk-indent.png | Bin 0 -> 276 bytes
web/static/src/img/icons/gtk-index.png | Bin 0 -> 590 bytes
web/static/src/img/icons/gtk-info.png | Bin 0 -> 738 bytes
web/static/src/img/icons/gtk-italic.png | Bin 0 -> 529 bytes
web/static/src/img/icons/gtk-jump-to.png | Bin 0 -> 591 bytes
.../src/img/icons/gtk-justify-center.png | Bin 0 -> 251 bytes
web/static/src/img/icons/gtk-justify-fill.png | Bin 0 -> 243 bytes
web/static/src/img/icons/gtk-justify-left.png | Bin 0 -> 240 bytes
.../src/img/icons/gtk-justify-right.png | Bin 0 -> 254 bytes
.../src/img/icons/gtk-leave-fullscreen.png | Bin 0 -> 448 bytes
.../src/img/icons/gtk-media-forward.png | Bin 0 -> 704 bytes
web/static/src/img/icons/gtk-media-next.png | Bin 0 -> 693 bytes
web/static/src/img/icons/gtk-media-pause.png | Bin 0 -> 466 bytes
web/static/src/img/icons/gtk-media-play.png | Bin 0 -> 556 bytes
.../src/img/icons/gtk-media-previous.png | Bin 0 -> 686 bytes
web/static/src/img/icons/gtk-media-record.png | Bin 0 -> 594 bytes
web/static/src/img/icons/gtk-media-rewind.png | Bin 0 -> 704 bytes
web/static/src/img/icons/gtk-media-stop.png | Bin 0 -> 421 bytes
.../src/img/icons/gtk-missing-image.png | Bin 0 -> 330 bytes
web/static/src/img/icons/gtk-network.png | Bin 0 -> 324 bytes
web/static/src/img/icons/gtk-new.png | Bin 0 -> 405 bytes
web/static/src/img/icons/gtk-no.png | Bin 0 -> 751 bytes
web/static/src/img/icons/gtk-ok.png | Bin 0 -> 795 bytes
web/static/src/img/icons/gtk-open.png | Bin 0 -> 418 bytes
web/static/src/img/icons/gtk-paste-v.png | Bin 0 -> 689 bytes
web/static/src/img/icons/gtk-paste.png | Bin 0 -> 473 bytes
web/static/src/img/icons/gtk-preferences.png | Bin 0 -> 339 bytes
.../src/img/icons/gtk-print-preview.png | Bin 0 -> 616 bytes
web/static/src/img/icons/gtk-print.png | Bin 0 -> 411 bytes
web/static/src/img/icons/gtk-properties.png | Bin 0 -> 313 bytes
web/static/src/img/icons/gtk-quit.png | Bin 0 -> 394 bytes
web/static/src/img/icons/gtk-redo.png | Bin 0 -> 430 bytes
web/static/src/img/icons/gtk-refresh.png | Bin 0 -> 753 bytes
web/static/src/img/icons/gtk-remove.png | Bin 0 -> 176 bytes
.../src/img/icons/gtk-revert-to-saved.png | Bin 0 -> 413 bytes
web/static/src/img/icons/gtk-save-as.png | Bin 0 -> 560 bytes
web/static/src/img/icons/gtk-save.png | Bin 0 -> 599 bytes
web/static/src/img/icons/gtk-select-color.png | Bin 0 -> 656 bytes
web/static/src/img/icons/gtk-select-font.png | Bin 0 -> 598 bytes
.../src/img/icons/gtk-sort-ascending.png | Bin 0 -> 371 bytes
.../src/img/icons/gtk-sort-descending.png | Bin 0 -> 370 bytes
web/static/src/img/icons/gtk-spell-check.png | Bin 0 -> 485 bytes
web/static/src/img/icons/gtk-stop.png | Bin 0 -> 678 bytes
.../src/img/icons/gtk-strikethrough.png | Bin 0 -> 459 bytes
web/static/src/img/icons/gtk-undelete.png | Bin 0 -> 875 bytes
web/static/src/img/icons/gtk-underline.png | Bin 0 -> 539 bytes
web/static/src/img/icons/gtk-undo.png | Bin 0 -> 459 bytes
web/static/src/img/icons/gtk-unindent.png | Bin 0 -> 295 bytes
web/static/src/img/icons/gtk-yes.png | Bin 0 -> 830 bytes
web/static/src/img/icons/gtk-zoom-100.png | Bin 0 -> 469 bytes
web/static/src/img/icons/gtk-zoom-fit.png | Bin 0 -> 466 bytes
web/static/src/img/icons/gtk-zoom-in.png | Bin 0 -> 446 bytes
web/static/src/img/icons/gtk-zoom-out.png | Bin 0 -> 463 bytes
web/static/src/img/icons/index1.jpeg | Bin 0 -> 473 bytes
web/static/src/img/icons/index2.jpeg | Bin 0 -> 471 bytes
web/static/src/img/icons/kanban-apply.png | Bin 0 -> 918 bytes
web/static/src/img/icons/kanban-pause.png | Bin 0 -> 882 bytes
web/static/src/img/icons/kanban-stop.png | Bin 0 -> 692 bytes
web/static/src/img/icons/save-document.png | Bin 0 -> 1189 bytes
web/static/src/img/icons/star-off.png | Bin 0 -> 614 bytes
web/static/src/img/icons/star-on.png | Bin 0 -> 636 bytes
web/static/src/img/icons/stock.png | Bin 0 -> 953 bytes
web/static/src/img/icons/stock_calendar.png | Bin 0 -> 454 bytes
web/static/src/img/icons/stock_gantt.png | Bin 0 -> 293 bytes
web/static/src/img/icons/stock_graph.png | Bin 0 -> 606 bytes
web/static/src/img/icons/stock_log.png | Bin 0 -> 748 bytes
web/static/src/img/icons/stock_person.png | Bin 0 -> 1074 bytes
web/static/src/img/icons/stock_translate.png | Bin 0 -> 519 bytes
.../img/icons/terp-accessories-archiver+.png | Bin 0 -> 838 bytes
.../icons/terp-accessories-archiver-minus.png | Bin 0 -> 838 bytes
.../img/icons/terp-accessories-archiver.png | Bin 0 -> 822 bytes
web/static/src/img/icons/terp-account.png | Bin 0 -> 784 bytes
.../src/img/icons/terp-administration.png | Bin 0 -> 1015 bytes
web/static/src/img/icons/terp-calendar.png | Bin 0 -> 908 bytes
web/static/src/img/icons/terp-call-start.png | Bin 0 -> 492 bytes
web/static/src/img/icons/terp-camera_test.png | Bin 0 -> 739 bytes
web/static/src/img/icons/terp-check.png | Bin 0 -> 832 bytes
web/static/src/img/icons/terp-crm.png | Bin 0 -> 877 bytes
.../src/img/icons/terp-dialog-close.png | Bin 0 -> 305 bytes
.../src/img/icons/terp-document-new.png | Bin 0 -> 738 bytes
web/static/src/img/icons/terp-dolar.png | Bin 0 -> 270 bytes
web/static/src/img/icons/terp-dolar_ok!.png | Bin 0 -> 220 bytes
.../src/img/icons/terp-emblem-important.png | Bin 0 -> 703 bytes
web/static/src/img/icons/terp-face-plain.png | Bin 0 -> 788 bytes
web/static/src/img/icons/terp-folder-blue.png | Bin 0 -> 438 bytes
.../src/img/icons/terp-folder-green.png | Bin 0 -> 453 bytes
.../src/img/icons/terp-folder-orange.png | Bin 0 -> 411 bytes
.../src/img/icons/terp-folder-violet.png | Bin 0 -> 538 bytes
.../src/img/icons/terp-folder-yellow.png | Bin 0 -> 432 bytes
.../src/img/icons/terp-gdu-smart-failing.png | Bin 0 -> 451 bytes
.../terp-gnome-cpu-frequency-applet+.png | Bin 0 -> 488 bytes
web/static/src/img/icons/terp-go-home.png | Bin 0 -> 378 bytes
web/static/src/img/icons/terp-go-month.png | Bin 0 -> 517 bytes
web/static/src/img/icons/terp-go-today.png | Bin 0 -> 501 bytes
web/static/src/img/icons/terp-go-week.png | Bin 0 -> 442 bytes
web/static/src/img/icons/terp-go-year.png | Bin 0 -> 514 bytes
web/static/src/img/icons/terp-graph.png | Bin 0 -> 784 bytes
.../src/img/icons/terp-gtk-go-back-ltr.png | Bin 0 -> 759 bytes
.../src/img/icons/terp-gtk-go-back-rtl.png | Bin 0 -> 762 bytes
.../src/img/icons/terp-gtk-jump-to-ltr.png | Bin 0 -> 859 bytes
.../src/img/icons/terp-gtk-jump-to-rtl.png | Bin 0 -> 851 bytes
.../src/img/icons/terp-gtk-media-pause.png | Bin 0 -> 544 bytes
.../src/img/icons/terp-gtk-select-all.png | Bin 0 -> 554 bytes
web/static/src/img/icons/terp-gtk-stop.png | Bin 0 -> 622 bytes
web/static/src/img/icons/terp-hr.png | Bin 0 -> 699 bytes
web/static/src/img/icons/terp-idea.png | Bin 0 -> 384 bytes
web/static/src/img/icons/terp-locked.png | Bin 0 -> 588 bytes
web/static/src/img/icons/terp-mail-.png | Bin 0 -> 427 bytes
.../src/img/icons/terp-mail-forward.png | Bin 0 -> 382 bytes
.../src/img/icons/terp-mail-message-new.png | Bin 0 -> 696 bytes
.../src/img/icons/terp-mail-replied.png | Bin 0 -> 637 bytes
web/static/src/img/icons/terp-mail_delete.png | Bin 0 -> 988 bytes
web/static/src/img/icons/terp-marketing.png | Bin 0 -> 808 bytes
web/static/src/img/icons/terp-mrp.png | Bin 0 -> 880 bytes
web/static/src/img/icons/terp-partner.png | Bin 0 -> 905 bytes
web/static/src/img/icons/terp-personal+.png | Bin 0 -> 735 bytes
web/static/src/img/icons/terp-personal-.png | Bin 0 -> 791 bytes
web/static/src/img/icons/terp-personal.png | Bin 0 -> 930 bytes
web/static/src/img/icons/terp-product.png | Bin 0 -> 708 bytes
web/static/src/img/icons/terp-project.png | Bin 0 -> 993 bytes
web/static/src/img/icons/terp-purchase.png | Bin 0 -> 885 bytes
.../src/img/icons/terp-rating-rated.png | Bin 0 -> 559 bytes
web/static/src/img/icons/terp-report.png | Bin 0 -> 831 bytes
web/static/src/img/icons/terp-sale.png | Bin 0 -> 699 bytes
web/static/src/img/icons/terp-stage.png | Bin 0 -> 742 bytes
web/static/src/img/icons/terp-stock.png | Bin 0 -> 967 bytes
.../img/icons/terp-stock_align_left_24.png | Bin 0 -> 358 bytes
.../terp-stock_effects-object-colorize.png | Bin 0 -> 173 bytes
.../img/icons/terp-stock_format-default.png | Bin 0 -> 267 bytes
.../icons/terp-stock_format-scientific.png | Bin 0 -> 201 bytes
.../img/icons/terp-stock_symbol-selection.png | Bin 0 -> 382 bytes
web/static/src/img/icons/terp-stock_zoom.png | Bin 0 -> 425 bytes
web/static/src/img/icons/terp-tools.png | Bin 0 -> 914 bytes
web/static/src/img/icons/terp-translate.png | Bin 0 -> 519 bytes
web/static/src/img/iconset-a-help.gif | Bin 0 -> 379 bytes
web/static/src/img/iconset-a-help.png | Bin 0 -> 498 bytes
web/static/src/img/iconset-b-remove.png | Bin 0 -> 189 bytes
web/static/src/img/iconset-d-drop.gif | Bin 0 -> 238 bytes
web/static/src/img/logo.png | Bin 0 -> 3551 bytes
web/static/src/img/logo2.png | Bin 0 -> 3600 bytes
web/static/src/img/nologo.png | Bin 0 -> 3977 bytes
web/static/src/img/pager_first.png | Bin 0 -> 1570 bytes
web/static/src/img/pager_last.png | Bin 0 -> 1564 bytes
web/static/src/img/pager_next.png | Bin 0 -> 3273 bytes
web/static/src/img/pager_previous.png | Bin 0 -> 3276 bytes
web/static/src/img/partner.png | Bin 0 -> 905 bytes
web/static/src/img/pencil.gif | Bin 0 -> 129 bytes
web/static/src/img/placeholder.png | Bin 0 -> 1362 bytes
web/static/src/img/product.png | Bin 0 -> 708 bytes
web/static/src/img/remove-shortcut.png | Bin 0 -> 559 bytes
web/static/src/img/search_reset.gif | Bin 0 -> 195 bytes
web/static/src/img/sep-a.gif | Bin 0 -> 43 bytes
web/static/src/img/stock_person.png | Bin 0 -> 1074 bytes
web/static/src/img/throbber.gif | Bin 0 -> 673 bytes
web/static/src/img/toggle-a-bg.png | Bin 0 -> 412 bytes
web/static/src/img/ui/._field_calendar.png | Bin 0 -> 222 bytes
web/static/src/img/ui/._group-expanded.png | Bin 0 -> 222 bytes
web/static/src/img/ui/._group-folded.png | Bin 0 -> 222 bytes
web/static/src/img/ui/field_calendar.png | Bin 0 -> 454 bytes
web/static/src/img/ui/group-expanded.png | Bin 0 -> 229 bytes
web/static/src/img/ui/group-folded.png | Bin 0 -> 259 bytes
web/static/src/img/user_menu_avatar.png | Bin 0 -> 846 bytes
web/static/src/img/view_empty_arrow.png | Bin 0 -> 2531 bytes
web/static/src/img/views-icons-a.png | Bin 0 -> 1224 bytes
web/static/src/img/warning.png | Bin 0 -> 1342 bytes
web/static/src/js/._boot.js | Bin 0 -> 222 bytes
web/static/src/js/._chrome.js | Bin 0 -> 222 bytes
web/static/src/js/._corelib.js | Bin 0 -> 222 bytes
web/static/src/js/._coresetup.js | Bin 0 -> 222 bytes
web/static/src/js/._data.js | Bin 0 -> 222 bytes
web/static/src/js/._data_export.js | Bin 0 -> 222 bytes
web/static/src/js/._dates.js | Bin 0 -> 222 bytes
web/static/src/js/._formats.js | Bin 0 -> 222 bytes
web/static/src/js/._pyeval.js | Bin 0 -> 222 bytes
web/static/src/js/._search.js | Bin 0 -> 222 bytes
web/static/src/js/._test_support.js | Bin 0 -> 222 bytes
web/static/src/js/._testing.js | Bin 0 -> 222 bytes
web/static/src/js/._view_form.js | Bin 0 -> 222 bytes
web/static/src/js/._view_list.js | Bin 0 -> 222 bytes
web/static/src/js/._view_list_editable.js | Bin 0 -> 222 bytes
web/static/src/js/._view_tree.js | Bin 0 -> 222 bytes
web/static/src/js/._views.js | Bin 0 -> 222 bytes
web/static/src/js/boot.js | 64 +
web/static/src/js/chrome.js | 1463 ++
web/static/src/js/corelib.js | 1153 ++
web/static/src/js/coresetup.js | 691 +
web/static/src/js/data.js | 1016 ++
web/static/src/js/data_export.js | 400 +
web/static/src/js/dates.js | 155 +
web/static/src/js/formats.js | 317 +
web/static/src/js/pyeval.js | 775 +
web/static/src/js/search.js | 2115 +++
web/static/src/js/test_support.js | 78 +
web/static/src/js/testing.js | 397 +
web/static/src/js/view_form.js | 5434 ++++++
web/static/src/js/view_list.js | 2280 +++
web/static/src/js/view_list_editable.js | 841 +
web/static/src/js/view_tree.js | 268 +
web/static/src/js/views.js | 1575 ++
web/static/src/xml/._base.xml | Bin 0 -> 222 bytes
web/static/src/xml/base.xml | 1887 ++
web/static/test/._Widget.js | Bin 0 -> 222 bytes
web/static/test/._class.js | Bin 0 -> 222 bytes
web/static/test/._evals.js | Bin 0 -> 222 bytes
web/static/test/._form.js | Bin 0 -> 222 bytes
web/static/test/._formats.js | Bin 0 -> 222 bytes
web/static/test/._fulltest | Bin 0 -> 222 bytes
web/static/test/._fulltest.html | Bin 0 -> 222 bytes
web/static/test/._list-editable.js | Bin 0 -> 222 bytes
web/static/test/._list-utils.js | Bin 0 -> 222 bytes
web/static/test/._list.js | Bin 0 -> 222 bytes
web/static/test/._mutex.js | Bin 0 -> 222 bytes
web/static/test/._qunit-doc.js | Bin 0 -> 222 bytes
web/static/test/._registry.js | Bin 0 -> 222 bytes
web/static/test/._rpc.js | Bin 0 -> 222 bytes
web/static/test/._search.js | Bin 0 -> 222 bytes
web/static/test/._testing.js | Bin 0 -> 222 bytes
web/static/test/Widget.js | 265 +
web/static/test/class.js | 133 +
web/static/test/evals.js | 799 +
web/static/test/form.js | 47 +
web/static/test/formats.js | 228 +
web/static/test/fulltest.html | 44 +
web/static/test/fulltest/._dataset.js | Bin 0 -> 222 bytes
web/static/test/fulltest/dataset.js | 241 +
web/static/test/list-editable.js | 358 +
web/static/test/list-utils.js | 399 +
web/static/test/list.js | 49 +
web/static/test/mutex.js | 60 +
web/static/test/qunit-doc.js | 143 +
web/static/test/registry.js | 55 +
web/static/test/rpc.js | 127 +
web/static/test/search.js | 1211 ++
web/static/test/testing.js | 244 +
web/tests/.___init__.py | Bin 0 -> 222 bytes
web/tests/._qunitsuite | Bin 0 -> 222 bytes
web/tests/._test_dataset.py | Bin 0 -> 222 bytes
web/tests/._test_js.py | Bin 0 -> 222 bytes
web/tests/._test_menu.py | Bin 0 -> 222 bytes
web/tests/._test_serving_base.py | Bin 0 -> 222 bytes
web/tests/__init__.py | 9 +
web/tests/qunitsuite/._README.rst | Bin 0 -> 222 bytes
web/tests/qunitsuite/.___init__.py | Bin 0 -> 222 bytes
web/tests/qunitsuite/._grunt | Bin 0 -> 222 bytes
web/tests/qunitsuite/._suite.py | Bin 0 -> 222 bytes
web/tests/qunitsuite/README.rst | 116 +
web/tests/qunitsuite/__init__.py | 0
web/tests/qunitsuite/grunt/._bootstrap.js | Bin 0 -> 222 bytes
web/tests/qunitsuite/grunt/._license | Bin 0 -> 222 bytes
web/tests/qunitsuite/grunt/._phantomjs.json | Bin 0 -> 222 bytes
.../grunt/._qunit-phantomjs-bridge.js | Bin 0 -> 222 bytes
web/tests/qunitsuite/grunt/bootstrap.js | 95 +
web/tests/qunitsuite/grunt/license | 22 +
web/tests/qunitsuite/grunt/phantomjs.json | 1 +
.../grunt/qunit-phantomjs-bridge.js | 88 +
web/tests/qunitsuite/suite.py | 131 +
web/tests/test_dataset.py | 41 +
web/tests/test_js.py | 31 +
web/tests/test_menu.py | 181 +
web/tests/test_serving_base.py | 34 +
1752 files changed, 283798 insertions(+)
create mode 100755 auth_signup/.___init__.py
create mode 100755 auth_signup/.___openerp__.py
create mode 100644 auth_signup/._auth_signup_data.xml
create mode 100644 auth_signup/._controllers
create mode 100644 auth_signup/._i18n
create mode 100755 auth_signup/._res_config.py
create mode 100644 auth_signup/._res_config.xml
create mode 100755 auth_signup/._res_users.py
create mode 100644 auth_signup/._res_users_view.xml
create mode 100644 auth_signup/._static
create mode 100755 auth_signup/__init__.py
create mode 100755 auth_signup/__openerp__.py
create mode 100644 auth_signup/auth_signup_data.xml
create mode 100755 auth_signup/controllers/.___init__.py
create mode 100755 auth_signup/controllers/._main.py
create mode 100755 auth_signup/controllers/__init__.py
create mode 100755 auth_signup/controllers/main.py
create mode 100644 auth_signup/i18n/._ar.po
create mode 100644 auth_signup/i18n/._auth_signup.pot
create mode 100644 auth_signup/i18n/._de.po
create mode 100644 auth_signup/i18n/._en_GB.po
create mode 100644 auth_signup/i18n/._es.po
create mode 100644 auth_signup/i18n/._fr.po
create mode 100644 auth_signup/i18n/._hr.po
create mode 100644 auth_signup/i18n/._hu.po
create mode 100644 auth_signup/i18n/._it.po
create mode 100644 auth_signup/i18n/._mk.po
create mode 100644 auth_signup/i18n/._mn.po
create mode 100644 auth_signup/i18n/._nb.po
create mode 100644 auth_signup/i18n/._nl.po
create mode 100644 auth_signup/i18n/._pl.po
create mode 100644 auth_signup/i18n/._pt.po
create mode 100644 auth_signup/i18n/._pt_BR.po
create mode 100644 auth_signup/i18n/._ro.po
create mode 100644 auth_signup/i18n/._ru.po
create mode 100644 auth_signup/i18n/._sl.po
create mode 100644 auth_signup/i18n/._tr.po
create mode 100644 auth_signup/i18n/._zh_CN.po
create mode 100644 auth_signup/i18n/ar.po
create mode 100644 auth_signup/i18n/auth_signup.pot
create mode 100644 auth_signup/i18n/de.po
create mode 100644 auth_signup/i18n/en_GB.po
create mode 100644 auth_signup/i18n/es.po
create mode 100644 auth_signup/i18n/fr.po
create mode 100644 auth_signup/i18n/hr.po
create mode 100644 auth_signup/i18n/hu.po
create mode 100644 auth_signup/i18n/it.po
create mode 100644 auth_signup/i18n/mk.po
create mode 100644 auth_signup/i18n/mn.po
create mode 100644 auth_signup/i18n/nb.po
create mode 100644 auth_signup/i18n/nl.po
create mode 100644 auth_signup/i18n/pl.po
create mode 100644 auth_signup/i18n/pt.po
create mode 100644 auth_signup/i18n/pt_BR.po
create mode 100644 auth_signup/i18n/ro.po
create mode 100644 auth_signup/i18n/ru.po
create mode 100644 auth_signup/i18n/sl.po
create mode 100644 auth_signup/i18n/tr.po
create mode 100644 auth_signup/i18n/zh_CN.po
create mode 100755 auth_signup/res_config.py
create mode 100644 auth_signup/res_config.xml
create mode 100755 auth_signup/res_users.py
create mode 100644 auth_signup/res_users_view.xml
create mode 100644 auth_signup/static/._src
create mode 100644 auth_signup/static/src/._js
create mode 100644 auth_signup/static/src/._xml
create mode 100644 auth_signup/static/src/js/._auth_signup.js
create mode 100644 auth_signup/static/src/js/auth_signup.js
create mode 100644 auth_signup/static/src/xml/._auth_signup.xml
create mode 100644 auth_signup/static/src/xml/auth_signup.xml
create mode 100755 web/.___init__.py
create mode 100755 web/.___openerp__.py
create mode 100644 web/._cli
create mode 100644 web/._controllers
create mode 100644 web/._doc
create mode 100755 web/._http.py
create mode 100644 web/._i18n
create mode 100755 web/._session.py
create mode 100644 web/._static
create mode 100644 web/._tests
create mode 100755 web/__init__.py
create mode 100755 web/__openerp__.py
create mode 100755 web/cli/.___init__.py
create mode 100755 web/cli/._test_js.py
create mode 100755 web/cli/__init__.py
create mode 100755 web/cli/test_js.py
create mode 100755 web/controllers/.___init__.py
create mode 100755 web/controllers/._main.py
create mode 100755 web/controllers/._testing.py
create mode 100755 web/controllers/__init__.py
create mode 100755 web/controllers/main.py
create mode 100755 web/controllers/testing.py
create mode 100644 web/doc/._Makefile
create mode 100644 web/doc/.__static
create mode 100644 web/doc/.__templates
create mode 100644 web/doc/.__themes
create mode 100644 web/doc/._addon-structure.txt
create mode 100644 web/doc/._async.rst
create mode 100644 web/doc/._changelog-7.0.rst
create mode 100644 web/doc/._client_action.rst
create mode 100755 web/doc/._conf.py
create mode 100644 web/doc/._form_view.rst
create mode 100644 web/doc/._guidelines.rst
create mode 100644 web/doc/._images
create mode 100644 web/doc/._index.rst
create mode 100644 web/doc/._list_view.rst
create mode 100644 web/doc/._make.bat
create mode 100644 web/doc/._module
create mode 100644 web/doc/._module.rst
create mode 100644 web/doc/._qweb.rst
create mode 100644 web/doc/._rpc.rst
create mode 100644 web/doc/._search_view.rst
create mode 100644 web/doc/._test-report.txt
create mode 100644 web/doc/._testing.rst
create mode 100644 web/doc/._widget.rst
create mode 100644 web/doc/Makefile
create mode 100644 web/doc/_static/._openerp.png
create mode 100644 web/doc/_static/openerp.png
create mode 100644 web/doc/_templates/._sidebarintro.html
create mode 100644 web/doc/_templates/._sidebarlogo.html
create mode 100644 web/doc/_templates/sidebarintro.html
create mode 100644 web/doc/_templates/sidebarlogo.html
create mode 100644 web/doc/_themes/._LICENSE
create mode 100644 web/doc/_themes/._README
create mode 100644 web/doc/_themes/._flask
create mode 100644 web/doc/_themes/._flask_small
create mode 100755 web/doc/_themes/._flask_theme_support.py
create mode 100644 web/doc/_themes/LICENSE
create mode 100644 web/doc/_themes/README
create mode 100644 web/doc/_themes/flask/._layout.html
create mode 100644 web/doc/_themes/flask/._relations.html
create mode 100644 web/doc/_themes/flask/._static
create mode 100644 web/doc/_themes/flask/._theme.conf
create mode 100644 web/doc/_themes/flask/layout.html
create mode 100644 web/doc/_themes/flask/relations.html
create mode 100644 web/doc/_themes/flask/static/._flasky.css_t
create mode 100644 web/doc/_themes/flask/static/._small_flask.css
create mode 100644 web/doc/_themes/flask/static/flasky.css_t
create mode 100644 web/doc/_themes/flask/static/small_flask.css
create mode 100644 web/doc/_themes/flask/theme.conf
create mode 100644 web/doc/_themes/flask_small/._layout.html
create mode 100644 web/doc/_themes/flask_small/._static
create mode 100644 web/doc/_themes/flask_small/._theme.conf
create mode 100644 web/doc/_themes/flask_small/layout.html
create mode 100644 web/doc/_themes/flask_small/static/._flasky.css_t
create mode 100644 web/doc/_themes/flask_small/static/flasky.css_t
create mode 100644 web/doc/_themes/flask_small/theme.conf
create mode 100755 web/doc/_themes/flask_theme_support.py
create mode 100644 web/doc/addon-structure.txt
create mode 100644 web/doc/async.rst
create mode 100644 web/doc/changelog-7.0.rst
create mode 100644 web/doc/client_action.rst
create mode 100755 web/doc/conf.py
create mode 100644 web/doc/form_view.rst
create mode 100644 web/doc/guidelines.rst
create mode 100644 web/doc/images/._db-query.png
create mode 100644 web/doc/images/._runner.png
create mode 100644 web/doc/images/._runner2.png
create mode 100644 web/doc/images/._tests.png
create mode 100644 web/doc/images/._tests2.png
create mode 100644 web/doc/images/._tests3.png
create mode 100644 web/doc/images/db-query.png
create mode 100644 web/doc/images/runner.png
create mode 100644 web/doc/images/runner2.png
create mode 100644 web/doc/images/tests.png
create mode 100644 web/doc/images/tests2.png
create mode 100644 web/doc/images/tests3.png
create mode 100644 web/doc/index.rst
create mode 100644 web/doc/list_view.rst
create mode 100644 web/doc/make.bat
create mode 100644 web/doc/module.rst
create mode 100755 web/doc/module/.___init__.py
create mode 100755 web/doc/module/.___openerp__.py
create mode 100644 web/doc/module/.___openerp__.py.1.diff
create mode 100644 web/doc/module/.___openerp__.py.2.diff
create mode 100644 web/doc/module/.___openerp__.py.3.diff
create mode 100644 web/doc/module/.___openerp__.py.4.diff
create mode 100644 web/doc/module/.___openerp__.py.5.diff
create mode 100644 web/doc/module/._static
create mode 100644 web/doc/module/._web_example.xml
create mode 100755 web/doc/module/__init__.py
create mode 100755 web/doc/module/__openerp__.py
create mode 100644 web/doc/module/__openerp__.py.1.diff
create mode 100644 web/doc/module/__openerp__.py.2.diff
create mode 100644 web/doc/module/__openerp__.py.3.diff
create mode 100644 web/doc/module/__openerp__.py.4.diff
create mode 100644 web/doc/module/__openerp__.py.5.diff
create mode 100644 web/doc/module/static/._src
create mode 100644 web/doc/module/static/src/._css
create mode 100644 web/doc/module/static/src/._js
create mode 100644 web/doc/module/static/src/._xml
create mode 100644 web/doc/module/static/src/css/._web_example.css
create mode 100644 web/doc/module/static/src/css/._web_example.css.1.diff
create mode 100644 web/doc/module/static/src/css/web_example.css
create mode 100644 web/doc/module/static/src/css/web_example.css.1.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js
create mode 100644 web/doc/module/static/src/js/._first_module.js.1.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js.2.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js.3.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js.4.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js.5.diff
create mode 100644 web/doc/module/static/src/js/._first_module.js.6.diff
create mode 100644 web/doc/module/static/src/js/first_module.js
create mode 100644 web/doc/module/static/src/js/first_module.js.1.diff
create mode 100644 web/doc/module/static/src/js/first_module.js.2.diff
create mode 100644 web/doc/module/static/src/js/first_module.js.3.diff
create mode 100644 web/doc/module/static/src/js/first_module.js.4.diff
create mode 100644 web/doc/module/static/src/js/first_module.js.5.diff
create mode 100644 web/doc/module/static/src/js/first_module.js.6.diff
create mode 100644 web/doc/module/static/src/xml/._web_example.xml
create mode 100644 web/doc/module/static/src/xml/web_example.xml
create mode 100644 web/doc/module/web_example.xml
create mode 100644 web/doc/qweb.rst
create mode 100644 web/doc/rpc.rst
create mode 100644 web/doc/search_view.rst
create mode 100644 web/doc/test-report.txt
create mode 100644 web/doc/testing.rst
create mode 100644 web/doc/widget.rst
create mode 100755 web/http.py
create mode 100644 web/i18n/._ar.po
create mode 100644 web/i18n/._bg.po
create mode 100644 web/i18n/._bn.po
create mode 100644 web/i18n/._bs.po
create mode 100644 web/i18n/._ca.po
create mode 100644 web/i18n/._cs.po
create mode 100644 web/i18n/._da.po
create mode 100644 web/i18n/._de.po
create mode 100644 web/i18n/._en_AU.po
create mode 100644 web/i18n/._en_GB.po
create mode 100644 web/i18n/._es.po
create mode 100644 web/i18n/._es_CL.po
create mode 100644 web/i18n/._es_CR.po
create mode 100644 web/i18n/._es_DO.po
create mode 100644 web/i18n/._es_EC.po
create mode 100644 web/i18n/._es_MX.po
create mode 100644 web/i18n/._et.po
create mode 100644 web/i18n/._eu.po
create mode 100644 web/i18n/._fa.po
create mode 100644 web/i18n/._fi.po
create mode 100644 web/i18n/._fr.po
create mode 100644 web/i18n/._fr_CA.po
create mode 100644 web/i18n/._gl.po
create mode 100644 web/i18n/._gu.po
create mode 100644 web/i18n/._hi.po
create mode 100644 web/i18n/._hr.po
create mode 100644 web/i18n/._hu.po
create mode 100644 web/i18n/._id.po
create mode 100644 web/i18n/._it.po
create mode 100644 web/i18n/._ja.po
create mode 100644 web/i18n/._ka.po
create mode 100644 web/i18n/._ko.po
create mode 100644 web/i18n/._lo.po
create mode 100644 web/i18n/._lt.po
create mode 100644 web/i18n/._mk.po
create mode 100644 web/i18n/._mn.po
create mode 100644 web/i18n/._nb.po
create mode 100644 web/i18n/._nl.po
create mode 100644 web/i18n/._nl_BE.po
create mode 100644 web/i18n/._pl.po
create mode 100644 web/i18n/._pt.po
create mode 100644 web/i18n/._pt_BR.po
create mode 100644 web/i18n/._ro.po
create mode 100644 web/i18n/._ru.po
create mode 100644 web/i18n/._sk.po
create mode 100644 web/i18n/._sl.po
create mode 100644 web/i18n/._sq.po
create mode 100644 web/i18n/._sr@latin.po
create mode 100644 web/i18n/._sv.po
create mode 100644 web/i18n/._th.po
create mode 100644 web/i18n/._tr.po
create mode 100644 web/i18n/._uk.po
create mode 100644 web/i18n/._web.pot
create mode 100644 web/i18n/._zh_CN.po
create mode 100644 web/i18n/._zh_TW.po
create mode 100644 web/i18n/ar.po
create mode 100644 web/i18n/bg.po
create mode 100644 web/i18n/bn.po
create mode 100644 web/i18n/bs.po
create mode 100644 web/i18n/ca.po
create mode 100644 web/i18n/cs.po
create mode 100644 web/i18n/da.po
create mode 100644 web/i18n/de.po
create mode 100644 web/i18n/en_AU.po
create mode 100644 web/i18n/en_GB.po
create mode 100644 web/i18n/es.po
create mode 100644 web/i18n/es_CL.po
create mode 100644 web/i18n/es_CR.po
create mode 100644 web/i18n/es_DO.po
create mode 100644 web/i18n/es_EC.po
create mode 100644 web/i18n/es_MX.po
create mode 100644 web/i18n/et.po
create mode 100644 web/i18n/eu.po
create mode 100644 web/i18n/fa.po
create mode 100644 web/i18n/fi.po
create mode 100644 web/i18n/fr.po
create mode 100644 web/i18n/fr_CA.po
create mode 100644 web/i18n/gl.po
create mode 100644 web/i18n/gu.po
create mode 100644 web/i18n/hi.po
create mode 100644 web/i18n/hr.po
create mode 100644 web/i18n/hu.po
create mode 100644 web/i18n/id.po
create mode 100644 web/i18n/it.po
create mode 100644 web/i18n/ja.po
create mode 100644 web/i18n/ka.po
create mode 100644 web/i18n/ko.po
create mode 100644 web/i18n/lo.po
create mode 100644 web/i18n/lt.po
create mode 100644 web/i18n/mk.po
create mode 100644 web/i18n/mn.po
create mode 100644 web/i18n/nb.po
create mode 100644 web/i18n/nl.po
create mode 100644 web/i18n/nl_BE.po
create mode 100644 web/i18n/pl.po
create mode 100644 web/i18n/pt.po
create mode 100644 web/i18n/pt_BR.po
create mode 100644 web/i18n/ro.po
create mode 100644 web/i18n/ru.po
create mode 100644 web/i18n/sk.po
create mode 100644 web/i18n/sl.po
create mode 100644 web/i18n/sq.po
create mode 100644 web/i18n/sr@latin.po
create mode 100644 web/i18n/sv.po
create mode 100644 web/i18n/th.po
create mode 100644 web/i18n/tr.po
create mode 100644 web/i18n/uk.po
create mode 100644 web/i18n/web.pot
create mode 100644 web/i18n/zh_CN.po
create mode 100644 web/i18n/zh_TW.po
create mode 100755 web/session.py
create mode 100644 web/static/._lib
create mode 100644 web/static/._src
create mode 100644 web/static/._test
create mode 100644 web/static/lib/._backbone
create mode 100644 web/static/lib/._cleditor
create mode 100644 web/static/lib/._datejs
create mode 100644 web/static/lib/._jquery
create mode 100644 web/static/lib/._jquery.MD5
create mode 100644 web/static/lib/._jquery.autosize
create mode 100644 web/static/lib/._jquery.ba-bbq
create mode 100644 web/static/lib/._jquery.blockUI
create mode 100644 web/static/lib/._jquery.form
create mode 100644 web/static/lib/._jquery.scrollTo
create mode 100644 web/static/lib/._jquery.textext
create mode 100644 web/static/lib/._jquery.timeago
create mode 100644 web/static/lib/._jquery.tipsy
create mode 100644 web/static/lib/._jquery.ui
create mode 100644 web/static/lib/._jquery.ui.bootstrap
create mode 100644 web/static/lib/._jquery.ui.notify
create mode 100644 web/static/lib/._jquery.ui.timepicker
create mode 100644 web/static/lib/._jquery.validate
create mode 100644 web/static/lib/._py.js
create mode 100644 web/static/lib/._qunit
create mode 100644 web/static/lib/._qweb
create mode 100644 web/static/lib/._spinjs
create mode 100644 web/static/lib/._underscore
create mode 100644 web/static/lib/backbone/._backbone.js
create mode 100644 web/static/lib/backbone/backbone.js
create mode 100644 web/static/lib/cleditor/._images
create mode 100644 web/static/lib/cleditor/._jquery.cleditor.css
create mode 100644 web/static/lib/cleditor/._jquery.cleditor.js
create mode 100644 web/static/lib/cleditor/._jquery.cleditor.min.js
create mode 100644 web/static/lib/cleditor/images/._buttons.gif
create mode 100644 web/static/lib/cleditor/images/._toolbar.gif
create mode 100644 web/static/lib/cleditor/images/buttons.gif
create mode 100644 web/static/lib/cleditor/images/toolbar.gif
create mode 100644 web/static/lib/cleditor/jquery.cleditor.css
create mode 100644 web/static/lib/cleditor/jquery.cleditor.js
create mode 100644 web/static/lib/cleditor/jquery.cleditor.min.js
create mode 100644 web/static/lib/datejs/._core.js
create mode 100644 web/static/lib/datejs/._date.js
create mode 100644 web/static/lib/datejs/._extras.js
create mode 100644 web/static/lib/datejs/._globalization
create mode 100644 web/static/lib/datejs/._parser.js
create mode 100644 web/static/lib/datejs/._sugarpak.js
create mode 100644 web/static/lib/datejs/._time.js
create mode 100644 web/static/lib/datejs/core.js
create mode 100644 web/static/lib/datejs/date.js
create mode 100644 web/static/lib/datejs/extras.js
create mode 100644 web/static/lib/datejs/globalization/._ab-RU.js
create mode 100644 web/static/lib/datejs/globalization/._af-ZA.js
create mode 100644 web/static/lib/datejs/globalization/._am-ET.js
create mode 100644 web/static/lib/datejs/globalization/._ar-AE.js
create mode 100644 web/static/lib/datejs/globalization/._ar-AR.js
create mode 100644 web/static/lib/datejs/globalization/._ar-BH.js
create mode 100644 web/static/lib/datejs/globalization/._ar-DZ.js
create mode 100644 web/static/lib/datejs/globalization/._ar-EG.js
create mode 100644 web/static/lib/datejs/globalization/._ar-IQ.js
create mode 100644 web/static/lib/datejs/globalization/._ar-JO.js
create mode 100644 web/static/lib/datejs/globalization/._ar-KW.js
create mode 100644 web/static/lib/datejs/globalization/._ar-LB.js
create mode 100644 web/static/lib/datejs/globalization/._ar-LY.js
create mode 100644 web/static/lib/datejs/globalization/._ar-MA.js
create mode 100644 web/static/lib/datejs/globalization/._ar-OM.js
create mode 100644 web/static/lib/datejs/globalization/._ar-QA.js
create mode 100644 web/static/lib/datejs/globalization/._ar-SA.js
create mode 100644 web/static/lib/datejs/globalization/._ar-SY.js
create mode 100644 web/static/lib/datejs/globalization/._ar-TN.js
create mode 100644 web/static/lib/datejs/globalization/._ar-YE.js
create mode 100644 web/static/lib/datejs/globalization/._az-Cyrl-AZ.js
create mode 100644 web/static/lib/datejs/globalization/._az-Latn-AZ.js
create mode 100644 web/static/lib/datejs/globalization/._be-BY.js
create mode 100644 web/static/lib/datejs/globalization/._bg-BG.js
create mode 100644 web/static/lib/datejs/globalization/._bs-BS.js
create mode 100644 web/static/lib/datejs/globalization/._bs-Latn-BA.js
create mode 100644 web/static/lib/datejs/globalization/._ca-ES.js
create mode 100644 web/static/lib/datejs/globalization/._cs-CZ.js
create mode 100644 web/static/lib/datejs/globalization/._cy-GB.js
create mode 100644 web/static/lib/datejs/globalization/._da-DK.js
create mode 100644 web/static/lib/datejs/globalization/._de-AT.js
create mode 100644 web/static/lib/datejs/globalization/._de-CH.js
create mode 100644 web/static/lib/datejs/globalization/._de-DE.js
create mode 100644 web/static/lib/datejs/globalization/._de-LI.js
create mode 100644 web/static/lib/datejs/globalization/._de-LU.js
create mode 100644 web/static/lib/datejs/globalization/._dv-MV.js
create mode 100644 web/static/lib/datejs/globalization/._el-GR.js
create mode 100644 web/static/lib/datejs/globalization/._en-029.js
create mode 100644 web/static/lib/datejs/globalization/._en-AU.js
create mode 100644 web/static/lib/datejs/globalization/._en-BZ.js
create mode 100644 web/static/lib/datejs/globalization/._en-CA.js
create mode 100644 web/static/lib/datejs/globalization/._en-GB.js
create mode 100644 web/static/lib/datejs/globalization/._en-IE.js
create mode 100644 web/static/lib/datejs/globalization/._en-JM.js
create mode 100644 web/static/lib/datejs/globalization/._en-NZ.js
create mode 100644 web/static/lib/datejs/globalization/._en-PH.js
create mode 100644 web/static/lib/datejs/globalization/._en-TT.js
create mode 100644 web/static/lib/datejs/globalization/._en-US.js
create mode 100644 web/static/lib/datejs/globalization/._en-ZA.js
create mode 100644 web/static/lib/datejs/globalization/._en-ZW.js
create mode 100644 web/static/lib/datejs/globalization/._es-AR.js
create mode 100644 web/static/lib/datejs/globalization/._es-BO.js
create mode 100644 web/static/lib/datejs/globalization/._es-CL.js
create mode 100644 web/static/lib/datejs/globalization/._es-CO.js
create mode 100644 web/static/lib/datejs/globalization/._es-CR.js
create mode 100644 web/static/lib/datejs/globalization/._es-DO.js
create mode 100644 web/static/lib/datejs/globalization/._es-EC.js
create mode 100644 web/static/lib/datejs/globalization/._es-ES.js
create mode 100644 web/static/lib/datejs/globalization/._es-GT.js
create mode 100644 web/static/lib/datejs/globalization/._es-HN.js
create mode 100644 web/static/lib/datejs/globalization/._es-MX.js
create mode 100644 web/static/lib/datejs/globalization/._es-NI.js
create mode 100644 web/static/lib/datejs/globalization/._es-PA.js
create mode 100644 web/static/lib/datejs/globalization/._es-PE.js
create mode 100644 web/static/lib/datejs/globalization/._es-PR.js
create mode 100644 web/static/lib/datejs/globalization/._es-PY.js
create mode 100644 web/static/lib/datejs/globalization/._es-SV.js
create mode 100644 web/static/lib/datejs/globalization/._es-UY.js
create mode 100644 web/static/lib/datejs/globalization/._es-VE.js
create mode 100644 web/static/lib/datejs/globalization/._et-EE.js
create mode 100644 web/static/lib/datejs/globalization/._eu-ES.js
create mode 100644 web/static/lib/datejs/globalization/._fa-IR.js
create mode 100644 web/static/lib/datejs/globalization/._fi-FI.js
create mode 100644 web/static/lib/datejs/globalization/._fo-FO.js
create mode 100644 web/static/lib/datejs/globalization/._fr-BE.js
create mode 100644 web/static/lib/datejs/globalization/._fr-CA.js
create mode 100644 web/static/lib/datejs/globalization/._fr-CH.js
create mode 100644 web/static/lib/datejs/globalization/._fr-FR.js
create mode 100644 web/static/lib/datejs/globalization/._fr-LU.js
create mode 100644 web/static/lib/datejs/globalization/._fr-MC.js
create mode 100644 web/static/lib/datejs/globalization/._gl-ES.js
create mode 100644 web/static/lib/datejs/globalization/._gu-IN.js
create mode 100644 web/static/lib/datejs/globalization/._he-IL.js
create mode 100644 web/static/lib/datejs/globalization/._hi-IN.js
create mode 100644 web/static/lib/datejs/globalization/._hr-BA.js
create mode 100644 web/static/lib/datejs/globalization/._hr-HR.js
create mode 100644 web/static/lib/datejs/globalization/._hu-HU.js
create mode 100644 web/static/lib/datejs/globalization/._hy-AM.js
create mode 100644 web/static/lib/datejs/globalization/._id-ID.js
create mode 100644 web/static/lib/datejs/globalization/._is-IS.js
create mode 100644 web/static/lib/datejs/globalization/._it-CH.js
create mode 100644 web/static/lib/datejs/globalization/._it-IT.js
create mode 100644 web/static/lib/datejs/globalization/._iu-CA.js
create mode 100644 web/static/lib/datejs/globalization/._ja-JP.js
create mode 100644 web/static/lib/datejs/globalization/._ka-GE.js
create mode 100644 web/static/lib/datejs/globalization/._kk-KZ.js
create mode 100644 web/static/lib/datejs/globalization/._kn-IN.js
create mode 100644 web/static/lib/datejs/globalization/._ko-KP.js
create mode 100644 web/static/lib/datejs/globalization/._ko-KR.js
create mode 100644 web/static/lib/datejs/globalization/._kok-IN.js
create mode 100644 web/static/lib/datejs/globalization/._ky-KG.js
create mode 100644 web/static/lib/datejs/globalization/._lt-LT.js
create mode 100644 web/static/lib/datejs/globalization/._lv-LV.js
create mode 100644 web/static/lib/datejs/globalization/._mi-NZ.js
create mode 100644 web/static/lib/datejs/globalization/._mk-MK.js
create mode 100644 web/static/lib/datejs/globalization/._ml-IN.js
create mode 100644 web/static/lib/datejs/globalization/._mn-MN.js
create mode 100644 web/static/lib/datejs/globalization/._mr-IN.js
create mode 100644 web/static/lib/datejs/globalization/._ms-BN.js
create mode 100644 web/static/lib/datejs/globalization/._ms-MY.js
create mode 100644 web/static/lib/datejs/globalization/._mt-MT.js
create mode 100644 web/static/lib/datejs/globalization/._nb-NO.js
create mode 100644 web/static/lib/datejs/globalization/._nl-BE.js
create mode 100644 web/static/lib/datejs/globalization/._nl-NL.js
create mode 100644 web/static/lib/datejs/globalization/._nn-NO.js
create mode 100644 web/static/lib/datejs/globalization/._ns-ZA.js
create mode 100644 web/static/lib/datejs/globalization/._oc-FR.js
create mode 100644 web/static/lib/datejs/globalization/._pa-IN.js
create mode 100644 web/static/lib/datejs/globalization/._pl-PL.js
create mode 100644 web/static/lib/datejs/globalization/._pt-BR.js
create mode 100644 web/static/lib/datejs/globalization/._pt-PT.js
create mode 100644 web/static/lib/datejs/globalization/._quz-BO.js
create mode 100644 web/static/lib/datejs/globalization/._quz-EC.js
create mode 100644 web/static/lib/datejs/globalization/._quz-PE.js
create mode 100644 web/static/lib/datejs/globalization/._ro-RO.js
create mode 100644 web/static/lib/datejs/globalization/._ru-RU.js
create mode 100644 web/static/lib/datejs/globalization/._sa-IN.js
create mode 100644 web/static/lib/datejs/globalization/._se-FI.js
create mode 100644 web/static/lib/datejs/globalization/._se-NO.js
create mode 100644 web/static/lib/datejs/globalization/._se-SE.js
create mode 100644 web/static/lib/datejs/globalization/._si-LK.js
create mode 100644 web/static/lib/datejs/globalization/._sk-SK.js
create mode 100644 web/static/lib/datejs/globalization/._sl-SI.js
create mode 100644 web/static/lib/datejs/globalization/._sma-NO.js
create mode 100644 web/static/lib/datejs/globalization/._sma-SE.js
create mode 100644 web/static/lib/datejs/globalization/._smj-NO.js
create mode 100644 web/static/lib/datejs/globalization/._smj-SE.js
create mode 100644 web/static/lib/datejs/globalization/._smn-FI.js
create mode 100644 web/static/lib/datejs/globalization/._sms-FI.js
create mode 100644 web/static/lib/datejs/globalization/._sq-AL.js
create mode 100644 web/static/lib/datejs/globalization/._sr-Cyrl-BA.js
create mode 100644 web/static/lib/datejs/globalization/._sr-Cyrl-CS.js
create mode 100644 web/static/lib/datejs/globalization/._sr-Latn-BA.js
create mode 100644 web/static/lib/datejs/globalization/._sr-Latn-CS.js
create mode 100644 web/static/lib/datejs/globalization/._sr-RS.js
create mode 100644 web/static/lib/datejs/globalization/._sr@latin.js
create mode 100644 web/static/lib/datejs/globalization/._sv-FI.js
create mode 100644 web/static/lib/datejs/globalization/._sv-SE.js
create mode 100644 web/static/lib/datejs/globalization/._sw-KE.js
create mode 100644 web/static/lib/datejs/globalization/._syr-SY.js
create mode 100644 web/static/lib/datejs/globalization/._ta-IN.js
create mode 100644 web/static/lib/datejs/globalization/._te-IN.js
create mode 100644 web/static/lib/datejs/globalization/._th-TH.js
create mode 100644 web/static/lib/datejs/globalization/._tlh-TLH.js
create mode 100644 web/static/lib/datejs/globalization/._tn-ZA.js
create mode 100644 web/static/lib/datejs/globalization/._tr-TR.js
create mode 100644 web/static/lib/datejs/globalization/._tt-RU.js
create mode 100644 web/static/lib/datejs/globalization/._uk-UA.js
create mode 100644 web/static/lib/datejs/globalization/._ur-PK.js
create mode 100644 web/static/lib/datejs/globalization/._uz-Cyrl-UZ.js
create mode 100644 web/static/lib/datejs/globalization/._uz-Latn-UZ.js
create mode 100644 web/static/lib/datejs/globalization/._vi-VN.js
create mode 100644 web/static/lib/datejs/globalization/._xh-ZA.js
create mode 100644 web/static/lib/datejs/globalization/._zh-CN.js
create mode 100644 web/static/lib/datejs/globalization/._zh-HK.js
create mode 100644 web/static/lib/datejs/globalization/._zh-MO.js
create mode 100644 web/static/lib/datejs/globalization/._zh-SG.js
create mode 100644 web/static/lib/datejs/globalization/._zh-TW.js
create mode 100644 web/static/lib/datejs/globalization/._zu-ZA.js
create mode 100644 web/static/lib/datejs/globalization/ab-RU.js
create mode 100644 web/static/lib/datejs/globalization/af-ZA.js
create mode 100644 web/static/lib/datejs/globalization/am-ET.js
create mode 100644 web/static/lib/datejs/globalization/ar-AE.js
create mode 100644 web/static/lib/datejs/globalization/ar-AR.js
create mode 100644 web/static/lib/datejs/globalization/ar-BH.js
create mode 100644 web/static/lib/datejs/globalization/ar-DZ.js
create mode 100644 web/static/lib/datejs/globalization/ar-EG.js
create mode 100644 web/static/lib/datejs/globalization/ar-IQ.js
create mode 100644 web/static/lib/datejs/globalization/ar-JO.js
create mode 100644 web/static/lib/datejs/globalization/ar-KW.js
create mode 100644 web/static/lib/datejs/globalization/ar-LB.js
create mode 100644 web/static/lib/datejs/globalization/ar-LY.js
create mode 100644 web/static/lib/datejs/globalization/ar-MA.js
create mode 100644 web/static/lib/datejs/globalization/ar-OM.js
create mode 100644 web/static/lib/datejs/globalization/ar-QA.js
create mode 100644 web/static/lib/datejs/globalization/ar-SA.js
create mode 100644 web/static/lib/datejs/globalization/ar-SY.js
create mode 100644 web/static/lib/datejs/globalization/ar-TN.js
create mode 100644 web/static/lib/datejs/globalization/ar-YE.js
create mode 100644 web/static/lib/datejs/globalization/az-Cyrl-AZ.js
create mode 100644 web/static/lib/datejs/globalization/az-Latn-AZ.js
create mode 100644 web/static/lib/datejs/globalization/be-BY.js
create mode 100644 web/static/lib/datejs/globalization/bg-BG.js
create mode 100644 web/static/lib/datejs/globalization/bs-BS.js
create mode 100644 web/static/lib/datejs/globalization/bs-Latn-BA.js
create mode 100644 web/static/lib/datejs/globalization/ca-ES.js
create mode 100644 web/static/lib/datejs/globalization/cs-CZ.js
create mode 100644 web/static/lib/datejs/globalization/cy-GB.js
create mode 100644 web/static/lib/datejs/globalization/da-DK.js
create mode 100644 web/static/lib/datejs/globalization/de-AT.js
create mode 100644 web/static/lib/datejs/globalization/de-CH.js
create mode 100644 web/static/lib/datejs/globalization/de-DE.js
create mode 100644 web/static/lib/datejs/globalization/de-LI.js
create mode 100644 web/static/lib/datejs/globalization/de-LU.js
create mode 100644 web/static/lib/datejs/globalization/dv-MV.js
create mode 100644 web/static/lib/datejs/globalization/el-GR.js
create mode 100644 web/static/lib/datejs/globalization/en-029.js
create mode 100644 web/static/lib/datejs/globalization/en-AU.js
create mode 100644 web/static/lib/datejs/globalization/en-BZ.js
create mode 100644 web/static/lib/datejs/globalization/en-CA.js
create mode 100644 web/static/lib/datejs/globalization/en-GB.js
create mode 100644 web/static/lib/datejs/globalization/en-IE.js
create mode 100644 web/static/lib/datejs/globalization/en-JM.js
create mode 100644 web/static/lib/datejs/globalization/en-NZ.js
create mode 100644 web/static/lib/datejs/globalization/en-PH.js
create mode 100644 web/static/lib/datejs/globalization/en-TT.js
create mode 100644 web/static/lib/datejs/globalization/en-US.js
create mode 100644 web/static/lib/datejs/globalization/en-ZA.js
create mode 100644 web/static/lib/datejs/globalization/en-ZW.js
create mode 100644 web/static/lib/datejs/globalization/es-AR.js
create mode 100644 web/static/lib/datejs/globalization/es-BO.js
create mode 100644 web/static/lib/datejs/globalization/es-CL.js
create mode 100644 web/static/lib/datejs/globalization/es-CO.js
create mode 100644 web/static/lib/datejs/globalization/es-CR.js
create mode 100644 web/static/lib/datejs/globalization/es-DO.js
create mode 100644 web/static/lib/datejs/globalization/es-EC.js
create mode 100644 web/static/lib/datejs/globalization/es-ES.js
create mode 100644 web/static/lib/datejs/globalization/es-GT.js
create mode 100644 web/static/lib/datejs/globalization/es-HN.js
create mode 100644 web/static/lib/datejs/globalization/es-MX.js
create mode 100644 web/static/lib/datejs/globalization/es-NI.js
create mode 100644 web/static/lib/datejs/globalization/es-PA.js
create mode 100644 web/static/lib/datejs/globalization/es-PE.js
create mode 100644 web/static/lib/datejs/globalization/es-PR.js
create mode 100644 web/static/lib/datejs/globalization/es-PY.js
create mode 100644 web/static/lib/datejs/globalization/es-SV.js
create mode 100644 web/static/lib/datejs/globalization/es-UY.js
create mode 100644 web/static/lib/datejs/globalization/es-VE.js
create mode 100644 web/static/lib/datejs/globalization/et-EE.js
create mode 100644 web/static/lib/datejs/globalization/eu-ES.js
create mode 100644 web/static/lib/datejs/globalization/fa-IR.js
create mode 100644 web/static/lib/datejs/globalization/fi-FI.js
create mode 100644 web/static/lib/datejs/globalization/fo-FO.js
create mode 100644 web/static/lib/datejs/globalization/fr-BE.js
create mode 100644 web/static/lib/datejs/globalization/fr-CA.js
create mode 100644 web/static/lib/datejs/globalization/fr-CH.js
create mode 100644 web/static/lib/datejs/globalization/fr-FR.js
create mode 100644 web/static/lib/datejs/globalization/fr-LU.js
create mode 100644 web/static/lib/datejs/globalization/fr-MC.js
create mode 100644 web/static/lib/datejs/globalization/gl-ES.js
create mode 100644 web/static/lib/datejs/globalization/gu-IN.js
create mode 100644 web/static/lib/datejs/globalization/he-IL.js
create mode 100644 web/static/lib/datejs/globalization/hi-IN.js
create mode 100644 web/static/lib/datejs/globalization/hr-BA.js
create mode 100644 web/static/lib/datejs/globalization/hr-HR.js
create mode 100644 web/static/lib/datejs/globalization/hu-HU.js
create mode 100644 web/static/lib/datejs/globalization/hy-AM.js
create mode 100644 web/static/lib/datejs/globalization/id-ID.js
create mode 100644 web/static/lib/datejs/globalization/is-IS.js
create mode 100644 web/static/lib/datejs/globalization/it-CH.js
create mode 100644 web/static/lib/datejs/globalization/it-IT.js
create mode 100644 web/static/lib/datejs/globalization/iu-CA.js
create mode 100644 web/static/lib/datejs/globalization/ja-JP.js
create mode 100644 web/static/lib/datejs/globalization/ka-GE.js
create mode 100644 web/static/lib/datejs/globalization/kk-KZ.js
create mode 100644 web/static/lib/datejs/globalization/kn-IN.js
create mode 100644 web/static/lib/datejs/globalization/ko-KP.js
create mode 100644 web/static/lib/datejs/globalization/ko-KR.js
create mode 100644 web/static/lib/datejs/globalization/kok-IN.js
create mode 100644 web/static/lib/datejs/globalization/ky-KG.js
create mode 100644 web/static/lib/datejs/globalization/lt-LT.js
create mode 100644 web/static/lib/datejs/globalization/lv-LV.js
create mode 100644 web/static/lib/datejs/globalization/mi-NZ.js
create mode 100644 web/static/lib/datejs/globalization/mk-MK.js
create mode 100644 web/static/lib/datejs/globalization/ml-IN.js
create mode 100644 web/static/lib/datejs/globalization/mn-MN.js
create mode 100644 web/static/lib/datejs/globalization/mr-IN.js
create mode 100644 web/static/lib/datejs/globalization/ms-BN.js
create mode 100644 web/static/lib/datejs/globalization/ms-MY.js
create mode 100644 web/static/lib/datejs/globalization/mt-MT.js
create mode 100644 web/static/lib/datejs/globalization/nb-NO.js
create mode 100644 web/static/lib/datejs/globalization/nl-BE.js
create mode 100644 web/static/lib/datejs/globalization/nl-NL.js
create mode 100644 web/static/lib/datejs/globalization/nn-NO.js
create mode 100644 web/static/lib/datejs/globalization/ns-ZA.js
create mode 100644 web/static/lib/datejs/globalization/oc-FR.js
create mode 100644 web/static/lib/datejs/globalization/pa-IN.js
create mode 100644 web/static/lib/datejs/globalization/pl-PL.js
create mode 100644 web/static/lib/datejs/globalization/pt-BR.js
create mode 100644 web/static/lib/datejs/globalization/pt-PT.js
create mode 100644 web/static/lib/datejs/globalization/quz-BO.js
create mode 100644 web/static/lib/datejs/globalization/quz-EC.js
create mode 100644 web/static/lib/datejs/globalization/quz-PE.js
create mode 100644 web/static/lib/datejs/globalization/ro-RO.js
create mode 100644 web/static/lib/datejs/globalization/ru-RU.js
create mode 100644 web/static/lib/datejs/globalization/sa-IN.js
create mode 100644 web/static/lib/datejs/globalization/se-FI.js
create mode 100644 web/static/lib/datejs/globalization/se-NO.js
create mode 100644 web/static/lib/datejs/globalization/se-SE.js
create mode 100644 web/static/lib/datejs/globalization/si-LK.js
create mode 100644 web/static/lib/datejs/globalization/sk-SK.js
create mode 100644 web/static/lib/datejs/globalization/sl-SI.js
create mode 100644 web/static/lib/datejs/globalization/sma-NO.js
create mode 100644 web/static/lib/datejs/globalization/sma-SE.js
create mode 100644 web/static/lib/datejs/globalization/smj-NO.js
create mode 100644 web/static/lib/datejs/globalization/smj-SE.js
create mode 100644 web/static/lib/datejs/globalization/smn-FI.js
create mode 100644 web/static/lib/datejs/globalization/sms-FI.js
create mode 100644 web/static/lib/datejs/globalization/sq-AL.js
create mode 100644 web/static/lib/datejs/globalization/sr-Cyrl-BA.js
create mode 100644 web/static/lib/datejs/globalization/sr-Cyrl-CS.js
create mode 100644 web/static/lib/datejs/globalization/sr-Latn-BA.js
create mode 100644 web/static/lib/datejs/globalization/sr-Latn-CS.js
create mode 100644 web/static/lib/datejs/globalization/sr-RS.js
create mode 100644 web/static/lib/datejs/globalization/sr@latin.js
create mode 100644 web/static/lib/datejs/globalization/sv-FI.js
create mode 100644 web/static/lib/datejs/globalization/sv-SE.js
create mode 100644 web/static/lib/datejs/globalization/sw-KE.js
create mode 100644 web/static/lib/datejs/globalization/syr-SY.js
create mode 100644 web/static/lib/datejs/globalization/ta-IN.js
create mode 100644 web/static/lib/datejs/globalization/te-IN.js
create mode 100644 web/static/lib/datejs/globalization/th-TH.js
create mode 100644 web/static/lib/datejs/globalization/tlh-TLH.js
create mode 100644 web/static/lib/datejs/globalization/tn-ZA.js
create mode 100644 web/static/lib/datejs/globalization/tr-TR.js
create mode 100644 web/static/lib/datejs/globalization/tt-RU.js
create mode 100644 web/static/lib/datejs/globalization/uk-UA.js
create mode 100644 web/static/lib/datejs/globalization/ur-PK.js
create mode 100644 web/static/lib/datejs/globalization/uz-Cyrl-UZ.js
create mode 100644 web/static/lib/datejs/globalization/uz-Latn-UZ.js
create mode 100644 web/static/lib/datejs/globalization/vi-VN.js
create mode 100644 web/static/lib/datejs/globalization/xh-ZA.js
create mode 100644 web/static/lib/datejs/globalization/zh-CN.js
create mode 100644 web/static/lib/datejs/globalization/zh-HK.js
create mode 100644 web/static/lib/datejs/globalization/zh-MO.js
create mode 100644 web/static/lib/datejs/globalization/zh-SG.js
create mode 100644 web/static/lib/datejs/globalization/zh-TW.js
create mode 100644 web/static/lib/datejs/globalization/zu-ZA.js
create mode 100644 web/static/lib/datejs/parser.js
create mode 100644 web/static/lib/datejs/sugarpak.js
create mode 100644 web/static/lib/datejs/time.js
create mode 100644 web/static/lib/jquery.MD5/._README.md
create mode 100644 web/static/lib/jquery.MD5/._README.txt
create mode 100644 web/static/lib/jquery.MD5/._jquery.md5.js
create mode 100644 web/static/lib/jquery.MD5/._tests
create mode 100644 web/static/lib/jquery.MD5/README.md
create mode 100644 web/static/lib/jquery.MD5/README.txt
create mode 100644 web/static/lib/jquery.MD5/jquery.md5.js
create mode 100644 web/static/lib/jquery.MD5/tests/._index.html
create mode 100644 web/static/lib/jquery.MD5/tests/._tests.js
create mode 100644 web/static/lib/jquery.MD5/tests/index.html
create mode 100644 web/static/lib/jquery.MD5/tests/tests.js
create mode 100644 web/static/lib/jquery.autosize/._jquery.autosize.js
create mode 100644 web/static/lib/jquery.autosize/jquery.autosize.js
create mode 100644 web/static/lib/jquery.ba-bbq/._jquery.ba-bbq.js
create mode 100644 web/static/lib/jquery.ba-bbq/._jquery.ba-bbq.min.js
create mode 100644 web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js
create mode 100644 web/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js
create mode 100644 web/static/lib/jquery.blockUI/._jquery.blockUI.js
create mode 100644 web/static/lib/jquery.blockUI/jquery.blockUI.js
create mode 100644 web/static/lib/jquery.form/._jquery.form.js
create mode 100644 web/static/lib/jquery.form/jquery.form.js
create mode 100644 web/static/lib/jquery.scrollTo/._changes.txt
create mode 100644 web/static/lib/jquery.scrollTo/._jquery.scrollTo-min.js
create mode 100644 web/static/lib/jquery.scrollTo/._jquery.scrollTo.js
create mode 100644 web/static/lib/jquery.scrollTo/changes.txt
create mode 100644 web/static/lib/jquery.scrollTo/jquery.scrollTo-min.js
create mode 100644 web/static/lib/jquery.scrollTo/jquery.scrollTo.js
create mode 100644 web/static/lib/jquery.textext/._jquery.textext.css
create mode 100644 web/static/lib/jquery.textext/._jquery.textext.js
create mode 100644 web/static/lib/jquery.textext/jquery.textext.css
create mode 100644 web/static/lib/jquery.textext/jquery.textext.js
create mode 100644 web/static/lib/jquery.timeago/._jquery.timeago.js
create mode 100644 web/static/lib/jquery.timeago/jquery.timeago.js
create mode 100644 web/static/lib/jquery.tipsy/._jquery.tipsy.js
create mode 100644 web/static/lib/jquery.tipsy/._tipsy.css
create mode 100644 web/static/lib/jquery.tipsy/jquery.tipsy.js
create mode 100644 web/static/lib/jquery.tipsy/tipsy.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/._README.md
create mode 100644 web/static/lib/jquery.ui.bootstrap/._bootstrap
create mode 100644 web/static/lib/jquery.ui.bootstrap/._css
create mode 100644 web/static/lib/jquery.ui.bootstrap/._third-party
create mode 100644 web/static/lib/jquery.ui.bootstrap/README.md
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/._bootstrap.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/._js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/bootstrap.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-alerts.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-buttons.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-dropdown.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-modal.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-popover.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-scrollspy.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-tabs.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/._bootstrap-twipsy.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-alerts.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-buttons.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-dropdown.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-modal.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-popover.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-scrollspy.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-tabs.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/bootstrap/js/bootstrap-twipsy.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/._custom-theme
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/._demo.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/._less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/._images
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/._jquery-ui-1.9.0.custom.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/._jquery.ui.1.9.0.ie.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_glass_55_fbf9ee_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_glass_65_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_glass_75_dadada_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_glass_75_e6e6e6_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_glass_75_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_highlight-soft_75_cccccc_1x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-bg_inset-soft_95_fef1ec_1x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_222222_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_2e83ff_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_454545_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_888888_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_cd0a0a_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/._ui-icons_f6cf3b_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.png
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/jquery-ui-1.9.0.custom.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/custom-theme/jquery.ui.1.9.0.ie.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/demo.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._bootstrap.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._forms.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._mixins.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._patterns.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._reset.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._scaffolding.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._tables.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._type.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/._variables.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/bootstrap.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/forms.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/mixins.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/patterns.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/reset.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/scaffolding.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/tables.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/type.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/css/less/variables.less
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/._jQuery-UI-Date-Range-Picker
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/._jQuery-UI-FileInput
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/._wijmo
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/._css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/._index.html
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/._js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/css/._ui.daterangepicker.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/css/ui.daterangepicker.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/index.html
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/._date.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/._daterangepicker.jQuery.compressed.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/._daterangepicker.jQuery.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/date.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/daterangepicker.jQuery.compressed.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-Date-Range-Picker/js/daterangepicker.jQuery.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/._css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/._images
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/._js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/css/._enhanced.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/css/enhanced.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/._icon-generic.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/._icon-image.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/._icon-media.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/._icon-zip.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/icon-generic.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/icon-image.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/icon-media.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/images/icon-zip.gif
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/js/._enhance.min.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/js/._fileinput.jquery.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/js/enhance.min.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/jQuery-UI-FileInput/js/fileinput.jquery.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/._jquery.bgiframe-2.1.3-pre.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/._jquery.mousewheel.min.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/._jquery.wijmo-open.1.5.0.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/._jquery.wijmo-open.1.5.0.min.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/jquery.bgiframe-2.1.3-pre.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/jquery.mousewheel.min.js
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/jquery.wijmo-open.1.5.0.css
create mode 100644 web/static/lib/jquery.ui.bootstrap/third-party/wijmo/jquery.wijmo-open.1.5.0.min.js
create mode 100644 web/static/lib/jquery.ui.notify/._css
create mode 100644 web/static/lib/jquery.ui.notify/._js
create mode 100644 web/static/lib/jquery.ui.notify/css/._ui.notify.css
create mode 100644 web/static/lib/jquery.ui.notify/css/ui.notify.css
create mode 100644 web/static/lib/jquery.ui.notify/js/._jquery.notify.js
create mode 100644 web/static/lib/jquery.ui.notify/js/jquery.notify.js
create mode 100644 web/static/lib/jquery.ui.timepicker/._css
create mode 100644 web/static/lib/jquery.ui.timepicker/._js
create mode 100644 web/static/lib/jquery.ui.timepicker/css/._jquery-ui-timepicker-addon.css
create mode 100644 web/static/lib/jquery.ui.timepicker/css/jquery-ui-timepicker-addon.css
create mode 100644 web/static/lib/jquery.ui.timepicker/js/._jquery-ui-timepicker-addon.js
create mode 100644 web/static/lib/jquery.ui.timepicker/js/jquery-ui-timepicker-addon.js
create mode 100644 web/static/lib/jquery.ui/._css
create mode 100644 web/static/lib/jquery.ui/._js
create mode 100644 web/static/lib/jquery.ui/css/._smoothness
create mode 100644 web/static/lib/jquery.ui/css/smoothness/._images
create mode 100644 web/static/lib/jquery.ui/css/smoothness/._jquery-ui-1.9.1.custom.css
create mode 100644 web/static/lib/jquery.ui/css/smoothness/._jquery-ui-1.9.1.custom.min.css
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_flat_75_ffffff_40x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_glass_55_fbf9ee_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_glass_65_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_glass_75_dadada_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_glass_75_e6e6e6_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_glass_95_fef1ec_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-bg_highlight-soft_75_cccccc_1x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-icons_222222_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-icons_2e83ff_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-icons_454545_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-icons_888888_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/._ui-icons_cd0a0a_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
create mode 100644 web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.9.1.custom.css
create mode 100644 web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.9.1.custom.min.css
create mode 100644 web/static/lib/jquery.ui/js/._jquery-ui-1.9.1.custom.js
create mode 100644 web/static/lib/jquery.ui/js/jquery-ui-1.9.1.custom.js
create mode 100644 web/static/lib/jquery.validate/._jquery.validate.js
create mode 100644 web/static/lib/jquery.validate/jquery.validate.js
create mode 100644 web/static/lib/jquery/._jquery-1.8.3.js
create mode 100644 web/static/lib/jquery/jquery-1.8.3.js
create mode 100644 web/static/lib/py.js/._.hg_archival.txt
create mode 100644 web/static/lib/py.js/._LICENSE
create mode 100644 web/static/lib/py.js/._README.rst
create mode 100644 web/static/lib/py.js/._TODO.rst
create mode 100644 web/static/lib/py.js/._doc
create mode 100644 web/static/lib/py.js/._lib
create mode 100644 web/static/lib/py.js/.hg_archival.txt
create mode 100644 web/static/lib/py.js/LICENSE
create mode 100644 web/static/lib/py.js/README.rst
create mode 100644 web/static/lib/py.js/TODO.rst
create mode 100644 web/static/lib/py.js/doc/._Makefile
create mode 100644 web/static/lib/py.js/doc/._builtins.rst
create mode 100755 web/static/lib/py.js/doc/._conf.py
create mode 100644 web/static/lib/py.js/doc/._differences.rst
create mode 100644 web/static/lib/py.js/doc/._index.rst
create mode 100644 web/static/lib/py.js/doc/._make.bat
create mode 100644 web/static/lib/py.js/doc/._types.rst
create mode 100644 web/static/lib/py.js/doc/._utility.rst
create mode 100644 web/static/lib/py.js/doc/Makefile
create mode 100644 web/static/lib/py.js/doc/builtins.rst
create mode 100755 web/static/lib/py.js/doc/conf.py
create mode 100644 web/static/lib/py.js/doc/differences.rst
create mode 100644 web/static/lib/py.js/doc/index.rst
create mode 100644 web/static/lib/py.js/doc/make.bat
create mode 100644 web/static/lib/py.js/doc/types.rst
create mode 100644 web/static/lib/py.js/doc/utility.rst
create mode 100644 web/static/lib/py.js/lib/._py.js
create mode 100644 web/static/lib/py.js/lib/py.js
create mode 100644 web/static/lib/qunit/._qunit.css
create mode 100644 web/static/lib/qunit/._qunit.js
create mode 100644 web/static/lib/qunit/qunit.css
create mode 100644 web/static/lib/qunit/qunit.js
create mode 100644 web/static/lib/qweb/._qweb-benchmark.html
create mode 100644 web/static/lib/qweb/._qweb-benchmark.xml
create mode 100644 web/static/lib/qweb/._qweb-test-attributes.xml
create mode 100644 web/static/lib/qweb/._qweb-test-call.xml
create mode 100644 web/static/lib/qweb/._qweb-test-conditionals.xml
create mode 100644 web/static/lib/qweb/._qweb-test-extend.xml
create mode 100644 web/static/lib/qweb/._qweb-test-foreach.xml
create mode 100644 web/static/lib/qweb/._qweb-test-output.xml
create mode 100644 web/static/lib/qweb/._qweb-test-set.xml
create mode 100644 web/static/lib/qweb/._qweb-test.js.html
create mode 100644 web/static/lib/qweb/._qweb.js
create mode 100644 web/static/lib/qweb/._qweb2.js
create mode 100644 web/static/lib/qweb/qweb-benchmark.html
create mode 100644 web/static/lib/qweb/qweb-benchmark.xml
create mode 100644 web/static/lib/qweb/qweb-test-attributes.xml
create mode 100644 web/static/lib/qweb/qweb-test-call.xml
create mode 100644 web/static/lib/qweb/qweb-test-conditionals.xml
create mode 100644 web/static/lib/qweb/qweb-test-extend.xml
create mode 100644 web/static/lib/qweb/qweb-test-foreach.xml
create mode 100644 web/static/lib/qweb/qweb-test-output.xml
create mode 100644 web/static/lib/qweb/qweb-test-set.xml
create mode 100644 web/static/lib/qweb/qweb-test.js.html
create mode 100644 web/static/lib/qweb/qweb.js
create mode 100644 web/static/lib/qweb/qweb2.js
create mode 100644 web/static/lib/spinjs/._spin.js
create mode 100644 web/static/lib/spinjs/spin.js
create mode 100644 web/static/lib/underscore/._underscore-min.js
create mode 100644 web/static/lib/underscore/._underscore.js
create mode 100644 web/static/lib/underscore/._underscore.string.js
create mode 100644 web/static/lib/underscore/._underscore.string.min.js
create mode 100644 web/static/lib/underscore/underscore-min.js
create mode 100644 web/static/lib/underscore/underscore.js
create mode 100644 web/static/lib/underscore/underscore.string.js
create mode 100644 web/static/lib/underscore/underscore.string.min.js
create mode 100644 web/static/src/._css
create mode 100644 web/static/src/._font
create mode 100644 web/static/src/._img
create mode 100644 web/static/src/._js
create mode 100644 web/static/src/._xml
create mode 100644 web/static/src/css/._Makefile
create mode 100644 web/static/src/css/._base.css
create mode 100644 web/static/src/css/._base.sass
create mode 100644 web/static/src/css/._data_export.css
create mode 100644 web/static/src/css/._full.css
create mode 100644 web/static/src/css/Makefile
create mode 100644 web/static/src/css/base.css
create mode 100644 web/static/src/css/base.sass
create mode 100644 web/static/src/css/data_export.css
create mode 100644 web/static/src/css/full.css
create mode 100644 web/static/src/font/._entypo-webfont.eot
create mode 100644 web/static/src/font/._entypo-webfont.svg
create mode 100644 web/static/src/font/._entypo-webfont.ttf
create mode 100644 web/static/src/font/._entypo-webfont.woff
create mode 100644 web/static/src/font/._mnmliconsv21-webfont.eot
create mode 100644 web/static/src/font/._mnmliconsv21-webfont.svg
create mode 100644 web/static/src/font/._mnmliconsv21-webfont.ttf
create mode 100644 web/static/src/font/._mnmliconsv21-webfont.woff
create mode 100644 web/static/src/font/entypo-webfont.eot
create mode 100644 web/static/src/font/entypo-webfont.svg
create mode 100644 web/static/src/font/entypo-webfont.ttf
create mode 100644 web/static/src/font/entypo-webfont.woff
create mode 100644 web/static/src/font/mnmliconsv21-webfont.eot
create mode 100644 web/static/src/font/mnmliconsv21-webfont.svg
create mode 100644 web/static/src/font/mnmliconsv21-webfont.ttf
create mode 100644 web/static/src/font/mnmliconsv21-webfont.woff
create mode 100644 web/static/src/img/._accessories-archiver.png
create mode 100644 web/static/src/img/._add-shortcut.png
create mode 100644 web/static/src/img/._attachments-close.png
create mode 100644 web/static/src/img/._back-enable.jpg
create mode 100644 web/static/src/img/._box-a-header-a.gif
create mode 100644 web/static/src/img/._collapse.gif
create mode 100644 web/static/src/img/._db.png
create mode 100644 web/static/src/img/._down-arrow.png
create mode 100644 web/static/src/img/._expand.gif
create mode 100644 web/static/src/img/._favicon.ico
create mode 100644 web/static/src/img/._form_sheetbg.png
create mode 100644 web/static/src/img/._form_steps.png
create mode 100644 web/static/src/img/._gradientlinebg.gif
create mode 100644 web/static/src/img/._graph_background.png
create mode 100644 web/static/src/img/._header.gif
create mode 100644 web/static/src/img/._icons
create mode 100644 web/static/src/img/._iconset-a-help.gif
create mode 100644 web/static/src/img/._iconset-a-help.png
create mode 100644 web/static/src/img/._iconset-b-remove.png
create mode 100644 web/static/src/img/._iconset-d-drop.gif
create mode 100644 web/static/src/img/._logo.png
create mode 100644 web/static/src/img/._logo2.png
create mode 100644 web/static/src/img/._nologo.png
create mode 100644 web/static/src/img/._pager_first.png
create mode 100644 web/static/src/img/._pager_last.png
create mode 100644 web/static/src/img/._pager_next.png
create mode 100644 web/static/src/img/._pager_previous.png
create mode 100644 web/static/src/img/._partner.png
create mode 100644 web/static/src/img/._pencil.gif
create mode 100644 web/static/src/img/._placeholder.png
create mode 100644 web/static/src/img/._product.png
create mode 100644 web/static/src/img/._remove-shortcut.png
create mode 100644 web/static/src/img/._search_reset.gif
create mode 100644 web/static/src/img/._sep-a.gif
create mode 100644 web/static/src/img/._stock_person.png
create mode 100644 web/static/src/img/._throbber.gif
create mode 100644 web/static/src/img/._toggle-a-bg.png
create mode 100644 web/static/src/img/._ui
create mode 100644 web/static/src/img/._user_menu_avatar.png
create mode 100644 web/static/src/img/._view_empty_arrow.png
create mode 100644 web/static/src/img/._views-icons-a.png
create mode 100644 web/static/src/img/._warning.png
create mode 100644 web/static/src/img/accessories-archiver.png
create mode 100644 web/static/src/img/add-shortcut.png
create mode 100644 web/static/src/img/attachments-close.png
create mode 100644 web/static/src/img/back-enable.jpg
create mode 100644 web/static/src/img/bahmniLogo.png
create mode 100644 web/static/src/img/box-a-header-a.gif
create mode 100644 web/static/src/img/collapse.gif
create mode 100644 web/static/src/img/db.png
create mode 100644 web/static/src/img/down-arrow.png
create mode 100644 web/static/src/img/expand.gif
create mode 100644 web/static/src/img/favicon.ico
create mode 100644 web/static/src/img/flag_of_mozambique.png
create mode 100644 web/static/src/img/form_sheetbg.png
create mode 100644 web/static/src/img/form_steps.png
create mode 100644 web/static/src/img/gradientlinebg.gif
create mode 100644 web/static/src/img/graph_background.png
create mode 100644 web/static/src/img/header.gif
create mode 100644 web/static/src/img/icons/._STOCK_ABOUT.png
create mode 100644 web/static/src/img/icons/._STOCK_ADD.png
create mode 100644 web/static/src/img/icons/._STOCK_APPLY.png
create mode 100644 web/static/src/img/icons/._STOCK_BOLD.png
create mode 100644 web/static/src/img/icons/._STOCK_CANCEL.png
create mode 100644 web/static/src/img/icons/._STOCK_CDROM.png
create mode 100644 web/static/src/img/icons/._STOCK_CLEAR.png
create mode 100644 web/static/src/img/icons/._STOCK_CLOSE.png
create mode 100644 web/static/src/img/icons/._STOCK_COLOR_PICKER.png
create mode 100644 web/static/src/img/icons/._STOCK_CONNECT.png
create mode 100644 web/static/src/img/icons/._STOCK_CONVERT.png
create mode 100644 web/static/src/img/icons/._STOCK_COPY.png
create mode 100644 web/static/src/img/icons/._STOCK_CUT.png
create mode 100644 web/static/src/img/icons/._STOCK_DELETE.png
create mode 100644 web/static/src/img/icons/._STOCK_DIALOG_AUTHENTICATION.png
create mode 100644 web/static/src/img/icons/._STOCK_DIALOG_ERROR.png
create mode 100644 web/static/src/img/icons/._STOCK_DIALOG_INFO.png
create mode 100644 web/static/src/img/icons/._STOCK_DIALOG_QUESTION.png
create mode 100644 web/static/src/img/icons/._STOCK_DIALOG_WARNING.png
create mode 100644 web/static/src/img/icons/._STOCK_DIRECTORY.png
create mode 100644 web/static/src/img/icons/._STOCK_DIRECTORY_MENU.png
create mode 100644 web/static/src/img/icons/._STOCK_DISCONNECT.png
create mode 100644 web/static/src/img/icons/._STOCK_DND.png
create mode 100644 web/static/src/img/icons/._STOCK_DND_MULTIPLE.png
create mode 100644 web/static/src/img/icons/._STOCK_EDIT.png
create mode 100644 web/static/src/img/icons/._STOCK_EXECUTE.png
create mode 100644 web/static/src/img/icons/._STOCK_FILE.png
create mode 100644 web/static/src/img/icons/._STOCK_FIND.png
create mode 100644 web/static/src/img/icons/._STOCK_FIND_AND_REPLACE.png
create mode 100644 web/static/src/img/icons/._STOCK_FLOPPY.png
create mode 100644 web/static/src/img/icons/._STOCK_FULLSCREEN.png
create mode 100644 web/static/src/img/icons/._STOCK_GOTO_BOTTOM.png
create mode 100644 web/static/src/img/icons/._STOCK_GOTO_FIRST.png
create mode 100644 web/static/src/img/icons/._STOCK_GOTO_LAST.png
create mode 100644 web/static/src/img/icons/._STOCK_GOTO_TOP.png
create mode 100644 web/static/src/img/icons/._STOCK_GO_BACK.png
create mode 100644 web/static/src/img/icons/._STOCK_GO_DOWN.png
create mode 100644 web/static/src/img/icons/._STOCK_GO_FORWARD.png
create mode 100644 web/static/src/img/icons/._STOCK_GO_UP.png
create mode 100644 web/static/src/img/icons/._STOCK_HARDDISK.png
create mode 100644 web/static/src/img/icons/._STOCK_HELP.png
create mode 100644 web/static/src/img/icons/._STOCK_HOME.png
create mode 100644 web/static/src/img/icons/._STOCK_INDENT.png
create mode 100644 web/static/src/img/icons/._STOCK_INDEX.png
create mode 100644 web/static/src/img/icons/._STOCK_INFO.png
create mode 100644 web/static/src/img/icons/._STOCK_ITALIC.png
create mode 100644 web/static/src/img/icons/._STOCK_JUMP_TO.png
create mode 100644 web/static/src/img/icons/._STOCK_JUSTIFY_CENTER.png
create mode 100644 web/static/src/img/icons/._STOCK_JUSTIFY_FILL.png
create mode 100644 web/static/src/img/icons/._STOCK_JUSTIFY_LEFT.png
create mode 100644 web/static/src/img/icons/._STOCK_JUSTIFY_RIGHT.png
create mode 100644 web/static/src/img/icons/._STOCK_LEAVE_FULLSCREEN.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_FORWARD.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_NEXT.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_PAUSE.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_PLAY.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_PREVIOUS.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_RECORD.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_REWIND.png
create mode 100644 web/static/src/img/icons/._STOCK_MEDIA_STOP.png
create mode 100644 web/static/src/img/icons/._STOCK_MISSING_IMAGE.png
create mode 100644 web/static/src/img/icons/._STOCK_NETWORK.png
create mode 100644 web/static/src/img/icons/._STOCK_NEW.png
create mode 100644 web/static/src/img/icons/._STOCK_NO.png
create mode 100644 web/static/src/img/icons/._STOCK_OK.png
create mode 100644 web/static/src/img/icons/._STOCK_OPEN.png
create mode 100644 web/static/src/img/icons/._STOCK_PASTE.png
create mode 100644 web/static/src/img/icons/._STOCK_PREFERENCES.png
create mode 100644 web/static/src/img/icons/._STOCK_PRINT.png
create mode 100644 web/static/src/img/icons/._STOCK_PRINT_PREVIEW.png
create mode 100644 web/static/src/img/icons/._STOCK_PROPERTIES.png
create mode 100644 web/static/src/img/icons/._STOCK_QUIT.png
create mode 100644 web/static/src/img/icons/._STOCK_REDO.png
create mode 100644 web/static/src/img/icons/._STOCK_REFRESH.png
create mode 100644 web/static/src/img/icons/._STOCK_REMOVE.png
create mode 100644 web/static/src/img/icons/._STOCK_REVERT_TO_SAVED.png
create mode 100644 web/static/src/img/icons/._STOCK_SAVE.png
create mode 100644 web/static/src/img/icons/._STOCK_SAVE_AS.png
create mode 100644 web/static/src/img/icons/._STOCK_SELECT_COLOR.png
create mode 100644 web/static/src/img/icons/._STOCK_SELECT_FONT.png
create mode 100644 web/static/src/img/icons/._STOCK_SORT_ASCENDING.png
create mode 100644 web/static/src/img/icons/._STOCK_SORT_DESCENDING.png
create mode 100644 web/static/src/img/icons/._STOCK_SPELL_CHECK.png
create mode 100644 web/static/src/img/icons/._STOCK_STOP.png
create mode 100644 web/static/src/img/icons/._STOCK_STRIKETHROUGH.png
create mode 100644 web/static/src/img/icons/._STOCK_UNDELETE.png
create mode 100644 web/static/src/img/icons/._STOCK_UNDERLINE.png
create mode 100644 web/static/src/img/icons/._STOCK_UNDO.png
create mode 100644 web/static/src/img/icons/._STOCK_UNINDENT.png
create mode 100644 web/static/src/img/icons/._STOCK_YES.png
create mode 100644 web/static/src/img/icons/._STOCK_ZOOM_100.png
create mode 100644 web/static/src/img/icons/._STOCK_ZOOM_FIT.png
create mode 100644 web/static/src/img/icons/._STOCK_ZOOM_IN.png
create mode 100644 web/static/src/img/icons/._STOCK_ZOOM_OUT.png
create mode 100644 web/static/src/img/icons/._color-picker.png
create mode 100644 web/static/src/img/icons/._gtk-about.png
create mode 100644 web/static/src/img/icons/._gtk-add.png
create mode 100644 web/static/src/img/icons/._gtk-apply.png
create mode 100644 web/static/src/img/icons/._gtk-bold.png
create mode 100644 web/static/src/img/icons/._gtk-cancel.png
create mode 100644 web/static/src/img/icons/._gtk-cdrom.png
create mode 100644 web/static/src/img/icons/._gtk-clear.png
create mode 100644 web/static/src/img/icons/._gtk-close.png
create mode 100644 web/static/src/img/icons/._gtk-color-picker.png
create mode 100644 web/static/src/img/icons/._gtk-connect.png
create mode 100644 web/static/src/img/icons/._gtk-convert.png
create mode 100644 web/static/src/img/icons/._gtk-copy.png
create mode 100644 web/static/src/img/icons/._gtk-cut.png
create mode 100644 web/static/src/img/icons/._gtk-delete.png
create mode 100644 web/static/src/img/icons/._gtk-dialog-authentication.png
create mode 100644 web/static/src/img/icons/._gtk-dialog-error.png
create mode 100644 web/static/src/img/icons/._gtk-dialog-info.png
create mode 100644 web/static/src/img/icons/._gtk-dialog-question.png
create mode 100644 web/static/src/img/icons/._gtk-dialog-warning.png
create mode 100644 web/static/src/img/icons/._gtk-directory-remote.png
create mode 100644 web/static/src/img/icons/._gtk-directory.png
create mode 100644 web/static/src/img/icons/._gtk-disconnect.png
create mode 100644 web/static/src/img/icons/._gtk-dnd-multiple.png
create mode 100644 web/static/src/img/icons/._gtk-dnd.png
create mode 100644 web/static/src/img/icons/._gtk-edit.png
create mode 100644 web/static/src/img/icons/._gtk-execute.png
create mode 100644 web/static/src/img/icons/._gtk-file.png
create mode 100644 web/static/src/img/icons/._gtk-find-and-replace.png
create mode 100644 web/static/src/img/icons/._gtk-find.png
create mode 100644 web/static/src/img/icons/._gtk-floppy.png
create mode 100644 web/static/src/img/icons/._gtk-fullscreen.png
create mode 100644 web/static/src/img/icons/._gtk-go-back.png
create mode 100644 web/static/src/img/icons/._gtk-go-down.png
create mode 100644 web/static/src/img/icons/._gtk-go-forward.png
create mode 100644 web/static/src/img/icons/._gtk-go-up.png
create mode 100644 web/static/src/img/icons/._gtk-goto-bottom.png
create mode 100644 web/static/src/img/icons/._gtk-goto-first.png
create mode 100644 web/static/src/img/icons/._gtk-goto-last.png
create mode 100644 web/static/src/img/icons/._gtk-goto-top.png
create mode 100644 web/static/src/img/icons/._gtk-harddisk.png
create mode 100644 web/static/src/img/icons/._gtk-help.png
create mode 100644 web/static/src/img/icons/._gtk-home.png
create mode 100644 web/static/src/img/icons/._gtk-indent.png
create mode 100644 web/static/src/img/icons/._gtk-index.png
create mode 100644 web/static/src/img/icons/._gtk-info.png
create mode 100644 web/static/src/img/icons/._gtk-italic.png
create mode 100644 web/static/src/img/icons/._gtk-jump-to.png
create mode 100644 web/static/src/img/icons/._gtk-justify-center.png
create mode 100644 web/static/src/img/icons/._gtk-justify-fill.png
create mode 100644 web/static/src/img/icons/._gtk-justify-left.png
create mode 100644 web/static/src/img/icons/._gtk-justify-right.png
create mode 100644 web/static/src/img/icons/._gtk-leave-fullscreen.png
create mode 100644 web/static/src/img/icons/._gtk-media-forward.png
create mode 100644 web/static/src/img/icons/._gtk-media-next.png
create mode 100644 web/static/src/img/icons/._gtk-media-pause.png
create mode 100644 web/static/src/img/icons/._gtk-media-play.png
create mode 100644 web/static/src/img/icons/._gtk-media-previous.png
create mode 100644 web/static/src/img/icons/._gtk-media-record.png
create mode 100644 web/static/src/img/icons/._gtk-media-rewind.png
create mode 100644 web/static/src/img/icons/._gtk-media-stop.png
create mode 100644 web/static/src/img/icons/._gtk-missing-image.png
create mode 100644 web/static/src/img/icons/._gtk-network.png
create mode 100644 web/static/src/img/icons/._gtk-new.png
create mode 100644 web/static/src/img/icons/._gtk-no.png
create mode 100644 web/static/src/img/icons/._gtk-ok.png
create mode 100644 web/static/src/img/icons/._gtk-open.png
create mode 100644 web/static/src/img/icons/._gtk-paste-v.png
create mode 100644 web/static/src/img/icons/._gtk-paste.png
create mode 100644 web/static/src/img/icons/._gtk-preferences.png
create mode 100644 web/static/src/img/icons/._gtk-print-preview.png
create mode 100644 web/static/src/img/icons/._gtk-print.png
create mode 100644 web/static/src/img/icons/._gtk-properties.png
create mode 100644 web/static/src/img/icons/._gtk-quit.png
create mode 100644 web/static/src/img/icons/._gtk-redo.png
create mode 100644 web/static/src/img/icons/._gtk-refresh.png
create mode 100644 web/static/src/img/icons/._gtk-remove.png
create mode 100644 web/static/src/img/icons/._gtk-revert-to-saved.png
create mode 100644 web/static/src/img/icons/._gtk-save-as.png
create mode 100644 web/static/src/img/icons/._gtk-save.png
create mode 100644 web/static/src/img/icons/._gtk-select-color.png
create mode 100644 web/static/src/img/icons/._gtk-select-font.png
create mode 100644 web/static/src/img/icons/._gtk-sort-ascending.png
create mode 100644 web/static/src/img/icons/._gtk-sort-descending.png
create mode 100644 web/static/src/img/icons/._gtk-spell-check.png
create mode 100644 web/static/src/img/icons/._gtk-stop.png
create mode 100644 web/static/src/img/icons/._gtk-strikethrough.png
create mode 100644 web/static/src/img/icons/._gtk-undelete.png
create mode 100644 web/static/src/img/icons/._gtk-underline.png
create mode 100644 web/static/src/img/icons/._gtk-undo.png
create mode 100644 web/static/src/img/icons/._gtk-unindent.png
create mode 100644 web/static/src/img/icons/._gtk-yes.png
create mode 100644 web/static/src/img/icons/._gtk-zoom-100.png
create mode 100644 web/static/src/img/icons/._gtk-zoom-fit.png
create mode 100644 web/static/src/img/icons/._gtk-zoom-in.png
create mode 100644 web/static/src/img/icons/._gtk-zoom-out.png
create mode 100644 web/static/src/img/icons/._index1.jpeg
create mode 100644 web/static/src/img/icons/._index2.jpeg
create mode 100644 web/static/src/img/icons/._kanban-apply.png
create mode 100644 web/static/src/img/icons/._kanban-pause.png
create mode 100644 web/static/src/img/icons/._kanban-stop.png
create mode 100644 web/static/src/img/icons/._save-document.png
create mode 100644 web/static/src/img/icons/._star-off.png
create mode 100644 web/static/src/img/icons/._star-on.png
create mode 100644 web/static/src/img/icons/._stock.png
create mode 100644 web/static/src/img/icons/._stock_calendar.png
create mode 100644 web/static/src/img/icons/._stock_gantt.png
create mode 100644 web/static/src/img/icons/._stock_graph.png
create mode 100644 web/static/src/img/icons/._stock_log.png
create mode 100644 web/static/src/img/icons/._stock_person.png
create mode 100644 web/static/src/img/icons/._stock_translate.png
create mode 100644 web/static/src/img/icons/._terp-accessories-archiver+.png
create mode 100644 web/static/src/img/icons/._terp-accessories-archiver-minus.png
create mode 100644 web/static/src/img/icons/._terp-accessories-archiver.png
create mode 100644 web/static/src/img/icons/._terp-account.png
create mode 100644 web/static/src/img/icons/._terp-administration.png
create mode 100644 web/static/src/img/icons/._terp-calendar.png
create mode 100644 web/static/src/img/icons/._terp-call-start.png
create mode 100644 web/static/src/img/icons/._terp-camera_test.png
create mode 100644 web/static/src/img/icons/._terp-check.png
create mode 100644 web/static/src/img/icons/._terp-crm.png
create mode 100644 web/static/src/img/icons/._terp-dialog-close.png
create mode 100644 web/static/src/img/icons/._terp-document-new.png
create mode 100644 web/static/src/img/icons/._terp-dolar.png
create mode 100644 web/static/src/img/icons/._terp-dolar_ok!.png
create mode 100644 web/static/src/img/icons/._terp-emblem-important.png
create mode 100644 web/static/src/img/icons/._terp-face-plain.png
create mode 100644 web/static/src/img/icons/._terp-folder-blue.png
create mode 100644 web/static/src/img/icons/._terp-folder-green.png
create mode 100644 web/static/src/img/icons/._terp-folder-orange.png
create mode 100644 web/static/src/img/icons/._terp-folder-violet.png
create mode 100644 web/static/src/img/icons/._terp-folder-yellow.png
create mode 100644 web/static/src/img/icons/._terp-gdu-smart-failing.png
create mode 100644 web/static/src/img/icons/._terp-gnome-cpu-frequency-applet+.png
create mode 100644 web/static/src/img/icons/._terp-go-home.png
create mode 100644 web/static/src/img/icons/._terp-go-month.png
create mode 100644 web/static/src/img/icons/._terp-go-today.png
create mode 100644 web/static/src/img/icons/._terp-go-week.png
create mode 100644 web/static/src/img/icons/._terp-go-year.png
create mode 100644 web/static/src/img/icons/._terp-graph.png
create mode 100644 web/static/src/img/icons/._terp-gtk-go-back-ltr.png
create mode 100644 web/static/src/img/icons/._terp-gtk-go-back-rtl.png
create mode 100644 web/static/src/img/icons/._terp-gtk-jump-to-ltr.png
create mode 100644 web/static/src/img/icons/._terp-gtk-jump-to-rtl.png
create mode 100644 web/static/src/img/icons/._terp-gtk-media-pause.png
create mode 100644 web/static/src/img/icons/._terp-gtk-select-all.png
create mode 100644 web/static/src/img/icons/._terp-gtk-stop.png
create mode 100644 web/static/src/img/icons/._terp-hr.png
create mode 100644 web/static/src/img/icons/._terp-idea.png
create mode 100644 web/static/src/img/icons/._terp-locked.png
create mode 100644 web/static/src/img/icons/._terp-mail-.png
create mode 100644 web/static/src/img/icons/._terp-mail-forward.png
create mode 100644 web/static/src/img/icons/._terp-mail-message-new.png
create mode 100644 web/static/src/img/icons/._terp-mail-replied.png
create mode 100644 web/static/src/img/icons/._terp-mail_delete.png
create mode 100644 web/static/src/img/icons/._terp-marketing.png
create mode 100644 web/static/src/img/icons/._terp-mrp.png
create mode 100644 web/static/src/img/icons/._terp-partner.png
create mode 100644 web/static/src/img/icons/._terp-personal+.png
create mode 100644 web/static/src/img/icons/._terp-personal-.png
create mode 100644 web/static/src/img/icons/._terp-personal.png
create mode 100644 web/static/src/img/icons/._terp-product.png
create mode 100644 web/static/src/img/icons/._terp-project.png
create mode 100644 web/static/src/img/icons/._terp-purchase.png
create mode 100644 web/static/src/img/icons/._terp-rating-rated.png
create mode 100644 web/static/src/img/icons/._terp-report.png
create mode 100644 web/static/src/img/icons/._terp-sale.png
create mode 100644 web/static/src/img/icons/._terp-stage.png
create mode 100644 web/static/src/img/icons/._terp-stock.png
create mode 100644 web/static/src/img/icons/._terp-stock_align_left_24.png
create mode 100644 web/static/src/img/icons/._terp-stock_effects-object-colorize.png
create mode 100644 web/static/src/img/icons/._terp-stock_format-default.png
create mode 100644 web/static/src/img/icons/._terp-stock_format-scientific.png
create mode 100644 web/static/src/img/icons/._terp-stock_symbol-selection.png
create mode 100644 web/static/src/img/icons/._terp-stock_zoom.png
create mode 100644 web/static/src/img/icons/._terp-tools.png
create mode 100644 web/static/src/img/icons/._terp-translate.png
create mode 100644 web/static/src/img/icons/STOCK_ABOUT.png
create mode 100644 web/static/src/img/icons/STOCK_ADD.png
create mode 100644 web/static/src/img/icons/STOCK_APPLY.png
create mode 100644 web/static/src/img/icons/STOCK_BOLD.png
create mode 100644 web/static/src/img/icons/STOCK_CANCEL.png
create mode 100644 web/static/src/img/icons/STOCK_CDROM.png
create mode 100644 web/static/src/img/icons/STOCK_CLEAR.png
create mode 100644 web/static/src/img/icons/STOCK_CLOSE.png
create mode 100644 web/static/src/img/icons/STOCK_COLOR_PICKER.png
create mode 100644 web/static/src/img/icons/STOCK_CONNECT.png
create mode 100644 web/static/src/img/icons/STOCK_CONVERT.png
create mode 100644 web/static/src/img/icons/STOCK_COPY.png
create mode 100644 web/static/src/img/icons/STOCK_CUT.png
create mode 100644 web/static/src/img/icons/STOCK_DELETE.png
create mode 100644 web/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png
create mode 100644 web/static/src/img/icons/STOCK_DIALOG_ERROR.png
create mode 100644 web/static/src/img/icons/STOCK_DIALOG_INFO.png
create mode 100644 web/static/src/img/icons/STOCK_DIALOG_QUESTION.png
create mode 100644 web/static/src/img/icons/STOCK_DIALOG_WARNING.png
create mode 100644 web/static/src/img/icons/STOCK_DIRECTORY.png
create mode 100644 web/static/src/img/icons/STOCK_DIRECTORY_MENU.png
create mode 100644 web/static/src/img/icons/STOCK_DISCONNECT.png
create mode 100644 web/static/src/img/icons/STOCK_DND.png
create mode 100644 web/static/src/img/icons/STOCK_DND_MULTIPLE.png
create mode 100644 web/static/src/img/icons/STOCK_EDIT.png
create mode 100644 web/static/src/img/icons/STOCK_EXECUTE.png
create mode 100644 web/static/src/img/icons/STOCK_FILE.png
create mode 100644 web/static/src/img/icons/STOCK_FIND.png
create mode 100644 web/static/src/img/icons/STOCK_FIND_AND_REPLACE.png
create mode 100644 web/static/src/img/icons/STOCK_FLOPPY.png
create mode 100644 web/static/src/img/icons/STOCK_FULLSCREEN.png
create mode 100644 web/static/src/img/icons/STOCK_GOTO_BOTTOM.png
create mode 100644 web/static/src/img/icons/STOCK_GOTO_FIRST.png
create mode 100644 web/static/src/img/icons/STOCK_GOTO_LAST.png
create mode 100644 web/static/src/img/icons/STOCK_GOTO_TOP.png
create mode 100644 web/static/src/img/icons/STOCK_GO_BACK.png
create mode 100644 web/static/src/img/icons/STOCK_GO_DOWN.png
create mode 100644 web/static/src/img/icons/STOCK_GO_FORWARD.png
create mode 100644 web/static/src/img/icons/STOCK_GO_UP.png
create mode 100644 web/static/src/img/icons/STOCK_HARDDISK.png
create mode 100644 web/static/src/img/icons/STOCK_HELP.png
create mode 100644 web/static/src/img/icons/STOCK_HOME.png
create mode 100644 web/static/src/img/icons/STOCK_INDENT.png
create mode 100644 web/static/src/img/icons/STOCK_INDEX.png
create mode 100644 web/static/src/img/icons/STOCK_INFO.png
create mode 100644 web/static/src/img/icons/STOCK_ITALIC.png
create mode 100644 web/static/src/img/icons/STOCK_JUMP_TO.png
create mode 100644 web/static/src/img/icons/STOCK_JUSTIFY_CENTER.png
create mode 100644 web/static/src/img/icons/STOCK_JUSTIFY_FILL.png
create mode 100644 web/static/src/img/icons/STOCK_JUSTIFY_LEFT.png
create mode 100644 web/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png
create mode 100644 web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_NEXT.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_PLAY.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_RECORD.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_REWIND.png
create mode 100644 web/static/src/img/icons/STOCK_MEDIA_STOP.png
create mode 100644 web/static/src/img/icons/STOCK_MISSING_IMAGE.png
create mode 100644 web/static/src/img/icons/STOCK_NETWORK.png
create mode 100644 web/static/src/img/icons/STOCK_NEW.png
create mode 100644 web/static/src/img/icons/STOCK_NO.png
create mode 100644 web/static/src/img/icons/STOCK_OK.png
create mode 100644 web/static/src/img/icons/STOCK_OPEN.png
create mode 100644 web/static/src/img/icons/STOCK_PASTE.png
create mode 100644 web/static/src/img/icons/STOCK_PREFERENCES.png
create mode 100644 web/static/src/img/icons/STOCK_PRINT.png
create mode 100644 web/static/src/img/icons/STOCK_PRINT_PREVIEW.png
create mode 100644 web/static/src/img/icons/STOCK_PROPERTIES.png
create mode 100644 web/static/src/img/icons/STOCK_QUIT.png
create mode 100644 web/static/src/img/icons/STOCK_REDO.png
create mode 100644 web/static/src/img/icons/STOCK_REFRESH.png
create mode 100644 web/static/src/img/icons/STOCK_REMOVE.png
create mode 100644 web/static/src/img/icons/STOCK_REVERT_TO_SAVED.png
create mode 100644 web/static/src/img/icons/STOCK_SAVE.png
create mode 100644 web/static/src/img/icons/STOCK_SAVE_AS.png
create mode 100644 web/static/src/img/icons/STOCK_SELECT_COLOR.png
create mode 100644 web/static/src/img/icons/STOCK_SELECT_FONT.png
create mode 100644 web/static/src/img/icons/STOCK_SORT_ASCENDING.png
create mode 100644 web/static/src/img/icons/STOCK_SORT_DESCENDING.png
create mode 100644 web/static/src/img/icons/STOCK_SPELL_CHECK.png
create mode 100644 web/static/src/img/icons/STOCK_STOP.png
create mode 100644 web/static/src/img/icons/STOCK_STRIKETHROUGH.png
create mode 100644 web/static/src/img/icons/STOCK_UNDELETE.png
create mode 100644 web/static/src/img/icons/STOCK_UNDERLINE.png
create mode 100644 web/static/src/img/icons/STOCK_UNDO.png
create mode 100644 web/static/src/img/icons/STOCK_UNINDENT.png
create mode 100644 web/static/src/img/icons/STOCK_YES.png
create mode 100644 web/static/src/img/icons/STOCK_ZOOM_100.png
create mode 100644 web/static/src/img/icons/STOCK_ZOOM_FIT.png
create mode 100644 web/static/src/img/icons/STOCK_ZOOM_IN.png
create mode 100644 web/static/src/img/icons/STOCK_ZOOM_OUT.png
create mode 100644 web/static/src/img/icons/color-picker.png
create mode 100644 web/static/src/img/icons/gtk-about.png
create mode 100644 web/static/src/img/icons/gtk-add.png
create mode 100644 web/static/src/img/icons/gtk-apply.png
create mode 100644 web/static/src/img/icons/gtk-bold.png
create mode 100644 web/static/src/img/icons/gtk-cancel.png
create mode 100644 web/static/src/img/icons/gtk-cdrom.png
create mode 100644 web/static/src/img/icons/gtk-clear.png
create mode 100644 web/static/src/img/icons/gtk-close.png
create mode 100644 web/static/src/img/icons/gtk-color-picker.png
create mode 100644 web/static/src/img/icons/gtk-connect.png
create mode 100644 web/static/src/img/icons/gtk-convert.png
create mode 100644 web/static/src/img/icons/gtk-copy.png
create mode 100644 web/static/src/img/icons/gtk-cut.png
create mode 100644 web/static/src/img/icons/gtk-delete.png
create mode 100644 web/static/src/img/icons/gtk-dialog-authentication.png
create mode 100644 web/static/src/img/icons/gtk-dialog-error.png
create mode 100644 web/static/src/img/icons/gtk-dialog-info.png
create mode 100644 web/static/src/img/icons/gtk-dialog-question.png
create mode 100644 web/static/src/img/icons/gtk-dialog-warning.png
create mode 100644 web/static/src/img/icons/gtk-directory-remote.png
create mode 100644 web/static/src/img/icons/gtk-directory.png
create mode 100644 web/static/src/img/icons/gtk-disconnect.png
create mode 100644 web/static/src/img/icons/gtk-dnd-multiple.png
create mode 100644 web/static/src/img/icons/gtk-dnd.png
create mode 100644 web/static/src/img/icons/gtk-edit.png
create mode 100644 web/static/src/img/icons/gtk-execute.png
create mode 100644 web/static/src/img/icons/gtk-file.png
create mode 100644 web/static/src/img/icons/gtk-find-and-replace.png
create mode 100644 web/static/src/img/icons/gtk-find.png
create mode 100644 web/static/src/img/icons/gtk-floppy.png
create mode 100644 web/static/src/img/icons/gtk-fullscreen.png
create mode 100644 web/static/src/img/icons/gtk-go-back.png
create mode 100644 web/static/src/img/icons/gtk-go-down.png
create mode 100644 web/static/src/img/icons/gtk-go-forward.png
create mode 100644 web/static/src/img/icons/gtk-go-up.png
create mode 100644 web/static/src/img/icons/gtk-goto-bottom.png
create mode 100644 web/static/src/img/icons/gtk-goto-first.png
create mode 100644 web/static/src/img/icons/gtk-goto-last.png
create mode 100644 web/static/src/img/icons/gtk-goto-top.png
create mode 100644 web/static/src/img/icons/gtk-harddisk.png
create mode 100644 web/static/src/img/icons/gtk-help.png
create mode 100644 web/static/src/img/icons/gtk-home.png
create mode 100644 web/static/src/img/icons/gtk-indent.png
create mode 100644 web/static/src/img/icons/gtk-index.png
create mode 100644 web/static/src/img/icons/gtk-info.png
create mode 100644 web/static/src/img/icons/gtk-italic.png
create mode 100644 web/static/src/img/icons/gtk-jump-to.png
create mode 100644 web/static/src/img/icons/gtk-justify-center.png
create mode 100644 web/static/src/img/icons/gtk-justify-fill.png
create mode 100644 web/static/src/img/icons/gtk-justify-left.png
create mode 100644 web/static/src/img/icons/gtk-justify-right.png
create mode 100644 web/static/src/img/icons/gtk-leave-fullscreen.png
create mode 100644 web/static/src/img/icons/gtk-media-forward.png
create mode 100644 web/static/src/img/icons/gtk-media-next.png
create mode 100644 web/static/src/img/icons/gtk-media-pause.png
create mode 100644 web/static/src/img/icons/gtk-media-play.png
create mode 100644 web/static/src/img/icons/gtk-media-previous.png
create mode 100644 web/static/src/img/icons/gtk-media-record.png
create mode 100644 web/static/src/img/icons/gtk-media-rewind.png
create mode 100644 web/static/src/img/icons/gtk-media-stop.png
create mode 100644 web/static/src/img/icons/gtk-missing-image.png
create mode 100644 web/static/src/img/icons/gtk-network.png
create mode 100644 web/static/src/img/icons/gtk-new.png
create mode 100644 web/static/src/img/icons/gtk-no.png
create mode 100644 web/static/src/img/icons/gtk-ok.png
create mode 100644 web/static/src/img/icons/gtk-open.png
create mode 100644 web/static/src/img/icons/gtk-paste-v.png
create mode 100644 web/static/src/img/icons/gtk-paste.png
create mode 100644 web/static/src/img/icons/gtk-preferences.png
create mode 100644 web/static/src/img/icons/gtk-print-preview.png
create mode 100644 web/static/src/img/icons/gtk-print.png
create mode 100644 web/static/src/img/icons/gtk-properties.png
create mode 100644 web/static/src/img/icons/gtk-quit.png
create mode 100644 web/static/src/img/icons/gtk-redo.png
create mode 100644 web/static/src/img/icons/gtk-refresh.png
create mode 100644 web/static/src/img/icons/gtk-remove.png
create mode 100644 web/static/src/img/icons/gtk-revert-to-saved.png
create mode 100644 web/static/src/img/icons/gtk-save-as.png
create mode 100644 web/static/src/img/icons/gtk-save.png
create mode 100644 web/static/src/img/icons/gtk-select-color.png
create mode 100644 web/static/src/img/icons/gtk-select-font.png
create mode 100644 web/static/src/img/icons/gtk-sort-ascending.png
create mode 100644 web/static/src/img/icons/gtk-sort-descending.png
create mode 100644 web/static/src/img/icons/gtk-spell-check.png
create mode 100644 web/static/src/img/icons/gtk-stop.png
create mode 100644 web/static/src/img/icons/gtk-strikethrough.png
create mode 100644 web/static/src/img/icons/gtk-undelete.png
create mode 100644 web/static/src/img/icons/gtk-underline.png
create mode 100644 web/static/src/img/icons/gtk-undo.png
create mode 100644 web/static/src/img/icons/gtk-unindent.png
create mode 100644 web/static/src/img/icons/gtk-yes.png
create mode 100644 web/static/src/img/icons/gtk-zoom-100.png
create mode 100644 web/static/src/img/icons/gtk-zoom-fit.png
create mode 100644 web/static/src/img/icons/gtk-zoom-in.png
create mode 100644 web/static/src/img/icons/gtk-zoom-out.png
create mode 100644 web/static/src/img/icons/index1.jpeg
create mode 100644 web/static/src/img/icons/index2.jpeg
create mode 100644 web/static/src/img/icons/kanban-apply.png
create mode 100644 web/static/src/img/icons/kanban-pause.png
create mode 100644 web/static/src/img/icons/kanban-stop.png
create mode 100644 web/static/src/img/icons/save-document.png
create mode 100644 web/static/src/img/icons/star-off.png
create mode 100644 web/static/src/img/icons/star-on.png
create mode 100644 web/static/src/img/icons/stock.png
create mode 100644 web/static/src/img/icons/stock_calendar.png
create mode 100644 web/static/src/img/icons/stock_gantt.png
create mode 100644 web/static/src/img/icons/stock_graph.png
create mode 100644 web/static/src/img/icons/stock_log.png
create mode 100644 web/static/src/img/icons/stock_person.png
create mode 100644 web/static/src/img/icons/stock_translate.png
create mode 100644 web/static/src/img/icons/terp-accessories-archiver+.png
create mode 100644 web/static/src/img/icons/terp-accessories-archiver-minus.png
create mode 100644 web/static/src/img/icons/terp-accessories-archiver.png
create mode 100644 web/static/src/img/icons/terp-account.png
create mode 100644 web/static/src/img/icons/terp-administration.png
create mode 100644 web/static/src/img/icons/terp-calendar.png
create mode 100644 web/static/src/img/icons/terp-call-start.png
create mode 100644 web/static/src/img/icons/terp-camera_test.png
create mode 100644 web/static/src/img/icons/terp-check.png
create mode 100644 web/static/src/img/icons/terp-crm.png
create mode 100644 web/static/src/img/icons/terp-dialog-close.png
create mode 100644 web/static/src/img/icons/terp-document-new.png
create mode 100644 web/static/src/img/icons/terp-dolar.png
create mode 100644 web/static/src/img/icons/terp-dolar_ok!.png
create mode 100644 web/static/src/img/icons/terp-emblem-important.png
create mode 100644 web/static/src/img/icons/terp-face-plain.png
create mode 100644 web/static/src/img/icons/terp-folder-blue.png
create mode 100644 web/static/src/img/icons/terp-folder-green.png
create mode 100644 web/static/src/img/icons/terp-folder-orange.png
create mode 100644 web/static/src/img/icons/terp-folder-violet.png
create mode 100644 web/static/src/img/icons/terp-folder-yellow.png
create mode 100644 web/static/src/img/icons/terp-gdu-smart-failing.png
create mode 100644 web/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png
create mode 100644 web/static/src/img/icons/terp-go-home.png
create mode 100644 web/static/src/img/icons/terp-go-month.png
create mode 100644 web/static/src/img/icons/terp-go-today.png
create mode 100644 web/static/src/img/icons/terp-go-week.png
create mode 100644 web/static/src/img/icons/terp-go-year.png
create mode 100644 web/static/src/img/icons/terp-graph.png
create mode 100644 web/static/src/img/icons/terp-gtk-go-back-ltr.png
create mode 100644 web/static/src/img/icons/terp-gtk-go-back-rtl.png
create mode 100644 web/static/src/img/icons/terp-gtk-jump-to-ltr.png
create mode 100644 web/static/src/img/icons/terp-gtk-jump-to-rtl.png
create mode 100644 web/static/src/img/icons/terp-gtk-media-pause.png
create mode 100644 web/static/src/img/icons/terp-gtk-select-all.png
create mode 100644 web/static/src/img/icons/terp-gtk-stop.png
create mode 100644 web/static/src/img/icons/terp-hr.png
create mode 100644 web/static/src/img/icons/terp-idea.png
create mode 100644 web/static/src/img/icons/terp-locked.png
create mode 100644 web/static/src/img/icons/terp-mail-.png
create mode 100644 web/static/src/img/icons/terp-mail-forward.png
create mode 100644 web/static/src/img/icons/terp-mail-message-new.png
create mode 100644 web/static/src/img/icons/terp-mail-replied.png
create mode 100644 web/static/src/img/icons/terp-mail_delete.png
create mode 100644 web/static/src/img/icons/terp-marketing.png
create mode 100644 web/static/src/img/icons/terp-mrp.png
create mode 100644 web/static/src/img/icons/terp-partner.png
create mode 100644 web/static/src/img/icons/terp-personal+.png
create mode 100644 web/static/src/img/icons/terp-personal-.png
create mode 100644 web/static/src/img/icons/terp-personal.png
create mode 100644 web/static/src/img/icons/terp-product.png
create mode 100644 web/static/src/img/icons/terp-project.png
create mode 100644 web/static/src/img/icons/terp-purchase.png
create mode 100644 web/static/src/img/icons/terp-rating-rated.png
create mode 100644 web/static/src/img/icons/terp-report.png
create mode 100644 web/static/src/img/icons/terp-sale.png
create mode 100644 web/static/src/img/icons/terp-stage.png
create mode 100644 web/static/src/img/icons/terp-stock.png
create mode 100644 web/static/src/img/icons/terp-stock_align_left_24.png
create mode 100644 web/static/src/img/icons/terp-stock_effects-object-colorize.png
create mode 100644 web/static/src/img/icons/terp-stock_format-default.png
create mode 100644 web/static/src/img/icons/terp-stock_format-scientific.png
create mode 100644 web/static/src/img/icons/terp-stock_symbol-selection.png
create mode 100644 web/static/src/img/icons/terp-stock_zoom.png
create mode 100644 web/static/src/img/icons/terp-tools.png
create mode 100644 web/static/src/img/icons/terp-translate.png
create mode 100644 web/static/src/img/iconset-a-help.gif
create mode 100644 web/static/src/img/iconset-a-help.png
create mode 100644 web/static/src/img/iconset-b-remove.png
create mode 100644 web/static/src/img/iconset-d-drop.gif
create mode 100644 web/static/src/img/logo.png
create mode 100644 web/static/src/img/logo2.png
create mode 100644 web/static/src/img/nologo.png
create mode 100644 web/static/src/img/pager_first.png
create mode 100644 web/static/src/img/pager_last.png
create mode 100644 web/static/src/img/pager_next.png
create mode 100644 web/static/src/img/pager_previous.png
create mode 100644 web/static/src/img/partner.png
create mode 100644 web/static/src/img/pencil.gif
create mode 100644 web/static/src/img/placeholder.png
create mode 100644 web/static/src/img/product.png
create mode 100644 web/static/src/img/remove-shortcut.png
create mode 100644 web/static/src/img/search_reset.gif
create mode 100644 web/static/src/img/sep-a.gif
create mode 100644 web/static/src/img/stock_person.png
create mode 100644 web/static/src/img/throbber.gif
create mode 100644 web/static/src/img/toggle-a-bg.png
create mode 100644 web/static/src/img/ui/._field_calendar.png
create mode 100644 web/static/src/img/ui/._group-expanded.png
create mode 100644 web/static/src/img/ui/._group-folded.png
create mode 100644 web/static/src/img/ui/field_calendar.png
create mode 100644 web/static/src/img/ui/group-expanded.png
create mode 100644 web/static/src/img/ui/group-folded.png
create mode 100644 web/static/src/img/user_menu_avatar.png
create mode 100644 web/static/src/img/view_empty_arrow.png
create mode 100644 web/static/src/img/views-icons-a.png
create mode 100644 web/static/src/img/warning.png
create mode 100644 web/static/src/js/._boot.js
create mode 100644 web/static/src/js/._chrome.js
create mode 100644 web/static/src/js/._corelib.js
create mode 100644 web/static/src/js/._coresetup.js
create mode 100644 web/static/src/js/._data.js
create mode 100644 web/static/src/js/._data_export.js
create mode 100644 web/static/src/js/._dates.js
create mode 100644 web/static/src/js/._formats.js
create mode 100644 web/static/src/js/._pyeval.js
create mode 100644 web/static/src/js/._search.js
create mode 100644 web/static/src/js/._test_support.js
create mode 100644 web/static/src/js/._testing.js
create mode 100644 web/static/src/js/._view_form.js
create mode 100644 web/static/src/js/._view_list.js
create mode 100644 web/static/src/js/._view_list_editable.js
create mode 100644 web/static/src/js/._view_tree.js
create mode 100644 web/static/src/js/._views.js
create mode 100644 web/static/src/js/boot.js
create mode 100644 web/static/src/js/chrome.js
create mode 100644 web/static/src/js/corelib.js
create mode 100644 web/static/src/js/coresetup.js
create mode 100644 web/static/src/js/data.js
create mode 100644 web/static/src/js/data_export.js
create mode 100644 web/static/src/js/dates.js
create mode 100644 web/static/src/js/formats.js
create mode 100644 web/static/src/js/pyeval.js
create mode 100644 web/static/src/js/search.js
create mode 100644 web/static/src/js/test_support.js
create mode 100644 web/static/src/js/testing.js
create mode 100644 web/static/src/js/view_form.js
create mode 100644 web/static/src/js/view_list.js
create mode 100644 web/static/src/js/view_list_editable.js
create mode 100644 web/static/src/js/view_tree.js
create mode 100644 web/static/src/js/views.js
create mode 100644 web/static/src/xml/._base.xml
create mode 100644 web/static/src/xml/base.xml
create mode 100644 web/static/test/._Widget.js
create mode 100644 web/static/test/._class.js
create mode 100644 web/static/test/._evals.js
create mode 100644 web/static/test/._form.js
create mode 100644 web/static/test/._formats.js
create mode 100644 web/static/test/._fulltest
create mode 100644 web/static/test/._fulltest.html
create mode 100644 web/static/test/._list-editable.js
create mode 100644 web/static/test/._list-utils.js
create mode 100644 web/static/test/._list.js
create mode 100644 web/static/test/._mutex.js
create mode 100644 web/static/test/._qunit-doc.js
create mode 100644 web/static/test/._registry.js
create mode 100644 web/static/test/._rpc.js
create mode 100644 web/static/test/._search.js
create mode 100644 web/static/test/._testing.js
create mode 100644 web/static/test/Widget.js
create mode 100644 web/static/test/class.js
create mode 100644 web/static/test/evals.js
create mode 100644 web/static/test/form.js
create mode 100644 web/static/test/formats.js
create mode 100644 web/static/test/fulltest.html
create mode 100644 web/static/test/fulltest/._dataset.js
create mode 100644 web/static/test/fulltest/dataset.js
create mode 100644 web/static/test/list-editable.js
create mode 100644 web/static/test/list-utils.js
create mode 100644 web/static/test/list.js
create mode 100644 web/static/test/mutex.js
create mode 100644 web/static/test/qunit-doc.js
create mode 100644 web/static/test/registry.js
create mode 100644 web/static/test/rpc.js
create mode 100644 web/static/test/search.js
create mode 100644 web/static/test/testing.js
create mode 100755 web/tests/.___init__.py
create mode 100644 web/tests/._qunitsuite
create mode 100755 web/tests/._test_dataset.py
create mode 100755 web/tests/._test_js.py
create mode 100755 web/tests/._test_menu.py
create mode 100755 web/tests/._test_serving_base.py
create mode 100755 web/tests/__init__.py
create mode 100644 web/tests/qunitsuite/._README.rst
create mode 100755 web/tests/qunitsuite/.___init__.py
create mode 100644 web/tests/qunitsuite/._grunt
create mode 100755 web/tests/qunitsuite/._suite.py
create mode 100644 web/tests/qunitsuite/README.rst
create mode 100755 web/tests/qunitsuite/__init__.py
create mode 100644 web/tests/qunitsuite/grunt/._bootstrap.js
create mode 100644 web/tests/qunitsuite/grunt/._license
create mode 100644 web/tests/qunitsuite/grunt/._phantomjs.json
create mode 100644 web/tests/qunitsuite/grunt/._qunit-phantomjs-bridge.js
create mode 100644 web/tests/qunitsuite/grunt/bootstrap.js
create mode 100644 web/tests/qunitsuite/grunt/license
create mode 100644 web/tests/qunitsuite/grunt/phantomjs.json
create mode 100644 web/tests/qunitsuite/grunt/qunit-phantomjs-bridge.js
create mode 100755 web/tests/qunitsuite/suite.py
create mode 100755 web/tests/test_dataset.py
create mode 100755 web/tests/test_js.py
create mode 100755 web/tests/test_menu.py
create mode 100755 web/tests/test_serving_base.py
diff --git a/auth_signup/.___init__.py b/auth_signup/.___init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/.___openerp__.py b/auth_signup/.___openerp__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._auth_signup_data.xml b/auth_signup/._auth_signup_data.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._controllers b/auth_signup/._controllers
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._i18n b/auth_signup/._i18n
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._res_config.py b/auth_signup/._res_config.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._res_config.xml b/auth_signup/._res_config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._res_users.py b/auth_signup/._res_users.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._res_users_view.xml b/auth_signup/._res_users_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/._static b/auth_signup/._static
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/__init__.py b/auth_signup/__init__.py
new file mode 100755
index 0000000..2331ae6
--- /dev/null
+++ b/auth_signup/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see
+#
+##############################################################################
+
+import controllers
+import res_config
+import res_users
diff --git a/auth_signup/__openerp__.py b/auth_signup/__openerp__.py
new file mode 100755
index 0000000..4e1ada7
--- /dev/null
+++ b/auth_signup/__openerp__.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2009-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see
+#
+##############################################################################
+
+{
+ 'name': 'Signup',
+ 'description': """
+Allow users to sign up and reset their password
+===============================================
+ """,
+ 'author': 'OpenERP SA',
+ 'version': '1.0',
+ 'category': 'Authentication',
+ 'website': 'http://www.openerp.com',
+ 'installable': True,
+ 'auto_install': True,
+ 'depends': [
+ 'base_setup',
+ 'email_template',
+ ],
+ 'data': [
+ 'auth_signup_data.xml',
+ 'res_config.xml',
+ 'res_users_view.xml',
+ ],
+ 'js': ['static/src/js/auth_signup.js'],
+ 'qweb': ['static/src/xml/auth_signup.xml'],
+}
diff --git a/auth_signup/auth_signup_data.xml b/auth_signup/auth_signup_data.xml
new file mode 100644
index 0000000..31e3b61
--- /dev/null
+++ b/auth_signup/auth_signup_data.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ Template User
+ portaltemplate
+
+
+
+
+
+
+
+
+ auth_signup.template_user_id
+
+
+
+
+
+ Reset Password
+
+ ]]>
+ ${object.email}
+ Password reset
+ A password reset was requested for the OpenERP account linked to this email.
+
+You may change your password by following this link .
+
+Note: If you do not expect this, you can safely ignore this email.
]]>
+
+
+
+
+ OpenERP Enterprise Connection
+
+ ]]>
+ ${object.email}
+
+
+
+ ${object.name},
+
+
+ You have been invited to connect to "${object.company_id.name}" in order to get access to your documents in OpenERP.
+
+
+ To accept the invitation, click on the following link:
+
+
+
+ Thanks,
+
+
+--
+${object.company_id.name or ''}
+${object.company_id.email or ''}
+${object.company_id.phone or ''}
+
+ ]]>
+
+
+
+
+
diff --git a/auth_signup/controllers/.___init__.py b/auth_signup/controllers/.___init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/controllers/._main.py b/auth_signup/controllers/._main.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/controllers/__init__.py b/auth_signup/controllers/__init__.py
new file mode 100755
index 0000000..e11f9ba
--- /dev/null
+++ b/auth_signup/controllers/__init__.py
@@ -0,0 +1,3 @@
+import main
+
+# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/auth_signup/controllers/main.py b/auth_signup/controllers/main.py
new file mode 100755
index 0000000..73e2f0e
--- /dev/null
+++ b/auth_signup/controllers/main.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see
+#
+##############################################################################
+import logging
+
+import openerp
+from openerp.modules.registry import RegistryManager
+from ..res_users import SignupError
+
+_logger = logging.getLogger(__name__)
+
+class Controller(openerp.addons.web.http.Controller):
+ _cp_path = '/auth_signup'
+
+ @openerp.addons.web.http.jsonrequest
+ def get_config(self, req, dbname):
+ """ retrieve the module config (which features are enabled) for the login page """
+ registry = RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ icp = registry.get('ir.config_parameter')
+ config = {
+ 'signup': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.allow_uninvited') == 'True',
+ 'reset_password': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.reset_password') == 'True',
+ }
+ return config
+
+ @openerp.addons.web.http.jsonrequest
+ def retrieve(self, req, dbname, token):
+ """ retrieve the user info (name, login or email) corresponding to a signup token """
+ registry = RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ res_partner = registry.get('res.partner')
+ user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token)
+ return user_info
+
+ @openerp.addons.web.http.jsonrequest
+ def signup(self, req, dbname, token, name, login, password):
+ """ sign up a user (new or existing)"""
+ values = {'name': name, 'login': login, 'password': password}
+ try:
+ self._signup_with_values(req, dbname, token, values)
+ except SignupError, e:
+ return {'error': openerp.tools.exception_to_unicode(e)}
+ return {}
+
+ def _signup_with_values(self, req, dbname, token, values):
+ registry = RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ res_users = registry.get('res.users')
+ res_users.signup(cr, openerp.SUPERUSER_ID, values, token)
+
+ @openerp.addons.web.http.jsonrequest
+ def reset_password(self, req, dbname, login):
+ """ retrieve user, and perform reset password """
+ registry = RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ try:
+ res_users = registry.get('res.users')
+ res_users.reset_password(cr, openerp.SUPERUSER_ID, login)
+ cr.commit()
+ except Exception as e:
+ # signup error
+ _logger.exception('error when resetting password')
+ raise(e)
+ return True
+
+# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/auth_signup/i18n/._ar.po b/auth_signup/i18n/._ar.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._auth_signup.pot b/auth_signup/i18n/._auth_signup.pot
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._de.po b/auth_signup/i18n/._de.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._en_GB.po b/auth_signup/i18n/._en_GB.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._es.po b/auth_signup/i18n/._es.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._fr.po b/auth_signup/i18n/._fr.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._hr.po b/auth_signup/i18n/._hr.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._hu.po b/auth_signup/i18n/._hu.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._it.po b/auth_signup/i18n/._it.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._mk.po b/auth_signup/i18n/._mk.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._mn.po b/auth_signup/i18n/._mn.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._nb.po b/auth_signup/i18n/._nb.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._nl.po b/auth_signup/i18n/._nl.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._pl.po b/auth_signup/i18n/._pl.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._pt.po b/auth_signup/i18n/._pt.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._pt_BR.po b/auth_signup/i18n/._pt_BR.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._ro.po b/auth_signup/i18n/._ro.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._ru.po b/auth_signup/i18n/._ru.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._sl.po b/auth_signup/i18n/._sl.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._tr.po b/auth_signup/i18n/._tr.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/._zh_CN.po b/auth_signup/i18n/._zh_CN.po
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/i18n/ar.po b/auth_signup/i18n/ar.po
new file mode 100644
index 0000000..1a232f8
--- /dev/null
+++ b/auth_signup/i18n/ar.po
@@ -0,0 +1,277 @@
+# Arabic translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-27 21:41+0000\n"
+"Last-Translator: gehad shaat \n"
+"Language-Team: Arabic \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Ř§Ů„ŘłŮ…Ř§Ř Ů„Ů…ŘłŘŞŘ®ŘŻŮ…ŮŠŮ† خارجيين بالتسجيل"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "ŘŁŮŮ‘ŘŻ ŮŮ„Ů…Ř© المرŮر"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "تسجيل"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "جديد"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "الŘالة"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "المستخدمŮن"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "رابط التسجيل"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "نشط"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "اسم المستخدم"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "الاسم"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "تسجيل الدخŮŮ„"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "العŮŘŻŘ© Ů„Ů„ŘŻŘ®ŮŮ„"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "شريŮ"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/auth_signup.pot b/auth_signup/i18n/auth_signup.pot
new file mode 100644
index 0000000..31d8843
--- /dev/null
+++ b/auth_signup/i18n/auth_signup.pot
@@ -0,0 +1,272 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * auth_signup
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0alpha\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 17:05+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid "\n"
+"A password reset was requested for the OpenERP account linked to this email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid "Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
+
diff --git a/auth_signup/i18n/de.po b/auth_signup/i18n/de.po
new file mode 100644
index 0000000..92b4ab8
--- /dev/null
+++ b/auth_signup/i18n/de.po
@@ -0,0 +1,287 @@
+# German translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: German \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Erlaube Login von externen Benutzern"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Passwort bestätigen"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Falls leer, dĂĽrfen nur eingeladene Benutzer einloggen"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Kann keine EMail senden, weil der Benutzer keine EMail Adresse hat"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Passwort zurĂĽcksetzen"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "Vorlage Benutzer fĂĽr neu Benutzer"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Passwort zurĂĽcksetzen"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Bitte ein Passwort eintragen und bestätigen"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+"Sende eine Mail an den Benutzer um das Passwort zu setzen oder zurĂĽckzusetzen"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Anmelden"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Neu"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Ein ZurĂĽcksetzen des Passwortes fĂĽr diese EMail-Adresse wurde verlangt "
+".
\n"
+"\n"
+"Sie können das Passwort mit diesem Link zurücksetzen .
\n"
+"\n"
+"Anmerkung: Wenn Sie dieses Mail nicht erwartet/beantragt habe, könne Sie "
+"es einfach ignorieren
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Bitte geben Sie einen Namen ein."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Benutzer"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "Registrierungs URL"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Bitte Benutzernamen eingeben."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Aktiv"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Benutzername"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Name"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Bitte Benutzername oder EMail Adresse eingeben"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Passwort zurĂĽcksetzen"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Benutzername (EMail)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Ablauf der Registritung"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr "Dies erlaubt Benutzern ein ZurĂĽcksetzen des Passwortes zu verlangen."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Login"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Anmeldungs Token ist gĂĽltig"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Anmeldungs Token ist ungĂĽltig"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Passworte stimmen nicht ĂĽberein, bitte neu eingeben"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Keine Datenbank ausgewählt-"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Passwort zurĂĽcksetzen"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Erlaube Passwort zurĂĽcksetzen von der Login-Seite"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "ZurĂĽck zur Anmeldung"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Registrieren"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Anmelde Token"
diff --git a/auth_signup/i18n/en_GB.po b/auth_signup/i18n/en_GB.po
new file mode 100644
index 0000000..0d63d5b
--- /dev/null
+++ b/auth_signup/i18n/en_GB.po
@@ -0,0 +1,277 @@
+# English (United Kingdom) translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-02-07 20:26+0000\n"
+"Last-Translator: mrx5682 \n"
+"Language-Team: English (United Kingdom) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-02-08 05:23+0000\n"
+"X-Generator: Launchpad (build 16482)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Signup Token Type"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Allow external users to sign up"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Confirm Password"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "If unchecked, only invited users may sign up."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Cannot send email: user has no email address."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Reset password"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "Template user for new users created through signup"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Password reset"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Please enter a password and confirm it."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/es.po b/auth_signup/i18n/es.po
new file mode 100644
index 0000000..0fab685
--- /dev/null
+++ b/auth_signup/i18n/es.po
@@ -0,0 +1,297 @@
+# Spanish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Tipo de la palabra de ingreso"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Permitir ingresar a usuarios externos"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Confirmar contraseña"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Si no está marcado, sólo los usuarios invitados pueden ingresar."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "Parámetros de configuración base"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+"No se puede enviar el correo eléctronico: el usuario no tiene dirección de "
+"correo."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Restablecer contraseña"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+"Plantilla de usuario para los nuevos usuarios creados a través del ingreso"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Restablecer contraseña"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Por favor introduzca una contraseña y confĂrmela."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "Enviar un correo al usuario para restablecer su contraseña."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Registro"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nuevo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Correo enviado a:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Estado"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Se ha requerido un cambio de contraseña dese la cuenta de OpenERP "
+"asociada con este correo eléctronico.
\n"
+"\n"
+"DeberĂa cambiar su contraseña siguiendo el siguiente enlace .
\n"
+"\n"
+"Nota: Si no espera estaba notificaciĂłn, puede ignorarla de forma "
+"segura.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Por favor, introduzca un nombre."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Usuarios"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL de ingreso"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Por favor, introduzca un nombre de usuario."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Activo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"No se puede enviar el correo electrĂłnico: no se ha configurado servidor de "
+"correo saliente.\n"
+"Puede configurarlo en ConfiguraciĂłn / ConfiguraciĂłn general."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nombre"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+"Por favor introduzca un nombre de usuario o direcciĂłn de correo electrĂłnico."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Restableciendo la contraseña"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Nombre de usuario (direcciĂłn de correo electrĂłnico)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "ExpiraciĂłn del ingreso"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Esto permite a los usuarios lanzar un restablecimiento de la contraseña "
+"desde la página de inicio de sesión."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Iniciar sesiĂłn"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "La palabra de ingreso es válida"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Inicio de sesiĂłn"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Palabra de ingreso no válida"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Las contraseñas no coinciden. Por favor vuelva a teclearlas."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "¡No se ha seleccionado ninguna base de datos!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Restablecer contraseña"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+"Habilitar restablecimiento de la contraseña desde la página de inicio de "
+"sesiĂłn"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Volver al Inicio de sesiĂłn"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Registrarse"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Empresa"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Palabra de ingreso"
diff --git a/auth_signup/i18n/fr.po b/auth_signup/i18n/fr.po
new file mode 100644
index 0000000..f3a440c
--- /dev/null
+++ b/auth_signup/i18n/fr.po
@@ -0,0 +1,297 @@
+# French translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-07 10:29+0000\n"
+"Last-Translator: Numérigraphe \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Type de jeton de connexion"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Autorise les utilisateurs externes Ă se connecter"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Confirmez le mot de passe"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Si la case est décochée, seules les utilisateurs invités pourront se "
+"connecter."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+"Impossible d'envoyer l'e-mail : l'utilisateur n'a pas d'adresse e-mail."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "RĂ©initialiser le mot de passe"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+"Utilisateur modèle pour les nouveaux utilisateurs créés à travers signup"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "RĂ©initialisation du mot de passe"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Veuillez entrer un mot de passe et le confirmer"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+"Envoyer un e-mail à l'utilisateurs pour (ré-)initialiser son mot de passe."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "S'inscrire"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nouveau"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Courriel envoyé à :"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Statut"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Une demande de ré-initialisation de mot de passe sur le compte OpenERP "
+"associé à cet email.
\n"
+"\n"
+"Vous pouvez changer votre mot de passe en utilisant ce lien .
\n"
+"\n"
+"Note: vous pouvez ignorer ce mail si vous ne souhaitez pas changer votre "
+"mot de passe.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Veuillez entrer un nom."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Utilisateurs"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "Url d'authentification"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Merci de saisir votre nom d'utilisateur"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Activer"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Impossible d'envoyer des courriels : aucun serveur de courriel sortant n'est "
+"configuré.\n"
+"Vous pouvez le configurer dans : Configuration/Paramètres généraux."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nom"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Merci de saisir votre nom d'utilisateur ou une adresse email"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "RĂ©initialiser le mot de passe"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Utilisateur (Email)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Expiration de la session de connexion"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Permet Ă l'utilisateur de demander un changement de mot de passe depuis la "
+"page d'identification."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Ouverture de session"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "La session d'authentification est valide"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Identifiant"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "La session d'authentification est invalide"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Les mot des passes ne correspondent pas; merci de les resaisir."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Aucune base de données sélectionnée !"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "RĂ©initialiser le mot de passe"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+"Permettre la réinitialisation du mot de passe depuis la page de connexion"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Retour Ă la fenĂŞtre de connexion"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "S'enregistrer"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Session de connexion"
diff --git a/auth_signup/i18n/hr.po b/auth_signup/i18n/hr.po
new file mode 100644
index 0000000..c9c9783
--- /dev/null
+++ b/auth_signup/i18n/hr.po
@@ -0,0 +1,277 @@
+# Croatian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Dozvoli prijavu eksternim korisnicima"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Potvrdi lozinku"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Dozvoli prijavu svima ili samo pozvanim korisnicima"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Korisnik nema e-mail adresu."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Resetiraj lozinku"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "Korisnik predloĹľak za sve korisnike kreirane prijavom."
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Promjena lozinke"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Molim upišite lozinku i potvrdu."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nova(i)"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Unesite ime"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Korisnici"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Upišite korisničko ime"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Aktivan"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "KorisniÄŤko ime"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Naziv"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Upišite korisničko ime ili email adresu."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Promjena lozinke"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "KorisniÄŤko ime (e-mail)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Prijava"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Token prijave je ispravan"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Prijava"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Lozinke nisu iste, pokušajte ponovo."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nije odabrana baza podataka"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Promijeni lozinku"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Omogući promjenu lozinke na stranici prijave"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Nazad na prijavu"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Prijava"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Token prijave"
diff --git a/auth_signup/i18n/hu.po b/auth_signup/i18n/hu.po
new file mode 100644
index 0000000..6e9ccb3
--- /dev/null
+++ b/auth_signup/i18n/hu.po
@@ -0,0 +1,277 @@
+# Hungarian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-11 17:44+0000\n"
+"Last-Translator: Balint (eSolve) \n"
+"Language-Team: Hungarian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "JelszĂł megerõsĂtĂ©se"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "JelszĂł visszaállĂtása"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "JelszĂł visszaállĂtás"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "KĂ©rem adjon meg egy jelszĂłt Ă©s erĹ‘sĂtse meg."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Regisztrál"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Ăšj"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "KĂ©rem adjon meg egy nevet."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Felhasználók"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "AktĂv"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Felhasználónév"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "NĂ©v"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "JelszĂł visszaállĂtás"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Felhasználónév (Email)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Bejelentkezés"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Regisztrációs token érvényes"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Bejelentkezés"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Érvénytelen regisztrációs token"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "A jelszavak nem egyeznek, kérem ismételje meg."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nincs kiválasztott adatbázis!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Vissza a bejelentkezéshez"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Regisztrál"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Regisztrációs token"
diff --git a/auth_signup/i18n/it.po b/auth_signup/i18n/it.po
new file mode 100644
index 0000000..a2dc0d1
--- /dev/null
+++ b/auth_signup/i18n/it.po
@@ -0,0 +1,292 @@
+# Italian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-24 20:15+0000\n"
+"Last-Translator: Davide Corio - agilebg.com \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Tipo tocken registrazione"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Permetti a utenti esterni di autenticarsi"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Conferma Password"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Se spuntato, solo gli utenti invitati possono autenticarsi"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Non è possibile inviare email: l'utente non ha l'indirizzo impostato"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Reimposta password"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+"Modello utente per i nuovi utenti creati attraverso la procedura di "
+"registrazione"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Ripristino password"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Prego inserire una password e confermarla"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "Invia una mail all'utente per (re)impostare la propria password"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Registrazione"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nuovo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Mail inviata a:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Stato"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Un reset della password è stato richiesto per l'account di OpenERP "
+"collegato a questa mail
\n"
+"\n"
+"Potrete cambiare la vostra password seguendo questo lin .
\n"
+"\n"
+"Nota: Se non lo ritenete necessario potete tranquillamente ignorare la "
+"mail.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Prego inserire un nome"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Utenti"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL registrazione"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Prego inserire un username"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Attivo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Non è possibile inviare email: nessun server d'invio email configurato.\n"
+"E' possibile configurarlo nelle Configurazioni/Configurazioni Generali."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nome utente"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nome"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Prego inserire un nome utente e un indirizzo mail."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Reset password"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Nome utente (email)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Termine registrazione"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Questo permette agli utenti di lanciare un reset password dalla pagina di "
+"login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Login"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Il token di registrazione è valido"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Il token di registrazione non è valido"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Le password non corrispondono; prego riscriverle."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nessun database selezionato!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Reimposta Password"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Abilita il reset della password dalla pagina di login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Ritorno al Login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Registrazione"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Token di registrazione"
diff --git a/auth_signup/i18n/mk.po b/auth_signup/i18n/mk.po
new file mode 100644
index 0000000..133d77c
--- /dev/null
+++ b/auth_signup/i18n/mk.po
@@ -0,0 +1,292 @@
+# Macedonian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-02-26 19:07+0000\n"
+"Last-Translator: Proleter \n"
+"Language-Team: ESKON-INZENERING \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-02-27 05:08+0000\n"
+"X-Generator: Launchpad (build 16506)\n"
+"Language: mk\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Тип на токен Đ·Đ° региŃтрациŃĐ°"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Дозволи региŃтрациŃĐ° на надвореŃни кориŃници"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Потврди лозинка"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Đ”ĐľĐşĐľĐ»ĐşŃ Đµ одŃтиклирано, ŃĐ°ĐĽĐľ поканети кориŃници можат Đ´Đ° Ńе региŃтрираат."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Неможе Đ´Đ° Ńе иŃпрати e-mail: КориŃникот нема e-mail адреŃĐ°."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "РеŃĐµŃ‚Đ¸Ń€Đ°Ń Đ»ĐľĐ·Đ¸Đ˝ĐşĐ°"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "ШаблонŃки кориŃник Đ·Đ° новите кориŃници креирани ĐżŃ€ĐµĐşŃ Ń€ĐµĐłĐ¸ŃтрациŃĐ°"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "РеŃĐµŃ‚Đ¸Ń€Đ°Ń Đ»ĐľĐ·Đ¸Đ˝ĐşĐ°"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Ве молиме внеŃете лозинка и потврдете ŃĐ°."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "ĐŃпрати e-mail Đ´Đľ кориŃникот Đ·Đ° (ре)Ńетирање на лозинка."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "РегиŃŃ‚Ń€Đ¸Ń€Đ°Ń Ńе"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Нов"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Пораката е иŃпратена Đ´Đľ:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "СтатŃŃ"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Побарано е реŃетирање на лозинката Đ·Đ° OpеnERP Ńметката поврзана ŃĐľ оваа e-"
+"mail адреŃĐ°.
\n"
+"\n"
+"Може Đ´Đ° изврŃите промена на лозинката ŃĐľ кликање на ĐľĐ˛ĐľŃ Đ»Đ¸Đ˝Đş .
\n"
+"\n"
+"ЗабелеŃка: Đ”ĐľĐşĐľĐ»ĐşŃ Đ˝Đµ го очекŃвате ова, игнорираŃте ŃĐ° оваа e-mail "
+"порака.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Ве молиме внеŃете име."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "КориŃници"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL Đ·Đ° региŃтрациŃĐ°"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Ве молиме внеŃете кориŃничко име."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Đктивен"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Неможе Đ´Đ° Ńе иŃпрати e-mail: нема конфигŃрирано излезен e-mail Ńервер.\n"
+"Може Đ´Đ° го конфигŃрирате под ПодеŃŃвања/ОпŃти подеŃŃвања."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "КориŃничко име"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Đме"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Ве молиме внеŃете кориŃничко име или e-mail адреŃĐ°."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "реŃетирање на лозинка"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "КориŃничко име (E-mail)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "ĐŃтекŃвање на рок Đ·Đ° региŃтрациŃĐ°"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Ова дозволŃва кориŃниците Đ´Đ° активираат реŃетирање на лозинката од "
+"Ńтраницата Đ·Đ° наŃавŃвање."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "НаŃави Ńе"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Токенот Đ·Đ° региŃтрациŃĐ° е валиден"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "НаŃавŃвање"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Невалиден токен Đ·Đ° региŃтрациŃĐ°"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Лозинките не Ńе Ńовпаѓаат; ВнеŃете ги повторно."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Не е избрана база на податоци !"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "РеŃĐµŃ‚Đ¸Ń€Đ°Ń Đ»ĐľĐ·Đ¸Đ˝ĐşĐ°"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Дозволи реŃетирање на лозинка од Ńтраница Đ·Đ° наŃавŃвање"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Врати Ńе на наŃава"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "РегиŃŃ‚Ń€Đ¸Ń€Đ°Ń Ńе"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Партнер"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Токен Đ·Đ° региŃтрациŃĐ°"
diff --git a/auth_signup/i18n/mn.po b/auth_signup/i18n/mn.po
new file mode 100644
index 0000000..8c15bec
--- /dev/null
+++ b/auth_signup/i18n/mn.po
@@ -0,0 +1,289 @@
+# Mongolian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-02-09 13:34+0000\n"
+"Last-Translator: gobi \n"
+"Language-Team: Mongolian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-02-10 05:23+0000\n"
+"X-Generator: Launchpad (build 16482)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Бүртгүүлэх Жетоны төрөл"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Đ“Đ°Đ´Đ°Đ°Đ´ хэрэглэгчид бүртгүүлэхийг зөвŃÓ©Ó©Ń€Ó©Ń…"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "ĐťŃŃц үгийг баталгаажŃŃлах"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Хэрэв тэмдэглээгүй бол зөвхөн ŃригдŃĐ°Đ˝ хэрэглэгчид Đ» бүртгүүлэх боломжтой"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Đмэйлийг илгээх боломжгүй: хэрэглэгчид имэйл Ń…Đ°ŃŹĐł алга"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "ĐťŃŃц үгийг Ńинэчлэх"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "Бүртгүүлэхээр ŇŻŇŻŃŃŃŤĐ˝ Ńинэ хэрэглэгчид зориŃĐ»ŃĐ°Đ˝ үлгэр хэрэглэгч"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "ĐťŃŃц үгийг Ńинэчлэх"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "ĐťŃŃц үгийг орŃŃлж баталгаажŃŃĐ»"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "Хэрэглэгчид Đ˝ŃŃц үгээ Ńинэчлэх имэйл илгээнэ."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Бүртгүүлэх"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Шинэ"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Мэйлийг хэнд илгээх"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Төлөв"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Đнэ имэйлтэй холбогдŃон OpenERP Đ´Đ°Đ˝Ńны Đ˝ŃŃц үгийг Ńинэчлэхийг Ń…ŇŻŃŃŃŤĐ˝ "
+"байна.
\n"
+"\n"
+"ĐťŃŃц үгээ энэ холбооŃоор орж "
+"Ńинэчлэх боломжтой.
\n"
+"\n"
+"Санамж: Хэрэв үүнийг таамаглаагүй байŃĐ°Đ˝ бол энэ имэйлийг хэрэгŃэхгүй "
+"байж болно.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Нэр орŃŃлна ŃŃ."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Хэрэглэгчид"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "Бүртгүүлэх URL"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Хэрэглэгчийн нэрийг орŃŃлна ŃŃ"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Đдэвхтэй"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Đмэйл илгээх боломжгүй: гарах имэйл Ńервер тохирŃŃлагдаагүй байна.\n"
+"Тохиргоо/Ерөнхий тохиргоо дотор үүнийг тохирŃŃлах боломжтой."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Хэрэглэгчийн нэр"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Нэр"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Хэрэглэгчийн нэр ŃŤŃвэл имэйл хаягийг орŃŃлна ŃŃ."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "ĐťŃŃц үгийг Ńинэчлэж байна"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Хэрэглэгчийн нэр (Đмэйл)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Бүртгэлт Ń…Ńгацаа хэтрэх"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr "Đнэ нь Нэвтрэх Ń…ŃŃĐ´Đ°ŃĐ˝Đ°Đ°Ń Đ˝ŃŃц үгээ Ńинэчлэх боломжийг олгодог."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Нэвтрэх"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Бүртгүүлэх Жетон Хүчинтэй"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Нэвтрэх"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Бүртгүүлэх жетон хүчингүй"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "ĐťŃŃц үгүүд таарахгүй байна; дахин бичнэ ŇŻŇŻ."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Өгөгдлийн бааз Ńонгогдоогүй байна!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "ĐťŃŃц Ńинэчлэх"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Нэвтрэх Ń…ŃŃĐ´Đ°ŃĐ˝Đ°Đ°Ń Đ˝ŃŃц ŇŻĐł Ńинэчлэхийг зөвŃÓ©Ó©Ń€Ó©Ń…"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Дахин нэвтрэх"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Бүртгүүлэх"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Харилцагч"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Бүртгүүлэх Жетон"
diff --git a/auth_signup/i18n/nb.po b/auth_signup/i18n/nb.po
new file mode 100644
index 0000000..4280687
--- /dev/null
+++ b/auth_signup/i18n/nb.po
@@ -0,0 +1,277 @@
+# Norwegian Bokmal translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Norwegian Bokmal \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Tillate eksterne brukere ĂĄ registrere seg."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Bekreft passord."
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "Base.Konfigurasjon.Innstillinger."
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Registrer deg."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Ny."
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Status."
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Brukere"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "Regitrer deg URL."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Aktiv."
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Brukernavn."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Navn."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Tilbakestill Passord."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Brukernavn (E-post)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Registrerings utløpsdato."
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Logg inn."
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Tilbake til innlogging."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner."
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/nl.po b/auth_signup/i18n/nl.po
new file mode 100644
index 0000000..7fc8ec4
--- /dev/null
+++ b/auth_signup/i18n/nl.po
@@ -0,0 +1,294 @@
+# Dutch translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-27 17:34+0000\n"
+"Last-Translator: Erwin van der Ploeg (Endian Solutions) \n"
+"Language-Team: Dutch \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-28 05:58+0000\n"
+"X-Generator: Launchpad (build 16451)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Aanmeld token soort"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Toestaan dat externe gebruikers inloggen"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Bevestig wachtwoord"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Indien uitgevinkt kunnen alleen uitgenodigde gebruikers aanmelden"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Kan e-mail niet versturen: gebruiker heeft geen e-mail adres."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Reset wachtwoord"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+"Sjabloon gebruiker voor het aanmaken van nieuwe gebruikers, bij aanmelden"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Reset wachtwoord"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Geef een wachtwoord in en bevestig deze."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+"Stuur een e-mail naar de gebruiker om het wachtwoord in te stellen of te "
+"resetten."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Aanmelden"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nieuw"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "E-mail verzonden naar:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Er is een verzoek aan OpenERP gedaan om het wachtwoord te resetten, "
+"gekoppeld aan dit e-mail adres.
\n"
+"\n"
+"U kunt u wachtwoord resetten door te klikken op deze link .
\n"
+"\n"
+"Opmerking: Indien u dit niet verwacht, kunt u veilig deze e-mail "
+"negeren.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Vul een naam in."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Gebruikers"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL voor aanmelden"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Voer een gebruikersnaam in."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Actief"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Het is niet mogelijk om een e-mail te versturen: geen uitgaande e-mail "
+"server ingesteld,\n"
+"Het is mogelijk deze in te stellen bij: Instellingen > Algemene"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Naam"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Geef gebruikersnaam of e-mail adres in."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Wachtwoord resetten"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Gebruikersnaam (e-mail)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Aanmeld vervallen"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Dit geeft gebruikers de mogelijkheid om het wachtwoord te resetten vanaf de "
+"login pagina."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Login"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Aanmeld token is geldig"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Aanmeld toekenning ongeldig"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Wachtwoorden komen niet overeen. Geef de wachtwoorden opnieuw in."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Geen database geselecteerd!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Stel wachtwoord opnieuw in"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Wachtwoord reset vanaf login pagina toestaan"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Terug naar login"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Aanmelden"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Relatie"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Aanmeld token"
diff --git a/auth_signup/i18n/pl.po b/auth_signup/i18n/pl.po
new file mode 100644
index 0000000..75f8e9e
--- /dev/null
+++ b/auth_signup/i18n/pl.po
@@ -0,0 +1,278 @@
+# Polish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Pozwól na logowanie sie zewnętrznych użytkowników"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Potwierdź hasło"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Jeśli nie zaznaczone, to tylko zaproszeni użtkownicy mogą się logować"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Wyczyść hasło"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Reset hasła"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Wprowadź hasło o potwierdź je"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Rejestracja"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nowy"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Stan"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "WprowadĹş nazwÄ™"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "UĹĽytkownicy"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Aktywne"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nazwa uĹĽytkownika"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nazwa"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Zaloguj siÄ™"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nie wybrano bazy !"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Zresetuj hasło"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Wróć do logowania"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Zarejestruj siÄ™"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/pt.po b/auth_signup/i18n/pt.po
new file mode 100644
index 0000000..df2eda6
--- /dev/null
+++ b/auth_signup/i18n/pt.po
@@ -0,0 +1,277 @@
+# Portuguese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-08 18:01+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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Repor senha"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Repor senha"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Por favor indique uma senha e confirme-a"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Estado"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Utilizadores"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Por favor introduza um nome de utilizador."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nome do utilizador"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nome"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Por favor introduza um nome de utilizador ou endereço de email."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Iniciar sessĂŁo"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Iniciar sessĂŁo"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nenhuma base de dados selecionada!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Repor a senha"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/pt_BR.po b/auth_signup/i18n/pt_BR.po
new file mode 100644
index 0000000..faeb958
--- /dev/null
+++ b/auth_signup/i18n/pt_BR.po
@@ -0,0 +1,290 @@
+# Brazilian Portuguese translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Tipo de token para Inscrição"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Permitir inscrição de usuários externos"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Confirmar Senha"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr "Se não marcado, somente usuários convidados poderão inscrever-se"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+"NĂŁo foi possĂvel enviar e-mail: o usuário nĂŁo tem um endereço de e-mail"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Redefinir Senha"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "Modelo de usuário para novos usuários criados através de inscrição"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Redefinir Senha"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Por favor digite uma senha e sua confirmação."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "Enviar um e-mail para o usuário para (re)definir sua senha."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Inscreva-se"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Novo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Mensagem enviadas para:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Situação"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"Uma redefinição de senha foi solicitada para a conta do OpenERP associada "
+"a este e-mail.
\n"
+"\n"
+"VocĂŞ pode mudar sua senha acessando este "
+"endereço .
\n"
+"\n"
+"Nota: Se você não solicitou essa alteração, basta ignorar este e-mail.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Por favor, informe o nome"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Usuários"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL de inscrição"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Por favor informe um nome de usuário"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Ativo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"NĂŁo Ă© possĂvel enviar email: o servidor de saĂda nĂŁo está configurado.\n"
+"Você pode configurar em Configurações / Configurações Gerais."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nome do Usuário"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nome"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Por favor informe um nome de usuário ou endereço de e-mail."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Redefinindo a Senha"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Nome de Usuário (E-mail)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Expiração de Inscrição"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Permite aos usuários disparar a redefinição de senha a partir da página de "
+"autenticação."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Acessar"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Token de Inscrição é Válido"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Autenticação"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Token de inscrição inválido"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "As senhas nĂŁo combinam; por favor redigite-as."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nenhuma base de dados selecionada !"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Redefinir Senha"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Habilitar redefinição de senha a partir da página de autenticação"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Voltar para a Página de Autenticação"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Inscreva-se"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Parceiro"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Token de Inscrição"
diff --git a/auth_signup/i18n/ro.po b/auth_signup/i18n/ro.po
new file mode 100644
index 0000000..677e8dd
--- /dev/null
+++ b/auth_signup/i18n/ro.po
@@ -0,0 +1,293 @@
+# Romanian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-19 11:51+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: 2013-01-20 05:17+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr "Inregistrare Tip Simbol"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "Permite utilizatorilor sa se inregistreze"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Confirma Parola"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Daca nu este selectat, doar utilizatorii invitati pot sa se inregistreze."
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings (setari.config.de_baza)"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+"Email-ul nu poate fi trimis: utilizatorul nu are nici o adresa de email."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Reseteaza parola"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+"Sablon de utilizator pentru utilizatorii noi creati prin inregistrare"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Parola resetata"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "Va rugam sa introduceti o parola si sa o confirmati."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr "Trimiteti un email utilizatorului pentru a (re)seta parola."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Inregistrare"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Nou(a)"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Email trimis catre:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Stare"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+"\n"
+"O resetare a parolei a fost ceruta pentru contul OpenERP asociat acestui "
+"email.
\n"
+"\n"
+"Va puteti schimba parola urmand this "
+"link .
\n"
+"\n"
+"Nota: Daca nu asteptati aceasta, puteti ignora acest email.
"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Va rugam sa introduceti un nume"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Utilizatori"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL Inregistrare"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Va rugam sa introduceti un nume de utilizator."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Activ(a)"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+"Email-ul nu a putut fi trimis: nu a fost configurat nici un server pentru "
+"iesire email-uri.\n"
+"Il puteti configura din Setari/Setari Generale."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Nume de utilizator"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Nume"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr "Va rugam sa introduceti un nume de utilizator sau o adresa de email."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "Resetare Parola"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "Nume de utilizator (Email)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "Expirare Inregistrare"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+"Le permite utilizatorilor sa declanseze o resetare a parolei din Pagina de "
+"autentificare."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Autentificare"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "Simbolul de inregistrare este Valabil"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Autentificare"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr "Simbol de inregistrare nevalid"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr "Parolele nu se potrivesc; va rugam sa le scrieti din nou."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nu a fost selectata nicio baza de date !"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Reseteaza Parola"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr "Activeaza resetarea parolei din pagina de autentificare"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Inapoi la Autentificare"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr "Inregistrare"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partener"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "Simbol Inregistrare"
diff --git a/auth_signup/i18n/ru.po b/auth_signup/i18n/ru.po
new file mode 100644
index 0000000..b227dfe
--- /dev/null
+++ b/auth_signup/i18n/ru.po
@@ -0,0 +1,279 @@
+# Russian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-26 08:51+0000\n"
+"Last-Translator: Olga \n"
+"Language-Team: Russian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+"Đ•Ńли отмечено, только приглаŃенные пользователи могŃŃ‚ зарегиŃтрироватьŃŃŹ"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Невозможно отправить пиŃŃŚĐĽĐľ: Ń ĐżĐľĐ»ŃŚĐ·ĐľĐ˛Đ°Ń‚ĐµĐ»ŃŹ нет ŃŤĐ». почты"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr "ПожалŃĐąŃŃ‚Đ°, введите пароль и подтвердите его."
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+"Отправить пиŃŃŚĐĽĐľ пользователю, чтобы ŃŃтановить или ŃброŃить его пароль."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "URL региŃтрации"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "ПожалŃĐąŃŃ‚Đ°, введите имя пользователя."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr ""
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/sl.po b/auth_signup/i18n/sl.po
new file mode 100644
index 0000000..370bf32
--- /dev/null
+++ b/auth_signup/i18n/sl.po
@@ -0,0 +1,277 @@
+# Slovenian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-01-05 16:55+0000\n"
+"Last-Translator: Dušan Laznik (Mentis) \n"
+"Language-Team: Slovenian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Potrdite geslo"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Ponastavi geslo"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Prijava"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Novo"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Status"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "Vnesite ime"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Uporabniki"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Aktivno"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Uporabniško ime"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "Ime"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "Prijava"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr "Prijava"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr "Nobena podatkovna zbirka ni izbrana!"
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "Nazaj na prijavo"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "Partner"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/tr.po b/auth_signup/i18n/tr.po
new file mode 100644
index 0000000..e5421bb
--- /dev/null
+++ b/auth_signup/i18n/tr.po
@@ -0,0 +1,277 @@
+# Turkish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-02-08 07:20+0000\n"
+"Last-Translator: Ayhan KIZILTAN \n"
+"Language-Team: Turkish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-02-09 05:28+0000\n"
+"X-Generator: Launchpad (build 16482)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "Parolayı Doğrula"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr "Eposta gönderilemiyor: kullanıcının eposta adresi yok."
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "Parolayı sıfırla"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr ""
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "Parola sıfırlandı"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "Ăśye Ol"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "Yeni"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr "Eposta buna gönderildi:"
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "Durumu"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr "LĂĽtfen bir isim girin"
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "Kullanıcılar"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "Kayıt URL"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr "Lütfen bir kullanıcı adı girin."
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "Etkin"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "Kullanıcı Adı"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "Parolayı Sıfırla"
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr ""
diff --git a/auth_signup/i18n/zh_CN.po b/auth_signup/i18n/zh_CN.po
new file mode 100644
index 0000000..071ddb3
--- /dev/null
+++ b/auth_signup/i18n/zh_CN.po
@@ -0,0 +1,277 @@
+# Chinese (Simplified) translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2012-12-21 23:00+0000\n"
+"Last-Translator: FULL NAME \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: 2013-01-18 06:35+0000\n"
+"X-Generator: Launchpad (build 16430)\n"
+
+#. module: auth_signup
+#: field:res.partner,signup_type:0
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_uninvited:0
+msgid "Allow external users to sign up"
+msgstr "ĺ…许外é¨ç”¨ć·ç™»ĺ˝•"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16
+#, python-format
+msgid "Confirm Password"
+msgstr "确认密ç "
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_uninvited:0
+msgid "If unchecked, only invited users may sign up."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_base_config_settings
+msgid "base.config.settings"
+msgstr "base.config.settings"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:252
+#, python-format
+msgid "Cannot send email: user has no email address."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25
+#, python-format
+msgid "Reset password"
+msgstr "重设密ç "
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_template_user_id:0
+msgid "Template user for new users created through signup"
+msgstr "用作通过注册ĺ›ĺ»şçš„新用ć·çš„模ç‰"
+
+#. module: auth_signup
+#: model:email.template,subject:auth_signup.reset_password_email
+msgid "Password reset"
+msgstr "重置密ç "
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#, python-format
+msgid "Please enter a password and confirm it."
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Send an email to the user to (re)set their password."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23
+#, python-format
+msgid "Sign Up"
+msgstr "注册"
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "New"
+msgstr "新建"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:258
+#, python-format
+msgid "Mail sent to:"
+msgstr ""
+
+#. module: auth_signup
+#: field:res.users,state:0
+msgid "Status"
+msgstr "状ć€"
+
+#. module: auth_signup
+#: model:email.template,body_html:auth_signup.reset_password_email
+msgid ""
+"\n"
+"A password reset was requested for the OpenERP account linked to this "
+"email.
\n"
+"\n"
+"You may change your password by following this link .
\n"
+"\n"
+"Note: If you do not expect this, you can safely ignore this email.
"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#, python-format
+msgid "Please enter a name."
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_users
+msgid "Users"
+msgstr "用ć·"
+
+#. module: auth_signup
+#: field:res.partner,signup_url:0
+msgid "Signup URL"
+msgstr "注册 URL"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#, python-format
+msgid "Please enter a username."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Active"
+msgstr "ĺŻç”¨"
+
+#. module: auth_signup
+#: code:addons/auth_signup/res_users.py:256
+#, python-format
+msgid ""
+"Cannot send email: no outgoing email server configured.\n"
+"You can configure it under Settings/General Settings."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:12
+#, python-format
+msgid "Username"
+msgstr "用ć·ĺŤ"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:8
+#, python-format
+msgid "Name"
+msgstr "姓ĺŤ"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Please enter a username or email address."
+msgstr ""
+
+#. module: auth_signup
+#: selection:res.users,state:0
+msgid "Resetting Password"
+msgstr "复位密ç "
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:13
+#, python-format
+msgid "Username (Email)"
+msgstr "用ć·ĺŤ(Email)"
+
+#. module: auth_signup
+#: field:res.partner,signup_expiration:0
+msgid "Signup Expiration"
+msgstr "注册过期"
+
+#. module: auth_signup
+#: help:base.config.settings,auth_signup_reset_password:0
+msgid "This allows users to trigger a password reset from the Login page."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:21
+#, python-format
+msgid "Log in"
+msgstr "登录"
+
+#. module: auth_signup
+#: field:res.partner,signup_valid:0
+msgid "Signup Token is Valid"
+msgstr "ćł¨ĺ†Śä»¤ç‰ŚďĽ Token )ćŻćś‰ć•çš„"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:119
+#: code:addons/auth_signup/static/src/js/auth_signup.js:122
+#: code:addons/auth_signup/static/src/js/auth_signup.js:125
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#: code:addons/auth_signup/static/src/js/auth_signup.js:165
+#, python-format
+msgid "Login"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:99
+#, python-format
+msgid "Invalid signup token"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:128
+#, python-format
+msgid "Passwords do not match; please retype them."
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/js/auth_signup.js:116
+#: code:addons/auth_signup/static/src/js/auth_signup.js:162
+#, python-format
+msgid "No database selected !"
+msgstr ""
+
+#. module: auth_signup
+#: view:res.users:0
+msgid "Reset Password"
+msgstr "重置密ç "
+
+#. module: auth_signup
+#: field:base.config.settings,auth_signup_reset_password:0
+msgid "Enable password reset from Login page"
+msgstr ""
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24
+#, python-format
+msgid "Back to Login"
+msgstr "返回登录页面"
+
+#. module: auth_signup
+#. openerp-web
+#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22
+#, python-format
+msgid "Sign up"
+msgstr ""
+
+#. module: auth_signup
+#: model:ir.model,name:auth_signup.model_res_partner
+msgid "Partner"
+msgstr "业务伙伴"
+
+#. module: auth_signup
+#: field:res.partner,signup_token:0
+msgid "Signup Token"
+msgstr "ćł¨ĺ†Śä»¤ç‰ŚďĽ Token )"
diff --git a/auth_signup/res_config.py b/auth_signup/res_config.py
new file mode 100755
index 0000000..9cdb415
--- /dev/null
+++ b/auth_signup/res_config.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see
+#
+##############################################################################
+
+from openerp.osv import osv, fields
+from openerp.tools.safe_eval import safe_eval
+
+class base_config_settings(osv.TransientModel):
+ _inherit = 'base.config.settings'
+
+ _columns = {
+ 'auth_signup_reset_password': fields.boolean('Enable password reset from Login page',
+ help="This allows users to trigger a password reset from the Login page."),
+ 'auth_signup_uninvited': fields.boolean('Allow external users to sign up',
+ help="If unchecked, only invited users may sign up."),
+ 'auth_signup_template_user_id': fields.many2one('res.users',
+ string='Template user for new users created through signup'),
+ }
+
+ def get_default_auth_signup_template_user_id(self, cr, uid, fields, context=None):
+ icp = self.pool.get('ir.config_parameter')
+ # we use safe_eval on the result, since the value of the parameter is a nonempty string
+ return {
+ 'auth_signup_reset_password': safe_eval(icp.get_param(cr, uid, 'auth_signup.reset_password', 'False')),
+ 'auth_signup_uninvited': safe_eval(icp.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')),
+ 'auth_signup_template_user_id': safe_eval(icp.get_param(cr, uid, 'auth_signup.template_user_id', 'False')),
+ }
+
+ def set_auth_signup_template_user_id(self, cr, uid, ids, context=None):
+ config = self.browse(cr, uid, ids[0], context=context)
+ icp = self.pool.get('ir.config_parameter')
+ # we store the repr of the values, since the value of the parameter is a required string
+ icp.set_param(cr, uid, 'auth_signup.reset_password', repr(config.auth_signup_reset_password))
+ icp.set_param(cr, uid, 'auth_signup.allow_uninvited', repr(config.auth_signup_uninvited))
+ icp.set_param(cr, uid, 'auth_signup.template_user_id', repr(config.auth_signup_template_user_id.id))
diff --git a/auth_signup/res_config.xml b/auth_signup/res_config.xml
new file mode 100644
index 0000000..47df51e
--- /dev/null
+++ b/auth_signup/res_config.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ base.config.settings.signup
+ base.config.settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auth_signup/res_users.py b/auth_signup/res_users.py
new file mode 100755
index 0000000..9718897
--- /dev/null
+++ b/auth_signup/res_users.py
@@ -0,0 +1,289 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see
+#
+##############################################################################
+from datetime import datetime, timedelta
+import random
+from urllib import urlencode
+from urlparse import urljoin
+
+from openerp.osv import osv, fields
+from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
+from openerp.tools.safe_eval import safe_eval
+from openerp.tools.translate import _
+
+class SignupError(Exception):
+ pass
+
+def random_token():
+ # the token has an entropy of about 120 bits (6 bits/char * 20 chars)
+ chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+ return ''.join(random.choice(chars) for i in xrange(20))
+
+def now(**kwargs):
+ dt = datetime.now() + timedelta(**kwargs)
+ return dt.strftime(DEFAULT_SERVER_DATETIME_FORMAT)
+
+
+class res_partner(osv.Model):
+ _inherit = 'res.partner'
+
+ def _get_signup_valid(self, cr, uid, ids, name, arg, context=None):
+ dt = now()
+ res = {}
+ for partner in self.browse(cr, uid, ids, context):
+ res[partner.id] = bool(partner.signup_token) and \
+ (not partner.signup_expiration or dt <= partner.signup_expiration)
+ return res
+
+ def _get_signup_url_for_action(self, cr, uid, ids, action='login', view_type=None, menu_id=None, res_id=None, model=None, context=None):
+ """ generate a signup url for the given partner ids and action, possibly overriding
+ the url state components (menu_id, id, view_type) """
+ res = dict.fromkeys(ids, False)
+ base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url')
+ for partner in self.browse(cr, uid, ids, context):
+ # when required, make sure the partner has a valid signup token
+ if context and context.get('signup_valid') and not partner.user_ids:
+ self.signup_prepare(cr, uid, [partner.id], context=context)
+ partner.refresh()
+
+ # the parameters to encode for the query and fragment part of url
+ query = {'db': cr.dbname}
+ fragment = {'action': action, 'type': partner.signup_type}
+
+ if partner.signup_token:
+ fragment['token'] = partner.signup_token
+ elif partner.user_ids:
+ fragment['db'] = cr.dbname
+ fragment['login'] = partner.user_ids[0].login
+ else:
+ continue # no signup token, no user, thus no signup url!
+
+ if view_type:
+ fragment['view_type'] = view_type
+ if menu_id:
+ fragment['menu_id'] = menu_id
+ if model:
+ fragment['model'] = model
+ if res_id:
+ fragment['id'] = res_id
+
+ res[partner.id] = urljoin(base_url, "?%s#%s" % (urlencode(query), urlencode(fragment)))
+
+ return res
+
+ def _get_signup_url(self, cr, uid, ids, name, arg, context=None):
+ """ proxy for function field towards actual implementation """
+ return self._get_signup_url_for_action(cr, uid, ids, context=context)
+
+ _columns = {
+ 'signup_token': fields.char('Signup Token'),
+ 'signup_type': fields.char('Signup Token Type'),
+ 'signup_expiration': fields.datetime('Signup Expiration'),
+ 'signup_valid': fields.function(_get_signup_valid, type='boolean', string='Signup Token is Valid'),
+ 'signup_url': fields.function(_get_signup_url, type='char', string='Signup URL'),
+ }
+
+ def action_signup_prepare(self, cr, uid, ids, context=None):
+ return self.signup_prepare(cr, uid, ids, context=context)
+
+ def signup_prepare(self, cr, uid, ids, signup_type="signup", expiration=False, context=None):
+ """ generate a new token for the partners with the given validity, if necessary
+ :param expiration: the expiration datetime of the token (string, optional)
+ """
+ for partner in self.browse(cr, uid, ids, context):
+ if expiration or not partner.signup_valid:
+ token = random_token()
+ while self._signup_retrieve_partner(cr, uid, token, context=context):
+ token = random_token()
+ partner.write({'signup_token': token, 'signup_type': signup_type, 'signup_expiration': expiration})
+ return True
+
+ def _signup_retrieve_partner(self, cr, uid, token,
+ check_validity=False, raise_exception=False, context=None):
+ """ find the partner corresponding to a token, and possibly check its validity
+ :param token: the token to resolve
+ :param check_validity: if True, also check validity
+ :param raise_exception: if True, raise exception instead of returning False
+ :return: partner (browse record) or False (if raise_exception is False)
+ """
+ partner_ids = self.search(cr, uid, [('signup_token', '=', token)], context=context)
+ if not partner_ids:
+ if raise_exception:
+ raise SignupError("Signup token '%s' is not valid" % token)
+ return False
+ partner = self.browse(cr, uid, partner_ids[0], context)
+ if check_validity and not partner.signup_valid:
+ if raise_exception:
+ raise SignupError("Signup token '%s' is no longer valid" % token)
+ return False
+ return partner
+
+ def signup_retrieve_info(self, cr, uid, token, context=None):
+ """ retrieve the user info about the token
+ :return: a dictionary with the user information:
+ - 'db': the name of the database
+ - 'token': the token, if token is valid
+ - 'name': the name of the partner, if token is valid
+ - 'login': the user login, if the user already exists
+ - 'email': the partner email, if the user does not exist
+ """
+ partner = self._signup_retrieve_partner(cr, uid, token, raise_exception=True, context=None)
+ res = {'db': cr.dbname}
+ if partner.signup_valid:
+ res['token'] = token
+ res['name'] = partner.name
+ if partner.user_ids:
+ res['login'] = partner.user_ids[0].login
+ else:
+ res['email'] = partner.email or ''
+ return res
+
+class res_users(osv.Model):
+ _inherit = 'res.users'
+
+ def _get_state(self, cr, uid, ids, name, arg, context=None):
+ res = {}
+ for user in self.browse(cr, uid, ids, context):
+ res[user.id] = ('reset' if user.signup_valid else
+ 'active' if user.login_date else
+ 'new')
+ return res
+
+ _columns = {
+ 'state': fields.function(_get_state, string='Status', type='selection',
+ selection=[('new', 'New'), ('active', 'Active'), ('reset', 'Resetting Password')]),
+ }
+
+ def signup(self, cr, uid, values, token=None, context=None):
+ """ signup a user, to either:
+ - create a new user (no token), or
+ - create a user for a partner (with token, but no user for partner), or
+ - change the password of a user (with token, and existing user).
+ :param values: a dictionary with field values that are written on user
+ :param token: signup token (optional)
+ :return: (dbname, login, password) for the signed up user
+ """
+ if token:
+ # signup with a token: find the corresponding partner id
+ res_partner = self.pool.get('res.partner')
+ partner = res_partner._signup_retrieve_partner(
+ cr, uid, token, check_validity=True, raise_exception=True, context=None)
+ # invalidate signup token
+ partner.write({'signup_token': False, 'signup_type': False, 'signup_expiration': False})
+
+ partner_user = partner.user_ids and partner.user_ids[0] or False
+ if partner_user:
+ # user exists, modify it according to values
+ values.pop('login', None)
+ values.pop('name', None)
+ partner_user.write(values)
+ return (cr.dbname, partner_user.login, values.get('password'))
+ else:
+ # user does not exist: sign up invited user
+ values.update({
+ 'name': partner.name,
+ 'partner_id': partner.id,
+ 'email': values.get('email') or values.get('login'),
+ })
+ self._signup_create_user(cr, uid, values, context=context)
+ else:
+ # no token, sign up an external user
+ values['email'] = values.get('email') or values.get('login')
+ self._signup_create_user(cr, uid, values, context=context)
+
+ return (cr.dbname, values.get('login'), values.get('password'))
+
+ def _signup_create_user(self, cr, uid, values, context=None):
+ """ create a new user from the template user """
+ ir_config_parameter = self.pool.get('ir.config_parameter')
+ template_user_id = safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.template_user_id', 'False'))
+ assert template_user_id and self.exists(cr, uid, template_user_id, context=context), 'Signup: invalid template user'
+
+ # check that uninvited users may sign up
+ if 'partner_id' not in values:
+ if not safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')):
+ raise SignupError('Signup is not allowed for uninvited users')
+
+ assert values.get('login'), "Signup: no login given for new user"
+ assert values.get('partner_id') or values.get('name'), "Signup: no name or partner given for new user"
+
+ # create a copy of the template user (attached to a specific partner_id if given)
+ values['active'] = True
+ return self.copy(cr, uid, template_user_id, values, context=context)
+
+ def reset_password(self, cr, uid, login, context=None):
+ """ retrieve the user corresponding to login (login or email),
+ and reset their password
+ """
+ user_ids = self.search(cr, uid, [('login', '=', login)], context=context)
+ if not user_ids:
+ user_ids = self.search(cr, uid, [('email', '=', login)], context=context)
+ if len(user_ids) != 1:
+ raise Exception('Reset password: invalid username or email')
+ return self.action_reset_password(cr, uid, user_ids, context=context)
+
+ def action_reset_password(self, cr, uid, ids, context=None):
+ """ create signup token for each user, and send their signup url by email """
+ # prepare reset password signup
+ res_partner = self.pool.get('res.partner')
+ partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context)]
+ res_partner.signup_prepare(cr, uid, partner_ids, signup_type="reset", expiration=now(days=+1), context=context)
+
+ if not context:
+ context = {}
+
+ # send email to users with their signup url
+ template = False
+ if context.get('create_user'):
+ try:
+ template = self.pool.get('ir.model.data').get_object(cr, uid, 'auth_signup', 'set_password_email')
+ except ValueError:
+ pass
+ if not bool(template):
+ template = self.pool.get('ir.model.data').get_object(cr, uid, 'auth_signup', 'reset_password_email')
+ mail_obj = self.pool.get('mail.mail')
+ assert template._name == 'email.template'
+ for user in self.browse(cr, uid, ids, context):
+ if not user.email:
+ raise osv.except_osv(_("Cannot send email: user has no email address."), user.name)
+ mail_id = self.pool.get('email.template').send_mail(cr, uid, template.id, user.id, True, context=context)
+ mail_state = mail_obj.read(cr, uid, mail_id, ['state'], context=context)
+ if mail_state and mail_state['state'] == 'exception':
+ raise osv.except_osv(_("Cannot send email: no outgoing email server configured.\nYou can configure it under Settings/General Settings."), user.name)
+ else:
+ return {
+ 'type': 'ir.actions.client',
+ 'name': '_(Server Notification)',
+ 'tag': 'action_notify',
+ 'params': {
+ 'title': 'Mail Sent to: %s' % user.name,
+ 'text': 'You can reset the password by yourself using this link ' % user.partner_id.signup_url,
+ 'sticky': True,
+ }
+ }
+
+ def create(self, cr, uid, values, context=None):
+ # overridden to automatically invite user to sign up
+ user_id = super(res_users, self).create(cr, uid, values, context=context)
+ user = self.browse(cr, uid, user_id, context=context)
+ if context and context.get('reset_password') and user.email:
+ ctx = dict(context, create_user=True)
+ self.action_reset_password(cr, uid, [user.id], context=ctx)
+ return user_id
diff --git a/auth_signup/res_users_view.xml b/auth_signup/res_users_view.xml
new file mode 100644
index 0000000..be9942f
--- /dev/null
+++ b/auth_signup/res_users_view.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ {'reset_password': True}
+
+
+
+ user.form.state
+ res.users
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auth_signup/static/._src b/auth_signup/static/._src
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/static/src/._js b/auth_signup/static/src/._js
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/static/src/._xml b/auth_signup/static/src/._xml
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/static/src/js/._auth_signup.js b/auth_signup/static/src/js/._auth_signup.js
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/static/src/js/auth_signup.js b/auth_signup/static/src/js/auth_signup.js
new file mode 100644
index 0000000..69a4cc3
--- /dev/null
+++ b/auth_signup/static/src/js/auth_signup.js
@@ -0,0 +1,175 @@
+openerp.auth_signup = function(instance) {
+ instance.auth_signup = instance.auth_signup || {};
+ var _t = instance.web._t;
+
+ instance.web.Login.include({
+ start: function() {
+ var self = this;
+ this.signup_enabled = false;
+ this.reset_password_enabled = false;
+ return this._super().then(function() {
+
+ // Switches the login box to the select mode whith mode == [default|signup|reset]
+ self.on('change:login_mode', self, function() {
+ var mode = self.get('login_mode') || 'default';
+ self.$('*[data-modes]').each(function() {
+ var modes = $(this).data('modes').split(/\s+/);
+ $(this).toggle(modes.indexOf(mode) > -1);
+ });
+ self.$('a.oe_signup_signup:visible').toggle(self.signup_enabled);
+ self.$('a.oe_signup_reset_password:visible').toggle(self.reset_password_enabled);
+ });
+
+ // to switch between the signup and regular login form
+ self.$('a.oe_signup_signup').click(function(ev) {
+ self.set('login_mode', 'signup');
+ return false;
+ });
+ self.$('a.oe_signup_back').click(function(ev) {
+ self.set('login_mode', 'default');
+ delete self.params.token;
+ return false;
+ });
+
+ var dblist = self.db_list || [];
+ var dbname = self.params.db || (dblist.length === 1 ? dblist[0] : null);
+
+ // if there is an error message in params, show it then forget it
+ if (self.params.error_message) {
+ self.show_error(self.params.error_message);
+ delete self.params.error_message;
+ }
+
+ // in case of a signup, retrieve the user information from the token
+ if (dbname && self.params.token) {
+ self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token})
+ .done(self.on_token_loaded)
+ .fail(self.on_token_failed);
+ }
+ if (dbname && self.params.login) {
+ self.$("form input[name=login]").val(self.params.login);
+ }
+
+ // bind reset password link
+ self.$('a.oe_signup_reset_password').click(self.do_reset_password);
+
+ if (dbname) {
+ self.rpc("/auth_signup/get_config", {dbname: dbname}).done(function(result) {
+ self.signup_enabled = result.signup;
+ self.reset_password_enabled = result.reset_password;
+ self.set('login_mode', 'default');
+ });
+ } else {
+ // TODO: support multiple database mode
+ self.set('login_mode', 'default');
+ }
+ });
+ },
+
+ on_token_loaded: function(result) {
+ // select the right the database
+ this.selected_db = result.db;
+ this.on_db_loaded([result.db]);
+ if (result.token) {
+ // switch to signup mode, set user name and login
+ this.set('login_mode', (this.params.type === 'reset' ? 'reset' : 'signup'));
+ this.$("form input[name=name]").val(result.name).attr("readonly", "readonly");
+ if (result.login) {
+ this.$("form input[name=login]").val(result.login).attr("readonly", "readonly");
+ } else {
+ this.$("form input[name=login]").val(result.email);
+ }
+ } else {
+ // remain in login mode, set login if present
+ delete this.params.token;
+ this.set('login_mode', 'default');
+ this.$("form input[name=login]").val(result.login || "");
+ }
+ },
+
+ on_token_failed: function(result, ev) {
+ if (ev) {
+ ev.preventDefault();
+ }
+ this.show_error(_t("Invalid signup token"));
+ delete this.params.db;
+ delete this.params.token;
+ this.set('login_mode', 'default');
+ },
+
+ on_submit: function(ev) {
+ if (ev) {
+ ev.preventDefault();
+ }
+ var login_mode = this.get('login_mode');
+ if (login_mode === 'signup' || login_mode === 'reset') {
+ // signup user (or reset password)
+ var db = this.$("form [name=db]").val();
+ var name = this.$("form input[name=name]").val();
+ var login = this.$("form input[name=login]").val();
+ var password = this.$("form input[name=password]").val();
+ var confirm_password = this.$("form input[name=confirm_password]").val();
+ if (!db) {
+ this.do_warn(_t("Login"), _t("No database selected !"));
+ return false;
+ } else if (!name) {
+ this.do_warn(_t("Login"), _t("Please enter a name."));
+ return false;
+ } else if (!login) {
+ this.do_warn(_t("Login"), _t("Please enter a username."));
+ return false;
+ } else if (!password || !confirm_password) {
+ this.do_warn(_t("Login"), _t("Please enter a password and confirm it."));
+ return false;
+ } else if (password !== confirm_password) {
+ this.do_warn(_t("Login"), _t("Passwords do not match; please retype them."));
+ return false;
+ }
+ var params = {
+ dbname : db,
+ token: this.params.token || "",
+ name: name,
+ login: login,
+ password: password,
+ };
+
+ var self = this,
+ super_ = this._super;
+ this.rpc('/auth_signup/signup', params)
+ .done(function(result) {
+ if (result.error) {
+ self.show_error(result.error);
+ } else {
+ super_.apply(self, [ev]);
+ }
+ });
+ } else {
+ // regular login
+ this._super(ev);
+ }
+ },
+
+ do_reset_password: function(ev) {
+ if (ev) {
+ ev.preventDefault();
+ }
+ var self = this;
+ var db = this.$("form [name=db]").val();
+ var login = this.$("form input[name=login]").val();
+ if (!db) {
+ this.do_warn(_t("Login"), _t("No database selected !"));
+ return $.Deferred().reject();
+ } else if (!login) {
+ this.do_warn(_t("Login"), _t("Please enter a username or email address."));
+ return $.Deferred().reject();
+ }
+ return self.rpc("/auth_signup/reset_password", { dbname: db, login: login }).done(function(result) {
+ self.show_error(_t("An email has been sent with credentials to reset your password"));
+ self.set('login_mode', 'default');
+ }).fail(function(result, ev) {
+ ev.preventDefault();
+ self.show_error(result.message);
+ });
+ },
+ });
+};
diff --git a/auth_signup/static/src/xml/._auth_signup.xml b/auth_signup/static/src/xml/._auth_signup.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/auth_signup/static/src/xml/auth_signup.xml b/auth_signup/static/src/xml/auth_signup.xml
new file mode 100644
index 0000000..a6fd0ba
--- /dev/null
+++ b/auth_signup/static/src/xml/auth_signup.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ Name
+
+
+
+ Username
+ Username (Email)
+
+
+ Confirm Password
+
+
+
+
+
+ Entrar
+ Sign Up
+ Reset password
+
+ Sign Up
+ Back to Login
+ Reset password
+
+
+
+ this.attr('data-modes', 'default');
+
+
+
+
diff --git a/web/.___init__.py b/web/.___init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/.___openerp__.py b/web/.___openerp__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._cli b/web/._cli
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._controllers b/web/._controllers
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._doc b/web/._doc
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._http.py b/web/._http.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._i18n b/web/._i18n
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._session.py b/web/._session.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._static b/web/._static
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/._tests b/web/._tests
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/__init__.py b/web/__init__.py
new file mode 100755
index 0000000..e01969d
--- /dev/null
+++ b/web/__init__.py
@@ -0,0 +1,5 @@
+import http
+import controllers
+import cli
+
+wsgi_postload = http.wsgi_postload
diff --git a/web/__openerp__.py b/web/__openerp__.py
new file mode 100755
index 0000000..678eacd
--- /dev/null
+++ b/web/__openerp__.py
@@ -0,0 +1,89 @@
+{
+ 'name': 'Web',
+ 'category': 'Hidden',
+ 'version': '7.0.1.0',
+ 'description':
+ """
+OpenERP Web core module.
+========================
+
+This module provides the core of the OpenERP Web Client.
+ """,
+ 'depends': [],
+ 'auto_install': True,
+ 'post_load': 'wsgi_postload',
+ 'js' : [
+ "static/lib/datejs/globalization/en-US.js",
+ "static/lib/datejs/core.js",
+ "static/lib/datejs/parser.js",
+ "static/lib/datejs/sugarpak.js",
+ "static/lib/datejs/extras.js",
+ "static/lib/jquery/jquery-1.8.3.js",
+ "static/lib/jquery.MD5/jquery.md5.js",
+ "static/lib/jquery.form/jquery.form.js",
+ "static/lib/jquery.validate/jquery.validate.js",
+ "static/lib/jquery.ba-bbq/jquery.ba-bbq.js",
+ "static/lib/spinjs/spin.js",
+ "static/lib/jquery.autosize/jquery.autosize.js",
+ "static/lib/jquery.blockUI/jquery.blockUI.js",
+ "static/lib/jquery.ui/js/jquery-ui-1.9.1.custom.js",
+ "static/lib/jquery.ui.timepicker/js/jquery-ui-timepicker-addon.js",
+ "static/lib/jquery.ui.notify/js/jquery.notify.js",
+ "static/lib/jquery.deferred-queue/jquery.deferred-queue.js",
+ "static/lib/jquery.scrollTo/jquery.scrollTo-min.js",
+ "static/lib/jquery.tipsy/jquery.tipsy.js",
+ "static/lib/jquery.textext/jquery.textext.js",
+ "static/lib/jquery.timeago/jquery.timeago.js",
+ "static/lib/qweb/qweb2.js",
+ "static/lib/underscore/underscore.js",
+ "static/lib/underscore/underscore.string.js",
+ "static/lib/backbone/backbone.js",
+ "static/lib/cleditor/jquery.cleditor.js",
+ "static/lib/py.js/lib/py.js",
+ "static/src/js/boot.js",
+ "static/src/js/testing.js",
+ "static/src/js/pyeval.js",
+ "static/src/js/corelib.js",
+ "static/src/js/coresetup.js",
+ "static/src/js/dates.js",
+ "static/src/js/formats.js",
+ "static/src/js/chrome.js",
+ "static/src/js/views.js",
+ "static/src/js/data.js",
+ "static/src/js/data_export.js",
+ "static/src/js/search.js",
+ "static/src/js/view_form.js",
+ "static/src/js/view_list.js",
+ "static/src/js/view_list_editable.js",
+ "static/src/js/view_tree.js",
+ ],
+ 'css' : [
+ "static/lib/jquery.ui.bootstrap/css/custom-theme/jquery-ui-1.9.0.custom.css",
+ "static/lib/jquery.ui.timepicker/css/jquery-ui-timepicker-addon.css",
+ "static/lib/jquery.ui.notify/css/ui.notify.css",
+ "static/lib/jquery.tipsy/tipsy.css",
+ "static/lib/jquery.textext/jquery.textext.css",
+ "static/src/css/base.css",
+ "static/src/css/data_export.css",
+ "static/lib/cleditor/jquery.cleditor.css",
+ ],
+ 'qweb' : [
+ "static/src/xml/*.xml",
+ ],
+ 'test': [
+ "static/test/testing.js",
+ "static/test/class.js",
+ "static/test/registry.js",
+ "static/test/form.js",
+ "static/test/list-utils.js",
+ "static/test/formats.js",
+ "static/test/rpc.js",
+ "static/test/evals.js",
+ "static/test/search.js",
+ "static/test/Widget.js",
+ "static/test/list.js",
+ "static/test/list-editable.js",
+ "static/test/mutex.js"
+ ],
+ 'bootstrap': True,
+}
diff --git a/web/cli/.___init__.py b/web/cli/.___init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/cli/._test_js.py b/web/cli/._test_js.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/cli/__init__.py b/web/cli/__init__.py
new file mode 100755
index 0000000..823c140
--- /dev/null
+++ b/web/cli/__init__.py
@@ -0,0 +1 @@
+import test_js
diff --git a/web/cli/test_js.py b/web/cli/test_js.py
new file mode 100755
index 0000000..b3a8e63
--- /dev/null
+++ b/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/web/controllers/.___init__.py b/web/controllers/.___init__.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/controllers/._main.py b/web/controllers/._main.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/controllers/._testing.py b/web/controllers/._testing.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/controllers/__init__.py b/web/controllers/__init__.py
new file mode 100755
index 0000000..74c2751
--- /dev/null
+++ b/web/controllers/__init__.py
@@ -0,0 +1,2 @@
+from . import main
+from . import testing
diff --git a/web/controllers/main.py b/web/controllers/main.py
new file mode 100755
index 0000000..247d6f5
--- /dev/null
+++ b/web/controllers/main.py
@@ -0,0 +1,1710 @@
+# -*- coding: utf-8 -*-
+
+import ast
+import base64
+import csv
+import glob
+import itertools
+import logging
+import operator
+import datetime
+import hashlib
+import os
+import re
+import simplejson
+import time
+import urllib
+import urllib2
+import xmlrpclib
+import zlib
+from xml.etree import ElementTree
+from cStringIO import StringIO
+
+import babel.messages.pofile
+import werkzeug.utils
+import werkzeug.wrappers
+try:
+ import xlwt
+except ImportError:
+ xlwt = None
+
+import openerp
+import openerp.modules.registry
+from openerp.tools.translate import _
+
+from .. import http
+openerpweb = http
+
+#----------------------------------------------------------
+# OpenERP Web helpers
+#----------------------------------------------------------
+
+def rjsmin(script):
+ """ Minify js with a clever regex.
+ Taken from http://opensource.perlig.de/rjsmin
+ Apache License, Version 2.0 """
+ def subber(match):
+ """ Substitution callback """
+ groups = match.groups()
+ return (
+ groups[0] or
+ groups[1] or
+ groups[2] or
+ groups[3] or
+ (groups[4] and '\n') or
+ (groups[5] and ' ') or
+ (groups[6] and ' ') or
+ (groups[7] and ' ') or
+ ''
+ )
+
+ result = re.sub(
+ r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?'
+ r'\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|'
+ r'\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?:(?<=[(,=:\[!&|?{};\r\n]'
+ r')(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/'
+ r'))*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*'
+ r'(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]*'
+ r'))|(?:(?<=[\000-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\01'
+ r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*((?:/(?![\r\n/*])[^/'
+ r'\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]'
+ r'*)*\]))[^/\\\[\r\n]*)*/)[^\047"/\000-\040]*))|(?<=[^\000-!#%&(*,./'
+ r':-@\[\\^`{|~])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/'
+ r'*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]))(?:[\000-\011\013\01'
+ r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#'
+ r'%-\047)*,./:-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-'
+ r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^'
+ r'\000-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|'
+ r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\0'
+ r'13\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:[\0'
+ r'00-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+|(?:'
+ r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*'
+ r']*\*+(?:[^/*][^*]*\*+)*/))*)+', subber, '\n%s\n' % script
+ ).strip()
+ return result
+
+def db_list(req):
+ proxy = req.session.proxy("db")
+ dbs = proxy.list()
+ h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
+ d = h.split('.')[0]
+ r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
+ dbs = [i for i in dbs if re.match(r, i)]
+ return dbs
+
+def db_monodb(req):
+ # if only one db exists, return it else return False
+ try:
+ dbs = db_list(req)
+ if len(dbs) == 1:
+ return dbs[0]
+ except xmlrpclib.Fault:
+ # ignore access denied
+ pass
+ return False
+
+def module_topological_sort(modules):
+ """ Return a list of module names sorted so that their dependencies of the
+ modules are listed before the module itself
+
+ modules is a dict of {module_name: dependencies}
+
+ :param modules: modules to sort
+ :type modules: dict
+ :returns: list(str)
+ """
+
+ dependencies = set(itertools.chain.from_iterable(modules.itervalues()))
+ # incoming edge: dependency on other module (if a depends on b, a has an
+ # incoming edge from b, aka there's an edge from b to a)
+ # outgoing edge: other module depending on this one
+
+ # [Tarjan 1976], http://en.wikipedia.org/wiki/Topological_sorting#Algorithms
+ #L ↠Empty list that will contain the sorted nodes
+ L = []
+ #S ↠Set of all nodes with no outgoing edges (modules on which no other
+ # module depends)
+ S = set(module for module in modules if module not in dependencies)
+
+ visited = set()
+ #function visit(node n)
+ def visit(n):
+ #if n has not been visited yet then
+ if n not in visited:
+ #mark n as visited
+ visited.add(n)
+ #change: n not web module, can not be resolved, ignore
+ if n not in modules: return
+ #for each node m with an edge from m to n do (dependencies of n)
+ for m in modules[n]:
+ #visit(m)
+ visit(m)
+ #add n to L
+ L.append(n)
+ #for each node n in S do
+ for n in S:
+ #visit(n)
+ visit(n)
+ return L
+
+def module_installed(req):
+ # Candidates module the current heuristic is the /static dir
+ loadable = openerpweb.addons_manifest.keys()
+ modules = {}
+
+ # Retrieve database installed modules
+ # TODO The following code should move to ir.module.module.list_installed_modules()
+ Modules = req.session.model('ir.module.module')
+ domain = [('state','=','installed'), ('name','in', loadable)]
+ for module in Modules.search_read(domain, ['name', 'dependencies_id']):
+ modules[module['name']] = []
+ deps = module.get('dependencies_id')
+ if deps:
+ deps_read = req.session.model('ir.module.module.dependency').read(deps, ['name'])
+ dependencies = [i['name'] for i in deps_read]
+ modules[module['name']] = dependencies
+
+ sorted_modules = module_topological_sort(modules)
+ return sorted_modules
+
+def module_installed_bypass_session(dbname):
+ loadable = openerpweb.addons_manifest.keys()
+ modules = {}
+ try:
+ registry = openerp.modules.registry.RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ m = registry.get('ir.module.module')
+ # TODO The following code should move to ir.module.module.list_installed_modules()
+ domain = [('state','=','installed'), ('name','in', loadable)]
+ ids = m.search(cr, 1, [('state','=','installed'), ('name','in', loadable)])
+ for module in m.read(cr, 1, ids, ['name', 'dependencies_id']):
+ modules[module['name']] = []
+ deps = module.get('dependencies_id')
+ if deps:
+ deps_read = registry.get('ir.module.module.dependency').read(cr, 1, deps, ['name'])
+ dependencies = [i['name'] for i in deps_read]
+ modules[module['name']] = dependencies
+ except Exception,e:
+ pass
+ sorted_modules = module_topological_sort(modules)
+ return sorted_modules
+
+def module_boot(req, db=None):
+ server_wide_modules = openerp.conf.server_wide_modules or ['web']
+ serverside = []
+ dbside = []
+ for i in server_wide_modules:
+ if i in openerpweb.addons_manifest:
+ serverside.append(i)
+ monodb = db or db_monodb(req)
+ if monodb:
+ dbside = module_installed_bypass_session(monodb)
+ dbside = [i for i in dbside if i not in serverside]
+ addons = serverside + dbside
+ return addons
+
+def concat_xml(file_list):
+ """Concatenate xml files
+
+ :param list(str) file_list: list of files to check
+ :returns: (concatenation_result, checksum)
+ :rtype: (str, str)
+ """
+ checksum = hashlib.new('sha1')
+ if not file_list:
+ return '', checksum.hexdigest()
+
+ root = None
+ for fname in file_list:
+ with open(fname, 'rb') as fp:
+ contents = fp.read()
+ checksum.update(contents)
+ fp.seek(0)
+ xml = ElementTree.parse(fp).getroot()
+
+ if root is None:
+ root = ElementTree.Element(xml.tag)
+ #elif root.tag != xml.tag:
+ # raise ValueError("Root tags missmatch: %r != %r" % (root.tag, xml.tag))
+
+ for child in xml.getchildren():
+ root.append(child)
+ return ElementTree.tostring(root, 'utf-8'), checksum.hexdigest()
+
+def concat_files(file_list, reader=None, intersperse=""):
+ """ Concatenates contents of all provided files
+
+ :param list(str) file_list: list of files to check
+ :param function reader: reading procedure for each file
+ :param str intersperse: string to intersperse between file contents
+ :returns: (concatenation_result, checksum)
+ :rtype: (str, str)
+ """
+ checksum = hashlib.new('sha1')
+ if not file_list:
+ return '', checksum.hexdigest()
+
+ if reader is None:
+ def reader(f):
+ with open(f, 'rb') as fp:
+ return fp.read()
+
+ files_content = []
+ for fname in file_list:
+ contents = reader(fname)
+ checksum.update(contents)
+ files_content.append(contents)
+
+ files_concat = intersperse.join(files_content)
+ return files_concat, checksum.hexdigest()
+
+concat_js_cache = {}
+
+def concat_js(file_list):
+ content, checksum = concat_files(file_list, intersperse=';')
+ if checksum in concat_js_cache:
+ content = concat_js_cache[checksum]
+ else:
+ content = rjsmin(content)
+ concat_js_cache[checksum] = content
+ return content, checksum
+
+def fs2web(path):
+ """convert FS path into web path"""
+ return '/'.join(path.split(os.path.sep))
+
+def manifest_glob(req, extension, addons=None, db=None):
+ if addons is None:
+ addons = module_boot(req, db=db)
+ else:
+ addons = addons.split(',')
+ r = []
+ for addon in addons:
+ manifest = openerpweb.addons_manifest.get(addon, None)
+ if not manifest:
+ continue
+ # ensure does not ends with /
+ addons_path = os.path.join(manifest['addons_path'], '')[:-1]
+ globlist = manifest.get(extension, [])
+ for pattern in globlist:
+ for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))):
+ r.append((path, fs2web(path[len(addons_path):])))
+ return r
+
+def manifest_list(req, extension, mods=None, db=None):
+ if not req.debug:
+ path = '/web/webclient/' + extension
+ if mods is not None:
+ path += '?' + urllib.urlencode({'mods': mods})
+ elif db:
+ path += '?' + urllib.urlencode({'db': db})
+ return [path]
+ files = manifest_glob(req, extension, addons=mods, db=db)
+ i_am_diabetic = req.httprequest.environ["QUERY_STRING"].count("no_sugar") >= 1 or \
+ req.httprequest.environ.get('HTTP_REFERER', '').count("no_sugar") >= 1
+ if i_am_diabetic:
+ return [wp for _fp, wp in files]
+ else:
+ return ['%s?debug=%s' % (wp, os.path.getmtime(fp)) for fp, wp in files]
+
+def get_last_modified(files):
+ """ Returns the modification time of the most recently modified
+ file provided
+
+ :param list(str) files: names of files to check
+ :return: most recent modification time amongst the fileset
+ :rtype: datetime.datetime
+ """
+ files = list(files)
+ if files:
+ return max(datetime.datetime.fromtimestamp(os.path.getmtime(f))
+ for f in files)
+ return datetime.datetime(1970, 1, 1)
+
+def make_conditional(req, response, last_modified=None, etag=None):
+ """ Makes the provided response conditional based upon the request,
+ and mandates revalidation from clients
+
+ Uses Werkzeug's own :meth:`ETagResponseMixin.make_conditional`, after
+ setting ``last_modified`` and ``etag`` correctly on the response object
+
+ :param req: OpenERP request
+ :type req: web.common.http.WebRequest
+ :param response: Werkzeug response
+ :type response: werkzeug.wrappers.Response
+ :param datetime.datetime last_modified: last modification date of the response content
+ :param str etag: some sort of checksum of the content (deep etag)
+ :return: the response object provided
+ :rtype: werkzeug.wrappers.Response
+ """
+ response.cache_control.must_revalidate = True
+ response.cache_control.max_age = 0
+ if last_modified:
+ response.last_modified = last_modified
+ if etag:
+ response.set_etag(etag)
+ return response.make_conditional(req.httprequest)
+
+def login_and_redirect(req, db, login, key, redirect_url='/'):
+ wsgienv = req.httprequest.environ
+ env = dict(
+ base_location=req.httprequest.url_root.rstrip('/'),
+ HTTP_HOST=wsgienv['HTTP_HOST'],
+ REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
+ )
+ req.session.authenticate(db, login, key, env)
+ return set_cookie_and_redirect(req, redirect_url)
+
+def set_cookie_and_redirect(req, redirect_url):
+ redirect = werkzeug.utils.redirect(redirect_url, 303)
+ redirect.autocorrect_location_header = False
+ cookie_val = urllib2.quote(simplejson.dumps(req.session_id))
+ redirect.set_cookie('instance0|session_id', cookie_val)
+ return redirect
+
+def load_actions_from_ir_values(req, key, key2, models, meta):
+ Values = req.session.model('ir.values')
+ actions = Values.get(key, key2, models, meta, req.context)
+
+ return [(id, name, clean_action(req, action))
+ for id, name, action in actions]
+
+def clean_action(req, action):
+ action.setdefault('flags', {})
+ action_type = action.setdefault('type', 'ir.actions.act_window_close')
+ if action_type == 'ir.actions.act_window':
+ return fix_view_modes(action)
+ return action
+
+# I think generate_views,fix_view_modes should go into js ActionManager
+def generate_views(action):
+ """
+ While the server generates a sequence called "views" computing dependencies
+ between a bunch of stuff for views coming directly from the database
+ (the ``ir.actions.act_window model``), it's also possible for e.g. buttons
+ to return custom view dictionaries generated on the fly.
+
+ In that case, there is no ``views`` key available on the action.
+
+ Since the web client relies on ``action['views']``, generate it here from
+ ``view_mode`` and ``view_id``.
+
+ Currently handles two different cases:
+
+ * no view_id, multiple view_mode
+ * single view_id, single view_mode
+
+ :param dict action: action descriptor dictionary to generate a views key for
+ """
+ view_id = action.get('view_id') or False
+ if isinstance(view_id, (list, tuple)):
+ view_id = view_id[0]
+
+ # providing at least one view mode is a requirement, not an option
+ view_modes = action['view_mode'].split(',')
+
+ if len(view_modes) > 1:
+ if view_id:
+ raise ValueError('Non-db action dictionaries should provide '
+ 'either multiple view modes or a single view '
+ 'mode and an optional view id.\n\n Got view '
+ 'modes %r and view id %r for action %r' % (
+ view_modes, view_id, action))
+ action['views'] = [(False, mode) for mode in view_modes]
+ return
+ action['views'] = [(view_id, view_modes[0])]
+
+def fix_view_modes(action):
+ """ For historical reasons, OpenERP has weird dealings in relation to
+ view_mode and the view_type attribute (on window actions):
+
+ * one of the view modes is ``tree``, which stands for both list views
+ and tree views
+ * the choice is made by checking ``view_type``, which is either
+ ``form`` for a list view or ``tree`` for an actual tree view
+
+ This methods simply folds the view_type into view_mode by adding a
+ new view mode ``list`` which is the result of the ``tree`` view_mode
+ in conjunction with the ``form`` view_type.
+
+ TODO: this should go into the doc, some kind of "peculiarities" section
+
+ :param dict action: an action descriptor
+ :returns: nothing, the action is modified in place
+ """
+ if not action.get('views'):
+ generate_views(action)
+
+ if action.pop('view_type', 'form') != 'form':
+ return action
+
+ if 'view_mode' in action:
+ action['view_mode'] = ','.join(
+ mode if mode != 'tree' else 'list'
+ for mode in action['view_mode'].split(','))
+ action['views'] = [
+ [id, mode if mode != 'tree' else 'list']
+ for id, mode in action['views']
+ ]
+
+ return action
+
+def _local_web_translations(trans_file):
+ messages = []
+ try:
+ with open(trans_file) as t_file:
+ po = babel.messages.pofile.read_po(t_file)
+ except Exception:
+ return
+ for x in po:
+ if x.id and x.string and "openerp-web" in x.auto_comments:
+ messages.append({'id': x.id, 'string': x.string})
+ return messages
+
+def xml2json_from_elementtree(el, preserve_whitespaces=False):
+ """ xml2json-direct
+ Simple and straightforward XML-to-JSON converter in Python
+ New BSD Licensed
+ http://code.google.com/p/xml2json-direct/
+ """
+ res = {}
+ if el.tag[0] == "{":
+ ns, name = el.tag.rsplit("}", 1)
+ res["tag"] = name
+ res["namespace"] = ns[1:]
+ else:
+ res["tag"] = el.tag
+ res["attrs"] = {}
+ for k, v in el.items():
+ res["attrs"][k] = v
+ kids = []
+ if el.text and (preserve_whitespaces or el.text.strip() != ''):
+ kids.append(el.text)
+ for kid in el:
+ kids.append(xml2json_from_elementtree(kid, preserve_whitespaces))
+ if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''):
+ kids.append(kid.tail)
+ res["children"] = kids
+ return res
+
+def content_disposition(filename, req):
+ filename = filename.encode('utf8')
+ escaped = urllib2.quote(filename)
+ browser = req.httprequest.user_agent.browser
+ version = int((req.httprequest.user_agent.version or '0').split('.')[0])
+ if browser == 'msie' and version < 9:
+ return "attachment; filename=%s" % escaped
+ elif browser == 'safari':
+ return "attachment; filename=%s" % filename
+ else:
+ return "attachment; filename*=UTF-8''%s" % escaped
+
+
+#----------------------------------------------------------
+# OpenERP Web web Controllers
+#----------------------------------------------------------
+
+html_template = """
+
+
+
+
+ OpenERP
+
+
+ %(css)s
+ %(js)s
+
+
+
+
+
+
+"""
+
+class Home(openerpweb.Controller):
+ _cp_path = '/'
+
+ @openerpweb.httprequest
+ def index(self, req, s_action=None, db=None, **kw):
+ js = "\n ".join('' % i for i in manifest_list(req, 'js', db=db))
+ css = "\n ".join(' ' % i for i in manifest_list(req, 'css', db=db))
+
+ r = html_template % {
+ 'js': js,
+ 'css': css,
+ 'modules': simplejson.dumps(module_boot(req, db=db)),
+ 'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));'
+ }
+ return r
+
+ @openerpweb.httprequest
+ def login(self, req, db, login, key):
+ return login_and_redirect(req, db, login, key)
+
+class WebClient(openerpweb.Controller):
+ _cp_path = "/web/webclient"
+
+ @openerpweb.jsonrequest
+ def csslist(self, req, mods=None):
+ return manifest_list(req, 'css', mods=mods)
+
+ @openerpweb.jsonrequest
+ def jslist(self, req, mods=None):
+ return manifest_list(req, 'js', mods=mods)
+
+ @openerpweb.jsonrequest
+ def qweblist(self, req, mods=None):
+ return manifest_list(req, 'qweb', mods=mods)
+
+ @openerpweb.httprequest
+ def css(self, req, mods=None, db=None):
+ files = list(manifest_glob(req, 'css', addons=mods, db=db))
+ last_modified = get_last_modified(f[0] for f in files)
+ if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
+ return werkzeug.wrappers.Response(status=304)
+
+ file_map = dict(files)
+
+ rx_import = re.compile(r"""@import\s+('|")(?!'|"|/|https?://)""", re.U)
+ rx_url = re.compile(r"""url\s*\(\s*('|"|)(?!'|"|/|https?://|data:)""", re.U)
+
+ def reader(f):
+ """read the a css file and absolutify all relative uris"""
+ with open(f, 'rb') as fp:
+ data = fp.read().decode('utf-8')
+
+ path = file_map[f]
+ web_dir = os.path.dirname(path)
+
+ data = re.sub(
+ rx_import,
+ r"""@import \1%s/""" % (web_dir,),
+ data,
+ )
+
+ data = re.sub(
+ rx_url,
+ r"""url(\1%s/""" % (web_dir,),
+ data,
+ )
+ return data.encode('utf-8')
+
+ content, checksum = concat_files((f[0] for f in files), reader)
+
+ return make_conditional(
+ req, req.make_response(content, [('Content-Type', 'text/css')]),
+ last_modified, checksum)
+
+ @openerpweb.httprequest
+ def js(self, req, mods=None, db=None):
+ files = [f[0] for f in manifest_glob(req, 'js', addons=mods, db=db)]
+ last_modified = get_last_modified(files)
+ if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
+ return werkzeug.wrappers.Response(status=304)
+
+ content, checksum = concat_js(files)
+
+ return make_conditional(
+ req, req.make_response(content, [('Content-Type', 'application/javascript')]),
+ last_modified, checksum)
+
+ @openerpweb.httprequest
+ def qweb(self, req, mods=None, db=None):
+ files = [f[0] for f in manifest_glob(req, 'qweb', addons=mods, db=db)]
+ last_modified = get_last_modified(files)
+ if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
+ return werkzeug.wrappers.Response(status=304)
+
+ content, checksum = concat_xml(files)
+
+ return make_conditional(
+ req, req.make_response(content, [('Content-Type', 'text/xml')]),
+ last_modified, checksum)
+
+ @openerpweb.jsonrequest
+ def bootstrap_translations(self, req, mods):
+ """ Load local translations from *.po files, as a temporary solution
+ until we have established a valid session. This is meant only
+ for translating the login page and db management chrome, using
+ the browser's language. """
+ # For performance reasons we only load a single translation, so for
+ # sub-languages (that should only be partially translated) we load the
+ # main language PO instead - that should be enough for the login screen.
+ lang = req.lang.split('_')[0]
+
+ translations_per_module = {}
+ for addon_name in mods:
+ if openerpweb.addons_manifest[addon_name].get('bootstrap'):
+ addons_path = openerpweb.addons_manifest[addon_name]['addons_path']
+ f_name = os.path.join(addons_path, addon_name, "i18n", lang + ".po")
+ if not os.path.exists(f_name):
+ continue
+ translations_per_module[addon_name] = {'messages': _local_web_translations(f_name)}
+
+ return {"modules": translations_per_module,
+ "lang_parameters": None}
+
+ @openerpweb.jsonrequest
+ def translations(self, req, mods, lang):
+ res_lang = req.session.model('res.lang')
+ ids = res_lang.search([("code", "=", lang)])
+ lang_params = None
+ if ids:
+ lang_params = res_lang.read(ids[0], ["direction", "date_format", "time_format",
+ "grouping", "decimal_point", "thousands_sep"])
+
+ # Regional languages (ll_CC) must inherit/override their parent lang (ll), but this is
+ # done server-side when the language is loaded, so we only need to load the user's lang.
+ ir_translation = req.session.model('ir.translation')
+ translations_per_module = {}
+ messages = ir_translation.search_read([('module','in',mods),('lang','=',lang),
+ ('comments','like','openerp-web'),('value','!=',False),
+ ('value','!=','')],
+ ['module','src','value','lang'], order='module')
+ for mod, msg_group in itertools.groupby(messages, key=operator.itemgetter('module')):
+ translations_per_module.setdefault(mod,{'messages':[]})
+ translations_per_module[mod]['messages'].extend({'id': m['src'],
+ 'string': m['value']} \
+ for m in msg_group)
+ return {"modules": translations_per_module,
+ "lang_parameters": lang_params}
+
+ @openerpweb.jsonrequest
+ def version_info(self, req):
+ return openerp.service.web_services.RPC_VERSION_1
+
+class Proxy(openerpweb.Controller):
+ _cp_path = '/web/proxy'
+
+ @openerpweb.jsonrequest
+ def load(self, req, path):
+ """ Proxies an HTTP request through a JSON request.
+
+ It is strongly recommended to not request binary files through this,
+ as the result will be a binary data blob as well.
+
+ :param req: OpenERP request
+ :param path: actual request path
+ :return: file content
+ """
+ from werkzeug.test import Client
+ from werkzeug.wrappers import BaseResponse
+
+ return Client(req.httprequest.app, BaseResponse).get(path).data
+
+class Database(openerpweb.Controller):
+ _cp_path = "/web/database"
+
+ @openerpweb.jsonrequest
+ def get_list(self, req):
+ return db_list(req)
+
+ @openerpweb.jsonrequest
+ def create(self, req, fields):
+ params = dict(map(operator.itemgetter('name', 'value'), fields))
+ return req.session.proxy("db").create_database(
+ params['super_admin_pwd'],
+ params['db_name'],
+ bool(params.get('demo_data')),
+ params['db_lang'],
+ params['create_admin_pwd'])
+
+ @openerpweb.jsonrequest
+ def duplicate(self, req, fields):
+ params = dict(map(operator.itemgetter('name', 'value'), fields))
+ return req.session.proxy("db").duplicate_database(
+ params['super_admin_pwd'],
+ params['db_original_name'],
+ params['db_name'])
+
+ @openerpweb.jsonrequest
+ def duplicate(self, req, fields):
+ params = dict(map(operator.itemgetter('name', 'value'), fields))
+ duplicate_attrs = (
+ params['super_admin_pwd'],
+ params['db_original_name'],
+ params['db_name'],
+ )
+
+ return req.session.proxy("db").duplicate_database(*duplicate_attrs)
+
+ @openerpweb.jsonrequest
+ def drop(self, req, fields):
+ password, db = operator.itemgetter(
+ 'drop_pwd', 'drop_db')(
+ dict(map(operator.itemgetter('name', 'value'), fields)))
+
+ try:
+ return req.session.proxy("db").drop(password, db)
+ except xmlrpclib.Fault, e:
+ if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
+ return {'error': e.faultCode, 'title': 'Drop Database'}
+ return {'error': _('Could not drop database !'), 'title': _('Drop Database')}
+
+ @openerpweb.httprequest
+ def backup(self, req, backup_db, backup_pwd, token):
+ try:
+ db_dump = base64.b64decode(
+ req.session.proxy("db").dump(backup_pwd, backup_db))
+ filename = "%(db)s_%(timestamp)s.dump" % {
+ 'db': backup_db,
+ 'timestamp': datetime.datetime.utcnow().strftime(
+ "%Y-%m-%d_%H-%M-%SZ")
+ }
+ return req.make_response(db_dump,
+ [('Content-Type', 'application/octet-stream; charset=binary'),
+ ('Content-Disposition', content_disposition(filename, req))],
+ {'fileToken': int(token)}
+ )
+ except xmlrpclib.Fault, e:
+ return simplejson.dumps([[],[{'error': e.faultCode, 'title': _('Backup Database')}]])
+
+ @openerpweb.httprequest
+ def restore(self, req, db_file, restore_pwd, new_db):
+ try:
+ data = base64.b64encode(db_file.read())
+ req.session.proxy("db").restore(restore_pwd, new_db, data)
+ return ''
+ except xmlrpclib.Fault, e:
+ if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
+ raise Exception("AccessDenied")
+
+ @openerpweb.jsonrequest
+ def change_password(self, req, fields):
+ old_password, new_password = operator.itemgetter(
+ 'old_pwd', 'new_pwd')(
+ dict(map(operator.itemgetter('name', 'value'), fields)))
+ try:
+ return req.session.proxy("db").change_admin_password(old_password, new_password)
+ except xmlrpclib.Fault, e:
+ if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
+ return {'error': e.faultCode, 'title': _('Change Password')}
+ return {'error': _('Error, password not changed !'), 'title': _('Change Password')}
+
+class Session(openerpweb.Controller):
+ _cp_path = "/web/session"
+
+ def session_info(self, req):
+ req.session.ensure_valid()
+ return {
+ "session_id": req.session_id,
+ "uid": req.session._uid,
+ "user_context": req.session.get_context() if req.session._uid else {},
+ "db": req.session._db,
+ "username": req.session._login,
+ }
+
+ @openerpweb.jsonrequest
+ def get_session_info(self, req):
+ return self.session_info(req)
+
+ @openerpweb.jsonrequest
+ def authenticate(self, req, db, login, password, base_location=None):
+ wsgienv = req.httprequest.environ
+ env = dict(
+ base_location=base_location,
+ HTTP_HOST=wsgienv['HTTP_HOST'],
+ REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
+ )
+ req.session.authenticate(db, login, password, env)
+
+ return self.session_info(req)
+
+ @openerpweb.jsonrequest
+ def change_password (self,req,fields):
+ old_password, new_password,confirm_password = operator.itemgetter('old_pwd', 'new_password','confirm_pwd')(
+ dict(map(operator.itemgetter('name', 'value'), fields)))
+ if not (old_password.strip() and new_password.strip() and confirm_password.strip()):
+ return {'error':_('You cannot leave any password empty.'),'title': _('Change Password')}
+ if new_password != confirm_password:
+ return {'error': _('The new password and its confirmation must be identical.'),'title': _('Change Password')}
+ try:
+ if req.session.model('res.users').change_password(
+ old_password, new_password):
+ return {'new_password':new_password}
+ except Exception:
+ return {'error': _('The old password you provided is incorrect, your password was not changed.'), 'title': _('Change Password')}
+ return {'error': _('Error, password not changed !'), 'title': _('Change Password')}
+
+ @openerpweb.jsonrequest
+ def sc_list(self, req):
+ return req.session.model('ir.ui.view_sc').get_sc(
+ req.session._uid, "ir.ui.menu", req.context)
+
+ @openerpweb.jsonrequest
+ def get_lang_list(self, req):
+ try:
+ return req.session.proxy("db").list_lang() or []
+ except Exception, e:
+ return {"error": e, "title": _("Languages")}
+
+ @openerpweb.jsonrequest
+ def modules(self, req):
+ # return all installed modules. Web client is smart enough to not load a module twice
+ return module_installed(req)
+
+ @openerpweb.jsonrequest
+ def save_session_action(self, req, the_action):
+ """
+ This method store an action object in the session object and returns an integer
+ identifying that action. The method get_session_action() can be used to get
+ back the action.
+
+ :param the_action: The action to save in the session.
+ :type the_action: anything
+ :return: A key identifying the saved action.
+ :rtype: integer
+ """
+ saved_actions = req.httpsession.get('saved_actions')
+ if not saved_actions:
+ saved_actions = {"next":1, "actions":{}}
+ req.httpsession['saved_actions'] = saved_actions
+ # we don't allow more than 10 stored actions
+ if len(saved_actions["actions"]) >= 10:
+ del saved_actions["actions"][min(saved_actions["actions"])]
+ key = saved_actions["next"]
+ saved_actions["actions"][key] = the_action
+ saved_actions["next"] = key + 1
+ return key
+
+ @openerpweb.jsonrequest
+ def get_session_action(self, req, key):
+ """
+ Gets back a previously saved action. This method can return None if the action
+ was saved since too much time (this case should be handled in a smart way).
+
+ :param key: The key given by save_session_action()
+ :type key: integer
+ :return: The saved action or None.
+ :rtype: anything
+ """
+ saved_actions = req.httpsession.get('saved_actions')
+ if not saved_actions:
+ return None
+ return saved_actions["actions"].get(key)
+
+ @openerpweb.jsonrequest
+ def check(self, req):
+ req.session.assert_valid()
+ return None
+
+ @openerpweb.jsonrequest
+ def destroy(self, req):
+ req.session._suicide = True
+
+class Menu(openerpweb.Controller):
+ _cp_path = "/web/menu"
+
+ @openerpweb.jsonrequest
+ def get_user_roots(self, req):
+ """ Return all root menu ids visible for the session user.
+
+ :param req: A request object, with an OpenERP session attribute
+ :type req: < session -> OpenERPSession >
+ :return: the root menu ids
+ :rtype: list(int)
+ """
+ s = req.session
+ Menus = s.model('ir.ui.menu')
+ # If a menu action is defined use its domain to get the root menu items
+ user_menu_id = s.model('res.users').read([s._uid], ['menu_id'],
+ req.context)[0]['menu_id']
+
+ menu_domain = [('parent_id', '=', False)]
+ if user_menu_id:
+ domain_string = s.model('ir.actions.act_window').read(
+ [user_menu_id[0]], ['domain'],req.context)[0]['domain']
+ if domain_string:
+ menu_domain = ast.literal_eval(domain_string)
+
+ return Menus.search(menu_domain, 0, False, False, req.context)
+
+ @openerpweb.jsonrequest
+ def load(self, req):
+ """ Loads all menu items (all applications and their sub-menus).
+
+ :param req: A request object, with an OpenERP session attribute
+ :type req: < session -> OpenERPSession >
+ :return: the menu root
+ :rtype: dict('children': menu_nodes)
+ """
+ Menus = req.session.model('ir.ui.menu')
+
+ fields = ['name', 'sequence', 'parent_id', 'action']
+ menu_root_ids = self.get_user_roots(req)
+ menu_roots = Menus.read(menu_root_ids, fields, req.context) if menu_root_ids else []
+ menu_root = {
+ 'id': False,
+ 'name': 'root',
+ 'parent_id': [-1, ''],
+ 'children': menu_roots,
+ 'all_menu_ids': menu_root_ids,
+ }
+ if not menu_roots:
+ return menu_root
+
+ # menus are loaded fully unlike a regular tree view, cause there are a
+ # limited number of items (752 when all 6.1 addons are installed)
+ menu_ids = Menus.search([('id', 'child_of', menu_root_ids)], 0, False, False, req.context)
+ menu_items = Menus.read(menu_ids, fields, req.context)
+ # adds roots at the end of the sequence, so that they will overwrite
+ # equivalent menu items from full menu read when put into id:item
+ # mapping, resulting in children being correctly set on the roots.
+ menu_items.extend(menu_roots)
+ menu_root['all_menu_ids'] = menu_ids # includes menu_root_ids!
+
+ # make a tree using parent_id
+ menu_items_map = dict(
+ (menu_item["id"], menu_item) for menu_item in menu_items)
+ for menu_item in menu_items:
+ if menu_item['parent_id']:
+ parent = menu_item['parent_id'][0]
+ else:
+ parent = False
+ if parent in menu_items_map:
+ menu_items_map[parent].setdefault(
+ 'children', []).append(menu_item)
+
+ # sort by sequence a tree using parent_id
+ for menu_item in menu_items:
+ menu_item.setdefault('children', []).sort(
+ key=operator.itemgetter('sequence'))
+
+ return menu_root
+
+ @openerpweb.jsonrequest
+ def load_needaction(self, req, menu_ids):
+ """ Loads needaction counters for specific menu ids.
+
+ :return: needaction data
+ :rtype: dict(menu_id: {'needaction_enabled': boolean, 'needaction_counter': int})
+ """
+ return req.session.model('ir.ui.menu').get_needaction_data(menu_ids, req.context)
+
+ @openerpweb.jsonrequest
+ def action(self, req, menu_id):
+ # still used by web_shortcut
+ actions = load_actions_from_ir_values(req,'action', 'tree_but_open',
+ [('ir.ui.menu', menu_id)], False)
+ return {"action": actions}
+
+class DataSet(openerpweb.Controller):
+ _cp_path = "/web/dataset"
+
+ @openerpweb.jsonrequest
+ def search_read(self, req, model, fields=False, offset=0, limit=False, domain=None, sort=None):
+ return self.do_search_read(req, model, fields, offset, limit, domain, sort)
+ def do_search_read(self, req, model, fields=False, offset=0, limit=False, domain=None
+ , sort=None):
+ """ Performs a search() followed by a read() (if needed) using the
+ provided search criteria
+
+ :param req: a JSON-RPC request object
+ :type req: openerpweb.JsonRequest
+ :param str model: the name of the model to search on
+ :param fields: a list of the fields to return in the result records
+ :type fields: [str]
+ :param int offset: from which index should the results start being returned
+ :param int limit: the maximum number of records to return
+ :param list domain: the search domain for the query
+ :param list sort: sorting directives
+ :returns: A structure (dict) with two keys: ids (all the ids matching
+ the (domain, context) pair) and records (paginated records
+ matching fields selection set)
+ :rtype: list
+ """
+ Model = req.session.model(model)
+
+ ids = Model.search(domain, offset or 0, limit or False, sort or False,
+ req.context)
+ if limit and len(ids) == limit:
+ length = Model.search_count(domain, req.context)
+ else:
+ length = len(ids) + (offset or 0)
+ if fields and fields == ['id']:
+ # shortcut read if we only want the ids
+ return {
+ 'length': length,
+ 'records': [{'id': id} for id in ids]
+ }
+
+ records = Model.read(ids, fields or False, req.context)
+ records.sort(key=lambda obj: ids.index(obj['id']))
+ return {
+ 'length': length,
+ 'records': records
+ }
+
+ @openerpweb.jsonrequest
+ def load(self, req, model, id, fields):
+ m = req.session.model(model)
+ value = {}
+ r = m.read([id], False, req.context)
+ if r:
+ value = r[0]
+ return {'value': value}
+
+ def call_common(self, req, model, method, args, domain_id=None, context_id=None):
+ return self._call_kw(req, model, method, args, {})
+
+ def _call_kw(self, req, model, method, args, kwargs):
+ # Temporary implements future display_name special field for model#read()
+ if method == 'read' and kwargs.get('context', {}).get('future_display_name'):
+ if 'display_name' in args[1]:
+ names = dict(req.session.model(model).name_get(args[0], **kwargs))
+ args[1].remove('display_name')
+ records = req.session.model(model).read(*args, **kwargs)
+ for record in records:
+ record['display_name'] = \
+ names.get(record['id']) or "%s#%d" % (model, (record['id']))
+ return records
+
+ return getattr(req.session.model(model), method)(*args, **kwargs)
+
+ @openerpweb.jsonrequest
+ def call(self, req, model, method, args, domain_id=None, context_id=None):
+ return self._call_kw(req, model, method, args, {})
+
+ @openerpweb.jsonrequest
+ def call_kw(self, req, model, method, args, kwargs):
+ return self._call_kw(req, model, method, args, kwargs)
+
+ @openerpweb.jsonrequest
+ def call_button(self, req, model, method, args, domain_id=None, context_id=None):
+ action = self._call_kw(req, model, method, args, {})
+ if isinstance(action, dict) and action.get('type') != '':
+ return clean_action(req, action)
+ return False
+
+ @openerpweb.jsonrequest
+ def exec_workflow(self, req, model, id, signal):
+ return req.session.exec_workflow(model, id, signal)
+
+ @openerpweb.jsonrequest
+ def resequence(self, req, model, ids, field='sequence', offset=0):
+ """ Re-sequences a number of records in the model, by their ids
+
+ The re-sequencing starts at the first model of ``ids``, the sequence
+ number is incremented by one after each record and starts at ``offset``
+
+ :param ids: identifiers of the records to resequence, in the new sequence order
+ :type ids: list(id)
+ :param str field: field used for sequence specification, defaults to
+ "sequence"
+ :param int offset: sequence number for first record in ``ids``, allows
+ starting the resequencing from an arbitrary number,
+ defaults to ``0``
+ """
+ m = req.session.model(model)
+ if not m.fields_get([field]):
+ return False
+ # python 2.6 has no start parameter
+ for i, id in enumerate(ids):
+ m.write(id, { field: i + offset })
+ return True
+
+class View(openerpweb.Controller):
+ _cp_path = "/web/view"
+
+ @openerpweb.jsonrequest
+ def add_custom(self, req, view_id, arch):
+ CustomView = req.session.model('ir.ui.view.custom')
+ CustomView.create({
+ 'user_id': req.session._uid,
+ 'ref_id': view_id,
+ 'arch': arch
+ }, req.context)
+ return {'result': True}
+
+ @openerpweb.jsonrequest
+ def undo_custom(self, req, view_id, reset=False):
+ CustomView = req.session.model('ir.ui.view.custom')
+ vcustom = CustomView.search([('user_id', '=', req.session._uid), ('ref_id' ,'=', view_id)],
+ 0, False, False, req.context)
+ if vcustom:
+ if reset:
+ CustomView.unlink(vcustom, req.context)
+ else:
+ CustomView.unlink([vcustom[0]], req.context)
+ return {'result': True}
+ return {'result': False}
+
+class TreeView(View):
+ _cp_path = "/web/treeview"
+
+ @openerpweb.jsonrequest
+ def action(self, req, model, id):
+ return load_actions_from_ir_values(
+ req,'action', 'tree_but_open',[(model, id)],
+ False)
+
+class Binary(openerpweb.Controller):
+ _cp_path = "/web/binary"
+
+ @openerpweb.httprequest
+ def image(self, req, model, id, field, **kw):
+ last_update = '__last_update'
+ Model = req.session.model(model)
+ headers = [('Content-Type', 'image/png')]
+ etag = req.httprequest.headers.get('If-None-Match')
+ hashed_session = hashlib.md5(req.session_id).hexdigest()
+ id = None if not id else simplejson.loads(id)
+ if type(id) is list:
+ id = id[0] # m2o
+ if etag:
+ if not id and hashed_session == etag:
+ return werkzeug.wrappers.Response(status=304)
+ else:
+ date = Model.read([id], [last_update], req.context)[0].get(last_update)
+ if hashlib.md5(date).hexdigest() == etag:
+ return werkzeug.wrappers.Response(status=304)
+
+ retag = hashed_session
+ try:
+ if not id:
+ res = Model.default_get([field], req.context).get(field)
+ image_base64 = res
+ else:
+ res = Model.read([id], [last_update, field], req.context)[0]
+ retag = hashlib.md5(res.get(last_update)).hexdigest()
+ image_base64 = res.get(field)
+
+ if kw.get('resize'):
+ resize = kw.get('resize').split(',')
+ if len(resize) == 2 and int(resize[0]) and int(resize[1]):
+ width = int(resize[0])
+ height = int(resize[1])
+ # resize maximum 500*500
+ if width > 500: width = 500
+ if height > 500: height = 500
+ image_base64 = openerp.tools.image_resize_image(base64_source=image_base64, size=(width, height), encoding='base64', filetype='PNG')
+
+ image_data = base64.b64decode(image_base64)
+
+ except (TypeError, xmlrpclib.Fault):
+ image_data = self.placeholder(req)
+ headers.append(('ETag', retag))
+ headers.append(('Content-Length', len(image_data)))
+ try:
+ ncache = int(kw.get('cache'))
+ headers.append(('Cache-Control', 'no-cache' if ncache == 0 else 'max-age=%s' % (ncache)))
+ except:
+ pass
+ return req.make_response(image_data, headers)
+
+ def placeholder(self, req, image='placeholder.png'):
+ addons_path = openerpweb.addons_manifest['web']['addons_path']
+ return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', image), 'rb').read()
+
+ @openerpweb.httprequest
+ def saveas(self, req, model, field, id=None, filename_field=None, **kw):
+ """ Download link for files stored as binary fields.
+
+ If the ``id`` parameter is omitted, fetches the default value for the
+ binary field (via ``default_get``), otherwise fetches the field for
+ that precise record.
+
+ :param req: OpenERP request
+ :type req: :class:`web.common.http.HttpRequest`
+ :param str model: name of the model to fetch the binary from
+ :param str field: binary field
+ :param str id: id of the record from which to fetch the binary
+ :param str filename_field: field holding the file's name, if any
+ :returns: :class:`werkzeug.wrappers.Response`
+ """
+ Model = req.session.model(model)
+ fields = [field]
+ if filename_field:
+ fields.append(filename_field)
+ if id:
+ res = Model.read([int(id)], fields, req.context)[0]
+ else:
+ res = Model.default_get(fields, req.context)
+ filecontent = base64.b64decode(res.get(field, ''))
+ if not filecontent:
+ return req.not_found()
+ else:
+ filename = '%s_%s' % (model.replace('.', '_'), id)
+ if filename_field:
+ filename = res.get(filename_field, '') or filename
+ return req.make_response(filecontent,
+ [('Content-Type', 'application/octet-stream'),
+ ('Content-Disposition', content_disposition(filename, req))])
+
+ @openerpweb.httprequest
+ def saveas_ajax(self, req, data, token):
+ jdata = simplejson.loads(data)
+ model = jdata['model']
+ field = jdata['field']
+ data = jdata['data']
+ id = jdata.get('id', None)
+ filename_field = jdata.get('filename_field', None)
+ context = jdata.get('context', {})
+
+ Model = req.session.model(model)
+ fields = [field]
+ if filename_field:
+ fields.append(filename_field)
+ if data:
+ res = { field: data }
+ elif id:
+ res = Model.read([int(id)], fields, context)[0]
+ else:
+ res = Model.default_get(fields, context)
+ filecontent = base64.b64decode(res.get(field, ''))
+ if not filecontent:
+ raise ValueError(_("No content found for field '%s' on '%s:%s'") %
+ (field, model, id))
+ else:
+ filename = '%s_%s' % (model.replace('.', '_'), id)
+ if filename_field:
+ filename = res.get(filename_field, '') or filename
+ return req.make_response(filecontent,
+ headers=[('Content-Type', 'application/octet-stream'),
+ ('Content-Disposition', content_disposition(filename, req))],
+ cookies={'fileToken': int(token)})
+
+ @openerpweb.httprequest
+ def upload(self, req, callback, ufile):
+ # TODO: might be useful to have a configuration flag for max-length file uploads
+ out = """"""
+ try:
+ data = ufile.read()
+ args = [len(data), ufile.filename,
+ ufile.content_type, base64.b64encode(data)]
+ except Exception, e:
+ args = [False, e.message]
+ return out % (simplejson.dumps(callback), simplejson.dumps(args))
+
+ @openerpweb.httprequest
+ def upload_attachment(self, req, callback, model, id, ufile):
+ Model = req.session.model('ir.attachment')
+ out = """"""
+ try:
+ attachment_id = Model.create({
+ 'name': ufile.filename,
+ 'datas': base64.encodestring(ufile.read()),
+ 'datas_fname': ufile.filename,
+ 'res_model': model,
+ 'res_id': int(id)
+ }, req.context)
+ args = {
+ 'filename': ufile.filename,
+ 'id': attachment_id
+ }
+ except xmlrpclib.Fault, e:
+ args = {'error':e.faultCode }
+ return out % (simplejson.dumps(callback), simplejson.dumps(args))
+
+ @openerpweb.httprequest
+ def company_logo(self, req, dbname=None):
+ # TODO add etag, refactor to use /image code for etag
+ uid = None
+ if req.session._db:
+ dbname = req.session._db
+ uid = req.session._uid
+ elif dbname is None:
+ dbname = db_monodb(req)
+
+ if uid is None:
+ uid = openerp.SUPERUSER_ID
+
+ if not dbname:
+ image_data = self.placeholder(req, 'logo.png')
+ else:
+ registry = openerp.modules.registry.RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ user = registry.get('res.users').browse(cr, uid, uid)
+ if user.company_id.logo_web:
+ image_data = user.company_id.logo_web.decode('base64')
+ else:
+ image_data = self.placeholder(req, 'nologo.png')
+ headers = [
+ ('Content-Type', 'image/png'),
+ ('Content-Length', len(image_data)),
+ ]
+ return req.make_response(image_data, headers)
+
+class Action(openerpweb.Controller):
+ _cp_path = "/web/action"
+
+ @openerpweb.jsonrequest
+ def load(self, req, action_id, do_not_eval=False):
+ Actions = req.session.model('ir.actions.actions')
+ value = False
+ try:
+ action_id = int(action_id)
+ except ValueError:
+ try:
+ module, xmlid = action_id.split('.', 1)
+ model, action_id = req.session.model('ir.model.data').get_object_reference(module, xmlid)
+ assert model.startswith('ir.actions.')
+ except Exception:
+ action_id = 0 # force failed read
+
+ base_action = Actions.read([action_id], ['type'], req.context)
+ if base_action:
+ ctx = {}
+ action_type = base_action[0]['type']
+ if action_type == 'ir.actions.report.xml':
+ ctx.update({'bin_size': True})
+ ctx.update(req.context)
+ action = req.session.model(action_type).read([action_id], False, ctx)
+ if action:
+ value = clean_action(req, action[0])
+ return value
+
+ @openerpweb.jsonrequest
+ def run(self, req, action_id):
+ return_action = req.session.model('ir.actions.server').run(
+ [action_id], req.context)
+ if return_action:
+ return clean_action(req, return_action)
+ else:
+ return False
+
+class Export(View):
+ _cp_path = "/web/export"
+
+ @openerpweb.jsonrequest
+ def formats(self, req):
+ """ Returns all valid export formats
+
+ :returns: for each export format, a pair of identifier and printable name
+ :rtype: [(str, str)]
+ """
+ return sorted([
+ controller.fmt
+ for path, controller in openerpweb.controllers_path.iteritems()
+ if path.startswith(self._cp_path)
+ if hasattr(controller, 'fmt')
+ ], key=operator.itemgetter("label"))
+
+ def fields_get(self, req, model):
+ Model = req.session.model(model)
+ fields = Model.fields_get(False, req.context)
+ return fields
+
+ @openerpweb.jsonrequest
+ def get_fields(self, req, model, prefix='', parent_name= '',
+ import_compat=True, parent_field_type=None,
+ exclude=None):
+
+ if import_compat and parent_field_type == "many2one":
+ fields = {}
+ else:
+ fields = self.fields_get(req, model)
+
+ if import_compat:
+ fields.pop('id', None)
+ else:
+ fields['.id'] = fields.pop('id', {'string': 'ID'})
+
+ fields_sequence = sorted(fields.iteritems(),
+ key=lambda field: field[1].get('string', ''))
+
+ records = []
+ for field_name, field in fields_sequence:
+ if import_compat:
+ if exclude and field_name in exclude:
+ continue
+ if field.get('readonly'):
+ # If none of the field's states unsets readonly, skip the field
+ if all(dict(attrs).get('readonly', True)
+ for attrs in field.get('states', {}).values()):
+ continue
+
+ id = prefix + (prefix and '/'or '') + field_name
+ name = parent_name + (parent_name and '/' or '') + field['string']
+ record = {'id': id, 'string': name,
+ 'value': id, 'children': False,
+ 'field_type': field.get('type'),
+ 'required': field.get('required'),
+ 'relation_field': field.get('relation_field')}
+ records.append(record)
+
+ if len(name.split('/')) < 3 and 'relation' in field:
+ ref = field.pop('relation')
+ record['value'] += '/id'
+ record['params'] = {'model': ref, 'prefix': id, 'name': name}
+
+ if not import_compat or field['type'] == 'one2many':
+ # m2m field in import_compat is childless
+ record['children'] = True
+
+ return records
+
+ @openerpweb.jsonrequest
+ def namelist(self,req, model, export_id):
+ # TODO: namelist really has no reason to be in Python (although itertools.groupby helps)
+ export = req.session.model("ir.exports").read([export_id])[0]
+ export_fields_list = req.session.model("ir.exports.line").read(
+ export['export_fields'])
+
+ fields_data = self.fields_info(
+ req, model, map(operator.itemgetter('name'), export_fields_list))
+
+ return [
+ {'name': field['name'], 'label': fields_data[field['name']]}
+ for field in export_fields_list
+ ]
+
+ def fields_info(self, req, model, export_fields):
+ info = {}
+ fields = self.fields_get(req, model)
+ if ".id" in export_fields:
+ fields['.id'] = fields.pop('id', {'string': 'ID'})
+
+ # To make fields retrieval more efficient, fetch all sub-fields of a
+ # given field at the same time. Because the order in the export list is
+ # arbitrary, this requires ordering all sub-fields of a given field
+ # together so they can be fetched at the same time
+ #
+ # Works the following way:
+ # * sort the list of fields to export, the default sorting order will
+ # put the field itself (if present, for xmlid) and all of its
+ # sub-fields right after it
+ # * then, group on: the first field of the path (which is the same for
+ # a field and for its subfields and the length of splitting on the
+ # first '/', which basically means grouping the field on one side and
+ # all of the subfields on the other. This way, we have the field (for
+ # the xmlid) with length 1, and all of the subfields with the same
+ # base but a length "flag" of 2
+ # * if we have a normal field (length 1), just add it to the info
+ # mapping (with its string) as-is
+ # * otherwise, recursively call fields_info via graft_subfields.
+ # all graft_subfields does is take the result of fields_info (on the
+ # field's model) and prepend the current base (current field), which
+ # rebuilds the whole sub-tree for the field
+ #
+ # result: because we're not fetching the fields_get for half the
+ # database models, fetching a namelist with a dozen fields (including
+ # relational data) falls from ~6s to ~300ms (on the leads model).
+ # export lists with no sub-fields (e.g. import_compatible lists with
+ # no o2m) are even more efficient (from the same 6s to ~170ms, as
+ # there's a single fields_get to execute)
+ for (base, length), subfields in itertools.groupby(
+ sorted(export_fields),
+ lambda field: (field.split('/', 1)[0], len(field.split('/', 1)))):
+ subfields = list(subfields)
+ if length == 2:
+ # subfields is a seq of $base/*rest, and not loaded yet
+ info.update(self.graft_subfields(
+ req, fields[base]['relation'], base, fields[base]['string'],
+ subfields
+ ))
+ else:
+ info[base] = fields[base]['string']
+
+ return info
+
+ def graft_subfields(self, req, model, prefix, prefix_string, fields):
+ export_fields = [field.split('/', 1)[1] for field in fields]
+ return (
+ (prefix + '/' + k, prefix_string + '/' + v)
+ for k, v in self.fields_info(req, model, export_fields).iteritems())
+
+ #noinspection PyPropertyDefinition
+ @property
+ def content_type(self):
+ """ Provides the format's content type """
+ raise NotImplementedError()
+
+ def filename(self, base):
+ """ Creates a valid filename for the format (with extension) from the
+ provided base name (exension-less)
+ """
+ raise NotImplementedError()
+
+ def from_data(self, fields, rows):
+ """ Conversion method from OpenERP's export data to whatever the
+ current export class outputs
+
+ :params list fields: a list of fields to export
+ :params list rows: a list of records to export
+ :returns:
+ :rtype: bytes
+ """
+ raise NotImplementedError()
+
+ @openerpweb.httprequest
+ def index(self, req, data, token):
+ model, fields, ids, domain, import_compat = \
+ operator.itemgetter('model', 'fields', 'ids', 'domain',
+ 'import_compat')(
+ simplejson.loads(data))
+
+ Model = req.session.model(model)
+ ids = ids or Model.search(domain, 0, False, False, req.context)
+
+ field_names = map(operator.itemgetter('name'), fields)
+ import_data = Model.export_data(ids, field_names, req.context).get('datas',[])
+
+ if import_compat:
+ columns_headers = field_names
+ else:
+ columns_headers = [val['label'].strip() for val in fields]
+
+
+ return req.make_response(self.from_data(columns_headers, import_data),
+ headers=[('Content-Disposition',
+ content_disposition(self.filename(model), req)),
+ ('Content-Type', self.content_type)],
+ cookies={'fileToken': int(token)})
+
+class CSVExport(Export):
+ _cp_path = '/web/export/csv'
+ fmt = {'tag': 'csv', 'label': 'CSV'}
+
+ @property
+ def content_type(self):
+ return 'text/csv;charset=utf8'
+
+ def filename(self, base):
+ return base + '.csv'
+
+ def from_data(self, fields, rows):
+ fp = StringIO()
+ writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
+
+ writer.writerow([name.encode('utf-8') for name in fields])
+
+ for data in rows:
+ row = []
+ for d in data:
+ if isinstance(d, basestring):
+ d = d.replace('\n',' ').replace('\t',' ')
+ try:
+ d = d.encode('utf-8')
+ except UnicodeError:
+ pass
+ if d is False: d = None
+ row.append(d)
+ writer.writerow(row)
+
+ fp.seek(0)
+ data = fp.read()
+ fp.close()
+ return data
+
+class ExcelExport(Export):
+ _cp_path = '/web/export/xls'
+ fmt = {
+ 'tag': 'xls',
+ 'label': 'Excel',
+ 'error': None if xlwt else "XLWT required"
+ }
+
+ @property
+ def content_type(self):
+ return 'application/vnd.ms-excel'
+
+ def filename(self, base):
+ return base + '.xls'
+
+ def from_data(self, fields, rows):
+ workbook = xlwt.Workbook()
+ worksheet = workbook.add_sheet('Sheet 1')
+
+ for i, fieldname in enumerate(fields):
+ worksheet.write(0, i, fieldname)
+ worksheet.col(i).width = 8000 # around 220 pixels
+
+ style = xlwt.easyxf('align: wrap yes')
+
+ for row_index, row in enumerate(rows):
+ for cell_index, cell_value in enumerate(row):
+ if isinstance(cell_value, basestring):
+ cell_value = re.sub("\r", " ", cell_value)
+ if cell_value is False: cell_value = None
+ worksheet.write(row_index + 1, cell_index, cell_value, style)
+
+ fp = StringIO()
+ workbook.save(fp)
+ fp.seek(0)
+ data = fp.read()
+ fp.close()
+ return data
+
+class Reports(View):
+ _cp_path = "/web/report"
+ POLLING_DELAY = 0.25
+ TYPES_MAPPING = {
+ 'doc': 'application/vnd.ms-word',
+ 'html': 'text/html',
+ 'odt': 'application/vnd.oasis.opendocument.text',
+ 'pdf': 'application/pdf',
+ 'sxw': 'application/vnd.sun.xml.writer',
+ 'xls': 'application/vnd.ms-excel',
+ }
+
+ @openerpweb.httprequest
+ def index(self, req, action, token):
+ action = simplejson.loads(action)
+
+ report_srv = req.session.proxy("report")
+ context = dict(req.context)
+ context.update(action["context"])
+
+ report_data = {}
+ report_ids = context["active_ids"]
+ if 'report_type' in action:
+ report_data['report_type'] = action['report_type']
+ if 'datas' in action:
+ if 'ids' in action['datas']:
+ report_ids = action['datas'].pop('ids')
+ report_data.update(action['datas'])
+
+ report_id = report_srv.report(
+ req.session._db, req.session._uid, req.session._password,
+ action["report_name"], report_ids,
+ report_data, context)
+
+ report_struct = None
+ while True:
+ report_struct = report_srv.report_get(
+ req.session._db, req.session._uid, req.session._password, report_id)
+ if report_struct["state"]:
+ break
+
+ time.sleep(self.POLLING_DELAY)
+
+ report = base64.b64decode(report_struct['result'])
+ if report_struct.get('code') == 'zlib':
+ report = zlib.decompress(report)
+ report_mimetype = self.TYPES_MAPPING.get(
+ report_struct['format'], 'octet-stream')
+ file_name = action.get('name', 'report')
+ if 'name' not in action:
+ reports = req.session.model('ir.actions.report.xml')
+ res_id = reports.search([('report_name', '=', action['report_name']),],
+ 0, False, False, context)
+ if len(res_id) > 0:
+ file_name = reports.read(res_id[0], ['name'], context)['name']
+ else:
+ file_name = action['report_name']
+ file_name = '%s.%s' % (file_name, report_struct['format'])
+
+ return req.make_response(report,
+ headers=[
+ ('Content-Disposition', content_disposition(file_name, req)),
+ ('Content-Type', report_mimetype),
+ ('Content-Length', len(report))],
+ cookies={'fileToken': int(token)})
+
+# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/web/controllers/testing.py b/web/controllers/testing.py
new file mode 100755
index 0000000..b6327bf
--- /dev/null
+++ b/web/controllers/testing.py
@@ -0,0 +1,165 @@
+# coding=utf-8
+# -*- encoding: utf-8 -*-
+
+import glob
+import itertools
+import json
+import operator
+import os
+
+from mako.template import Template
+from openerp.modules import module
+
+from .main import module_topological_sort
+from .. import http
+
+NOMODULE_TEMPLATE = Template(u"""
+
+
+
+
+ OpenERP Testing
+
+
+
+
+
+""", default_filters=['h'])
+NOTFOUND = Template(u"""
+Unable to find the module [${module}], please check that the module
+ name is correct and the module is on OpenERP's path.
+<< Back to tests
+""", default_filters=['h'])
+TESTING = Template(u"""
+
+<%def name="to_path(module, p)">/${module}/${p}%def>
+
+
+
+ OpenERP Web Tests
+
+
+
+
+
+
+
+
+
+
+
+
+% for module, jss, tests, templates in files:
+ % for js in jss:
+ % if not js.endswith('/apps.js'):
+
+ % endif
+ % endfor
+ % if tests or templates:
+
+ % endif
+ % if tests:
+ % for test in tests:
+
+ % endfor
+ % endif
+% endfor
+
+""", default_filters=['h'])
+
+class TestRunnerController(http.Controller):
+ _cp_path = '/web/tests'
+
+ @http.httprequest
+ def index(self, req, mod=None, **kwargs):
+ ms = module.get_modules()
+ manifests = dict(
+ (name, desc)
+ for name, desc in zip(ms, map(self.load_manifest, ms))
+ if desc # remove not-actually-openerp-modules
+ )
+
+ if not mod:
+ return NOMODULE_TEMPLATE.render(modules=(
+ (manifest['name'], name)
+ for name, manifest in manifests.iteritems()
+ if any(testfile.endswith('.js')
+ for testfile in manifest['test'])
+ ))
+ sorted_mods = module_topological_sort(dict(
+ (name, manifest.get('depends', []))
+ for name, manifest in manifests.iteritems()
+ ))
+ # to_load and to_test should be zippable lists of the same length.
+ # A falsy value in to_test indicate nothing to test at that index (just
+ # load the corresponding part of to_load)
+ to_test = sorted_mods
+ if mod != '*':
+ if mod not in manifests:
+ return req.not_found(NOTFOUND.render(module=mod))
+ idx = sorted_mods.index(mod)
+ to_test = [None] * len(sorted_mods)
+ to_test[idx] = mod
+
+ tests_candicates = [
+ filter(lambda path: path.endswith('.js'),
+ manifests[mod]['test'] if mod else [])
+ for mod in to_test]
+ # remove trailing test-less modules
+ tests = reversed(list(
+ itertools.dropwhile(
+ operator.not_,
+ reversed(tests_candicates))))
+
+ files = [
+ (mod, manifests[mod]['js'], tests, manifests[mod]['qweb'])
+ for mod, tests in itertools.izip(sorted_mods, tests)
+ ]
+
+ # if all three db_info parameters are present, send them to the page
+ db_info = dict((k, v) for k, v in kwargs.iteritems()
+ if k in ['source', 'supadmin', 'password'])
+ if len(db_info) != 3:
+ db_info = None
+
+ return TESTING.render(files=files, dependencies=json.dumps(
+ [name for name in sorted_mods
+ if module.get_module_resource(name, 'static')
+ if manifests[name]['js']]), db_info=json.dumps(db_info))
+
+ def load_manifest(self, name):
+ manifest = module.load_information_from_description_file(name)
+ if manifest:
+ path = module.get_module_path(name)
+ manifest['js'] = list(
+ self.expand_patterns(path, manifest.get('js', [])))
+ manifest['test'] = list(
+ self.expand_patterns(path, manifest.get('test', [])))
+ manifest['qweb'] = list(
+ self.expand_patterns(path, manifest.get('qweb', [])))
+ return manifest
+
+ def expand_patterns(self, root, patterns):
+ for pattern in patterns:
+ normalized_pattern = os.path.normpath(os.path.join(root, pattern))
+ for path in glob.glob(normalized_pattern):
+ # replace OS path separators (from join & normpath) by URI ones
+ yield path[len(root):].replace(os.path.sep, '/')
diff --git a/web/doc/._Makefile b/web/doc/._Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/.__static b/web/doc/.__static
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/.__templates b/web/doc/.__templates
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/.__themes b/web/doc/.__themes
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._addon-structure.txt b/web/doc/._addon-structure.txt
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._async.rst b/web/doc/._async.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._changelog-7.0.rst b/web/doc/._changelog-7.0.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._client_action.rst b/web/doc/._client_action.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._conf.py b/web/doc/._conf.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._form_view.rst b/web/doc/._form_view.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._guidelines.rst b/web/doc/._guidelines.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._images b/web/doc/._images
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._index.rst b/web/doc/._index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._list_view.rst b/web/doc/._list_view.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._make.bat b/web/doc/._make.bat
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._module b/web/doc/._module
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._module.rst b/web/doc/._module.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._qweb.rst b/web/doc/._qweb.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._rpc.rst b/web/doc/._rpc.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._search_view.rst b/web/doc/._search_view.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._test-report.txt b/web/doc/._test-report.txt
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._testing.rst b/web/doc/._testing.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/._widget.rst b/web/doc/._widget.rst
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/Makefile b/web/doc/Makefile
new file mode 100644
index 0000000..c1eff18
--- /dev/null
+++ b/web/doc/Makefile
@@ -0,0 +1,154 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS = -q
+SPHINXBUILD = sphinx-build
+PAPER =
+BUILDDIR = _build
+
+# Internal variables.
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+ @echo "Please use \`make ' where is one of"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " singlehtml to make a single large HTML file"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " devhelp to make HTML files and a Devhelp project"
+ @echo " epub to make an epub"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
+ @echo " text to make text files"
+ @echo " man to make manual pages"
+ @echo " texinfo to make Texinfo files"
+ @echo " info to make Texinfo files and run them through makeinfo"
+ @echo " gettext to make PO message catalogs"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+ -rm -rf $(BUILDDIR)/*
+
+html:
+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+ sed -i '/-99999/d' _build/dirhtml/_static/flasky.css
+ @echo
+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+ @echo
+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+ @echo
+ @echo "Build finished; now you can process the pickle files."
+
+json:
+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+ @echo
+ @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+ @echo
+ @echo "Build finished; now you can run HTML Help Workshop with the" \
+ ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+ @echo
+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/OpenERPTechnicalDocumentation.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/OpenERPTechnicalDocumentation.qhc"
+
+devhelp:
+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+ @echo
+ @echo "Build finished."
+ @echo "To view the help file:"
+ @echo "# mkdir -p $$HOME/.local/share/devhelp/OpenERPTechnicalDocumentation"
+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/OpenERPTechnicalDocumentation"
+ @echo "# devhelp"
+
+epub:
+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+ @echo
+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo
+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
+ "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+ @echo "Running LaTeX files through pdflatex..."
+ $(MAKE) -C $(BUILDDIR)/latex all-pdf
+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+ @echo
+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+ @echo
+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo
+ @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+ @echo "Run \`make' in that directory to run these through makeinfo" \
+ "(use \`make info' here to do that automatically)."
+
+info:
+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+ @echo "Running Texinfo files through makeinfo..."
+ make -C $(BUILDDIR)/texinfo info
+ @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+ $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+ @echo
+ @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+ @echo
+ @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+ @echo
+ @echo "Link check complete; look for any errors in the above output " \
+ "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+ @echo "Testing of doctests in the sources finished, look at the " \
+ "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/web/doc/_static/._openerp.png b/web/doc/_static/._openerp.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_static/openerp.png b/web/doc/_static/openerp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6dbd9d83d1f3c3c2568e7ccac4e031e0f5b3806
GIT binary patch
literal 3981
zcmd^C_d6So6Q){fYt^b!v(zYRmYOv`)NZZXqm_bg)8jJ-!9MkGOE
zBvBz>|Ht>9=kC4x>3!~f?w;o^R$o_xn&L495fKr!mZqxVE%x5}i~A(Ev1HN+c?&GQ
zYNozM9!|dgw%(3J$_^fOjvQK_Z9h61I@&sX^%`@0O+-XOq_1PFc64;KDJunjXDI&i
zWo2dM+3_)IZuSg`+)`875EF)2n&;=|pG;4gnVA(86_uBldwF@S3p_i7!CG5ej|YGt
z5GX1ts<*e7jg2ieHFZltwzRYqqWfP)Muw%OWoT%qjEoFCJ99%saL3l_-Me>cYHBAF
z<2^k+r%>pQll>VChC-pv;P8cog^rGnrluwZ1%-x&hOx0R0|SFCWd(9_@}u5A#l^*k
z`MEAGF8%%e0s;bSYirwDYNMm0h~HHZv-j}Q;?vz-SV}U~#c5rLAHBYQ@I9K7lhe)3
z?Hr8`2ng8L)&v{qA{*+0gM(q|sVXWeU0q#tbaYTRm;Lb2&CSgX3DM)@<6Tepii!%<
z@-qC_Ph?xGpPwIkb7Ma;d~k4ZFW}48*4F94K~7E%ytpthFi=TJY43~gj=-~{?k-75
zNgW*>EiElxUS4EV<38XUyz*CecJ^Liz{%+7#KgqiyLX3%hG3~F2Z?dJ-kzsmFnVR>
zFf)Bq>g9fPq>qnJQc}`USLZnrX=i754u|XN>Y}%|Q40&m_BLco6I5IT>gp^cB*etT
zl$DhwCnvXK{b6Qi#>2y-zP_G7AjHSVBM^wVxHvo>KQ}iwKR*wL!*_Oe_V@Q!R#vcB
zY;A4r&CN|hLc;3m>g43)zkmNQ7)*G0`1$E61Oi!FT8fR0y}Z0!US7Vsx^j1SzrMc4
z;c!z^Q+0K9v$M0iySt}5keZsBEydRd2M5U3mR%1wFc`ccE{cG|&khfv9&QIo2@ng@
zO*t7T6nZ>7bPyl=@A7hfZffQCEwa0il)_VabWdBg2T6
zroR?u$AbgFq(mGRo06Q|_gWTltH$5af`S70&oa!#1$t|9c4h`$S2JL5yCo@x#bC9xd^I&*
zX6XOHOL1R@nURT^O__(E<7I49tbvrqBfFFiK|eCJ&kxtK%iktS=JL;Cok*M^JiGAlx<)KI17v%|s3!d@k2GBK*81?%QXW7_LA}5dW8FIrH%8Bjk^lX2_-}SE-Fqyo-aeQbzE^On`
zLs^&ibe#626289nd!gO?40c6z2DGWhl@lZbJ5TnrKG!ps7uO{up*&+0U;bjY41m`n
zw`eghl>Yi}3itPQz6y2;P+~q$HH=!ss?EJwplv(I0EOGm3t@45NYdZ5-SlMn{xuDD
zRjgmXCJ5eG9P%S}NJ~z{SxRbF^5%XW(Pfuq{%BJc-2G8L?o8|Lc7?+68E%f3WyNai
z+)@_nvLy70Q$BwoTQnpaY0N9V{>om}r}M!T@{i>6v`AJ>P0auQl
z@0l-JjZxGWkYGEd@Kb3n!RN
zD<*u!T`v{lugQ?4f8)(^!`X3JXvkJn#1WbLEqYMet#|
zU(SpwKriumxez`@%E}g3^k2+$Ly0I$NVTyo)v$>+T7$%O$-@!XY+LE^duE&EN=RNx
zPxw?Yu)pLKZyj=zOt@JKIgJPCIptl}1MrJQJWOmo09^M8DWTe1HeF02gmV~_vBN}+
zz$*9ypBntvowcpx%(Y1q15;y+-I65GFKVy1eS4W)=rHQOE)``+aN=6S%(?$!;XL(i
zq9RUAk=*_gA>vc0PmwQY&%X_DBR{*Ae28CW3_EccNB(oWv!qQ{VnoE&LUhL!9i;$U
z9XzBjdvved|CLI}lmo=!-u=u$n2~Y&3D^ezvvaSrCL@McwF9WQ_r!T~(hihrW47B!
zN{Yc^$=u!M?=}?3rvzGs6ADGZ6Z7ey;2{-Ii#+s~5=~GZl1(f*nA$!>2hXMQ%F{Ga
zzXCKL0=*6eDCG1?cJ4~36bh0-we$K|@e2dOu`_Kvfl-uNQi~8_+Rnr)3}qWsBxbSs
z{TNbLgm?kHy6a7R$?WcYxOQGo-g$CI#i-Kvx5#NZ%Q1H(%@6EBnxMc!d#+m|@3MW=
zsAmxF1v-m+aL43BhU2EeLe-vf2+4*|`gE5`v3MZp0~ffcOr=Ari!89d!~nbA9Bu6Z
zEc3KHywA`9uFi^kD~~#Tix!mD{w*bqV~|^#aAjvG{@t6tT0m-*(i$_IH>}y{Y)Ru2
zz-+UEYa(xqk`j!i-L;$cDG~Ws+)%(z_eDz+RpDErDJSLE_
zh5t&YmAppj^4B?UXk(+DIf=~Hp>TmpCL?@ruK;YR*zFU{={ROMSPPbZWA$!VbENs(
z4=z9#H-NYPkr8os`B%&YorMpL%$nm`gv!{Ny-DyC*ze6~*C?OPAFe$N%H^K{k6ZyH
z27DY}*rqYlNBj`M276P+zdrDh4HR*%8)fGDYX(Jo1knI?b5LGU4bUbhy-06?HBp>!
zqUKG3(8b$%a1aatz0eT;Lj4?H7r*ZPz;M&%0qnU1nuxXZV(1m-_4~K^dYg!cQ=JRl
z#kdt{v+L!#?OY~Z7k#wAs?hS|x*;Hd9=|W&Prym6S(@hR#oulGMozn*NK%6_
zQ!r!>Oc_~aRg|~zl_gNfZ&Od7bJ6#+8y4Ra(Tw|qJ?VnqUG1(b-{<^MPCgzYJbRf_@|CZ4;8B*kWtYS#XQ7_U>SE?RN&P(=5a)i$>3Igq&-ngaoc)`>T3ph@y|N_rKZFW?F66rz@Gi
zZ*Q)$d#SSrCXN*!j|EyiG7-(o!i;rTEbnEWgZ1}m!LoguWyYM31pU+c9?igBMW7hB
z)3icG)1Pf6y&%j{8R;FT4Twpb)%S}W{}YXYkH(sEBa}_Qcawy=f4jB*jVn?1p!|e
zd+lCigNmLF1-^Fzs81<;`c`K|LTTnsvkd*RisHS{DwC3BLxcpl|LJnoZfBb5So;HR
z4~bOS4;l$AH2I{9t6X2c^%&Z7*f%~%<}LPoSX2`cLPw4;7GP}{(X=)JhN`=SR{3Q+
z*x0jD;lpgUhHU55YuiGp=`Yhiju(f$RsCQz_OYMGX2i4VaiW(HeGCiGn}qoh(W?!0
z_}UZFCpg=c4F=#cIEikfxc&XR2f`rMb8~a~4@wl~KMhI)?MB4ji4~XfNp`5mSNC|4
zBpt$=Ad$b-XNXB!WvE?a8R_lmv#WrMq1GmeXW*mDABpAw)0APxRita30QfORQd<*s{a^L}E!$3Wz<=T1>S3#t7))rQxG%K5($_5OC#!%6Dopy??_3?}dH=u>Ef
zCLKU1O!^$fDD0k~&knt&ChZtZ+@u1izt(Mr$0~$N1Vn-*IyA$pEyTcx^>r=ER%MxZ
zY2o4sT+X#jnYrn_`JyiKO)?}rFI{+u=eru-#51~znn>%;QaousE;C#AiEU~8gVGot
z4f&dgY2P-{1nwOh6G(;m!;izcbX^
z3MmQGvwQr~_u8HwL{!!f<_7*FFza8^4oj=qynas?kGsQxERnGid7PqJhzYc0XoLyP
z)Xp9HW~v7+@eiLYg^@NcAi9K%e{HEe_A9rXK!?
zu&PvG)*6-wja)#$56j@Co9e9Jf$Z7OPD01!02K$LeqHX$I=&69Fl&E#omL>%#k41v%>AQvU#?0DigJ(8An`#2D3sp+cLsn~@75B=%69{>OV
literal 0
HcmV?d00001
diff --git a/web/doc/_templates/._sidebarintro.html b/web/doc/_templates/._sidebarintro.html
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_templates/._sidebarlogo.html b/web/doc/_templates/._sidebarlogo.html
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_templates/sidebarintro.html b/web/doc/_templates/sidebarintro.html
new file mode 100644
index 0000000..ecd5198
--- /dev/null
+++ b/web/doc/_templates/sidebarintro.html
@@ -0,0 +1,16 @@
+
+
+
+
+Other Docs
+
+
+Useful Links
+
diff --git a/web/doc/_templates/sidebarlogo.html b/web/doc/_templates/sidebarlogo.html
new file mode 100644
index 0000000..de6e3e5
--- /dev/null
+++ b/web/doc/_templates/sidebarlogo.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/web/doc/_themes/._LICENSE b/web/doc/_themes/._LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/._README b/web/doc/_themes/._README
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/._flask b/web/doc/_themes/._flask
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/._flask_small b/web/doc/_themes/._flask_small
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/._flask_theme_support.py b/web/doc/_themes/._flask_theme_support.py
new file mode 100755
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/LICENSE b/web/doc/_themes/LICENSE
new file mode 100644
index 0000000..8daab7e
--- /dev/null
+++ b/web/doc/_themes/LICENSE
@@ -0,0 +1,37 @@
+Copyright (c) 2010 by Armin Ronacher.
+
+Some rights reserved.
+
+Redistribution and use in source and binary forms of the theme, with or
+without modification, are permitted provided that the following conditions
+are met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+* The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+We kindly ask you to only use these themes in an unmodified manner just
+for Flask and Flask-related products, not for unrelated projects. If you
+like the visual style and want to use it for your own projects, please
+consider making some larger changes to the themes (such as changing
+font faces, sizes, colors or margins).
+
+THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/web/doc/_themes/README b/web/doc/_themes/README
new file mode 100644
index 0000000..b3292bd
--- /dev/null
+++ b/web/doc/_themes/README
@@ -0,0 +1,31 @@
+Flask Sphinx Styles
+===================
+
+This repository contains sphinx styles for Flask and Flask related
+projects. To use this style in your Sphinx documentation, follow
+this guide:
+
+1. put this folder as _themes into your docs folder. Alternatively
+ you can also use git submodules to check out the contents there.
+2. add this to your conf.py:
+
+ sys.path.append(os.path.abspath('_themes'))
+ html_theme_path = ['_themes']
+ html_theme = 'flask'
+
+The following themes exist:
+
+- 'flask' - the standard flask documentation theme for large
+ projects
+- 'flask_small' - small one-page theme. Intended to be used by
+ very small addon libraries for flask.
+
+The following options exist for the flask_small theme:
+
+ [options]
+ index_logo = '' filename of a picture in _static
+ to be used as replacement for the
+ h1 in the index.rst file.
+ index_logo_height = 120px height of the index logo
+ github_fork = '' repository name on github for the
+ "fork me" badge
diff --git a/web/doc/_themes/flask/._layout.html b/web/doc/_themes/flask/._layout.html
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/._relations.html b/web/doc/_themes/flask/._relations.html
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/._static b/web/doc/_themes/flask/._static
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/._theme.conf b/web/doc/_themes/flask/._theme.conf
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/layout.html b/web/doc/_themes/flask/layout.html
new file mode 100644
index 0000000..ad08ecc
--- /dev/null
+++ b/web/doc/_themes/flask/layout.html
@@ -0,0 +1,25 @@
+{%- extends "basic/layout.html" %}
+{%- block extrahead %}
+ {{ super() }}
+ {% if theme_touch_icon %}
+
+ {% endif %}
+
+{% endblock %}
+{%- block relbar2 %}{% endblock %}
+{% block header %}
+ {{ super() }}
+ {% if pagename == 'index' %}
+
+ {% endif %}
+{% endblock %}
+{%- block footer %}
+
+ {% if pagename == 'index' %}
+
+ {% endif %}
+{%- endblock %}
diff --git a/web/doc/_themes/flask/relations.html b/web/doc/_themes/flask/relations.html
new file mode 100644
index 0000000..3bbcde8
--- /dev/null
+++ b/web/doc/_themes/flask/relations.html
@@ -0,0 +1,19 @@
+Related Topics
+
diff --git a/web/doc/_themes/flask/static/._flasky.css_t b/web/doc/_themes/flask/static/._flasky.css_t
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/static/._small_flask.css b/web/doc/_themes/flask/static/._small_flask.css
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask/static/flasky.css_t b/web/doc/_themes/flask/static/flasky.css_t
new file mode 100644
index 0000000..0280e15
--- /dev/null
+++ b/web/doc/_themes/flask/static/flasky.css_t
@@ -0,0 +1,395 @@
+/*
+ * flasky.css_t
+ * ~~~~~~~~~~~~
+ *
+ * :copyright: Copyright 2010 by Armin Ronacher.
+ * :license: Flask Design License, see LICENSE for details.
+ */
+
+{% set page_width = '80em' %}
+{% set sidebar_width = '16em' %}
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: 'Georgia', serif;
+ font-size: 15px;
+ background-color: white;
+ color: #000;
+ margin: 0;
+ padding: 0;
+}
+
+div.document {
+ width: {{ page_width }};
+ margin: 30px auto 0 auto;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 0 0 0 {{ sidebar_width }};
+}
+
+div.sphinxsidebar {
+ width: {{ sidebar_width }};
+}
+
+hr {
+ border: 1px solid #B1B4B6;
+}
+
+div.body {
+ background-color: #ffffff;
+ color: #3E4349;
+ padding: 0 0px 0 0px;
+}
+
+img.floatingflask {
+ padding: 0 0 10px 10px;
+ float: right;
+}
+
+div.footer {
+ width: {{ page_width }};
+ margin: 20px auto 30px auto;
+ font-size: 12px;
+ color: #888;
+ text-align: right;
+}
+
+div.footer a {
+ color: #888;
+}
+
+div.related {
+ display: none;
+}
+
+div.sphinxsidebar a {
+ color: #444;
+ text-decoration: none;
+ border-bottom: 1px dotted #999;
+}
+
+div.sphinxsidebar a:hover {
+ border-bottom: 1px solid #999;
+}
+
+div.sphinxsidebar {
+ font-size: 12px;
+ line-height: 1.5;
+}
+
+div.sphinxsidebarwrapper {
+ padding: 0px 10px;
+}
+
+div.sphinxsidebarwrapper p.logo {
+ padding: 0 0 20px 0;
+ margin: 0;
+ text-align: center;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+ font-family: 'Garamond', 'Georgia', serif;
+ color: #444;
+ font-size: 22px;
+ font-weight: normal;
+ margin: 0 0 5px 0;
+ padding: 0;
+}
+
+div.sphinxsidebar h4 {
+ font-size: 18px;
+}
+
+div.sphinxsidebar h3 a {
+ color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+ border: none;
+}
+
+div.sphinxsidebar p {
+ color: #555;
+ margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+ margin: 10px 0;
+ padding: 0;
+ color: #000;
+}
+
+div.sphinxsidebar input {
+ border: 1px solid #ccc;
+ font-family: 'Georgia', serif;
+ font-size: 1em;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+ color: #004B6B;
+ text-decoration: underline;
+}
+
+a:hover {
+ color: #6D4100;
+ text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: 'Garamond', 'Georgia', serif;
+ font-weight: normal;
+ margin: 30px 0px 10px 0px;
+ padding: 0;
+}
+
+{% if theme_index_logo %}
+div.indexwrapper h1 {
+ text-indent: -999999px;
+ background: url({{ theme_index_logo }}) no-repeat center center;
+ height: {{ theme_index_logo_height }};
+}
+{% endif %}
+
+div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: #ddd;
+ padding: 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ color: #444;
+ background: #eaeaea;
+}
+
+div.body p, div.body dd, div.body li {
+ line-height: 1.4em;
+}
+
+div.admonition {
+ background: #fafafa;
+ margin: 20px -30px;
+ padding: 10px 30px;
+ border-top: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+}
+
+div.admonition tt.xref, div.admonition a tt {
+ border-bottom: 1px solid #fafafa;
+}
+
+dd div.admonition {
+ margin-left: -60px;
+ padding-left: 60px;
+}
+
+div.admonition p.admonition-title {
+ font-family: 'Garamond', 'Georgia', serif;
+ font-weight: normal;
+ font-size: 22px;
+ margin: 0 0 10px 0;
+ padding: 0;
+ line-height: 1;
+}
+
+div.admonition p.last {
+ margin-bottom: 0;
+}
+
+div.highlight {
+ background-color: white;
+}
+
+dt:target, .highlight {
+ background: #FAF3E8;
+}
+
+div.note {
+ background-color: #eee;
+ border: 1px solid #ccc;
+}
+
+div.seealso {
+ background-color: #ffc;
+ border: 1px solid #ff6;
+}
+
+div.topic {
+ background-color: #eee;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre, tt {
+ font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+ font-size: 0.9em;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname {
+ font-size: 0.95em;
+}
+
+tt.descname {
+ padding-right: 0.08em;
+}
+
+img.screenshot {
+ -moz-box-shadow: 2px 2px 4px #eee;
+ -webkit-box-shadow: 2px 2px 4px #eee;
+ box-shadow: 2px 2px 4px #eee;
+}
+
+table.docutils {
+ border: 1px solid #888;
+ -moz-box-shadow: 2px 2px 4px #eee;
+ -webkit-box-shadow: 2px 2px 4px #eee;
+ box-shadow: 2px 2px 4px #eee;
+}
+
+table.docutils td, table.docutils th {
+ border: 1px solid #888;
+ padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+ border: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+table.footnote {
+ margin: 15px 0;
+ width: 100%;
+ border: 1px solid #eee;
+ background: #fdfdfd;
+ font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+ margin-top: -15px;
+ border-top: none;
+}
+
+table.field-list th {
+ padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+ padding: 0;
+}
+
+table.footnote td.label {
+ width: 0px;
+ padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+ padding: 0.3em 0.5em;
+}
+
+dl {
+ margin: 0;
+ padding: 0;
+}
+
+dl dd {
+ margin-left: 30px;
+}
+
+blockquote {
+ margin: 0 0 0 30px;
+ padding: 0;
+}
+
+ul, ol {
+ margin: 10px 0 10px 30px;
+ padding: 0;
+}
+
+pre {
+ background: #eee;
+ padding: 7px 30px;
+ margin: 15px -30px;
+ line-height: 1.3em;
+}
+
+dl pre, blockquote pre, li pre {
+ margin-left: -60px;
+ padding-left: 60px;
+}
+
+dl dl pre {
+ margin-left: -90px;
+ padding-left: 90px;
+}
+
+tt {
+ background-color: #ecf0f3;
+ color: #222;
+ /* padding: 1px 2px; */
+}
+
+tt.xref, a tt {
+ background-color: #FBFBFB;
+ border-bottom: 1px solid white;
+}
+
+a.reference {
+ text-decoration: none;
+ border-bottom: 1px dotted #004B6B;
+}
+
+a.reference:hover {
+ border-bottom: 1px solid #6D4100;
+}
+
+a.footnote-reference {
+ text-decoration: none;
+ font-size: 0.7em;
+ vertical-align: top;
+ border-bottom: 1px dotted #004B6B;
+}
+
+a.footnote-reference:hover {
+ border-bottom: 1px solid #6D4100;
+}
+
+a:hover tt {
+ background: #EEE;
+}
diff --git a/web/doc/_themes/flask/static/small_flask.css b/web/doc/_themes/flask/static/small_flask.css
new file mode 100644
index 0000000..1c6df30
--- /dev/null
+++ b/web/doc/_themes/flask/static/small_flask.css
@@ -0,0 +1,70 @@
+/*
+ * small_flask.css_t
+ * ~~~~~~~~~~~~~~~~~
+ *
+ * :copyright: Copyright 2010 by Armin Ronacher.
+ * :license: Flask Design License, see LICENSE for details.
+ */
+
+body {
+ margin: 0;
+ padding: 20px 30px;
+}
+
+div.documentwrapper {
+ float: none;
+ background: white;
+}
+
+div.sphinxsidebar {
+ display: block;
+ float: none;
+ width: 102.5%;
+ margin: 50px -30px -20px -30px;
+ padding: 10px 20px;
+ background: #333;
+ color: white;
+}
+
+div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
+div.sphinxsidebar h3 a {
+ color: white;
+}
+
+div.sphinxsidebar a {
+ color: #aaa;
+}
+
+div.sphinxsidebar p.logo {
+ display: none;
+}
+
+div.document {
+ width: 100%;
+ margin: 0;
+}
+
+div.related {
+ display: block;
+ margin: 0;
+ padding: 10px 0 20px 0;
+}
+
+div.related ul,
+div.related ul li {
+ margin: 0;
+ padding: 0;
+}
+
+div.footer {
+ display: none;
+}
+
+div.bodywrapper {
+ margin: 0;
+}
+
+div.body {
+ min-height: 0;
+ padding: 0;
+}
diff --git a/web/doc/_themes/flask/theme.conf b/web/doc/_themes/flask/theme.conf
new file mode 100644
index 0000000..18c720f
--- /dev/null
+++ b/web/doc/_themes/flask/theme.conf
@@ -0,0 +1,9 @@
+[theme]
+inherit = basic
+stylesheet = flasky.css
+pygments_style = flask_theme_support.FlaskyStyle
+
+[options]
+index_logo = ''
+index_logo_height = 120px
+touch_icon =
diff --git a/web/doc/_themes/flask_small/._layout.html b/web/doc/_themes/flask_small/._layout.html
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask_small/._static b/web/doc/_themes/flask_small/._static
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask_small/._theme.conf b/web/doc/_themes/flask_small/._theme.conf
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask_small/layout.html b/web/doc/_themes/flask_small/layout.html
new file mode 100644
index 0000000..aa1716a
--- /dev/null
+++ b/web/doc/_themes/flask_small/layout.html
@@ -0,0 +1,22 @@
+{% extends "basic/layout.html" %}
+{% block header %}
+ {{ super() }}
+ {% if pagename == 'index' %}
+
+ {% endif %}
+{% endblock %}
+{% block footer %}
+ {% if pagename == 'index' %}
+
+ {% endif %}
+{% endblock %}
+{# do not display relbars #}
+{% block relbar1 %}{% endblock %}
+{% block relbar2 %}
+ {% if theme_github_fork %}
+
+ {% endif %}
+{% endblock %}
+{% block sidebar1 %}{% endblock %}
+{% block sidebar2 %}{% endblock %}
diff --git a/web/doc/_themes/flask_small/static/._flasky.css_t b/web/doc/_themes/flask_small/static/._flasky.css_t
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/_themes/flask_small/static/flasky.css_t b/web/doc/_themes/flask_small/static/flasky.css_t
new file mode 100644
index 0000000..fe2141c
--- /dev/null
+++ b/web/doc/_themes/flask_small/static/flasky.css_t
@@ -0,0 +1,287 @@
+/*
+ * flasky.css_t
+ * ~~~~~~~~~~~~
+ *
+ * Sphinx stylesheet -- flasky theme based on nature theme.
+ *
+ * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+ font-family: 'Georgia', serif;
+ font-size: 17px;
+ color: #000;
+ background: white;
+ margin: 0;
+ padding: 0;
+}
+
+div.documentwrapper {
+ float: left;
+ width: 100%;
+}
+
+div.bodywrapper {
+ margin: 40px auto 0 auto;
+ width: 700px;
+}
+
+hr {
+ border: 1px solid #B1B4B6;
+}
+
+div.body {
+ background-color: #ffffff;
+ color: #3E4349;
+ padding: 0 30px 30px 30px;
+}
+
+img.floatingflask {
+ padding: 0 0 10px 10px;
+ float: right;
+}
+
+div.footer {
+ text-align: right;
+ color: #888;
+ padding: 10px;
+ font-size: 14px;
+ width: 650px;
+ margin: 0 auto 40px auto;
+}
+
+div.footer a {
+ color: #888;
+ text-decoration: underline;
+}
+
+div.related {
+ line-height: 32px;
+ color: #888;
+}
+
+div.related ul {
+ padding: 0 0 0 10px;
+}
+
+div.related a {
+ color: #444;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+ color: #004B6B;
+ text-decoration: underline;
+}
+
+a:hover {
+ color: #6D4100;
+ text-decoration: underline;
+}
+
+div.body {
+ padding-bottom: 40px; /* saved for footer */
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+ font-family: 'Garamond', 'Georgia', serif;
+ font-weight: normal;
+ margin: 30px 0px 10px 0px;
+ padding: 0;
+}
+
+{% if theme_index_logo %}
+div.indexwrapper h1 {
+ text-indent: -999999px;
+ background: url({{ theme_index_logo }}) no-repeat center center;
+ height: {{ theme_index_logo_height }};
+}
+{% endif %}
+
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+ color: white;
+ padding: 0 4px;
+ text-decoration: none;
+}
+
+a.headerlink:hover {
+ color: #444;
+ background: #eaeaea;
+}
+
+div.body p, div.body dd, div.body li {
+ line-height: 1.4em;
+}
+
+div.admonition {
+ background: #fafafa;
+ margin: 20px -30px;
+ padding: 10px 30px;
+ border-top: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+}
+
+div.admonition p.admonition-title {
+ font-family: 'Garamond', 'Georgia', serif;
+ font-weight: normal;
+ font-size: 24px;
+ margin: 0 0 10px 0;
+ padding: 0;
+ line-height: 1;
+}
+
+div.admonition p.last {
+ margin-bottom: 0;
+}
+
+div.highlight{
+ background-color: white;
+}
+
+dt:target, .highlight {
+ background: #FAF3E8;
+}
+
+div.note {
+ background-color: #eee;
+ border: 1px solid #ccc;
+}
+
+div.seealso {
+ background-color: #ffc;
+ border: 1px solid #ff6;
+}
+
+div.topic {
+ background-color: #eee;
+}
+
+div.warning {
+ background-color: #ffe4e4;
+ border: 1px solid #f66;
+}
+
+p.admonition-title {
+ display: inline;
+}
+
+p.admonition-title:after {
+ content: ":";
+}
+
+pre, tt {
+ font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+ font-size: 0.85em;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname {
+ font-size: 0.95em;
+}
+
+tt.descname {
+ padding-right: 0.08em;
+}
+
+img.screenshot {
+ -moz-box-shadow: 2px 2px 4px #eee;
+ -webkit-box-shadow: 2px 2px 4px #eee;
+ box-shadow: 2px 2px 4px #eee;
+}
+
+table.docutils {
+ border: 1px solid #888;
+ -moz-box-shadow: 2px 2px 4px #eee;
+ -webkit-box-shadow: 2px 2px 4px #eee;
+ box-shadow: 2px 2px 4px #eee;
+}
+
+table.docutils td, table.docutils th {
+ border: 1px solid #888;
+ padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+ border: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+table.footnote {
+ margin: 15px 0;
+ width: 100%;
+ border: 1px solid #eee;
+}
+
+table.field-list th {
+ padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+ padding: 0;
+}
+
+table.footnote td {
+ padding: 0.5em;
+}
+
+dl {
+ margin: 0;
+ padding: 0;
+}
+
+dl dd {
+ margin-left: 30px;
+}
+
+pre {
+ padding: 0;
+ margin: 15px -30px;
+ padding: 8px;
+ line-height: 1.3em;
+ padding: 7px 30px;
+ background: #eee;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+}
+
+dl pre {
+ margin-left: -60px;
+ padding-left: 60px;
+}
+
+tt {
+ background-color: #ecf0f3;
+ color: #222;
+ /* padding: 1px 2px; */
+}
+
+tt.xref, a tt {
+ background-color: #FBFBFB;
+}
+
+a:hover tt {
+ background: #EEE;
+}
diff --git a/web/doc/_themes/flask_small/theme.conf b/web/doc/_themes/flask_small/theme.conf
new file mode 100644
index 0000000..542b462
--- /dev/null
+++ b/web/doc/_themes/flask_small/theme.conf
@@ -0,0 +1,10 @@
+[theme]
+inherit = basic
+stylesheet = flasky.css
+nosidebar = true
+pygments_style = flask_theme_support.FlaskyStyle
+
+[options]
+index_logo = ''
+index_logo_height = 120px
+github_fork = ''
diff --git a/web/doc/_themes/flask_theme_support.py b/web/doc/_themes/flask_theme_support.py
new file mode 100755
index 0000000..33f4744
--- /dev/null
+++ b/web/doc/_themes/flask_theme_support.py
@@ -0,0 +1,86 @@
+# flasky extensions. flasky pygments style based on tango style
+from pygments.style import Style
+from pygments.token import Keyword, Name, Comment, String, Error, \
+ Number, Operator, Generic, Whitespace, Punctuation, Other, Literal
+
+
+class FlaskyStyle(Style):
+ background_color = "#f8f8f8"
+ default_style = ""
+
+ styles = {
+ # No corresponding class for the following:
+ #Text: "", # class: ''
+ Whitespace: "underline #f8f8f8", # class: 'w'
+ Error: "#a40000 border:#ef2929", # class: 'err'
+ Other: "#000000", # class 'x'
+
+ Comment: "italic #8f5902", # class: 'c'
+ Comment.Preproc: "noitalic", # class: 'cp'
+
+ Keyword: "bold #004461", # class: 'k'
+ Keyword.Constant: "bold #004461", # class: 'kc'
+ Keyword.Declaration: "bold #004461", # class: 'kd'
+ Keyword.Namespace: "bold #004461", # class: 'kn'
+ Keyword.Pseudo: "bold #004461", # class: 'kp'
+ Keyword.Reserved: "bold #004461", # class: 'kr'
+ Keyword.Type: "bold #004461", # class: 'kt'
+
+ Operator: "#582800", # class: 'o'
+ Operator.Word: "bold #004461", # class: 'ow' - like keywords
+
+ Punctuation: "bold #000000", # class: 'p'
+
+ # because special names such as Name.Class, Name.Function, etc.
+ # are not recognized as such later in the parsing, we choose them
+ # to look the same as ordinary variables.
+ Name: "#000000", # class: 'n'
+ Name.Attribute: "#c4a000", # class: 'na' - to be revised
+ Name.Builtin: "#004461", # class: 'nb'
+ Name.Builtin.Pseudo: "#3465a4", # class: 'bp'
+ Name.Class: "#000000", # class: 'nc' - to be revised
+ Name.Constant: "#000000", # class: 'no' - to be revised
+ Name.Decorator: "#888", # class: 'nd' - to be revised
+ Name.Entity: "#ce5c00", # class: 'ni'
+ Name.Exception: "bold #cc0000", # class: 'ne'
+ Name.Function: "#000000", # class: 'nf'
+ Name.Property: "#000000", # class: 'py'
+ Name.Label: "#f57900", # class: 'nl'
+ Name.Namespace: "#000000", # class: 'nn' - to be revised
+ Name.Other: "#000000", # class: 'nx'
+ Name.Tag: "bold #004461", # class: 'nt' - like a keyword
+ Name.Variable: "#000000", # class: 'nv' - to be revised
+ Name.Variable.Class: "#000000", # class: 'vc' - to be revised
+ Name.Variable.Global: "#000000", # class: 'vg' - to be revised
+ Name.Variable.Instance: "#000000", # class: 'vi' - to be revised
+
+ Number: "#990000", # class: 'm'
+
+ Literal: "#000000", # class: 'l'
+ Literal.Date: "#000000", # class: 'ld'
+
+ String: "#4e9a06", # class: 's'
+ String.Backtick: "#4e9a06", # class: 'sb'
+ String.Char: "#4e9a06", # class: 'sc'
+ String.Doc: "italic #8f5902", # class: 'sd' - like a comment
+ String.Double: "#4e9a06", # class: 's2'
+ String.Escape: "#4e9a06", # class: 'se'
+ String.Heredoc: "#4e9a06", # class: 'sh'
+ String.Interpol: "#4e9a06", # class: 'si'
+ String.Other: "#4e9a06", # class: 'sx'
+ String.Regex: "#4e9a06", # class: 'sr'
+ String.Single: "#4e9a06", # class: 's1'
+ String.Symbol: "#4e9a06", # class: 'ss'
+
+ Generic: "#000000", # class: 'g'
+ Generic.Deleted: "#a40000", # class: 'gd'
+ Generic.Emph: "italic #000000", # class: 'ge'
+ Generic.Error: "#ef2929", # class: 'gr'
+ Generic.Heading: "bold #000080", # class: 'gh'
+ Generic.Inserted: "#00A000", # class: 'gi'
+ Generic.Output: "#888", # class: 'go'
+ Generic.Prompt: "#745334", # class: 'gp'
+ Generic.Strong: "bold #000000", # class: 'gs'
+ Generic.Subheading: "bold #800080", # class: 'gu'
+ Generic.Traceback: "bold #a40000", # class: 'gt'
+ }
diff --git a/web/doc/addon-structure.txt b/web/doc/addon-structure.txt
new file mode 100644
index 0000000..3815174
--- /dev/null
+++ b/web/doc/addon-structure.txt
@@ -0,0 +1,12 @@
+
+ +-- __openerp__.py
+ +-- controllers/
+ +-- static/
+ +-- lib/
+ +-- src/
+ +-- css/
+ +-- img/
+ +-- js/
+ +-- xml/
+ +-- test/
+ +-- test/
diff --git a/web/doc/async.rst b/web/doc/async.rst
new file mode 100644
index 0000000..6782fda
--- /dev/null
+++ b/web/doc/async.rst
@@ -0,0 +1,344 @@
+Asynchronous Operations
+=======================
+
+As a language (and runtime), javascript is fundamentally
+single-threaded. This means any blocking request or computation will
+blocks the whole page (and, in older browsers, the software itself
+even preventing users from switching to an other tab): a javascript
+environment can be seen as an event-based runloop where application
+developers have no control over the runloop itself.
+
+As a result, performing long-running synchronous network requests or
+other types of complex and expensive accesses is frowned upon and
+asynchronous APIs are used instead.
+
+Asynchronous code rarely comes naturally, especially for developers
+used to synchronous server-side code (in Python, Java or C#) where the
+code will just block until the deed is gone. This is increased further
+when asynchronous programming is not a first-class concept and is
+instead implemented on top of callbacks-based programming, which is
+the case in javascript.
+
+The goal of this guide is to provide some tools to deal with
+asynchronous systems, and warn against systematic issues or dangers.
+
+Deferreds
+---------
+
+Deferreds are a form of `promises`_. OpenERP Web currently uses
+`jQuery's deferred`_.
+
+The core idea of deferreds is that potentially asynchronous methods
+will return a :js:class:`Deferred` object instead of an arbitrary
+value or (most commonly) nothing.
+
+This object can then be used to track the end of the asynchronous
+operation by adding callbacks onto it, either success callbacks or
+error callbacks.
+
+A great advantage of deferreds over simply passing callback functions
+directly to asynchronous methods is the ability to :ref:`compose them
+`.
+
+Using deferreds
+~~~~~~~~~~~~~~~
+
+Deferreds's most important method is :js:func:`Deferred.then`. It is
+used to attach new callbacks to the deferred object.
+
+* the first parameter attaches a success callback, called when the
+ deferred object is successfully resolved and provided with the
+ resolved value(s) for the asynchronous operation.
+
+* the second parameter attaches a failure callback, called when the
+ deferred object is rejected and provided with rejection values
+ (often some sort of error message).
+
+Callbacks attached to deferreds are never "lost": if a callback is
+attached to an already resolved or rejected deferred, the callback
+will be called (or ignored) immediately. A deferred is also only ever
+resolved or rejected once, and is either resolved or rejected: a given
+deferred can not call a single success callback twice, or call both a
+success and a failure callbacks.
+
+:js:func:`~Deferred.then` should be the method you'll use most often
+when interacting with deferred objects (and thus asynchronous APIs).
+
+Building deferreds
+~~~~~~~~~~~~~~~~~~
+
+After using asynchronous APIs may come the time to build them: for
+`mocks`_, to compose deferreds from multiple source in a complex
+manner, in order to let the current operations repaint the screen or
+give other events the time to unfold, ...
+
+This is easy using jQuery's deferred objects.
+
+.. note:: this section is an implementation detail of jQuery Deferred
+ objects, the creation of promises is not part of any
+ standard (even tentative) that I know of. If you are using
+ deferred objects which are not jQuery's, their API may (and
+ often will) be completely different.
+
+Deferreds are created by invoking their constructor [#]_ without any
+argument. This creates a :js:class:`Deferred` instance object with the
+following methods:
+
+:js:func:`Deferred.resolve`
+
+ As its name indicates, this method moves the deferred to the
+ "Resolved" state. It can be provided as many arguments as
+ necessary, these arguments will be provided to any pending success
+ callback.
+
+:js:func:`Deferred.reject`
+
+ Similar to :js:func:`~Deferred.resolve`, but moves the deferred to
+ the "Rejected" state and calls pending failure handlers.
+
+:js:func:`Deferred.promise`
+
+ Creates a readonly view of the deferred object. It is generally a
+ good idea to return a promise view of the deferred to prevent
+ callers from resolving or rejecting the deferred in your stead.
+
+:js:func:`~Deferred.reject` and :js:func:`~Deferred.resolve` are used
+to inform callers that the asynchronous operation has failed (or
+succeeded). These methods should simply be called when the
+asynchronous operation has ended, to notify anybody interested in its
+result(s).
+
+.. _deferred-composition:
+
+Composing deferreds
+~~~~~~~~~~~~~~~~~~~
+
+What we've seen so far is pretty nice, but mostly doable by passing
+functions to other functions (well adding functions post-facto would
+probably be a chore... still, doable).
+
+Deferreds truly shine when code needs to compose asynchronous
+operations in some way or other, as they can be used as a basis for
+such composition.
+
+There are two main forms of compositions over deferred: multiplexing
+and piping/cascading.
+
+Deferred multiplexing
+`````````````````````
+
+The most common reason for multiplexing deferred is simply performing
+2+ asynchronous operations and wanting to wait until all of them are
+done before moving on (and executing more stuff).
+
+The jQuery multiplexing function for promises is :js:func:`when`.
+
+.. note:: the multiplexing behavior of jQuery's :js:func:`when` is an
+ (incompatible, mostly) extension of the behavior defined in
+ `CommonJS Promises/B`_.
+
+This function can take any number of promises [#]_ and will return a
+promise.
+
+This returned promise will be resolved when *all* multiplexed promises
+are resolved, and will be rejected as soon as one of the multiplexed
+promises is rejected (it behaves like Python's ``all()``, but with
+promise objects instead of boolean-ish).
+
+The resolved values of the various promises multiplexed via
+:js:func:`when` are mapped to the arguments of :js:func:`when`'s
+success callback, if they are needed. The resolved values of a promise
+are at the same index in the callback's arguments as the promise in
+the :js:func:`when` call so you will have:
+
+.. code-block:: javascript
+
+ $.when(p0, p1, p2, p3).then(
+ function (results0, results1, results2, results3) {
+ // code
+ });
+
+.. warning::
+
+ in a normal mapping, each parameter to the callback would be an
+ array: each promise is conceptually resolved with an array of 0..n
+ values and these values are passed to :js:func:`when`'s
+ callback. But jQuery treats deferreds resolving a single value
+ specially, and "unwraps" that value.
+
+ For instance, in the code block above if the index of each promise
+ is the number of values it resolves (0 to 3), ``results0`` is an
+ empty array, ``results2`` is an array of 2 elements (a pair) but
+ ``results1`` is the actual value resolved by ``p1``, not an array.
+
+Deferred chaining
+`````````````````
+
+A second useful composition is starting an asynchronous operation as
+the result of an other asynchronous operation, and wanting the result
+of both: with the tools described so far, handling e.g. OpenERP's
+search/read sequence with this would require something along the lines
+of:
+
+.. code-block:: javascript
+
+ var result = $.Deferred();
+ Model.search(condition).then(function (ids) {
+ Model.read(ids, fields).then(function (records) {
+ result.resolve(records);
+ });
+ });
+ return result.promise();
+
+While it doesn't look too bad for trivial code, this quickly gets
+unwieldy.
+
+But :js:func:`~Deferred.then` also allows handling this kind of
+chains: it returns a new promise object, not the one it was called
+with, and the return values of the callbacks is actually important to
+it: whichever callback is called,
+
+* If the callback is not set (not provided or left to null), the
+ resolution or rejection value(s) is simply forwarded to
+ :js:func:`~Deferred.then`'s promise (it's essentially a noop)
+
+* If the callback is set and does not return an observable object (a
+ deferred or a promise), the value it returns (``undefined`` if it
+ does not return anything) will replace the value it was given, e.g.
+
+ .. code-block:: javascript
+
+ promise.then(function () {
+ console.log('called');
+ });
+
+ will resolve with the sole value ``undefined``.
+
+* If the callback is set and returns an observable object, that object
+ will be the actual resolution (and result) of the pipe. This means a
+ resolved promise from the failure callback will resolve the pipe,
+ and a failure promise from the success callback will reject the
+ pipe.
+
+ This provides an easy way to chain operation successes, and the
+ previous piece of code can now be rewritten:
+
+ .. code-block:: javascript
+
+ return Model.search(condition).then(function (ids) {
+ return Model.read(ids, fields);
+ });
+
+ the result of the whole expression will encode failure if either
+ ``search`` or ``read`` fails (with the right rejection values), and
+ will be resolved with ``read``'s resolution values if the chain
+ executes correctly.
+
+:js:func:`~Deferred.then` is also useful to adapt third-party
+promise-based APIs, in order to filter their resolution value counts
+for instance (to take advantage of :js:func:`when` 's special
+treatment of single-value promises).
+
+
+jQuery.Deferred API
+~~~~~~~~~~~~~~~~~~~
+
+.. js:function:: when(deferreds…)
+
+ :param deferreds: deferred objects to multiplex
+ :returns: a multiplexed deferred
+ :rtype: :js:class:`Deferred`
+
+.. js:class:: Deferred
+
+ .. js:function:: Deferred.then(doneCallback[, failCallback])
+
+ Attaches new callbacks to the resolution or rejection of the
+ deferred object. Callbacks are executed in the order they are
+ attached to the deferred.
+
+ To provide only a failure callback, pass ``null`` as the
+ ``doneCallback``, to provide only a success callback the
+ second argument can just be ignored (and not passed at all).
+
+ Returns a new deferred which resolves to the result of the
+ corresponding callback, if a callback returns a deferred
+ itself that new deferred will be used as the resolution of the
+ chain.
+
+ :param doneCallback: function called when the deferred is resolved
+ :type doneCallback: Function
+ :param failCallback: function called when the deferred is rejected
+ :type failCallback: Function
+ :returns: the deferred object on which it was called
+ :rtype: :js:class:`Deferred`
+
+ .. js:function:: Deferred.done(doneCallback)
+
+ Attaches a new success callback to the deferred, shortcut for
+ ``deferred.then(doneCallback)``.
+
+ This is a jQuery extension to `CommonJS Promises/A`_ providing
+ little value over calling :js:func:`~Deferred.then` directly,
+ it should be avoided.
+
+ :param doneCallback: function called when the deferred is resolved
+ :type doneCallback: Function
+ :returns: the deferred object on which it was called
+ :rtype: :js:class:`Deferred`
+
+ .. js:function:: Deferred.fail(failCallback)
+
+ Attaches a new failure callback to the deferred, shortcut for
+ ``deferred.then(null, failCallback)``.
+
+ A second jQuery extension to `Promises/A `_. Although it provides more value than
+ :js:func:`~Deferred.done`, it still is not much and should be
+ avoided as well.
+
+ :param failCallback: function called when the deferred is rejected
+ :type failCallback: Function
+ :returns: the deferred object on which it was called
+ :rtype: :js:class:`Deferred`
+
+ .. js:function:: Deferred.promise()
+
+ Returns a read-only view of the deferred object, with all
+ mutators (resolve and reject) methods removed.
+
+ .. js:function:: Deferred.resolve(value…)
+
+ Called to resolve a deferred, any value provided will be
+ passed onto the success handlers of the deferred object.
+
+ Resolving a deferred which has already been resolved or
+ rejected has no effect.
+
+ .. js:function:: Deferred.reject(value…)
+
+ Called to reject (fail) a deferred, any value provided will be
+ passed onto the failure handler of the deferred object.
+
+ Rejecting a deferred which has already been resolved or
+ rejected has no effect.
+
+.. [#] or simply calling :js:class:`Deferred` as a function, the
+ result is the same
+
+.. [#] or not-promises, the `CommonJS Promises/B`_ role of
+ :js:func:`when` is to be able to treat values and promises
+ uniformly: :js:func:`when` will pass promises through directly,
+ but non-promise values and objects will be transformed into a
+ resolved promise (resolving themselves with the value itself).
+
+ jQuery's :js:func:`when` keeps this behavior making deferreds
+ easy to build from "static" values, or allowing defensive code
+ where expected promises are wrapped in :js:func:`when` just in
+ case.
+
+.. _promises: http://en.wikipedia.org/wiki/Promise_(programming)
+.. _jQuery's deferred: http://api.jquery.com/category/deferred-object/
+.. _CommonJS Promises/A: http://wiki.commonjs.org/wiki/Promises/A
+.. _CommonJS Promises/B: http://wiki.commonjs.org/wiki/Promises/B
+.. _mocks: http://en.wikipedia.org/wiki/Mock_object
diff --git a/web/doc/changelog-7.0.rst b/web/doc/changelog-7.0.rst
new file mode 100644
index 0000000..b801c11
--- /dev/null
+++ b/web/doc/changelog-7.0.rst
@@ -0,0 +1,123 @@
+API changes from OpenERP Web 6.1 to 7.0
+=======================================
+
+Supported browsers
+------------------
+
+The OpenERP Web Client supports the following web browsers:
+
+* Internet Explorer 9+
+* Google Chrome 22+
+* Firefox 13+
+* Any browser using the latest version of Chrome Frame
+
+DataSet -> Model
+----------------
+
+The 6.1 ``DataSet`` API has been deprecated in favor of the smaller
+and more orthogonal :doc:`Model ` API, which more closely
+matches the API in OpenERP Web's Python side and in OpenObject addons
+and removes most stateful behavior of DataSet.
+
+Migration guide
+~~~~~~~~~~~~~~~
+
+* Actual arbitrary RPC calls can just be remapped on a
+ :js:class:`~openerp.web.Model` instance:
+
+ .. code-block:: javascript
+
+ dataset.call(method, args)
+
+ or
+
+ .. code-block:: javascript
+
+ dataset.call_and_eval(method, args)
+
+ can be replaced by calls to :js:func:`openerp.web.Model.call`:
+
+ .. code-block:: javascript
+
+ model.call(method, args)
+
+ If callbacks are passed directly to the older methods, they need to
+ be added to the new one via ``.then()``.
+
+ .. note::
+
+ The ``context_index`` and ``domain_index`` features were not
+ ported, context and domain now need to be passed in "in full",
+ they won't be automatically filled with the user's current
+ context.
+
+* Shorcut methods (``name_get``, ``name_search``, ``unlink``,
+ ``write``, ...) should be ported to
+ :js:func:`openerp.web.Model.call`, using the server's original
+ signature. On the other hand, the non-shortcut equivalents can now
+ use keyword arguments (see :js:func:`~openerp.web.Model.call`'s
+ signature for details)
+
+* ``read_slice``, which allowed a single round-trip to perform a
+ search and a read, should be reimplemented via
+ :js:class:`~openerp.web.Query` objects (see:
+ :js:func:`~openerp.web.Model.query`) for clearer and simpler
+ code. ``read_index`` should be replaced by a
+ :js:class:`~openerp.web.Query` as well, combining
+ :js:func:`~openerp.web.Query.offset` and
+ :js:func:`~openerp.web.Query.first`.
+
+Rationale
+~~~~~~~~~
+
+Renaming
+
+ The name *DataSet* exists in the CS community consciousness, and
+ (as its name implies) it's a set of data (often fetched from a
+ database, maybe lazily). OpenERP Web's dataset behaves very
+ differently as it does not store (much) data (only a bunch of ids
+ and just enough state to break things). The name "Model" matches
+ the one used on the Python side for the task of building an RPC
+ proxy to OpenERP objects.
+
+API simplification
+
+ ``DataSet`` has a number of methods which serve as little more
+ than shortcuts, or are there due to domain and context evaluation
+ issues in 6.1.
+
+ The shortcuts really add little value, and OpenERP Web 6.2 embeds
+ a restricted Python evaluator (in javascript) meaning most of the
+ context and domain parsing & evaluation can be moved to the
+ javascript code and does not require cooperative RPC bridging.
+
+DataGroup -> also Model
+-----------------------
+
+Alongside the deprecation of ``DataSet`` for
+:js:class:`~openerp.web.Model`, OpenERP Web 7.0 removes
+``DataGroup`` and its subtypes as public objects in favor of a single method on
+:js:class:`~openerp.web.Query`:
+:js:func:`~openerp.web.Query.group_by`.
+
+Migration guide
+~~~~~~~~~~~~~~~
+
+Rationale
+~~~~~~~~~
+
+While the ``DataGroup`` API worked (mostly), it is quite odd and
+alien-looking, a bit too Smalltalk-inspired (behaves like a
+self-contained flow-control structure for reasons which may or may not
+have been good).
+
+Because it is heavily related to ``DataSet`` (as it *yields*
+``DataSet`` objects), deprecating ``DataSet`` automatically deprecates
+``DataGroup`` (if we want to stay consistent), which is a good time to
+make the API more imperative and look more like what most developers
+are used to.
+
+But as ``DataGroup`` users in 6.1 were rare (and there really was little reason
+to use it), it has been removed as a public API.
+
+
diff --git a/web/doc/client_action.rst b/web/doc/client_action.rst
new file mode 100644
index 0000000..9b729e2
--- /dev/null
+++ b/web/doc/client_action.rst
@@ -0,0 +1,113 @@
+.. highlight:: javascript
+
+Client actions
+==============
+
+Client actions are the client-side version of OpenERP's "Server
+Actions": instead of allowing for semi-arbitrary code to be executed
+in the server, they allow for execution of client-customized code.
+
+On the server side, a client action is an action of type
+``ir.actions.client``, which has (at most) two properties: a mandatory
+``tag``, which is an arbitrary string by which the client will
+identify the action, and an optional ``params`` which is simply a map
+of keys and values sent to the client as-is (this way, client actions
+can be made generic and reused in multiple contexts).
+
+General Structure
+-----------------
+
+In the OpenERP Web code, a client action only requires two pieces of
+information:
+
+* Mapping the action's ``tag`` to an object
+
+* Providing said object. Two different types of objects can be mapped
+ to a client action:
+
+ * An OpenERP Web widget, which must inherit from
+ :js:class:`openerp.web.Widget`
+
+ * A regular javascript function
+
+The major difference is in the lifecycle of these:
+
+* if the client action maps to a function, the function will be called
+ when executing the action. The function can have no further
+ interaction with the Web Client itself, although it can return an
+ action which will be executed after it.
+
+ The function takes 2 parameters: the ActionManager calling it and
+ the descriptor for the current action (the ``ir.actions.client``
+ dictionary).
+
+* if, on the other hand, the client action maps to a
+ :js:class:`~openerp.web.Widget`, that
+ :js:class:`~openerp.web.Widget` will be instantiated and added to
+ the web client's canvas, with the usual
+ :js:class:`~openerp.web.Widget` lifecycle (essentially, it will
+ either take over the content area of the client or it will be
+ integrated within a dialog).
+
+For example, to create a client action displaying a ``res.widget``
+object::
+
+ // Registers the object 'openerp.web_dashboard.Widget' to the client
+ // action tag 'board.home.widgets'
+ instance.web.client_actions.add(
+ 'board.home.widgets', 'instance.web_dashboard.Widget');
+ instance.web_dashboard.Widget = instance.web.Widget.extend({
+ template: 'HomeWidget'
+ });
+
+At this point, the generic :js:class:`~openerp.web.Widget` lifecycle
+takes over, the template is rendered, inserted in the client DOM,
+bound on the object's ``$el`` property and the object is started.
+
+The second parameter to the constructor is the descriptor for the
+action itself, which contains any parameter provided::
+
+ init: function (parent, action) {
+ // execute the Widget's init
+ this._super(parent);
+ // board.home.widgets only takes a single param, the identifier of the
+ // res.widget object it should display. Store it for later
+ this.widget_id = action.params.widget_id;
+ }
+
+More complex initialization (DOM manipulations, RPC requests, ...)
+should be performed in the :js:func:`~openerp.web.Widget.start()`
+method.
+
+.. note::
+
+ As required by :js:class:`~openerp.web.Widget`'s contract, if
+ :js:func:`~openerp.web.Widget.start()` executes any asynchronous
+ code it should return a ``$.Deferred`` so callers know when it's
+ ready for interaction.
+
+.. code-block:: javascript
+
+ start: function () {
+ return $.when(
+ this._super(),
+ // Simply read the res.widget object this action should display
+ new instance.web.Model('res.widget').call(
+ 'read', [[this.widget_id], ['title']])
+ .then(this.proxy('on_widget_loaded'));
+ }
+
+The client action can then behave exactly as it wishes to within its
+root (``this.$el``). In this case, it performs further renderings once
+its widget's content is retrieved::
+
+ on_widget_loaded: function (widgets) {
+ var widget = widgets[0];
+ var url = _.sprintf(
+ '/web_dashboard/widgets/content?session_id=%s&widget_id=%d',
+ this.session.session_id, widget.id);
+ this.$el.html(QWeb.render('HomeWidget.content', {
+ widget: widget,
+ url: url
+ }));
+ }
diff --git a/web/doc/conf.py b/web/doc/conf.py
new file mode 100755
index 0000000..7fe3802
--- /dev/null
+++ b/web/doc/conf.py
@@ -0,0 +1,257 @@
+# -*- coding: utf-8 -*-
+#
+# OpenERP Technical Documentation configuration file, created by
+# sphinx-quickstart on Fri Feb 17 16:14:06 2012.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.append(os.path.abspath('_themes'))
+sys.path.insert(0, os.path.abspath('../addons'))
+sys.path.insert(0, os.path.abspath('..'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'OpenERP Web Developers Documentation'
+copyright = u'2012, OpenERP s.a.'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '7.0'
+# The full version, including alpha/beta/rc tags.
+release = '7.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = 'flask'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+html_theme_path = ['_themes']
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# " v documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+html_sidebars = {
+ 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'],
+ '**': ['sidebarlogo.html', 'localtoc.html', 'relations.html',
+ 'sourcelink.html', 'searchbox.html']
+}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'openerp-web-doc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+ ('index', 'openerp-web-doc.tex', u'OpenERP Web Developers Documentation',
+ u'OpenERP s.a.', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ ('index', 'openerp-web-doc', u'OpenERP Web Developers Documentation',
+ [u'OpenERP s.a.'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ ('index', 'OpenERPWebDocumentation', u'OpenERP Web Developers Documentation',
+ u'OpenERP s.a.', 'OpenERPWebDocumentation', 'Developers documentation for the openerp-web project.',
+ 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+todo_include_todos = True
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {
+ 'python': ('http://docs.python.org/', None),
+ 'openerpserver': ('http://doc.openerp.com/trunk/developers/server', None),
+ 'openerpcommand': ('http://doc.openerp.com/trunk/developers/command', None),
+}
diff --git a/web/doc/form_view.rst b/web/doc/form_view.rst
new file mode 100644
index 0000000..98d4a4d
--- /dev/null
+++ b/web/doc/form_view.rst
@@ -0,0 +1,55 @@
+Notes on the usage of the Form View as a sub-widget
+===================================================
+
+Undocumented stuff
+------------------
+
+* ``initial_mode`` *option* defines the starting mode of the form
+ view, one of ``view`` and ``edit`` (?). Default value is ``view``
+ (non-editable form).
+
+* ``embedded_view`` *attribute* has to be set separately when
+ providing a view directly, no option available for that usage.
+
+ * View arch **must** contain node with
+ ``@class="oe_form_container"``, otherwise everything will break
+ without any info
+
+ * Root element of view arch not being ``form`` may or may not work
+ correctly, no idea.
+
+ * Freeform views => ``@version="7.0"``
+
+* Form is not entirely loaded (some widgets may not appear) unless
+ ``on_record_loaded`` is called (or ``do_show``, which itself calls
+ ``on_record_loaded``).
+
+* "Empty" form => ``on_button_new`` (...), or manually call
+ ``default_get`` + ``on_record_loaded``
+
+* Form fields default to width: 100%, padding, !important margin, can
+ be reached via ``.oe_form_field``
+
+* Form *will* render buttons and a pager, offers options to locate
+ both outside of form itself (``$buttons`` and ``$pager``), providing
+ empty jquery objects (``$()``) seems to stop displaying both but not
+ sure if there are deleterious side-effects.
+
+ Other options:
+
+ * Pass in ``$(document.createDocumentFragment)`` to ensure it's a
+ DOM-compatible tree completely outside of the actual DOM.
+
+ * ???
+
+* readonly fields probably don't have a background, beware if need of
+ overlay
+
+ * What is the difference between ``readonly`` and
+ ``effective_readonly``?
+
+* No facilities for DOM events handling/delegations e.g. handling
+ keyup/keydown/keypress from a form fields into the form's user.
+
+ * Also no way to reverse from a DOM node (e.g. DOMEvent#target) back to a
+ form view field easily
diff --git a/web/doc/guidelines.rst b/web/doc/guidelines.rst
new file mode 100644
index 0000000..4cf494c
--- /dev/null
+++ b/web/doc/guidelines.rst
@@ -0,0 +1,77 @@
+Guidelines and Recommendations
+==============================
+
+Web Module Recommendations
+--------------------------
+
+Identifiers (``id`` attribute) should be avoided
+''''''''''''''''''''''''''''''''''''''''''''''''
+
+In generic applications and modules, ``@id`` limits the reusabily of
+components and tends to make code more brittle.
+
+Just about all the time, they can be replaced with nothing, with
+classes or with keeping a reference to a DOM node or a jQuery element
+around.
+
+.. note::
+
+ If it is *absolutely necessary* to have an ``@id`` (because a
+ third-party library requires one and can't take a DOM element), it
+ should be generated with `_.uniqueId
+ `_ or some other similar
+ method.
+
+Avoid predictable/common CSS class names
+''''''''''''''''''''''''''''''''''''''''
+
+Class names such as "content" or "navigation" might match the desired
+meaning/semantics, but it is likely an other developer will have the
+same need, creating a naming conflict and unintended behavior. Generic
+class names should be prefixed with e.g. the name of the component
+they belong to (creating "informal" namespaces, much as in C or
+Objective-C)
+
+Global selectors should be avoided
+''''''''''''''''''''''''''''''''''
+
+Because a component may be used several times in a single page (an
+example in OpenERP is dashboards), queries should be restricted to a
+given component's scope. Unfiltered selections such as ``$(selector)``
+or ``document.querySelectorAll(selector)`` will generally lead to
+unintended or incorrect behavior.
+
+OpenERP Web's :js:class:`~openerp.web.Widget` has an attribute
+providing its DOM root :js:attr:`Widget.$el `,
+and a shortcut to select nodes directly :js:attr:`Widget.$
+`.
+
+More generally, never assume your components own or controls anything
+beyond its own personal DOM.
+
+Understand deferreds
+''''''''''''''''''''
+
+Deferreds, promises, futures, …
+
+Known under many names, these objects are essential to and (in OpenERP
+Web) widely used for making :doc:`asynchronous javascript operations
+` palatable and understandable.
+
+OpenERP Web guidelines
+----------------------
+
+* HTML templating/rendering should use :doc:`qweb` unless absolutely
+ trivial.
+
+* All interactive components (components displaying information to the
+ screen or intercepting DOM events) must inherit from
+ :class:`~openerp.web.Widget` and correctly implement and use its API
+ and lifecycle.
+
+* All css classes must be prefixed with *oe_* .
+
+* Asynchronous functions (functions which call :ref:`session.rpc
+ ` directly or indirectly at the very least) *must* return
+ deferreds, so that callers of overriders can correctly synchronize
+ with them.
diff --git a/web/doc/images/._db-query.png b/web/doc/images/._db-query.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/._runner.png b/web/doc/images/._runner.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/._runner2.png b/web/doc/images/._runner2.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/._tests.png b/web/doc/images/._tests.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/._tests2.png b/web/doc/images/._tests2.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/._tests3.png b/web/doc/images/._tests3.png
new file mode 100644
index 0000000000000000000000000000000000000000..49a7a68dda8b3dcf718be8275dd408a96c2f6f65
GIT binary patch
literal 222
zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#LccS|+8L8Kk9JyXWVp=cL9|7#TQc
v6y@ipTDuvVIhz}}xahi=8@lM4m>aq3I$4++>l&JxI-8jrIGMN_nJ@qVFajf1
literal 0
HcmV?d00001
diff --git a/web/doc/images/db-query.png b/web/doc/images/db-query.png
new file mode 100644
index 0000000000000000000000000000000000000000..e063b724001871f3846ead587810069347a8eab6
GIT binary patch
literal 7142
zcmaJ^byU>Ny9WdWlw1_)bm>@0NhuLox;vH>7o;SlyE~R#kp=U=QC$QloVueama8`P*8AX-$|*Upr8gL#|SJmWN*zpJA{Hl
zUMwpmuI4iRCp9y%NSHX_TB`ApV)K))zqQy(h)9Bd-Q=?nW2*bL7!kYxqoV-`f9qmF
zwQ7nQC|TAA#I9AH=SCdtCm9-O9r5l7CA!2gBSHuyAawrG=Mh^HShNc`|Naw@0cia@
zq_AjtfD%{_bCzI#S%-Y}EabOkhx)(ay-cCa@LcO||w3
zw-17Un{V85uDrtaE@GxRv(tsX?+EthnEFW$W2+>4a7L*!EHNdEq9#-DFdVd0COSdj
z(7$!<89jpGm+%-PrcuBeocNkk=X7lS5dDWl%v^`5vcCHd0pmkA^{zd=bP4BVA!(TQGpC;T(@|%Ds=~e*YvUZ7-rEljGYl;GTnMKK#n-M6
zxEd3?MP543?p)@Uy0(A@{rA~oR!E86n;5;C<;W*7pKfuuF75Z+Z82w0eE2z4~&)-uvVdqe9I)(j)xcj7{jNLsrSXmBjr5t@eyoq|Ep7>
zyr^(l4H<6I9N{nP&l4UgD3`N`2|Jo!#x*j9Evu#Vb2pD-apxV?lLuxNO{hk#IMr`*
z=rMZg#j9(Zc53m^vs}bFEcd@QE?JlCuWJM(kX55f)TnQ#>lEaP;-+06q4e()_S6>|
zp2S`98FXR>ji1%0RVJDz8TU~5fLhAVtS&ylCs(af*7AxJWcG_6aeftM!dk`9c81vd
zR>CVkD$ci%4aKo>p?WJJZlCS|AS$k(F381H_o>n^BC7BkSf~h3d1R7Y5$!^WWW-XF
zOMPgn^7Y^-Q-7%UP`&VtUa4;PsHl?nx-)jwPjY)zGcnAG0}TWIWIppTr&~Srhd3n#
z9@x)xiF|bFg?S%+rHLjnFYaI<%L?kT`5@en20+0+omsf@Fakr?$O1;xg4Gz_y4A$*
z|HSQ1dW1bSmZv&Z)a#te>3wlOtBEvX_`OuK9`d7|%vwZMw@vgaigC0_HFa
z5!sknuC^2>XHsKaPaXZU%~|DyI&>qNnK)qK>r~1;UUXuFJF{c2C|8wZ^fJ~l#yN*C
zh2abY2(MC*k=0zphQKCe&ow`{i~B?Fw6^w9r`ZLuQp;ilFt=trRA%W
zaE*)NE(J0-Rgnb9h0^xvMq~U18BI|?8f(2LrJv5RF`w+m`ph~s$xg%iy5F{LSG-y4ny0O+FIT{rA~^-s#Sa@v06vX0Me=@~
zD|d~FwXR&K8QAUT_6rw`%vV#K9j83+nLF*K14o${bE__t#6+V#*n9ii#FAT5_
z-E2rOk91_88IUXrb(BA9O7>3Z#3*Ylo#E2NEFVI50TO$4wILGd|MKMn&1QlK|DjnV
z75_`U$k79v{vWIV5c9*f2V#C;@PC9)f|`!4$|#vzT||{Vg09dn(X=g?QN@`E+82MZ
zVfLB#VUa0SgjRG3Lu36=M&hsjParjArBRsXKkgAevmsocqSCV$Jg7mcPZ3g8V8`MGTEE&`l696-hvQ&&6ckTT9#RUz
zM_P&*6RtLg9CH|t9NX+p_$}^C^q&JM>eH>9o!vp^)y#9Q^{2$TsdBuqPf_$UUV4}C
zq1_ygH5ULYeMyHIX)2a$Y-JvPfXAm1<%`)#MXU1_PgTVejKh*e7nfQKCWx(!Qh20*
zjHC7@t-l}Bn;G1-uW`hHmUl#J@^Lb`Y*0<@ay&Edl0(^=e5#>bpCIDw?Npw4+L)l_
z4=OS1@3DOd@t&Mn4jaUw(67oUFOu@^4Z{096x`RY#8t-BwZ{Q~T!!-|O5>VPp;Nmp
z_v}_Jq6DzkQE%*(R-#P%=6IaE(*?m}$f@Sw-oOaqMm6H~5q#%`>?eY&RGVGxIh&a|
zQbR}S_b1w746+m?bN2BYnHkg`#9fn{d6$_#fO3*aP7v_YqD2avWqF
zyrXg@yBm
zE5SxHjN)>lyGktjpwZ^>t|x(EOK9^9z!WbX|K#Q{2#AR%`5o~#)3#%-MZo?9o_eFW
zd8QJvRW>Y;aS<13!YaJ(qb#7n(7_h|wXw9E>7WdKSLo`6jqxp4_%|jii@i_>tcgbg
zDW_q48Y!{w5k!8G&tMI&HzwFK^V2v|0ylS3*L31>)A-8VEaj-h+WCG&WLW@ASmci@
zxGxP8`IMa**-6qs>}9+_#LBc@xQ%m%*w9pQtA=Xs1Xgtu-U-ho&9EL%*_Y|I1jm0mm2mqKzHkw;=ap&rAs|f15>_)2j7$!H=T?F^H{xjpr>d
z7I3|d2zqGI99q&3@tri6?Pv?VoY|7Pi!Q
zshN0gI)(wV5|YY{!^3i$?N@kZ_J-BaZ&@_ZX~770#h{NQcL&tTc0vOXXd*tdNaPA1
z5CbnbJ*DtwWr!i<+vFWWXjjGI)j+Q>c7J*VTg9&Ff?NbaK%)pykO#QE&`!r82lxWq
zqC@QIt%@}9d+k^=1&=TcW%g+2!b!=?z7R0wzx`}`^C+ECkO>kiC0n>-HZ4c7RdDp%
zU)JEccE0s+*_Y|x&o;gyC^x*u*oBKyE9UT5cKE#+hIfM`=?XBnH*IalLoOjNa!$WW{J*#divvmLTcj`(2xEXmFqlDVRM
z^ZNN2-=Dxp`hl5nW~@63|P|MV|yLAGiyV9P!~B$An5wjPsvl5a6-IE6u22
z`d9m!2zM>umO>T^DK(F_B!6~?XE9*ce9F$)kMR0hAs3V*E8^!FYE?=vVtXXcV0-DY
zyBX{-w19V9Q=fT|X0!L%xy_=!jYyp%eIY+@3X2;E*jW@e%^*C1Q-^2y-8n?xW6%8r
zE?ly|NZ{h&_yQBDLd0&Vm(}|TE!R@lL}Dk}1G!i9X45ywpX>#MCsB1iFDff13-S9|YJbRIj+s4LFD@@|W11+@Dil#Kdzxo~Iuqay~&mlWxAxYU1vW
z8koO~@rok$gyEtz!;m-D-wyKdjC$z8v5|xSbX-8>-$VDmNaM)U`{{+uI;W==|U2%3%F7WMs25(OjN{p$LPAAYkvfe2V}#Ve>D
z)nnm2eQb*cL8GEwD7)vnm5z+V_dM)97rh{*7<7Gy)S==vg+qcgu9i*{aO9yI8EqTA
z?{Pe{a6j(6=#nd0$j+P8BX?`Ys)w{{F?4n-+8XC_?{<#*=HM27bJMyF`HwaKt?67~
z^@9Xn6!lvBe&8TSvjgo|Vv5{a&RzL44wM%Fln(TV<_$tM0vmyyet$ZGeRi8F(RbX?)evUFHh~n1W%vfCVLu{NC;e7D_LonMKed0cHyv
zBC<-KkmmsxoyY+@Wg9uIe2GDQ2r@wG_Rv69tawAGn$$4B-szUub(%Uw`q_c9Vfe8P
z6ZRR;Sf6_LsQ&~P>e)@&)`h#x=ff2r{j>uLxeeQk?uLwKk;6TFtKL0Fl_+XqiqI?-n!fBg2H8n*+
z?VfsO8{VGvhe3Ru~`s
zBI$64sRiiPQ)Q)ShFz7EMW*3na9!j`pxlCWg4qRwY@C3sYK6egBnb%EN}(UYd@Qmm
z!w~vQDWIjhvaYE7cf1q>GYKj;GL&4onxqt*?EaML!RJWdKHN7g~gV8e>;$D3dR2eBuE-UDd(WzCx;?Yg=
zc?T#ARNu9zxQ!i(>P;SY+8a?SE>fFPDQY+V4WeBw_DIJNjmh{N3^V;iJP}_kse3UY
zZzIm?OHh#Lq`zLk+-0t%yGEoK7ex_{jci*^q$5;_6h1}m`d`m8^OI}J>39@5p+18aI+5jc6V=3RZZ{M9s8%%Qr=O?~!h1xS083m~
zsmpZJXj2Kg9Ehd!lsTg^t!uGezcHAAT}N$bS(<>bQkdwp@NQuweeDyYeyFN)%0kp5
z=0QbKnNMO25X8bLPNLWy1*RtAras~_c|&HPI?X}jhZMLuW#Ri}1dITXKVSb7U~N~gTCINqyfU-+^LCr
z-c0^S2CdB>sm(+J>TWf;
z0!U%5JeYYe1+RL{ri6EmT!kc&VC%H4WTcf=uKf!e(^`%4tkKO2rj@DuE#c8Ob=q2=
zCux9f=oMjG4W
z2yQ03NtzVUFL?=kh{lMpNxiTG4|}fCAkm+@>6cr1NkPRmo49tKW}{M1MCOh?<{&uV
zzS}T%^uL5@Rwq0keWh`#z~?HI5<%80x%T_W-Lw94U-9g%J3teRw6h+mpVQ>Js(fIBENX!NayVVNa0ZU$irwD|gQBxPvanv(hG0V^KodUU`l
zCul`>bkhOE$toj%ijCc(%DMr&iy!H_Ka47irF^$%OF9}RUC4MOCHbsioV(~~(!JPU
z&FQ<%My##GLn=ky|Iz8?!Y0|^^$9wXV&T5*(G9DU>-;#;Nn4eD$Ty{}{RW?-F~M3l
zMf&Rm{N=*m+H&*PArb#9uetBuYk%Dv7bC2knp|$<`0jMv{(Q=yT73K@Ny;??DhyJe
zPPb$o`B>hnuVLOTF_9Wc`7a<;*B{Jj_K+17^k6mW(nd|H6eQ&
z=drXR^~DBgAL
z4EuQVv$O7ZH`=$7s|2r=@b*y_8#YoyWGj!BT7&p)=NsKGhn?ma6*F!Q#=1;jOX0=0
zuF0+z2%@|JlZ48aIG2=`!o|F(q?HrR=#muSqPLd>{P?&%rmt6Tug^;j5uRs%l7$n5
zjURi}IE#seq@lj(TtHaN-5a%E+qmtX&1O+Kji}y=w_rIXRmy8bjCFk5GLFlAJknO1
zB0ZO%&9Pf34>e}T!s70V#L^;9ndF3g1vNdbmv?g!)#j%^5Ow(SYF~&mD>yWS`s+yD
zOnbXD4;d~x+Lq(h;0*2d!NJh}`Cxy)-S_15;Lt5#yHqM02S=bprbMPv>BOLIfv3Vd
zjwEtQ%9n`;a)ipD%q*uIFp&Gzt6wL(tE<@>MPoZR4IMpsss)wmC11oPs&uNLLWd9&
zOUvL-#rz@pFhN#ep{cR4v8SgfeDE3j4zx}WTA*%S^{c4)OD@#tb87(~)N9&-|Hl%Q
z-~#R}uL#^iH)~*EK)~&+eQTbyLIRo7r{@$1_PQK`1*O)h3PiTPS@-kzeq(~YL9Am%
zqzn={7L8gdl8kxBkPKFNi9ynCS~uU;5m9%%JE$>pyeI+@b=#$yC6Br#d!nNLThp~D
zXOnLA;sTaJpZG~3b1DsKkTr;x3^y^++`^)+-s+t2 Gw
z&KLKE*(H7M#(1{6KhKK-+~|dYB@m#@fuS~OB*!D!sz#c<-*Su)`nb5Q^foZCn^T@*s{8)3Fnwq-1yZ!w9ir$+{
zb=j4f$43N&ABqeLLJ#x4Go9`wrfGF;gta|sFeKN2Wpt$NOrJ{q8673g8+sP^pn(_2
zCmGnfBt<9wQu%GdbDI)%mg`5vgOA~qTF)A_;Y&66Sz>mLRA){e<@4@#%za@Vzo}U!
z2&HMt{2g$LK@X{|W$i2+IypJ%>A|rE#}l4kr|Kr_@vbgYpTnwU44Z_VYM9$Qr#KGE
z*QY(sf@{!vyNhTSA4!1{boKRLB3&s#x)Ne?6k0r;nwr|$+Bz$grRwqyWr4o#ikjl<
z>bzOSLdFWdZSb;0h}JJsCuTa9+{n+K4#jOGYcPj0lYSF|(#qR4RLSYir*&=tOlTo5
z^^OGypQ)K!Vt(ZJYEFQc)@~z!LD@zclLP
z{QR+>cw*Y5Z(CK=Il5>c0p_bTf^S%(9H@lPMxgM{wn}T{XKrr(=~MJ$?o;IF))7Sd
zS6h5Zf|MF~e;qrKO>L&Szy9>@PL!N}CF9UIkSlu0-%?+8Ri*vJ27ZbA{6})IzRTZz
zyH5!SZxe`-#S{{p50jE=XQ2CLLPUtnN^qzwQXLEMe_87C(gD-a-Q)ke=yJw?|2*O-
U?IK$f`NBkzl~#}{kudW8FIjHf#{d8T
literal 0
HcmV?d00001
diff --git a/web/doc/images/runner.png b/web/doc/images/runner.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd48e9d29221767295afe05d2722ff332c93ab00
GIT binary patch
literal 3963
zcmb_fc{~(e*Ov$p!VIRYBWlEqCHvM`LNT@>yJ4)6k|={h2w8^^(a*lj7)HjvWy{!0
zipV}vhHNp}9(vyQ`Q!P#f4={mdq3ygd+xdCe9t-e#+Vr2ICmCwmX40@oPoZM86Djz
z_TzatGyO4D8mn5QqvL=Z=v=pWG_mq}&D`7y)RViMbtuIp{-lk5aKZkG5>}D4t!wBW
z5@!F?KW}Q>CmSH5Kl@Uk=W9X=)p9<(w5D__-uQyvi*9E5x96nWjlXk>$vB9xumpwW
z8TtIi3>kgU@(0-vudZ(LGv#7JC$rZ2X_V{-*vaS(whoI^wvnhW5Vj6W6d&nqMwL1=s!(b
zUtc#bHl}{9<)9al8-leCLT+cPJ^J;AKp^DjgMo4C!Jx1<+uFM|wY9k#As`t-Pllrl
z;6*_kFEk)9aAcW`hJ
z>*p?=+3zMBr~C4Qc4LYD!Rn!t^Zkwts_>t_G={vNqBc00vNGq7d6&t@H`rt3%yG|v
z;KMIrWHUQINb<3XbFttMunY=?0xMe$tG@%~5@@;ymbo_ho8EMOq!S*1LW%4#0LM%*
zjpYdw72n|gHRV+m)E{LN7Mxb9D*m+-a>bHgp_7u~e14TA3x*_?swB4ACKps$%~_zx
z$B!RxBnrNM_39n$6`&1b@Oszjv}vMd!tk`s4gUpI{P48hXEi0MAJGd@uQ%QTw=`<2
zm-c%#le-^;4oyCf~jTE9axb~`GTLax2bWC
zTFlNwinf+vlJRbi#Ke5v%-)JR!@!#T&4_1&WDt|v+k4%g4MvqCW+oh2)TU`j^c>Hb
z)m)|z<@$DwO0Z=8;^H%)ky%hsr%J79x$oJBErU@$_!cDIH#>qGx1?9(HoVj=*c5e0
z80Lr0J??q#@L}@F>2u)Z%o?i1pP28Ho!%-kfXqxIz!ifClrS(wam`Eqt$i;}
zL^-5)yS75wN8s~AR~2miK>~?RJE{JU@oAtFGnpXys;ee+-dNNtn7Vzix09drt>u~5
z(w*mQzO6??Ybkdo!0fT)^lwKC4Jp=)1=oeq&IpcUkL|Q)JnV;Xb8|O0H)FBb27|3g
zjbTe#^`UrPzRPl_lj?Z^A>%i8JfJhW8Nc$IRKuL=ve=mA_os}a0*>JP9y_ultfW?s
zL>dQY&7M0DxaxrcFnAEC$T5=dyT=DCR4q{u5MoWZsU?!=Xp1!?lPai-FrWrsGo
z3J2-30`R{&_0^OgpUMjLQV}PM$?MS3n_=4pwM^inA85;aJH<@HU8`~VxUX8&u)499
z#*yKK->&Gx1594TY3$q##a0Juc$(kzyj9BX=JsbBq~8Kxa(i)V?Ty6&f-i(wFJab<
zOWK5;0WRJNmwmSBaBP$S3^%X2I}_2D4s{{WV`f^)eviaDd4_s0C9A2_GOR`(>FYEO
z^+N|OL~}+7N%3oEsf1BE*_=XnB)X%fobc{c&i^H_dP<5@8%`^
z!vMLlD6U=8@U^#`;=w+869msUNW-hAnGzk%pQy%YvN$ood(V(vuKS0%l0cpPQ@xp+GR
z@rx0LGdMndby!@T*T+Gpt*Y415NBTDuKBVW*iAE-HuPSv7*&RM#!j`dQD|0e>ax!NI
zCuY#_tyb;Cg+6HO{;v)W4gr;CLKQ1hjXNB+7xkZVz7M;sAEA|l$cU!_#1tC8z+Bca
zn-rs9eZ_|V6#Q?wunYTNgPs~y?&^+?o#7H@@Y`*Hbs)U|yQ!4J{*O*`%sg&F|J8oV
zy`?`bAt;^i*=!3Z_ItDWGHFMZWJ5?%NzktR!im5;t!5!l0lds-WF~(h?N*m|{AU7m9nCh!VSV
z3A?@2zfDEeWSuxg8&AyLkUN^ECEWs)y7z+0Khp5Utwo!ZBG^*Dv}B
zpZTM6YW{Zb!qtA*INgs0r?Xu|Yey2k4FYU#o?1@9i^|i?vXV4ut5jRzWIkWTB&wsx
z0Su`-Z6@m4{E{22d0^Qd40mmlLk>zwq9jhqUH#{6(g@%eGx&=cE&HR6Wo`;D!zJ!^
zML|N(&oo>8=>c9hz?CH4XRoCi2E39r`A2f1)I*jqx#0M*mXQUQjMdV7%dOGblNcCQ
zu5xV}oa($>>et~6c1jW0bu`;lPLF)LkP?sXes}AQN{vy>z+!-B-IQSM*9(S#9Y~i?
z2>A|A<34Bsq4(^i(~`TRZiOdHDhHxaGIJT1-_Zg;cO0&AwNT6UTX5Gm1>_cy@mut9
zlHnbxL&ho!LhP)TRUUGP)%#zAuoofIw3$jE4XZ0s-vZc(xN$M}&;5{CULRb}ZK(~3xOd{M
z4oZ_!XC)0hVw`jb(Z(hRp|R*u@pIct%^C@|qOK7l7gF`7|EUW(1r3lv
zM^udp)8|h~g31IhfWD+nEFgeVS;5auH1n3sDs+