summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorVidhin Mehta (OpenERP) <vme@tinyerp.com>2011-09-14 11:07:46 +0530
committerVidhin Mehta (OpenERP) <vme@tinyerp.com>2011-09-14 11:07:46 +0530
commitb6076c3cc3ca5141349b99821268b8fd5e148b77 (patch)
treebb875d3ef5127cf5b8c35de6475de14e5477dbbd /addons
parent243e1bdb0079ea9f214696ead8228d464ecb2cfc (diff)
parentc7c2b5846d3775780bbaa9a84a93ad755bdb8756 (diff)
[Merge] upto revno 1024.
bzr revid: vme@tinyerp.com-20110914053746-ri6d5s341mm6tc7n
Diffstat (limited to 'addons')
-rw-r--r--addons/base/__init__.py6
-rw-r--r--addons/base/static/src/js/data_export.js402
-rw-r--r--addons/base/static/test/formats.js54
-rw-r--r--addons/base/static/test/registry.js33
-rw-r--r--addons/base/static/test/test.html53
-rw-r--r--addons/base_calendar/__init__.py2
-rw-r--r--addons/base_diagram/__openerp__.py6
-rw-r--r--addons/base_diagram/static/src/js/diagram.js183
-rw-r--r--addons/web/__init__.py32
-rw-r--r--addons/web/__openerp__.py (renamed from addons/base/__openerp__.py)4
-rw-r--r--addons/web/common/__init__.py (renamed from addons/base/common/__init__.py)1
-rw-r--r--addons/web/common/ast.py (renamed from addons/base/common/ast.py)0
-rw-r--r--addons/web/common/backendlocal.py (renamed from addons/base/common/backendlocal.py)0
-rw-r--r--addons/web/common/backendrpc.py (renamed from addons/base/common/backendrpc.py)0
-rw-r--r--addons/web/common/dates.py (renamed from addons/base/common/dates.py)0
-rw-r--r--addons/web/common/dispatch.py (renamed from addons/base/common/dispatch.py)36
-rw-r--r--addons/web/common/http.py (renamed from addons/base/common/http.py)0
-rw-r--r--addons/web/common/nonliterals.py (renamed from addons/base/common/nonliterals.py)0
-rw-r--r--addons/web/common/release.py10
-rw-r--r--addons/web/controllers/__init__.py1
-rw-r--r--addons/web/controllers/main.py (renamed from addons/base/controllers/main.py)650
-rw-r--r--addons/web/po/base.pot (renamed from addons/base/po/base.pot)0
-rw-r--r--addons/web/po/fr_FR.po (renamed from addons/base/po/fr_FR.po)0
-rw-r--r--addons/web/po/web.pot574
-rw-r--r--addons/web/static/lib/datejs/core.js (renamed from addons/base/static/lib/datejs/core.js)0
-rw-r--r--addons/web/static/lib/datejs/date.js (renamed from addons/base/static/lib/datejs/date.js)0
-rw-r--r--addons/web/static/lib/datejs/extras.js (renamed from addons/base/static/lib/datejs/extras.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/af-ZA.js (renamed from addons/base/static/lib/datejs/globalization/af-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-AE.js (renamed from addons/base/static/lib/datejs/globalization/ar-AE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-BH.js (renamed from addons/base/static/lib/datejs/globalization/ar-BH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-DZ.js (renamed from addons/base/static/lib/datejs/globalization/ar-DZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-EG.js (renamed from addons/base/static/lib/datejs/globalization/ar-EG.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-IQ.js (renamed from addons/base/static/lib/datejs/globalization/ar-IQ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-JO.js (renamed from addons/base/static/lib/datejs/globalization/ar-JO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-KW.js (renamed from addons/base/static/lib/datejs/globalization/ar-KW.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-LB.js (renamed from addons/base/static/lib/datejs/globalization/ar-LB.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-LY.js (renamed from addons/base/static/lib/datejs/globalization/ar-LY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-MA.js (renamed from addons/base/static/lib/datejs/globalization/ar-MA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-OM.js (renamed from addons/base/static/lib/datejs/globalization/ar-OM.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-QA.js (renamed from addons/base/static/lib/datejs/globalization/ar-QA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-SA.js (renamed from addons/base/static/lib/datejs/globalization/ar-SA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-SY.js (renamed from addons/base/static/lib/datejs/globalization/ar-SY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-TN.js (renamed from addons/base/static/lib/datejs/globalization/ar-TN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ar-YE.js (renamed from addons/base/static/lib/datejs/globalization/ar-YE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/az-Cyrl-AZ.js (renamed from addons/base/static/lib/datejs/globalization/az-Cyrl-AZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/az-Latn-AZ.js (renamed from addons/base/static/lib/datejs/globalization/az-Latn-AZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/be-BY.js (renamed from addons/base/static/lib/datejs/globalization/be-BY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/bg-BG.js (renamed from addons/base/static/lib/datejs/globalization/bg-BG.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/bs-Latn-BA.js (renamed from addons/base/static/lib/datejs/globalization/bs-Latn-BA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ca-ES.js (renamed from addons/base/static/lib/datejs/globalization/ca-ES.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/cs-CZ.js (renamed from addons/base/static/lib/datejs/globalization/cs-CZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/cy-GB.js (renamed from addons/base/static/lib/datejs/globalization/cy-GB.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/da-DK.js (renamed from addons/base/static/lib/datejs/globalization/da-DK.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/de-AT.js (renamed from addons/base/static/lib/datejs/globalization/de-AT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/de-CH.js (renamed from addons/base/static/lib/datejs/globalization/de-CH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/de-DE.js (renamed from addons/base/static/lib/datejs/globalization/de-DE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/de-LI.js (renamed from addons/base/static/lib/datejs/globalization/de-LI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/de-LU.js (renamed from addons/base/static/lib/datejs/globalization/de-LU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/dv-MV.js (renamed from addons/base/static/lib/datejs/globalization/dv-MV.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/el-GR.js (renamed from addons/base/static/lib/datejs/globalization/el-GR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-029.js (renamed from addons/base/static/lib/datejs/globalization/en-029.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-AU.js (renamed from addons/base/static/lib/datejs/globalization/en-AU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-BZ.js (renamed from addons/base/static/lib/datejs/globalization/en-BZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-CA.js (renamed from addons/base/static/lib/datejs/globalization/en-CA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-GB.js (renamed from addons/base/static/lib/datejs/globalization/en-GB.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-IE.js (renamed from addons/base/static/lib/datejs/globalization/en-IE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-JM.js (renamed from addons/base/static/lib/datejs/globalization/en-JM.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-NZ.js (renamed from addons/base/static/lib/datejs/globalization/en-NZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-PH.js (renamed from addons/base/static/lib/datejs/globalization/en-PH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-TT.js (renamed from addons/base/static/lib/datejs/globalization/en-TT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-US.js (renamed from addons/base/static/lib/datejs/globalization/en-US.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-ZA.js (renamed from addons/base/static/lib/datejs/globalization/en-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/en-ZW.js (renamed from addons/base/static/lib/datejs/globalization/en-ZW.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-AR.js (renamed from addons/base/static/lib/datejs/globalization/es-AR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-BO.js (renamed from addons/base/static/lib/datejs/globalization/es-BO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-CL.js (renamed from addons/base/static/lib/datejs/globalization/es-CL.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-CO.js (renamed from addons/base/static/lib/datejs/globalization/es-CO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-CR.js (renamed from addons/base/static/lib/datejs/globalization/es-CR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-DO.js (renamed from addons/base/static/lib/datejs/globalization/es-DO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-EC.js (renamed from addons/base/static/lib/datejs/globalization/es-EC.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-ES.js (renamed from addons/base/static/lib/datejs/globalization/es-ES.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-GT.js (renamed from addons/base/static/lib/datejs/globalization/es-GT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-HN.js (renamed from addons/base/static/lib/datejs/globalization/es-HN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-MX.js (renamed from addons/base/static/lib/datejs/globalization/es-MX.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-NI.js (renamed from addons/base/static/lib/datejs/globalization/es-NI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-PA.js (renamed from addons/base/static/lib/datejs/globalization/es-PA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-PE.js (renamed from addons/base/static/lib/datejs/globalization/es-PE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-PR.js (renamed from addons/base/static/lib/datejs/globalization/es-PR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-PY.js (renamed from addons/base/static/lib/datejs/globalization/es-PY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-SV.js (renamed from addons/base/static/lib/datejs/globalization/es-SV.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-UY.js (renamed from addons/base/static/lib/datejs/globalization/es-UY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/es-VE.js (renamed from addons/base/static/lib/datejs/globalization/es-VE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/et-EE.js (renamed from addons/base/static/lib/datejs/globalization/et-EE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/eu-ES.js (renamed from addons/base/static/lib/datejs/globalization/eu-ES.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fa-IR.js (renamed from addons/base/static/lib/datejs/globalization/fa-IR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fi-FI.js (renamed from addons/base/static/lib/datejs/globalization/fi-FI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fo-FO.js (renamed from addons/base/static/lib/datejs/globalization/fo-FO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-BE.js (renamed from addons/base/static/lib/datejs/globalization/fr-BE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-CA.js (renamed from addons/base/static/lib/datejs/globalization/fr-CA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-CH.js (renamed from addons/base/static/lib/datejs/globalization/fr-CH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-FR.js (renamed from addons/base/static/lib/datejs/globalization/fr-FR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-LU.js (renamed from addons/base/static/lib/datejs/globalization/fr-LU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/fr-MC.js (renamed from addons/base/static/lib/datejs/globalization/fr-MC.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/gl-ES.js (renamed from addons/base/static/lib/datejs/globalization/gl-ES.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/gu-IN.js (renamed from addons/base/static/lib/datejs/globalization/gu-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/he-IL.js (renamed from addons/base/static/lib/datejs/globalization/he-IL.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/hi-IN.js (renamed from addons/base/static/lib/datejs/globalization/hi-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/hr-BA.js (renamed from addons/base/static/lib/datejs/globalization/hr-BA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/hr-HR.js (renamed from addons/base/static/lib/datejs/globalization/hr-HR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/hu-HU.js (renamed from addons/base/static/lib/datejs/globalization/hu-HU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/hy-AM.js (renamed from addons/base/static/lib/datejs/globalization/hy-AM.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/id-ID.js (renamed from addons/base/static/lib/datejs/globalization/id-ID.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/is-IS.js (renamed from addons/base/static/lib/datejs/globalization/is-IS.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/it-CH.js (renamed from addons/base/static/lib/datejs/globalization/it-CH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/it-IT.js (renamed from addons/base/static/lib/datejs/globalization/it-IT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ja-JP.js (renamed from addons/base/static/lib/datejs/globalization/ja-JP.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ka-GE.js (renamed from addons/base/static/lib/datejs/globalization/ka-GE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/kk-KZ.js (renamed from addons/base/static/lib/datejs/globalization/kk-KZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/kn-IN.js (renamed from addons/base/static/lib/datejs/globalization/kn-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ko-KR.js (renamed from addons/base/static/lib/datejs/globalization/ko-KR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/kok-IN.js (renamed from addons/base/static/lib/datejs/globalization/kok-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ky-KG.js (renamed from addons/base/static/lib/datejs/globalization/ky-KG.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/lt-LT.js (renamed from addons/base/static/lib/datejs/globalization/lt-LT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/lv-LV.js (renamed from addons/base/static/lib/datejs/globalization/lv-LV.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/mi-NZ.js (renamed from addons/base/static/lib/datejs/globalization/mi-NZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/mk-MK.js (renamed from addons/base/static/lib/datejs/globalization/mk-MK.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/mn-MN.js (renamed from addons/base/static/lib/datejs/globalization/mn-MN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/mr-IN.js (renamed from addons/base/static/lib/datejs/globalization/mr-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ms-BN.js (renamed from addons/base/static/lib/datejs/globalization/ms-BN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ms-MY.js (renamed from addons/base/static/lib/datejs/globalization/ms-MY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/mt-MT.js (renamed from addons/base/static/lib/datejs/globalization/mt-MT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/nb-NO.js (renamed from addons/base/static/lib/datejs/globalization/nb-NO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/nl-BE.js (renamed from addons/base/static/lib/datejs/globalization/nl-BE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/nl-NL.js (renamed from addons/base/static/lib/datejs/globalization/nl-NL.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/nn-NO.js (renamed from addons/base/static/lib/datejs/globalization/nn-NO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ns-ZA.js (renamed from addons/base/static/lib/datejs/globalization/ns-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/pa-IN.js (renamed from addons/base/static/lib/datejs/globalization/pa-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/pl-PL.js (renamed from addons/base/static/lib/datejs/globalization/pl-PL.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/pt-BR.js (renamed from addons/base/static/lib/datejs/globalization/pt-BR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/pt-PT.js (renamed from addons/base/static/lib/datejs/globalization/pt-PT.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/quz-BO.js (renamed from addons/base/static/lib/datejs/globalization/quz-BO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/quz-EC.js (renamed from addons/base/static/lib/datejs/globalization/quz-EC.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/quz-PE.js (renamed from addons/base/static/lib/datejs/globalization/quz-PE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ro-RO.js (renamed from addons/base/static/lib/datejs/globalization/ro-RO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ru-RU.js (renamed from addons/base/static/lib/datejs/globalization/ru-RU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sa-IN.js (renamed from addons/base/static/lib/datejs/globalization/sa-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/se-FI.js (renamed from addons/base/static/lib/datejs/globalization/se-FI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/se-NO.js (renamed from addons/base/static/lib/datejs/globalization/se-NO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/se-SE.js (renamed from addons/base/static/lib/datejs/globalization/se-SE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sk-SK.js (renamed from addons/base/static/lib/datejs/globalization/sk-SK.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sl-SI.js (renamed from addons/base/static/lib/datejs/globalization/sl-SI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sma-NO.js (renamed from addons/base/static/lib/datejs/globalization/sma-NO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sma-SE.js (renamed from addons/base/static/lib/datejs/globalization/sma-SE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/smj-NO.js (renamed from addons/base/static/lib/datejs/globalization/smj-NO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/smj-SE.js (renamed from addons/base/static/lib/datejs/globalization/smj-SE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/smn-FI.js (renamed from addons/base/static/lib/datejs/globalization/smn-FI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sms-FI.js (renamed from addons/base/static/lib/datejs/globalization/sms-FI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sq-AL.js (renamed from addons/base/static/lib/datejs/globalization/sq-AL.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sr-Cyrl-BA.js (renamed from addons/base/static/lib/datejs/globalization/sr-Cyrl-BA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sr-Cyrl-CS.js (renamed from addons/base/static/lib/datejs/globalization/sr-Cyrl-CS.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sr-Latn-BA.js (renamed from addons/base/static/lib/datejs/globalization/sr-Latn-BA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sr-Latn-CS.js (renamed from addons/base/static/lib/datejs/globalization/sr-Latn-CS.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sv-FI.js (renamed from addons/base/static/lib/datejs/globalization/sv-FI.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sv-SE.js (renamed from addons/base/static/lib/datejs/globalization/sv-SE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/sw-KE.js (renamed from addons/base/static/lib/datejs/globalization/sw-KE.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/syr-SY.js (renamed from addons/base/static/lib/datejs/globalization/syr-SY.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ta-IN.js (renamed from addons/base/static/lib/datejs/globalization/ta-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/te-IN.js (renamed from addons/base/static/lib/datejs/globalization/te-IN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/th-TH.js (renamed from addons/base/static/lib/datejs/globalization/th-TH.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/tn-ZA.js (renamed from addons/base/static/lib/datejs/globalization/tn-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/tr-TR.js (renamed from addons/base/static/lib/datejs/globalization/tr-TR.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/tt-RU.js (renamed from addons/base/static/lib/datejs/globalization/tt-RU.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/uk-UA.js (renamed from addons/base/static/lib/datejs/globalization/uk-UA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/ur-PK.js (renamed from addons/base/static/lib/datejs/globalization/ur-PK.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/uz-Cyrl-UZ.js (renamed from addons/base/static/lib/datejs/globalization/uz-Cyrl-UZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/uz-Latn-UZ.js (renamed from addons/base/static/lib/datejs/globalization/uz-Latn-UZ.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/vi-VN.js (renamed from addons/base/static/lib/datejs/globalization/vi-VN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/xh-ZA.js (renamed from addons/base/static/lib/datejs/globalization/xh-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zh-CN.js (renamed from addons/base/static/lib/datejs/globalization/zh-CN.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zh-HK.js (renamed from addons/base/static/lib/datejs/globalization/zh-HK.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zh-MO.js (renamed from addons/base/static/lib/datejs/globalization/zh-MO.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zh-SG.js (renamed from addons/base/static/lib/datejs/globalization/zh-SG.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zh-TW.js (renamed from addons/base/static/lib/datejs/globalization/zh-TW.js)0
-rw-r--r--addons/web/static/lib/datejs/globalization/zu-ZA.js (renamed from addons/base/static/lib/datejs/globalization/zu-ZA.js)0
-rw-r--r--addons/web/static/lib/datejs/parser.js (renamed from addons/base/static/lib/datejs/parser.js)0
-rw-r--r--addons/web/static/lib/datejs/sugarpak.js (renamed from addons/base/static/lib/datejs/sugarpak.js)0
-rw-r--r--addons/web/static/lib/datejs/time.js (renamed from addons/base/static/lib/datejs/time.js)0
-rw-r--r--addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js (renamed from addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.js)0
-rw-r--r--addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js (renamed from addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js)0
-rw-r--r--addons/web/static/lib/jquery.blockUI/jquery.blockUI.js (renamed from addons/base/static/lib/jquery.blockUI/jquery.blockUI.js)0
-rw-r--r--addons/web/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js (renamed from addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js)0
-rw-r--r--addons/web/static/lib/jquery.form/jquery.form.js (renamed from addons/base/static/lib/jquery.form/jquery.form.js)0
-rw-r--r--addons/web/static/lib/jquery.superfish/changelog.txt (renamed from addons/base/static/lib/jquery.superfish/changelog.txt)0
-rw-r--r--addons/web/static/lib/jquery.superfish/css/superfish-navbar.css (renamed from addons/base/static/lib/jquery.superfish/css/superfish-navbar.css)0
-rw-r--r--addons/web/static/lib/jquery.superfish/css/superfish-vertical.css (renamed from addons/base/static/lib/jquery.superfish/css/superfish-vertical.css)0
-rw-r--r--addons/web/static/lib/jquery.superfish/css/superfish.css (renamed from addons/base/static/lib/jquery.superfish/css/superfish.css)0
-rw-r--r--addons/web/static/lib/jquery.superfish/example.html (renamed from addons/base/static/lib/jquery.superfish/example.html)0
-rw-r--r--addons/web/static/lib/jquery.superfish/images/arrows-ffffff.png (renamed from addons/base/static/lib/jquery.superfish/images/arrows-ffffff.png)bin244 -> 244 bytes
-rw-r--r--addons/web/static/lib/jquery.superfish/images/shadow.png (renamed from addons/base/static/lib/jquery.superfish/images/shadow.png)bin1698 -> 1698 bytes
-rw-r--r--addons/web/static/lib/jquery.superfish/js/hoverIntent.js (renamed from addons/base/static/lib/jquery.superfish/js/hoverIntent.js)0
-rw-r--r--addons/web/static/lib/jquery.superfish/js/jquery-1.2.6.min.js (renamed from addons/base/static/lib/jquery.superfish/js/jquery-1.2.6.min.js)0
-rw-r--r--addons/web/static/lib/jquery.superfish/js/jquery.bgiframe.min.js (renamed from addons/base/static/lib/jquery.superfish/js/jquery.bgiframe.min.js)0
-rw-r--r--addons/web/static/lib/jquery.superfish/js/superfish.js (renamed from addons/base/static/lib/jquery.superfish/js/superfish.js)0
-rw-r--r--addons/web/static/lib/jquery.superfish/js/supersubs.js (renamed from addons/base/static/lib/jquery.superfish/js/supersubs.js)0
-rw-r--r--addons/web/static/lib/jquery.ui.notify/css/ui.notify.css (renamed from addons/base/static/lib/jquery.ui.notify/css/ui.notify.css)0
-rw-r--r--addons/web/static/lib/jquery.ui.notify/js/jquery.notify.js (renamed from addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js)0
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png)bin180 -> 180 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png)bin178 -> 178 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png)bin120 -> 120 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png)bin105 -> 105 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png)bin111 -> 111 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png)bin110 -> 110 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png)bin119 -> 119 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png)bin101 -> 101 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png (renamed from addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png)bin4369 -> 4369 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css (renamed from addons/base/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css)0
-rw-r--r--addons/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js (renamed from addons/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js)0
-rw-r--r--addons/web/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js (renamed from addons/base/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js)0
-rw-r--r--addons/web/static/lib/jquery.validate/jquery.validate.js (renamed from addons/base/static/lib/jquery.validate/jquery.validate.js)0
-rw-r--r--addons/web/static/lib/jquery/jquery-1.6.2.js (renamed from addons/base/static/lib/jquery/jquery-1.6.2.js)0
-rwxr-xr-xaddons/web/static/lib/json/json2.js (renamed from addons/base/static/lib/json/json2.js)0
-rw-r--r--addons/web/static/lib/labjs/LAB.src.js (renamed from addons/base/static/lib/labjs/LAB.src.js)0
-rw-r--r--addons/web/static/lib/qunit/qunit-2011-23-22.css (renamed from addons/base/static/lib/qunit/qunit-2011-23-22.css)0
-rw-r--r--addons/web/static/lib/qunit/qunit-2011-23-22.js (renamed from addons/base/static/lib/qunit/qunit-2011-23-22.js)0
-rw-r--r--addons/web/static/lib/qweb/qweb-benchmark.html (renamed from addons/base/static/lib/qweb/qweb-benchmark.html)0
-rw-r--r--addons/web/static/lib/qweb/qweb-benchmark.xml (renamed from addons/base/static/lib/qweb/qweb-benchmark.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-attributes.xml (renamed from addons/base/static/lib/qweb/qweb-test-attributes.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-call.xml (renamed from addons/base/static/lib/qweb/qweb-test-call.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-conditionals.xml (renamed from addons/base/static/lib/qweb/qweb-test-conditionals.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-extend.xml (renamed from addons/base/static/lib/qweb/qweb-test-extend.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-foreach.xml (renamed from addons/base/static/lib/qweb/qweb-test-foreach.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-output.xml (renamed from addons/base/static/lib/qweb/qweb-test-output.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test-set.xml (renamed from addons/base/static/lib/qweb/qweb-test-set.xml)0
-rw-r--r--addons/web/static/lib/qweb/qweb-test.js.html (renamed from addons/base/static/lib/qweb/qweb-test.js.html)0
-rw-r--r--addons/web/static/lib/qweb/qweb.js (renamed from addons/base/static/lib/qweb/qweb.js)0
-rw-r--r--addons/web/static/lib/qweb/qweb2.js (renamed from addons/base/static/lib/qweb/qweb2.js)17
-rw-r--r--addons/web/static/lib/underscore/underscore.js (renamed from addons/base/static/lib/underscore/underscore.js)0
-rw-r--r--addons/web/static/lib/underscore/underscore.string.js (renamed from addons/base/static/lib/underscore/underscore.string.js)0
-rw-r--r--addons/web/static/src/css/base-ie7.css (renamed from addons/base/static/src/css/base-ie7.css)0
-rw-r--r--addons/web/static/src/css/base.css (renamed from addons/base/static/src/css/base.css)78
-rw-r--r--addons/web/static/src/css/data_export.css (renamed from addons/base/static/src/css/data_export.css)25
-rw-r--r--addons/web/static/src/img/accessories-archiver.png (renamed from addons/base/static/src/img/accessories-archiver.png)bin822 -> 822 bytes
-rw-r--r--addons/web/static/src/img/add-shortcut.png (renamed from addons/base/static/src/img/add-shortcut.png)bin395 -> 395 bytes
-rw-r--r--addons/web/static/src/img/attachments-close.png (renamed from addons/base/static/src/img/attachments-close.png)bin486 -> 486 bytes
-rw-r--r--addons/web/static/src/img/collapse.gif (renamed from addons/base/static/src/img/collapse.gif)bin80 -> 80 bytes
-rw-r--r--addons/web/static/src/img/db.png (renamed from addons/base/static/src/img/db.png)bin2042 -> 2042 bytes
-rw-r--r--addons/web/static/src/img/down-arrow.png (renamed from addons/base/static/src/img/down-arrow.png)bin263 -> 263 bytes
-rw-r--r--addons/web/static/src/img/expand.gif (renamed from addons/base/static/src/img/expand.gif)bin81 -> 81 bytes
-rw-r--r--addons/web/static/src/img/favicon.ico (renamed from addons/base/static/src/img/favicon.ico)bin1150 -> 1150 bytes
-rw-r--r--addons/web/static/src/img/header-about.png (renamed from addons/base/static/src/img/header-about.png)bin442 -> 442 bytes
-rw-r--r--addons/web/static/src/img/header-background.png (renamed from addons/base/static/src/img/header-background.png)bin149 -> 149 bytes
-rw-r--r--addons/web/static/src/img/header-help.png (renamed from addons/base/static/src/img/header-help.png)bin454 -> 454 bytes
-rw-r--r--addons/web/static/src/img/header-home.png (renamed from addons/base/static/src/img/header-home.png)bin452 -> 452 bytes
-rw-r--r--addons/web/static/src/img/header-preferences.png (renamed from addons/base/static/src/img/header-preferences.png)bin420 -> 420 bytes
-rw-r--r--addons/web/static/src/img/header-requests.png (renamed from addons/base/static/src/img/header-requests.png)bin353 -> 353 bytes
-rw-r--r--addons/web/static/src/img/header.gif (renamed from addons/base/static/src/img/header.gif)bin182 -> 182 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ABOUT.png (renamed from addons/base/static/src/img/icons/STOCK_ABOUT.png)bin523 -> 523 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ADD.png (renamed from addons/base/static/src/img/icons/STOCK_ADD.png)bin212 -> 212 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_APPLY.png (renamed from addons/base/static/src/img/icons/STOCK_APPLY.png)bin709 -> 709 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_BOLD.png (renamed from addons/base/static/src/img/icons/STOCK_BOLD.png)bin604 -> 604 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CANCEL.png (renamed from addons/base/static/src/img/icons/STOCK_CANCEL.png)bin407 -> 407 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CDROM.png (renamed from addons/base/static/src/img/icons/STOCK_CDROM.png)bin711 -> 711 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CLEAR.png (renamed from addons/base/static/src/img/icons/STOCK_CLEAR.png)bin682 -> 682 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CLOSE.png (renamed from addons/base/static/src/img/icons/STOCK_CLOSE.png)bin274 -> 274 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png (renamed from addons/base/static/src/img/icons/STOCK_COLOR_PICKER.png)bin470 -> 470 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CONNECT.png (renamed from addons/base/static/src/img/icons/STOCK_CONNECT.png)bin558 -> 558 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CONVERT.png (renamed from addons/base/static/src/img/icons/STOCK_CONVERT.png)bin500 -> 500 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_COPY.png (renamed from addons/base/static/src/img/icons/STOCK_COPY.png)bin339 -> 339 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CUT.png (renamed from addons/base/static/src/img/icons/STOCK_CUT.png)bin626 -> 626 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DELETE.png (renamed from addons/base/static/src/img/icons/STOCK_DELETE.png)bin531 -> 531 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png (renamed from addons/base/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png)bin590 -> 590 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIALOG_ERROR.png (renamed from addons/base/static/src/img/icons/STOCK_DIALOG_ERROR.png)bin559 -> 559 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIALOG_INFO.png (renamed from addons/base/static/src/img/icons/STOCK_DIALOG_INFO.png)bin687 -> 687 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIALOG_QUESTION.png (renamed from addons/base/static/src/img/icons/STOCK_DIALOG_QUESTION.png)bin491 -> 491 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIALOG_WARNING.png (renamed from addons/base/static/src/img/icons/STOCK_DIALOG_WARNING.png)bin428 -> 428 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIRECTORY.png (renamed from addons/base/static/src/img/icons/STOCK_DIRECTORY.png)bin392 -> 392 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DISCONNECT.png (renamed from addons/base/static/src/img/icons/STOCK_DISCONNECT.png)bin566 -> 566 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DND.png (renamed from addons/base/static/src/img/icons/STOCK_DND.png)bin585 -> 585 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DND_MULTIPLE.png (renamed from addons/base/static/src/img/icons/STOCK_DND_MULTIPLE.png)bin501 -> 501 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_EDIT.png (renamed from addons/base/static/src/img/icons/STOCK_EDIT.png)bin350 -> 350 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_EXECUTE.png (renamed from addons/base/static/src/img/icons/STOCK_EXECUTE.png)bin318 -> 318 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FILE.png (renamed from addons/base/static/src/img/icons/STOCK_FILE.png)bin289 -> 289 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FIND.png (renamed from addons/base/static/src/img/icons/STOCK_FIND.png)bin465 -> 465 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FIND_AND_REPLACE.png (renamed from addons/base/static/src/img/icons/STOCK_FIND_AND_REPLACE.png)bin580 -> 580 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FLOPPY.png (renamed from addons/base/static/src/img/icons/STOCK_FLOPPY.png)bin565 -> 565 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FULLSCREEN.png (renamed from addons/base/static/src/img/icons/STOCK_FULLSCREEN.png)bin450 -> 450 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_BOTTOM.png (renamed from addons/base/static/src/img/icons/STOCK_GOTO_BOTTOM.png)bin574 -> 574 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png (renamed from addons/base/static/src/img/icons/STOCK_GOTO_FIRST.png)bin573 -> 573 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_LAST.png (renamed from addons/base/static/src/img/icons/STOCK_GOTO_LAST.png)bin575 -> 575 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_TOP.png (renamed from addons/base/static/src/img/icons/STOCK_GOTO_TOP.png)bin580 -> 580 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_BACK.png (renamed from addons/base/static/src/img/icons/STOCK_GO_BACK.png)bin570 -> 570 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_DOWN.png (renamed from addons/base/static/src/img/icons/STOCK_GO_DOWN.png)bin572 -> 572 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_FORWARD.png (renamed from addons/base/static/src/img/icons/STOCK_GO_FORWARD.png)bin575 -> 575 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_UP.png (renamed from addons/base/static/src/img/icons/STOCK_GO_UP.png)bin596 -> 596 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_HARDDISK.png (renamed from addons/base/static/src/img/icons/STOCK_HARDDISK.png)bin354 -> 354 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_HELP.png (renamed from addons/base/static/src/img/icons/STOCK_HELP.png)bin789 -> 789 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_HOME.png (renamed from addons/base/static/src/img/icons/STOCK_HOME.png)bin477 -> 477 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_INDENT.png (renamed from addons/base/static/src/img/icons/STOCK_INDENT.png)bin276 -> 276 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_INDEX.png (renamed from addons/base/static/src/img/icons/STOCK_INDEX.png)bin590 -> 590 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_INFO.png (renamed from addons/base/static/src/img/icons/STOCK_INFO.png)bin738 -> 738 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ITALIC.png (renamed from addons/base/static/src/img/icons/STOCK_ITALIC.png)bin529 -> 529 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_JUMP_TO.png (renamed from addons/base/static/src/img/icons/STOCK_JUMP_TO.png)bin591 -> 591 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_JUSTIFY_CENTER.png (renamed from addons/base/static/src/img/icons/STOCK_JUSTIFY_CENTER.png)bin251 -> 251 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_JUSTIFY_FILL.png (renamed from addons/base/static/src/img/icons/STOCK_JUSTIFY_FILL.png)bin243 -> 243 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_JUSTIFY_LEFT.png (renamed from addons/base/static/src/img/icons/STOCK_JUSTIFY_LEFT.png)bin240 -> 240 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png (renamed from addons/base/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png)bin254 -> 254 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png (renamed from addons/base/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png)bin448 -> 448 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_FORWARD.png)bin704 -> 704 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_NEXT.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_NEXT.png)bin693 -> 693 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_PAUSE.png)bin466 -> 466 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_PLAY.png)bin556 -> 556 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png)bin686 -> 686 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_RECORD.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_RECORD.png)bin594 -> 594 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_REWIND.png)bin704 -> 704 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png (renamed from addons/base/static/src/img/icons/STOCK_MEDIA_STOP.png)bin421 -> 421 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MISSING_IMAGE.png (renamed from addons/base/static/src/img/icons/STOCK_MISSING_IMAGE.png)bin330 -> 330 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_NETWORK.png (renamed from addons/base/static/src/img/icons/STOCK_NETWORK.png)bin324 -> 324 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_NEW.png (renamed from addons/base/static/src/img/icons/STOCK_NEW.png)bin405 -> 405 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_NO.png (renamed from addons/base/static/src/img/icons/STOCK_NO.png)bin751 -> 751 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_OK.png (renamed from addons/base/static/src/img/icons/STOCK_OK.png)bin795 -> 795 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_OPEN.png (renamed from addons/base/static/src/img/icons/STOCK_OPEN.png)bin418 -> 418 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_PASTE.png (renamed from addons/base/static/src/img/icons/STOCK_PASTE.png)bin473 -> 473 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_PREFERENCES.png (renamed from addons/base/static/src/img/icons/STOCK_PREFERENCES.png)bin339 -> 339 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_PRINT.png (renamed from addons/base/static/src/img/icons/STOCK_PRINT.png)bin411 -> 411 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_PRINT_PREVIEW.png (renamed from addons/base/static/src/img/icons/STOCK_PRINT_PREVIEW.png)bin616 -> 616 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_PROPERTIES.png (renamed from addons/base/static/src/img/icons/STOCK_PROPERTIES.png)bin313 -> 313 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_QUIT.png (renamed from addons/base/static/src/img/icons/STOCK_QUIT.png)bin394 -> 394 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REDO.png (renamed from addons/base/static/src/img/icons/STOCK_REDO.png)bin430 -> 430 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REFRESH.png (renamed from addons/base/static/src/img/icons/STOCK_REFRESH.png)bin753 -> 753 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REMOVE.png (renamed from addons/base/static/src/img/icons/STOCK_REMOVE.png)bin176 -> 176 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REVERT_TO_SAVED.png (renamed from addons/base/static/src/img/icons/STOCK_REVERT_TO_SAVED.png)bin413 -> 413 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SAVE.png (renamed from addons/base/static/src/img/icons/STOCK_SAVE.png)bin599 -> 599 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SAVE_AS.png (renamed from addons/base/static/src/img/icons/STOCK_SAVE_AS.png)bin560 -> 560 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SELECT_COLOR.png (renamed from addons/base/static/src/img/icons/STOCK_SELECT_COLOR.png)bin656 -> 656 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SELECT_FONT.png (renamed from addons/base/static/src/img/icons/STOCK_SELECT_FONT.png)bin598 -> 598 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SORT_ASCENDING.png (renamed from addons/base/static/src/img/icons/STOCK_SORT_ASCENDING.png)bin371 -> 371 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SORT_DESCENDING.png (renamed from addons/base/static/src/img/icons/STOCK_SORT_DESCENDING.png)bin370 -> 370 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_SPELL_CHECK.png (renamed from addons/base/static/src/img/icons/STOCK_SPELL_CHECK.png)bin485 -> 485 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_STOP.png (renamed from addons/base/static/src/img/icons/STOCK_STOP.png)bin678 -> 678 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png (renamed from addons/base/static/src/img/icons/STOCK_STRIKETHROUGH.png)bin459 -> 459 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNDELETE.png (renamed from addons/base/static/src/img/icons/STOCK_UNDELETE.png)bin875 -> 875 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNDERLINE.png (renamed from addons/base/static/src/img/icons/STOCK_UNDERLINE.png)bin539 -> 539 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNDO.png (renamed from addons/base/static/src/img/icons/STOCK_UNDO.png)bin459 -> 459 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNINDENT.png (renamed from addons/base/static/src/img/icons/STOCK_UNINDENT.png)bin295 -> 295 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_YES.png (renamed from addons/base/static/src/img/icons/STOCK_YES.png)bin830 -> 830 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ZOOM_100.png (renamed from addons/base/static/src/img/icons/STOCK_ZOOM_100.png)bin469 -> 469 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ZOOM_FIT.png (renamed from addons/base/static/src/img/icons/STOCK_ZOOM_FIT.png)bin466 -> 466 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ZOOM_IN.png (renamed from addons/base/static/src/img/icons/STOCK_ZOOM_IN.png)bin446 -> 446 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ZOOM_OUT.png (renamed from addons/base/static/src/img/icons/STOCK_ZOOM_OUT.png)bin463 -> 463 bytes
-rw-r--r--addons/web/static/src/img/icons/color-picker.pngbin0 -> 767 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-about.pngbin0 -> 523 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-add.png (renamed from addons/base/static/src/img/icons/gtk-add.png)bin212 -> 212 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-apply.png (renamed from addons/base/static/src/img/icons/gtk-apply.png)bin709 -> 709 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-bold.pngbin0 -> 604 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-cancel.png (renamed from addons/base/static/src/img/icons/gtk-cancel.png)bin407 -> 407 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-cdrom.pngbin0 -> 711 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-clear.pngbin0 -> 682 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-close.png (renamed from addons/base/static/src/img/icons/gtk-close.png)bin274 -> 274 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-color-picker.pngbin0 -> 470 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-connect.pngbin0 -> 558 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-convert.png (renamed from addons/base/static/src/img/icons/gtk-convert.png)bin500 -> 500 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-copy.pngbin0 -> 339 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-cut.pngbin0 -> 626 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-delete.png (renamed from addons/base/static/src/img/icons/gtk-delete.png)bin531 -> 531 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dialog-authentication.pngbin0 -> 590 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dialog-error.pngbin0 -> 559 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dialog-info.pngbin0 -> 687 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dialog-question.pngbin0 -> 491 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dialog-warning.pngbin0 -> 428 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-directory-remote.pngbin0 -> 455 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-directory.pngbin0 -> 392 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-disconnect.pngbin0 -> 566 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dnd-multiple.pngbin0 -> 501 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dnd.png (renamed from addons/base/static/src/img/icons/gtk-dnd.png)bin585 -> 585 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-edit.png (renamed from addons/base/static/src/img/icons/gtk-edit.png)bin350 -> 350 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-execute.png (renamed from addons/base/static/src/img/icons/gtk-execute.png)bin318 -> 318 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-file.pngbin0 -> 289 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-find-and-replace.pngbin0 -> 580 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-find.png (renamed from addons/base/static/src/img/icons/gtk-find.png)bin465 -> 465 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-floppy.pngbin0 -> 565 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-fullscreen.pngbin0 -> 450 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-back.png (renamed from addons/base/static/src/img/icons/gtk-go-back.png)bin570 -> 570 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-down.png (renamed from addons/base/static/src/img/icons/gtk-go-down.png)bin572 -> 572 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-forward.png (renamed from addons/base/static/src/img/icons/gtk-go-forward.png)bin575 -> 575 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-up.png (renamed from addons/base/static/src/img/icons/gtk-go-up.png)bin596 -> 596 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-bottom.pngbin0 -> 574 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-first.pngbin0 -> 573 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-last.png (renamed from addons/base/static/src/img/icons/gtk-goto-last.png)bin575 -> 575 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-top.pngbin0 -> 580 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-harddisk.pngbin0 -> 354 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-help.pngbin0 -> 789 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-home.pngbin0 -> 477 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-indent.png (renamed from addons/base/static/src/img/icons/gtk-indent.png)bin276 -> 276 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-index.png (renamed from addons/base/static/src/img/icons/gtk-index.png)bin590 -> 590 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-info.pngbin0 -> 738 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-italic.pngbin0 -> 529 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-jump-to.png (renamed from addons/base/static/src/img/icons/gtk-jump-to.png)bin591 -> 591 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-justify-center.pngbin0 -> 251 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-justify-fill.png (renamed from addons/base/static/src/img/icons/gtk-justify-fill.png)bin243 -> 243 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-justify-left.pngbin0 -> 240 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-justify-right.pngbin0 -> 254 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-leave-fullscreen.pngbin0 -> 448 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-forward.pngbin0 -> 704 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-next.pngbin0 -> 693 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-pause.png (renamed from addons/base/static/src/img/icons/gtk-media-pause.png)bin466 -> 466 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-play.png (renamed from addons/base/static/src/img/icons/gtk-media-play.png)bin556 -> 556 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-previous.pngbin0 -> 686 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-record.pngbin0 -> 594 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-rewind.pngbin0 -> 704 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-stop.pngbin0 -> 421 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-missing-image.pngbin0 -> 330 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-network.png (renamed from addons/base/static/src/img/icons/gtk-network.png)bin324 -> 324 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-new.png (renamed from addons/base/static/src/img/icons/gtk-new.png)bin405 -> 405 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-no.png (renamed from addons/base/static/src/img/icons/gtk-no.png)bin751 -> 751 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-ok.png (renamed from addons/base/static/src/img/icons/gtk-ok.png)bin795 -> 795 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-open.png (renamed from addons/base/static/src/img/icons/gtk-open.png)bin418 -> 418 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-paste-v.pngbin0 -> 689 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-paste.pngbin0 -> 473 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-preferences.pngbin0 -> 339 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-print-preview.pngbin0 -> 616 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-print.png (renamed from addons/base/static/src/img/icons/gtk-print.png)bin411 -> 411 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-properties.pngbin0 -> 313 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-quit.pngbin0 -> 394 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-redo.png (renamed from addons/base/static/src/img/icons/gtk-redo.png)bin430 -> 430 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-refresh.pngbin0 -> 753 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-remove.png (renamed from addons/base/static/src/img/icons/gtk-remove.png)bin176 -> 176 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-revert-to-saved.pngbin0 -> 413 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-save-as.pngbin0 -> 560 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-save.png (renamed from addons/base/static/src/img/icons/gtk-save.png)bin599 -> 599 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-select-color.pngbin0 -> 656 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-select-font.pngbin0 -> 598 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-sort-ascending.pngbin0 -> 371 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-sort-descending.png (renamed from addons/base/static/src/img/icons/gtk-sort-descending.png)bin370 -> 370 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-spell-check.pngbin0 -> 485 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-stop.png (renamed from addons/base/static/src/img/icons/gtk-stop.png)bin678 -> 678 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-strikethrough.pngbin0 -> 459 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-undelete.pngbin0 -> 875 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-underline.pngbin0 -> 539 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-undo.png (renamed from addons/base/static/src/img/icons/gtk-undo.png)bin459 -> 459 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-unindent.pngbin0 -> 295 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-yes.png (renamed from addons/base/static/src/img/icons/gtk-yes.png)bin830 -> 830 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-zoom-100.pngbin0 -> 469 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-zoom-fit.png (renamed from addons/base/static/src/img/icons/gtk-zoom-fit.png)bin466 -> 466 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-zoom-in.png (renamed from addons/base/static/src/img/icons/gtk-zoom-in.png)bin446 -> 446 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-zoom-out.pngbin0 -> 463 bytes
-rw-r--r--addons/web/static/src/img/icons/index1.jpeg (renamed from addons/base/static/src/img/icons/index1.jpeg)bin473 -> 473 bytes
-rw-r--r--addons/web/static/src/img/icons/index2.jpeg (renamed from addons/base/static/src/img/icons/index2.jpeg)bin471 -> 471 bytes
-rw-r--r--addons/web/static/src/img/icons/lead-stage-lost.pngbin0 -> 692 bytes
-rw-r--r--addons/web/static/src/img/icons/lead-stage-pending.pngbin0 -> 882 bytes
-rw-r--r--addons/web/static/src/img/icons/lead-stage-won.pngbin0 -> 918 bytes
-rw-r--r--addons/web/static/src/img/icons/star-off.pngbin0 -> 614 bytes
-rw-r--r--addons/web/static/src/img/icons/star-on.pngbin0 -> 636 bytes
-rw-r--r--addons/web/static/src/img/icons/stock.pngbin0 -> 953 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_calendar.png (renamed from addons/base/static/src/img/ui/field_calendar.png)bin454 -> 454 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_gantt.pngbin0 -> 293 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_graph.pngbin0 -> 606 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_log.pngbin0 -> 748 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_person.png (renamed from addons/base/static/src/img/stock_person.png)bin1074 -> 1074 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_translate.png (renamed from addons/base/static/src/img/icons/terp-translate.png)bin519 -> 519 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver+.png (renamed from addons/base/static/src/img/icons/terp-accessories-archiver+.png)bin838 -> 838 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver-minus.png (renamed from addons/base/static/src/img/icons/terp-accessories-archiver-minus.png)bin838 -> 838 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver.png (renamed from addons/base/static/src/img/icons/terp-accessories-archiver.png)bin822 -> 822 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-account.png (renamed from addons/base/static/src/img/icons/terp-account.png)bin784 -> 784 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-administration.png (renamed from addons/base/static/src/img/icons/terp-administration.png)bin1015 -> 1015 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-calendar.png (renamed from addons/base/static/src/img/icons/terp-calendar.png)bin908 -> 908 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-call-start.png (renamed from addons/base/static/src/img/icons/terp-call-start.png)bin492 -> 492 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-camera_test.png (renamed from addons/base/static/src/img/icons/terp-camera_test.png)bin739 -> 739 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-check.png (renamed from addons/base/static/src/img/icons/terp-check.png)bin832 -> 832 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-crm.png (renamed from addons/base/static/src/img/icons/terp-crm.png)bin877 -> 877 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dialog-close.png (renamed from addons/base/static/src/img/icons/terp-dialog-close.png)bin305 -> 305 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-document-new.png (renamed from addons/base/static/src/img/icons/terp-document-new.png)bin738 -> 738 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dolar.png (renamed from addons/base/static/src/img/icons/terp-dolar.png)bin270 -> 270 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dolar_ok!.png (renamed from addons/base/static/src/img/icons/terp-dolar_ok!.png)bin220 -> 220 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-emblem-important.png (renamed from addons/base/static/src/img/icons/terp-emblem-important.png)bin703 -> 703 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-face-plain.png (renamed from addons/base/static/src/img/icons/terp-face-plain.png)bin788 -> 788 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-blue.png (renamed from addons/base/static/src/img/icons/terp-folder-blue.png)bin438 -> 438 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-green.png (renamed from addons/base/static/src/img/icons/terp-folder-green.png)bin453 -> 453 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-orange.png (renamed from addons/base/static/src/img/icons/terp-folder-orange.png)bin411 -> 411 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-violet.png (renamed from addons/base/static/src/img/icons/terp-folder-violet.png)bin538 -> 538 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-yellow.png (renamed from addons/base/static/src/img/icons/terp-folder-yellow.png)bin432 -> 432 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gdu-smart-failing.png (renamed from addons/base/static/src/img/icons/terp-gdu-smart-failing.png)bin451 -> 451 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png (renamed from addons/base/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png)bin488 -> 488 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-home.png (renamed from addons/base/static/src/img/icons/terp-go-home.png)bin378 -> 378 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-month.png (renamed from addons/base/static/src/img/icons/terp-go-month.png)bin517 -> 517 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-today.png (renamed from addons/base/static/src/img/icons/terp-go-today.png)bin501 -> 501 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-week.png (renamed from addons/base/static/src/img/icons/terp-go-week.png)bin442 -> 442 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-year.png (renamed from addons/base/static/src/img/icons/terp-go-year.png)bin514 -> 514 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-graph.png (renamed from addons/base/static/src/img/icons/terp-graph.png)bin784 -> 784 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png (renamed from addons/base/static/src/img/icons/terp-gtk-go-back-ltr.png)bin759 -> 759 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png (renamed from addons/base/static/src/img/icons/terp-gtk-go-back-rtl.png)bin762 -> 762 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png (renamed from addons/base/static/src/img/icons/terp-gtk-jump-to-ltr.png)bin859 -> 859 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png (renamed from addons/base/static/src/img/icons/terp-gtk-jump-to-rtl.png)bin851 -> 851 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-media-pause.png (renamed from addons/base/static/src/img/icons/terp-gtk-media-pause.png)bin544 -> 544 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-select-all.png (renamed from addons/base/static/src/img/icons/terp-gtk-select-all.png)bin554 -> 554 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-stop.png (renamed from addons/base/static/src/img/icons/terp-gtk-stop.png)bin622 -> 622 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-hr.png (renamed from addons/base/static/src/img/icons/terp-hr.png)bin699 -> 699 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-idea.png (renamed from addons/base/static/src/img/icons/terp-idea.png)bin384 -> 384 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-locked.png (renamed from addons/base/static/src/img/icons/terp-locked.png)bin588 -> 588 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail-.png (renamed from addons/base/static/src/img/icons/terp-mail-.png)bin427 -> 427 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail-forward.png (renamed from addons/base/static/src/img/icons/terp-mail-forward.png)bin382 -> 382 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail-message-new.png (renamed from addons/base/static/src/img/icons/terp-mail-message-new.png)bin696 -> 696 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail-replied.png (renamed from addons/base/static/src/img/icons/terp-mail-replied.png)bin637 -> 637 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail_delete.png (renamed from addons/base/static/src/img/icons/terp-mail_delete.png)bin988 -> 988 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-marketing.png (renamed from addons/base/static/src/img/icons/terp-marketing.png)bin808 -> 808 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mrp.png (renamed from addons/base/static/src/img/icons/terp-mrp.png)bin880 -> 880 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-partner.png (renamed from addons/base/static/src/img/icons/terp-partner.png)bin905 -> 905 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-personal+.png (renamed from addons/base/static/src/img/icons/terp-personal+.png)bin735 -> 735 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-personal-.png (renamed from addons/base/static/src/img/icons/terp-personal-.png)bin791 -> 791 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-personal.png (renamed from addons/base/static/src/img/icons/terp-personal.png)bin930 -> 930 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-product.png (renamed from addons/base/static/src/img/icons/terp-product.png)bin708 -> 708 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-project.png (renamed from addons/base/static/src/img/icons/terp-project.png)bin993 -> 993 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-purchase.png (renamed from addons/base/static/src/img/icons/terp-purchase.png)bin885 -> 885 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-rating-rated.png (renamed from addons/base/static/src/img/icons/terp-rating-rated.png)bin559 -> 559 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-report.png (renamed from addons/base/static/src/img/icons/terp-report.png)bin831 -> 831 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-sale.png (renamed from addons/base/static/src/img/icons/terp-sale.png)bin699 -> 699 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stage.png (renamed from addons/base/static/src/img/icons/terp-stage.png)bin742 -> 742 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock.png (renamed from addons/base/static/src/img/icons/terp-stock.png)bin967 -> 967 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_align_left_24.png (renamed from addons/base/static/src/img/icons/terp-stock_align_left_24.png)bin358 -> 358 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png (renamed from addons/base/static/src/img/icons/terp-stock_effects-object-colorize.png)bin173 -> 173 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_format-default.png (renamed from addons/base/static/src/img/icons/terp-stock_format-default.png)bin267 -> 267 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_format-scientific.png (renamed from addons/base/static/src/img/icons/terp-stock_format-scientific.png)bin201 -> 201 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_symbol-selection.png (renamed from addons/base/static/src/img/icons/terp-stock_symbol-selection.png)bin382 -> 382 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_zoom.png (renamed from addons/base/static/src/img/icons/terp-stock_zoom.png)bin425 -> 425 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-tools.png (renamed from addons/base/static/src/img/icons/terp-tools.png)bin914 -> 914 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-translate.pngbin0 -> 519 bytes
-rw-r--r--addons/web/static/src/img/iconset-d-drop.gif (renamed from addons/base/static/src/img/iconset-d-drop.gif)bin238 -> 238 bytes
-rw-r--r--addons/web/static/src/img/logo.png (renamed from addons/base/static/src/img/logo.png)bin3551 -> 3551 bytes
-rw-r--r--addons/web/static/src/img/partner.png (renamed from addons/base/static/src/img/partner.png)bin905 -> 905 bytes
-rw-r--r--addons/web/static/src/img/placeholder.png (renamed from addons/base/static/src/img/placeholder.png)bin1362 -> 1362 bytes
-rw-r--r--addons/web/static/src/img/product.png (renamed from addons/base/static/src/img/product.png)bin708 -> 708 bytes
-rw-r--r--addons/web/static/src/img/remove-shortcut.png (renamed from addons/base/static/src/img/remove-shortcut.png)bin559 -> 559 bytes
-rw-r--r--addons/web/static/src/img/stock_person.pngbin0 -> 1074 bytes
-rw-r--r--addons/web/static/src/img/throbber.gif (renamed from addons/base/static/src/img/throbber.gif)bin673 -> 673 bytes
-rw-r--r--addons/web/static/src/img/throbber2.gif (renamed from addons/base/static/src/img/throbber2.gif)bin7195 -> 7195 bytes
-rw-r--r--addons/web/static/src/img/toggle-a-bg.png (renamed from addons/base/static/src/img/toggle-a-bg.png)bin412 -> 412 bytes
-rw-r--r--addons/web/static/src/img/ui/field_calendar.pngbin0 -> 454 bytes
-rw-r--r--addons/web/static/src/img/ui/group-expanded.png (renamed from addons/base/static/src/img/ui/group-expanded.png)bin229 -> 229 bytes
-rw-r--r--addons/web/static/src/img/ui/group-folded.png (renamed from addons/base/static/src/img/ui/group-folded.png)bin259 -> 259 bytes
-rw-r--r--addons/web/static/src/img/warning.png (renamed from addons/base/static/src/img/warning.png)bin1342 -> 1342 bytes
-rw-r--r--addons/web/static/src/js/boot.js (renamed from addons/base/static/src/js/boot.js)38
-rw-r--r--addons/web/static/src/js/chrome.js (renamed from addons/base/static/src/js/chrome.js)282
-rw-r--r--addons/web/static/src/js/core.js (renamed from addons/base/static/src/js/core.js)367
-rw-r--r--addons/web/static/src/js/data.js (renamed from addons/base/static/src/js/data.js)144
-rw-r--r--addons/web/static/src/js/data_export.js391
-rw-r--r--addons/web/static/src/js/dates.js (renamed from addons/base/static/src/js/dates.js)14
-rw-r--r--addons/web/static/src/js/form.js (renamed from addons/base/static/src/js/form.js)453
-rw-r--r--addons/web/static/src/js/formats.js (renamed from addons/base/static/src/js/formats.js)46
-rw-r--r--addons/web/static/src/js/list-editable.js (renamed from addons/base/static/src/js/list-editable.js)62
-rw-r--r--addons/web/static/src/js/list.js (renamed from addons/base/static/src/js/list.js)166
-rw-r--r--addons/web/static/src/js/search.js (renamed from addons/base/static/src/js/search.js)243
-rw-r--r--addons/web/static/src/js/view_editor.js (renamed from addons/base/static/src/js/view_editor.js)12
-rw-r--r--addons/web/static/src/js/view_help.js (renamed from addons/base/static/src/js/view_help.js)8
-rw-r--r--addons/web/static/src/js/view_tree.js (renamed from addons/base/static/src/js/view_tree.js)34
-rw-r--r--addons/web/static/src/js/views.js (renamed from addons/base/static/src/js/views.js)192
-rw-r--r--addons/web/static/src/xml/base.xml (renamed from addons/base/static/src/xml/base.xml)347
-rw-r--r--addons/web/static/test/class.js (renamed from addons/base/static/test/class.js)20
-rw-r--r--addons/web/static/test/form.js (renamed from addons/base/static/test/form.js)36
-rw-r--r--addons/web/static/test/formats.js54
-rw-r--r--addons/web/static/test/list-utils.js (renamed from addons/base/static/test/list-utils.js)54
-rw-r--r--addons/web/static/test/qunit-doc.js (renamed from addons/base/static/test/qunit-doc.js)0
-rw-r--r--addons/web/static/test/registry.js33
-rw-r--r--addons/web/static/test/test.html53
-rw-r--r--addons/web/test/__init__.py (renamed from addons/base/test/__init__.py)0
-rw-r--r--addons/web/test/test_dataset.py (renamed from addons/base/test/test_dataset.py)4
-rw-r--r--addons/web/test/test_menu.py (renamed from addons/base/test/test_menu.py)12
-rw-r--r--addons/web/test/test_view.py (renamed from addons/base/test/test_view.py)16
-rw-r--r--addons/web_calendar/__init__.py (renamed from addons/base_hello/__init__.py)0
-rw-r--r--addons/web_calendar/__openerp__.py (renamed from addons/base_calendar/__openerp__.py)4
-rw-r--r--addons/web_calendar/controllers/__init__.py (renamed from addons/base_calendar/controllers/__init__.py)0
-rw-r--r--addons/web_calendar/controllers/main.py (renamed from addons/base_calendar/controllers/main.py)0
-rw-r--r--addons/web_calendar/po/base_calendar.pot (renamed from addons/base_calendar/po/base_calendar.pot)0
-rw-r--r--addons/web_calendar/po/web_calendar.pot23
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif)bin1149 -> 1149 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png)bin281 -> 281 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif)bin622 -> 622 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif)bin1321 -> 1321 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif)bin388 -> 388 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif)bin452 -> 452 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif)bin2496 -> 2496 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png)bin152 -> 152 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png)bin152 -> 152 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png)bin230 -> 230 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif)bin3951 -> 3951 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png)bin247 -> 247 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png)bin252 -> 252 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif)bin1149 -> 1149 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif)bin616 -> 616 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif)bin622 -> 622 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif)bin1321 -> 1321 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif)bin388 -> 388 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif)bin452 -> 452 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png)bin2835 -> 2835 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png)bin89 -> 89 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png)bin89 -> 89 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png)bin148 -> 148 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png)bin230 -> 230 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png)bin230 -> 230 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png)bin124 -> 124 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png)bin207 -> 207 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif)bin3951 -> 3951 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png)bin145 -> 145 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png)bin350 -> 350 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png)bin138 -> 138 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png)bin177 -> 177 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif)bin259 -> 259 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png)bin290 -> 290 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png)bin300 -> 300 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png)bin1404 -> 1404 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png)bin1955 -> 1955 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png)bin1975 -> 1975 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png)bin1096 -> 1096 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png)bin1062 -> 1062 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png)bin1687 -> 1687 bytes
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/license.txt (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/license.txt)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/readme.txt (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/base.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/event.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/note.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/note.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/property.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.css (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.css)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js)0
-rw-r--r--addons/web_calendar/static/lib/dhtmlxScheduler/whatsnew.txt (renamed from addons/base_calendar/static/lib/dhtmlxScheduler/whatsnew.txt)0
-rw-r--r--addons/web_calendar/static/src/js/calendar.js (renamed from addons/base_calendar/static/src/js/calendar.js)51
-rw-r--r--addons/web_calendar/static/src/xml/web_calendar.xml (renamed from addons/base_calendar/static/src/xml/base_calendar.xml)0
-rw-r--r--addons/web_chat/__openerp__.py2
-rw-r--r--addons/web_chat/controllers/main.py7
-rw-r--r--addons/web_chat/po/web_chat.pot2
-rw-r--r--addons/web_dashboard/__init__.py (renamed from addons/base_dashboard/__init__.py)0
-rw-r--r--addons/web_dashboard/__openerp__.py (renamed from addons/base_dashboard/__openerp__.py)4
-rw-r--r--addons/web_dashboard/controllers.py (renamed from addons/base_dashboard/controllers.py)4
-rw-r--r--addons/web_dashboard/po/base_dashboard.pot (renamed from addons/base_dashboard/po/base_dashboard.pot)0
-rw-r--r--addons/web_dashboard/po/web_dashboard.pot47
-rw-r--r--addons/web_dashboard/static/src/css/dashboard.css (renamed from addons/base_dashboard/static/src/css/dashboard.css)0
-rw-r--r--addons/web_dashboard/static/src/img/layout_1-1-1.png (renamed from addons/base_dashboard/static/src/img/layout_1-1-1.png)bin306 -> 306 bytes
-rw-r--r--addons/web_dashboard/static/src/img/layout_1-1.png (renamed from addons/base_dashboard/static/src/img/layout_1-1.png)bin313 -> 313 bytes
-rw-r--r--addons/web_dashboard/static/src/img/layout_1-2.png (renamed from addons/base_dashboard/static/src/img/layout_1-2.png)bin313 -> 313 bytes
-rw-r--r--addons/web_dashboard/static/src/img/layout_1.png (renamed from addons/base_dashboard/static/src/img/layout_1.png)bin292 -> 292 bytes
-rw-r--r--addons/web_dashboard/static/src/img/layout_2-1.png (renamed from addons/base_dashboard/static/src/img/layout_2-1.png)bin304 -> 304 bytes
-rw-r--r--addons/web_dashboard/static/src/js/dashboard.js (renamed from addons/base_dashboard/static/src/js/dashboard.js)76
-rw-r--r--addons/web_dashboard/static/src/xml/web_dashboard.xml (renamed from addons/base_dashboard/static/src/xml/base_dashboard.xml)14
-rw-r--r--addons/web_default_home/__init__.py (renamed from addons/base/controllers/__init__.py)0
-rw-r--r--addons/web_default_home/__openerp__.py (renamed from addons/base_default_home/__openerp__.py)2
-rw-r--r--addons/web_default_home/po/base_default_home.pot (renamed from addons/base_default_home/po/base_default_home.pot)0
-rw-r--r--addons/web_default_home/po/web_default_home.pot39
-rw-r--r--addons/web_default_home/static/src/css/home.css (renamed from addons/base_default_home/static/src/css/home.css)0
-rw-r--r--addons/web_default_home/static/src/img/account_voucher.png (renamed from addons/base_default_home/static/src/img/account_voucher.png)bin9306 -> 9306 bytes
-rw-r--r--addons/web_default_home/static/src/img/crm.png (renamed from addons/base_default_home/static/src/img/crm.png)bin7323 -> 7323 bytes
-rw-r--r--addons/web_default_home/static/src/img/hr.png (renamed from addons/base_default_home/static/src/img/hr.png)bin8676 -> 8676 bytes
-rw-r--r--addons/web_default_home/static/src/img/knowledge.png (renamed from addons/base_default_home/static/src/img/knowledge.png)bin7157 -> 7157 bytes
-rw-r--r--addons/web_default_home/static/src/img/marketing.png (renamed from addons/base_default_home/static/src/img/marketing.png)bin3247 -> 3247 bytes
-rw-r--r--addons/web_default_home/static/src/img/mrp.png (renamed from addons/base_default_home/static/src/img/mrp.png)bin5663 -> 5663 bytes
-rw-r--r--addons/web_default_home/static/src/img/point_of_sale.png (renamed from addons/base_default_home/static/src/img/point_of_sale.png)bin7600 -> 7600 bytes
-rw-r--r--addons/web_default_home/static/src/img/profile_tools.png (renamed from addons/base_default_home/static/src/img/profile_tools.png)bin8466 -> 8466 bytes
-rw-r--r--addons/web_default_home/static/src/img/project.png (renamed from addons/base_default_home/static/src/img/project.png)bin4172 -> 4172 bytes
-rw-r--r--addons/web_default_home/static/src/img/purchase.png (renamed from addons/base_default_home/static/src/img/purchase.png)bin5863 -> 5863 bytes
-rw-r--r--addons/web_default_home/static/src/img/sale.png (renamed from addons/base_default_home/static/src/img/sale.png)bin8685 -> 8685 bytes
-rw-r--r--addons/web_default_home/static/src/img/stock.png (renamed from addons/base_default_home/static/src/img/stock.png)bin5505 -> 5505 bytes
-rw-r--r--addons/web_default_home/static/src/js/home.js (renamed from addons/base_default_home/static/src/js/home.js)25
-rw-r--r--addons/web_default_home/static/src/xml/web_default_home.xml (renamed from addons/base_default_home/static/src/xml/base_default_home.xml)2
-rw-r--r--addons/web_diagram/__init__.py (renamed from addons/base_diagram/__init__.py)0
-rw-r--r--addons/web_diagram/__openerp__.py16
-rw-r--r--addons/web_diagram/controllers/__init__.py (renamed from addons/base_diagram/controllers/__init__.py)0
-rw-r--r--addons/web_diagram/controllers/main.py (renamed from addons/base_diagram/controllers/main.py)57
-rw-r--r--addons/web_diagram/po/base_diagram.pot (renamed from addons/base_diagram/po/base_diagram.pot)0
-rw-r--r--addons/web_diagram/po/web_diagram.pot55
-rw-r--r--addons/web_diagram/static/lib/js/Curry-1.0.1.js (renamed from addons/base_diagram/static/lib/js/Curry-1.0.1.js)0
-rw-r--r--addons/web_diagram/static/lib/js/dracula_algorithms.js (renamed from addons/base_diagram/static/lib/js/dracula_algorithms.js)0
-rw-r--r--addons/web_diagram/static/lib/js/dracula_graffle.js (renamed from addons/base_diagram/static/lib/js/dracula_graffle.js)0
-rw-r--r--addons/web_diagram/static/lib/js/dracula_graph.coffee (renamed from addons/base_diagram/static/lib/js/dracula_graph.coffee)0
-rw-r--r--addons/web_diagram/static/lib/js/dracula_graph.js (renamed from addons/base_diagram/static/lib/js/dracula_graph.js)62
-rw-r--r--addons/web_diagram/static/lib/js/raphael-min.js (renamed from addons/base_diagram/static/lib/js/raphael-min.js)0
-rw-r--r--addons/web_diagram/static/lib/js/seedrandom.js (renamed from addons/base_diagram/static/lib/js/seedrandom.js)0
-rw-r--r--addons/web_diagram/static/src/css/base_diagram.css18
-rw-r--r--addons/web_diagram/static/src/img/grid.jpgbin0 -> 4530 bytes
-rw-r--r--addons/web_diagram/static/src/js/diagram.js296
-rw-r--r--addons/web_diagram/static/src/xml/base_diagram.xml22
-rw-r--r--addons/web_gantt/__init__.py (renamed from addons/base_graph/__init__.py)1
-rw-r--r--addons/web_gantt/__openerp__.py (renamed from addons/base_gantt/__openerp__.py)4
-rw-r--r--addons/web_gantt/controllers/__init__.py (renamed from addons/base_gantt/controllers/__init__.py)0
-rw-r--r--addons/web_gantt/controllers/main.py (renamed from addons/base_gantt/controllers/main.py)0
-rw-r--r--addons/web_gantt/po/base_gantt.pot (renamed from addons/base_gantt/po/base_gantt.pot)0
-rw-r--r--addons/web_gantt/po/web_gantt.pot19
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/License_GPL.html (renamed from addons/base_gantt/static/lib/dhtmlxGantt/License_GPL.html)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif)bin162 -> 162 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png)bin151 -> 151 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png)bin275 -> 275 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png)bin159 -> 159 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png)bin600 -> 600 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png)bin2247 -> 2247 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif)bin121 -> 121 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png)bin186 -> 186 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif)bin124 -> 124 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png)bin186 -> 186 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png (renamed from addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png)bin186 -> 186 bytes
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/index.html (renamed from addons/base_gantt/static/lib/dhtmlxGantt/index.html)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/readme.txt (renamed from addons/base_gantt/static/lib/dhtmlxGantt/readme.txt)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js (renamed from addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js)0
-rw-r--r--addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js (renamed from addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js)0
-rw-r--r--addons/web_gantt/static/src/js/gantt.js (renamed from addons/base_gantt/static/src/js/gantt.js)52
-rw-r--r--addons/web_gantt/static/src/xml/web_gantt.xml (renamed from addons/base_gantt/static/src/xml/base_gantt.xml)0
-rw-r--r--addons/web_graph/__init__.py (renamed from addons/base_gantt/__init__.py)0
-rw-r--r--addons/web_graph/__openerp__.py (renamed from addons/base_graph/__openerp__.py)4
-rw-r--r--addons/web_graph/controllers/__init__.py (renamed from addons/base_graph/controllers/__init__.py)0
-rw-r--r--addons/web_graph/controllers/main.py (renamed from addons/base_graph/controllers/main.py)6
-rw-r--r--addons/web_graph/po/base_graph.pot (renamed from addons/base_graph/po/base_graph.pot)0
-rw-r--r--addons/web_graph/po/web_graph.pot19
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/License_GPL.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/License_GPL.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css)0
-rwxr-xr-xaddons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js (renamed from addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip (renamed from addons/base_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip)bin22694 -> 22694 bytes
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/readme.txt (renamed from addons/base_graph/static/lib/dhtmlxGraph/readme.txt)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/common/config.php (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/common/config.php)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/common/data.php (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/common/data.php)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/common/sales.xml (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/common/sales.xml)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/common/stat.xml (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/common/stat.xml)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/samples/readme.txt (renamed from addons/base_graph/static/lib/dhtmlxGraph/samples/readme.txt)0
-rw-r--r--addons/web_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js (renamed from addons/base_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js)0
-rw-r--r--addons/web_graph/static/src/js/graph.js (renamed from addons/base_graph/static/src/js/graph.js)15
-rw-r--r--addons/web_graph/static/src/xml/web_graph.xml (renamed from addons/base_graph/static/src/xml/base_graph.xml)0
-rw-r--r--addons/web_hello/__init__.py1
-rw-r--r--addons/web_hello/__openerp__.py (renamed from addons/base_hello/__openerp__.py)0
-rw-r--r--addons/web_hello/po/base_hello.pot (renamed from addons/base_hello/po/base_hello.pot)0
-rw-r--r--addons/web_hello/po/web_hello.pot19
-rw-r--r--addons/web_hello/static/openerp/base_hello.js (renamed from addons/base_hello/static/openerp/base_hello.js)4
-rw-r--r--addons/web_kanban/__init__.py (renamed from addons/base_default_home/__init__.py)0
-rw-r--r--addons/web_kanban/__openerp__.py12
-rw-r--r--addons/web_kanban/static/src/css/kanban.css203
-rw-r--r--addons/web_kanban/static/src/js/kanban.js448
-rw-r--r--addons/web_kanban/static/src/xml/web_kanban.xml37
-rw-r--r--addons/web_mobile/__init__.py1
-rw-r--r--addons/web_mobile/controllers/__init__.py0
-rw-r--r--addons/web_mobile/po/web_mobile.pot20
-rw-r--r--addons/web_mobile/static/src/js/chrome_mobile.js219
-rw-r--r--addons/web_mobile/static/src/js/form_mobile.js79
-rw-r--r--addons/web_mobile/static/src/js/list_mobile.js81
-rwxr-xr-xaddons/web_mobile/static/src/web_mobile.html25
-rw-r--r--addons/web_mobile/static/src/xml/web_mobile.xml250
-rw-r--r--addons/web_rpc/__openerp__.py24
-rw-r--r--addons/web_rpc/po/web_rpc.pot19
940 files changed, 5007 insertions, 2631 deletions
diff --git a/addons/base/__init__.py b/addons/base/__init__.py
deleted file mode 100644
index 343b53d050d..00000000000
--- a/addons/base/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import common
-import controllers
-
-# TODO
-# if we detect that we are imported from the openerp server register common.Root() as a wsgi entry point
-
diff --git a/addons/base/static/src/js/data_export.js b/addons/base/static/src/js/data_export.js
deleted file mode 100644
index ad440302c69..00000000000
--- a/addons/base/static/src/js/data_export.js
+++ /dev/null
@@ -1,402 +0,0 @@
-openerp.base.data_export = function(openerp) {
-openerp.base.DataExport = openerp.base.Dialog.extend({
- init: function(parent, dataset) {
- this._super(parent);
- this.dataset = dataset;
- },
- start: function() {
- var self = this;
- self._super(false);
- self.template = 'ExportTreeView';
- self.dialog_title = "Export Data";
- self.open({
- modal: true,
- width: '55%',
- height: 'auto',
- position: 'top',
- buttons : {
- "Close" : function() {
- self.close();
- },
- "Export To File" : function() {
- self.on_click_export_data();
- }
- },
- close: function(event, ui){ self.close();}
- });
- self.on_show_exists_export_list();
- self.$element.removeClass('ui-dialog-content ui-widget-content');
- self.$element.find('#add_field').click(function() {
- if ($('#field-tree-structure tr.ui-selected')) {
- var fld = self.$element.find('#field-tree-structure tr.ui-selected').find('a');
- for (var i = 0; i < fld.length; i++) {
- var id = $(fld[i]).attr('id').split('-')[1];
- var string = $(fld[i]).attr('string');
- self.add_field(id, string);
- }
- self.$element.find('#field-tree-structure tr').removeClass('ui-selected');
- }
- });
- self.$element.find('#remove_field').click(function() {
- self.$element.find('#fields_list option:selected').remove();
- });
- self.$element.find('#remove_all_field').click(function() {
- self.$element.find('#fields_list option').remove();
- });
- self.$element.find('#export_new_list').click(function() {
- self.on_show_save_list();
- });
- var import_comp = self.$element.find('#import_compat option:selected').val(),
- params = {
- import_compat: parseInt(import_comp)
- };
- self.rpc('/base/export/get_fields', { model: self.dataset.model, params: params }, self.on_show_data);
-
- self.$element.find('#import_compat').change(function() {
- self.$element.find('#fields_list option').remove();
- self.$element.find('#field-tree-structure').remove();
- var import_comp = self.$element.find("#import_compat option:selected").val();
- if (import_comp) {
- var params = {
- import_compat: parseInt(import_comp)
- }
- self.rpc("/base/export/get_fields", { model: self.dataset.model, params: params}, self.on_show_data);
- }
- });
- },
- on_show_exists_export_list: function() {
- var self = this;
- if (self.$element.find('#saved_export_list').is(':hidden')) {
- self.$element.find('#ExistsExportList').show();
- } else {
- this.rpc('/base/export/exist_export_lists', { 'model': this.dataset.model}, function(export_list) {
- if (export_list.length) {
- self.$element.find('#ExistsExportList').append(QWeb.render('Exists.ExportList', {'existing_exports': export_list}));
- self.$element.find('#saved_export_list').change(function() {
- self.$element.find('#fields_list option').remove();
- var export_id = self.$element.find('#saved_export_list option:selected').val();
- if (export_id) {
- self.rpc('/base/export/namelist', {'model': self.dataset.model, export_id: parseInt(export_id)}, self.do_load_export_field);
- }
- });
- self.$element.find('#delete_export_list').click(function() {
- var select_exp = self.$element.find('#saved_export_list option:selected');
- if (select_exp.val()) {
- self.rpc('/base/export/delete_export', { export_id: parseInt(select_exp.val())}, {});
- select_exp.remove();
- if (self.$element.find('#saved_export_list option').length <= 1) {
- self.$element.find('#ExistsExportList').hide();
- }
- }
- });
- }
- });
- }
- },
- do_load_export_field: function(field_list) {
- var export_node = this.$element.find("#fields_list");
- for (var key in field_list) {
- export_node.append(new Option(field_list[key], key));
- }
- },
- on_show_save_list: function() {
- var self = this;
- var current_node = self.$element.find("#savenewlist");
- if (!(current_node.find("label")).length) {
- current_node.append(QWeb.render('ExportNewList'));
- current_node.find("#add_export_list").click(function() {
- var value = current_node.find("#savelist_name").val();
- if (value) {
- self.do_save_export_list(value);
- } else {
- alert("Pleae Enter Save Field List Name");
- }
- });
- } else {
- if (current_node.is(':hidden')) {
- current_node.show();
- current_node.find("#savelist_name").val("");
- } else {
- current_node.hide();
- }
- }
- },
- do_save_export_list: function(value) {
- var self = this;
- var export_field = self.get_fields();
- if (export_field.length) {
- self.rpc("/base/export/save_export_lists", {"model": self.dataset.model, "name":value, "field_list":export_field}, function(exp_id) {
- if (exp_id) {
- if (self.$element.find("#saved_export_list").length > 0) {
- self.$element.find("#saved_export_list").append(new Option(value, exp_id));
- } else {
- self.on_show_exists_export_list();
- }
- if (self.$element.find("#saved_export_list").is(":hidden")) {
- self.on_show_exists_export_list();
- }
- }
- });
- self.on_show_save_list();
- self.$element.find("#fields_list option").remove();
- }
- },
- on_click: function(id, result) {
- var self = this;
- self.field_id = id.split("-")[1];
- var is_loaded = 0;
- _.each(result, function(record) {
- if (record['id'] == self.field_id && (record['children']).length >= 1) {
- var model = record['params']['model'],
- prefix = record['params']['prefix'],
- name = record['params']['name'];
- $(record['children']).each(function(e, childid) {
- if (self.$element.find("tr[id='treerow-" + childid + "']").length > 0) {
- if (self.$element.find("tr[id='treerow-" + childid + "']").is(':hidden')) {
- is_loaded = -1;
- } else {
- is_loaded++;
- }
- }
- });
- if (is_loaded == 0) {
- if (self.$element.find("tr[id='treerow-" + self.field_id +"']").find('img').attr('src') === '/base/static/src/img/expand.gif') {
- if (model) {
- var import_comp = self.$element.find("#import_compat option:selected").val();
- var params = {
- import_compat: parseInt(import_comp),
- parent_field_type : record['field_type']
- }
- self.rpc("/base/export/get_fields", {
- model: model,
- prefix: prefix,
- name: name,
- field_parent : self.field_id,
- params: params
- }, function(results) {
- self.on_show_data(results);
- });
- }
- }
- } else if (is_loaded > 0) {
- self.showcontent(self.field_id, true);
- } else {
- self.showcontent(self.field_id, false);
- }
- }
- });
- },
- on_show_data: function(result) {
- var self = this;
- var imp_cmpt = parseInt(self.$element.find("#import_compat option:selected").val());
- var current_tr = self.$element.find("tr[id='treerow-" + self.field_id + "']");
- if (current_tr.length >= 1) {
- current_tr.find('img').attr('src','/base/static/src/img/collapse.gif');
- current_tr.after(QWeb.render('ExportTreeView-Secondary.children', {'fields': result}));
- } else {
- self.$element.find('#left_field_panel').append(QWeb.render('ExportTreeView-Secondary', {'fields': result}));
- }
- _.each(result, function(record) {
- if ((record.field_type == "one2many") && imp_cmpt) {
- var o2m_fld = self.$element.find("tr[id='treerow-" + record.id + "']").find('#tree-column');
- o2m_fld.addClass("oe_export_readonlyfield");
- }
- if ((record.required == true) || record.required == "True") {
- var required_fld = self.$element.find("tr[id='treerow-" + record.id + "']").find('#tree-column');
- required_fld.addClass("oe_export_requiredfield");
- }
- self.$element.find("img[id='parentimg-" + record.id +"']").click(function() {
- self.on_click(this.id, result);
- });
-
- self.$element.find("tr[id='treerow-" + record.id + "']").click(function(e) {
- if (e.shiftKey == true) {
- var frst_click, scnd_click = '';
- if (self.row_index == 0) {
- self.row_index = this.rowIndex;
- frst_click = self.$element.find("tr[id^='treerow-']")[self.row_index-1];
- $(frst_click).addClass("ui-selected");
- } else {
- if (this.rowIndex >=self.row_index) {
- for (i = (self.row_index-1); i < this.rowIndex; i++) {
- scnd_click = self.$element.find("tr[id^='treerow-']")[i];
- if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) {
- $(scnd_click).addClass("ui-selected");
- }
- }
- } else {
- for (i = (self.row_index-1); i >= (this.rowIndex-1); i--) {
- scnd_click = self.$element.find("tr[id^='treerow-']")[i];
- if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) {
- $(scnd_click).addClass("ui-selected");
- }
- }
- }
- }
- }
- self.row_index = this.rowIndex;
-
- self.$element.find("tr[id='treerow-" + record.id + "']").keyup(function(e) {
- self.row_index = 0;
- });
- var o2m_selection = self.$element.find("tr[id='treerow-" + record.id + "']").find('#tree-column');
- if ($(o2m_selection).hasClass("oe_export_readonlyfield")) {
- return false;
- }
- var selected = self.$element.find("tr.ui-selected");
- if ($(this).hasClass("ui-selected") && (e.ctrlKey == true)) {
- $(this).find('a').blur();
- $(this).removeClass("ui-selected");
- } else if ($(this).hasClass("ui-selected") && (e.ctrlKey == false) && (e.shiftKey == false)) {
- selected.find('a').blur();
- selected.removeClass("ui-selected");
- $(this).find('a').focus();
- $(this).addClass("ui-selected");
- } else if (!$(this).hasClass("ui-selected") && (e.ctrlKey == false) && (e.shiftKey == false)) {
- selected.find('a').blur();
- selected.removeClass("ui-selected");
- $(this).find('a').focus();
- $(this).addClass("ui-selected");
- } else if (!$(this).hasClass("ui-selected") && (e.ctrlKey == true)) {
- $(this).find('a').focus();
- $(this).addClass("ui-selected");
- }
- return false;
- });
-
- self.$element.find("tr[id='treerow-" + record.id + "']").keydown(function(e) {
- var keyCode = e.keyCode || e.which;
- arrow = {left: 37, up: 38, right: 39, down: 40 };
- switch (keyCode) {
- case arrow.left:
- if ($(this).find('img').attr('src') === '/base/static/src/img/collapse.gif') {
- self.on_click(this.id, result);
- }
- break;
- case arrow.up:
- var elem = this;
- $(elem).removeClass("ui-selected");
- while ($(elem).prev().is(":visible") == false) {
- elem = $(elem).prev();
- }
- if (!$(elem).prev().find('#tree-column').hasClass("oe_export_readonlyfield")) {
- $(elem).prev().addClass("ui-selected");
- }
- $(elem).prev().find('a').focus();
- break;
- case arrow.right:
- if ($(this).find('img').attr('src') == '/base/static/src/img/expand.gif') {
- self.on_click(this.id, result);
- }
- break;
- case arrow.down:
- var elem = this;
- $(elem).removeClass("ui-selected");
- while($(elem).next().is(":visible") == false) {
- elem = $(elem).next();
- }
- if (!$(elem).next().find('#tree-column').hasClass("oe_export_readonlyfield")) {
- $(elem).next().addClass("ui-selected");
- }
- $(elem).next().find('a').focus();
- break;
- }
- });
- self.$element.find("tr[id='treerow-" + record.id + "']").dblclick(function(e) {
- var $o2m_selection = self.$element.find("tr[id^='treerow-" + record.id + "']").find('#tree-column');
- if (!$o2m_selection.hasClass("oe_export_readonlyfield")) {
- var field_id = $(this).find("a").attr("id");
- if (field_id) {
- self.add_field(field_id.split('-')[1], $(this).find("a").attr("string"));
- }
- }
- });
- });
- self.$element.find('#fields_list').mouseover(function(event) {
- if (event.relatedTarget) {
- if (event.relatedTarget.attributes['id'] && event.relatedTarget.attributes['string']) {
- var field_id = event.relatedTarget.attributes["id"]["value"];
- if (field_id && field_id.split("-")[0] === 'export') {
- if (!self.$element.find("tr[id='treerow-" + field_id.split("-")[1] + "']").find('#tree-column').hasClass("oe_export_readonlyfield")) {
- self.add_field(field_id.split("-")[1], event.relatedTarget.attributes["string"]["value"]);
- }
- }
- }
- }
- });
- },
- showcontent: function(id, flag) {
- // show & hide the contents
- var first_child = this.$element.find("tr[id='treerow-" + id + "']").find('img');
- if (flag) {
- first_child.attr('src', '/base/static/src/img/expand.gif');
- }
- else {
- first_child.attr('src', '/base/static/src/img/collapse.gif');
- }
- var child_field = this.$element.find("tr[id^='treerow-" + id +"/']");
- var child_len = (id.split("/")).length + 1;
- for (var i = 0; i < child_field.length; i++) {
- if (flag) {
- $(child_field[i]).hide();
- } else {
- if (child_len == (child_field[i].id.split("/")).length) {
- if ($(child_field[i]).find('img').attr('src') == '/base/static/src/img/collapse.gif') {
- $(child_field[i]).find('img').attr('src', '/base/static/src/img/expand.gif');
- }
- $(child_field[i]).show();
- }
- }
- }
- },
- add_field: function(field_id, string) {
- var field_list = this.$element.find('#fields_list');
- if (this.$element.find("#fields_list option[value='" + field_id + "']") && !this.$element.find("#fields_list option[value='" + field_id + "']").length) {
- field_list.append(new Option(string, field_id));
- }
- },
- get_fields: function() {
- var export_field = [];
- this.$element.find("#fields_list option").each(function() {
- export_field.push($(this).val());
- });
- if (!export_field.length) {
- alert('Please select fields to save export list...');
- }
- return export_field;
- },
- on_click_export_data: function() {
- var self = this;
- var export_field = {};
- var flag = true;
- self.$element.find("#fields_list option").each(function() {
- export_field[$(this).val()] = $(this).text();
- flag = false;
- });
- if (flag) {
- alert('Please select fields to export...');
- return;
- }
-
- var import_comp = self.$element.find("#import_compat option:selected").val(),
- export_format = self.$element.find("#export_format").val();
-
- self.rpc("/base/export/export_data", {
- model: self.dataset.model,
- fields: export_field,
- ids: self.dataset.ids,
- domain: self.dataset.domain,
- import_compat: parseInt(import_comp),
- export_format: export_format
- }, function(data) {
- window.location = "data:text/csv/excel;charset=utf8," + data;
- self.close();
- });
- },
- close: function() {
- $(this.$dialog).remove();
- this._super();
- }
-});
-
-};
diff --git a/addons/base/static/test/formats.js b/addons/base/static/test/formats.js
deleted file mode 100644
index 66ffd1b5c3c..00000000000
--- a/addons/base/static/test/formats.js
+++ /dev/null
@@ -1,54 +0,0 @@
-$(document).ready(function () {
- var openerp;
- module('base-formats', {
- setup: function () {
- openerp = window.openerp.init();
- window.openerp.base.core(openerp);
- window.openerp.base.dates(openerp);
- window.openerp.base.formats(openerp);
- }
- });
- test("format_datetime", function () {
- var date = openerp.base.str_to_datetime("2009-05-04 12:34:23");
- var str = openerp.base.format_value(date, {type:"datetime"});
- equal(str, date.toString("M/d/yyyy h:mm:ss tt"));
- });
- test("format_date", function () {
- var date = openerp.base.str_to_datetime("2009-05-04 12:34:23");
- var str = openerp.base.format_value(date, {type:"date"});
- equal(str, date.toString("M/d/yyyy"));
- });
- test("format_time", function () {
- var date = openerp.base.str_to_datetime("2009-05-04 12:34:23");
- var str = openerp.base.format_value(date, {type:"time"});
- equal(str, date.toString("h:mm:ss tt"));
- });
- test("format_float", function () {
- var fl = 12.1234;
- var str = openerp.base.format_value(fl, {type:"float"});
- equal(str, "12.12");
- });
- test("parse_datetime", function () {
- var val = openerp.base.str_to_datetime("2009-05-04 12:34:23");
- var res = openerp.base.parse_value(val.toString("M/d/yyyy h:mm:ss tt"), {type:"datetime"});
- equal(val.toString("M/d/yyyy h:mm:ss tt"), res.toString("M/d/yyyy h:mm:ss tt"));
- });
- test("parse_date", function () {
- var val = openerp.base.str_to_date("2009-05-04");
- var res = openerp.base.parse_value(val.toString("M/d/yyyy"), {type:"date"});
- equal(val.toString("M/d/yyyy"), res.toString("M/d/yyyy"));
- });
- test("parse_time", function () {
- var val = openerp.base.str_to_time("12:34:23");
- var res = openerp.base.parse_value(val.toString("h:mm:ss tt"), {type:"time"});
- equal(val.toString("h:mm:ss tt"), res.toString("h:mm:ss tt"));
- });
- test("parse_float", function () {
- var str = "134,112.1234";
- var val = openerp.base.parse_value(str, {type:"float"});
- equal(val, 134112.1234);
- var str = "-134,112.1234";
- var val = openerp.base.parse_value(str, {type:"float"});
- equal(val, -134112.1234);
- });
-}); \ No newline at end of file
diff --git a/addons/base/static/test/registry.js b/addons/base/static/test/registry.js
deleted file mode 100644
index 6140d327049..00000000000
--- a/addons/base/static/test/registry.js
+++ /dev/null
@@ -1,33 +0,0 @@
-$(document).ready(function () {
- var openerp;
- module('Registry', {
- setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.base.core(openerp);
- openerp.base.Foo = {};
- openerp.base.Bar = {};
- }
- });
- test('key fetch', function () {
- var reg = new openerp.base.Registry({
- foo: 'openerp.base.Foo',
- bar: 'openerp.base.Bar',
- quux: 'openerp.base.Quux'
- });
-
- strictEqual(reg.get_object('foo'), openerp.base.Foo);
- raises(function () { reg.get_object('qux'); },
- openerp.base.KeyNotFound,
- "Unknown keys should raise KeyNotFound");
- raises(function () { reg.get_object('quux'); },
- openerp.base.ObjectNotFound,
- "Incorrect file paths should raise ObjectNotFound");
- });
- test('key set', function () {
- var reg = new openerp.base.Registry();
-
- reg.add('foo', 'openerp.base.Foo')
- .add('bar', 'openerp.base.Bar');
- strictEqual(reg.get_object('bar'), openerp.base.Bar);
- });
-});
diff --git a/addons/base/static/test/test.html b/addons/base/static/test/test.html
deleted file mode 100644
index 957456f4280..00000000000
--- a/addons/base/static/test/test.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE html>
-<html style="height: 100%">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title>OpenERP</title>
- <link rel="shortcut icon" href="/base/static/src/img/favicon.ico" type="image/x-icon"/>
-
- <link rel="stylesheet" href="/base/static/lib/qunit/qunit-2011-23-22.css">
- <script src="/base/static/lib/qunit/qunit-2011-23-22.js" type="text/javascript"></script>
-
- <script src="/base/static/lib/underscore/underscore.js" type="text/javascript"></script>
- <script src="/base/static/lib/underscore/underscore.string.js" type="text/javascript"></script>
-
- <!-- jquery -->
- <script src="/base/static/lib/jquery/jquery-1.6.2.js"></script>
- <script src="/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
-
- <script src="/base/static/lib/datejs/globalization/en-US.js"></script>
- <script src="/base/static/lib/datejs/core.js"></script>
- <script src="/base/static/lib/datejs/parser.js"></script>
- <script src="/base/static/lib/datejs/sugarpak.js"></script>
- <script src="/base/static/lib/datejs/extras.js"></script>
-
- <script src="/base/static/lib/qweb/qweb.js"></script>
-
- <script src="/base/static/src/js/boot.js"></script>
- <script src="/base/static/src/js/core.js"></script>
- <script src="/base/static/src/js/dates.js"></script>
- <script src="/base/static/src/js/formats.js"></script>
- <script src="/base/static/src/js/chrome.js"></script>
- <script src="/base/static/src/js/data.js"></script>
- <script src="/base/static/src/js/views.js"></script>
- <script src="/base/static/src/js/search.js"></script>
- <script src="/base/static/src/js/form.js"></script>
- <script src="/base/static/src/js/list.js"></script>
- <script type="text/javascript">
- QWeb.add_template('/base/static/src/xml/base.xml');
- </script>
-</head>
- <body id="oe" class="openerp">
- <h1 id="qunit-header">OpenERP Base Test Suite</h1>
- <h2 id="qunit-banner"></h2>
- <div id="qunit-testrunner-toolbar"></div>
- <h2 id="qunit-userAgent"></h2>
- <ol id="qunit-tests"></ol>
- <div id="qunit-fixture"></div>
- </body>
- <script type="text/javascript" src="/base/static/test/class.js"></script>
- <script type="text/javascript" src="/base/static/test/registry.js"></script>
- <script type="text/javascript" src="/base/static/test/form.js"></script>
- <script type="text/javascript" src="/base/static/test/list-utils.js"></script>
- <script type="text/javascript" src="/base/static/test/formats.js"></script>
-</html>
diff --git a/addons/base_calendar/__init__.py b/addons/base_calendar/__init__.py
deleted file mode 100644
index 4a64491e6bb..00000000000
--- a/addons/base_calendar/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/python
-import controllers
diff --git a/addons/base_diagram/__openerp__.py b/addons/base_diagram/__openerp__.py
deleted file mode 100644
index 92b768896f9..00000000000
--- a/addons/base_diagram/__openerp__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name" : "OpenERP Web base Diagram",
- "version" : "2.0",
- "depends" : [],
- 'active': False,
-}
diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js
deleted file mode 100644
index b992b5cbf42..00000000000
--- a/addons/base_diagram/static/src/js/diagram.js
+++ /dev/null
@@ -1,183 +0,0 @@
-/*---------------------------------------------------------
- * OpenERP base library
- *---------------------------------------------------------*/
-
-openerp.base.diagram = function (openerp) {
-
-openerp.base.views.add('diagram', 'openerp.base.DiagramView');
-openerp.base.DiagramView = openerp.base.Widget.extend({
- init: function(view_manager, session, element_id, dataset, view_id){
- this._super(session, element_id);
- this.view_manager = view_manager;
- this.dataset = dataset;
- this.model = dataset.model;
- this.view_id = view_id;
- this.name = "";
- this.domain = this.dataset._domain ? this.dataset._domain: [];
- this.context = {};
- this.ids = this.dataset.ids;
-
- console.log('data set>>',this.dataset)
- },
- start: function() {
- this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
- },
-
- toTitleCase: function(str) {
- return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
- },
-
- on_loaded: function(result) {
-
- var self = this;
- if(this.ids && this.ids.length) {
- this.id = this.ids[0];
- }
-
- this.fields_view = result.fields_view;
- this.view_id = this.fields_view.view_id;
- this.name = this.fields_view.name;
-
- this.fields = this.fields_view.fields;
-
- var children = this.fields_view.arch.children;
- /*
- * For Nodes (Fields)
- */
- this.node = '';
- this.bgcolor = '';
- this.shape = '';
- this.visible_fields_nodes = [];
- this.invisible_fields_nodes = [];
- this.fields_nodes_string = [];
-
- /*
- * For Arraows(Connector)
- */
- this.connector = '';
- this.src_node = '';
- this.des_node = '';
- this.connector_fields = [];
- this.fields_connector_string = [];
-
- for(ch in children) {
- if(children[ch]['tag'] == 'node') {
- this.node = children[ch]['attrs']['object'];
- this.bgcolor = children[ch]['attrs']['bgcolor'] || '';
- this.shape = children[ch]['attrs']['shape'] || '';
- for(node_chld in children[ch]['children']) {
- if (children[ch]['children'][node_chld]['tag'] = 'field') {
- var ch_name = children[ch]['children'][node_chld]['attrs']['name'];
-
- if (children[ch]['children'][node_chld]['attrs']['invisible']) {
- if (children[ch]['children'][node_chld]['attrs']['invisible'] == 1 && children[ch]['children'][node_chld]['attrs']['invisible'] == '1') {
- this.invisible_fields_nodes.push(ch_name)
- }
- }
- else {
- this.visible_fields_nodes.push(ch_name);
- var ch_node_string = this.fields[ch_name]['string'] || this.toTitleCase(ch_name);
- this.fields_nodes_string.push(ch_node_string)
- }
- }
- }
- } else if(children[ch]['tag'] == 'arrow') {
- this.connector = children[ch]['attrs']['object'];
- this.src_node = children[ch]['attrs']['source'];
- this.des_node = children[ch]['attrs']['destination'];
- for (arrow_chld in children[ch]['children']) {
- if (children[ch]['children'][arrow_chld]['tag'] = 'field') {
- var arr_ch_name = children[ch]['children'][arrow_chld]['attrs']['name'];
- var ch_node_string = this.fields[arr_ch_name]['string'] || this.toTitleCase(arr_ch_name);
- this.fields_connector_string.push(ch_node_string);
- this.connector_fields.push(arr_ch_name);
- }
- }
- }
- }
- this.$element.html(QWeb.render("DiagramView", {"fields_view": this.fields_view}));
-
- if(this.id) {
- this.rpc(
- '/base_diagram/diagram/get_diagram_info',
- {
- 'id': this.id,
- 'model': this.model,
- 'bgcolor': this.bgcolor,
- 'shape': this.shape,
- 'node': this.node,
- 'connector': this.connector,
- 'src_node': this.src_node,
- 'des_node': this.des_node,
- 'visible_node_fields': this.visible_fields_nodes,
- 'invisible_node_fields': this.invisible_fields_nodes,
- 'node_fields_string': this.fields_nodes_string,
- 'connector_fields': this.connector_fields,
- 'connector_fields_string': this.fields_connector_string
- },
- function(result) {
- self.draw_diagram(result);
- }
- )
- }
- },
-
- draw_diagram: function(result) {
- console.log('this>>>',this)
- var g = new Graph();
-// var raphel = new
- this.in_transition_field = result['in_transition_field'];
- this.out_transition_field = result['out_transition_field'];
- var res_nodes = result['nodes'];
- var res_connectors = result['conn'];
-
- var render = function(r, n) {
- var set;
- if (n.node.shape == 'ellipse') {
- set = r.set().push(
- r.ellipse(n.node.x - 30, n.node.y - 13, 40, 40).attr({
- "fill": n.node.color,
- r: "12px",
- "stroke-width": n.distance == 0 ? "3px" : "1px"
- })).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id)));
- } else {
- set = r.set().push(
- r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({"fill": n.node.color, r : "12px", "stroke-width" : n.distance == 0 ? "3px" : "1px" })).push(
- r.text(n.point[0], n.point[1] + 10, (n.label || n.id) + "\n(" + (n.distance == undefined ? "Infinity" : n.distance) + ")"));
-
- }
- return set;
- };
-
- for(nd in res_nodes) {
- var res_node = res_nodes[nd];
- g.addNode(res_node['name'],
- {
- node: res_node,
- render: render
- });
- }
-
- for(cr in res_connectors) {
- var res_connector = res_connectors[cr];
- g.addEdge(res_connector['source'], res_connector['destination']);
- }
-
- var layouter = new Graph.Layout.Spring(g);
- layouter.layout();
-
- var renderer = new Graph.Renderer.Raphael('dia-canvas', g, 800, 800);
- renderer.draw();
- },
-
- do_show: function () {
- this.$element.show();
- },
-
- do_hide: function () {
- this.$element.hide();
- }
-});
-};
-
-// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
diff --git a/addons/web/__init__.py b/addons/web/__init__.py
new file mode 100644
index 00000000000..ec702292ce8
--- /dev/null
+++ b/addons/web/__init__.py
@@ -0,0 +1,32 @@
+import common
+import controllers
+import common.dispatch
+import logging
+
+_logger = logging.getLogger(__name__)
+
+try:
+ import openerp.wsgi
+ import os
+ import tempfile
+ _logger.info("embedded mode")
+ class Options(object):
+ pass
+ o = Options()
+ o.dbfilter = '.*'
+ o.session_storage = os.path.join(tempfile.gettempdir(), "oe-sessions")
+ o.addons_path = os.path.dirname(os.path.dirname(__file__))
+ o.serve_static = True
+ o.server_host = '127.0.0.1'
+ o.server_port = 8069
+
+ app = common.dispatch.Root(o)
+ #import openerp.wsgi
+ openerp.wsgi.register_wsgi_handler(app)
+
+except ImportError:
+ _logger.info("standalone mode")
+
+# TODO
+# if we detect that we are imported from the openerp server register common.Root() as a wsgi entry point
+
diff --git a/addons/base/__openerp__.py b/addons/web/__openerp__.py
index 9c1124a108e..2c686a216fe 100644
--- a/addons/base/__openerp__.py
+++ b/addons/web/__openerp__.py
@@ -1,6 +1,5 @@
{
- "name" : "OpenERP Web base",
- "version" : "2.0",
+ "name" : "web",
"depends" : [],
'active': True,
'js' : [
@@ -47,4 +46,5 @@
"static/src/css/base.css",
"static/src/css/data_export.css",
],
+ 'wsgi' : 'app',
}
diff --git a/addons/base/common/__init__.py b/addons/web/common/__init__.py
index 60699c86f43..0628a7fa609 100644
--- a/addons/base/common/__init__.py
+++ b/addons/web/common/__init__.py
@@ -1,5 +1,4 @@
#!/usr/bin/python
# TODO if from openerpserver use backendlocal
# from backendlocal import *
-from backendrpc import *
from dispatch import *
diff --git a/addons/base/common/ast.py b/addons/web/common/ast.py
index 2fd565aa30d..2fd565aa30d 100644
--- a/addons/base/common/ast.py
+++ b/addons/web/common/ast.py
diff --git a/addons/base/common/backendlocal.py b/addons/web/common/backendlocal.py
index dac33991c4d..dac33991c4d 100644
--- a/addons/base/common/backendlocal.py
+++ b/addons/web/common/backendlocal.py
diff --git a/addons/base/common/backendrpc.py b/addons/web/common/backendrpc.py
index e6c59000caf..e6c59000caf 100644
--- a/addons/base/common/backendrpc.py
+++ b/addons/web/common/backendrpc.py
diff --git a/addons/base/common/dates.py b/addons/web/common/dates.py
index caa7f83c84a..caa7f83c84a 100644
--- a/addons/base/common/dates.py
+++ b/addons/web/common/dates.py
diff --git a/addons/base/common/dispatch.py b/addons/web/common/dispatch.py
index 37207cc485d..2336ca2d426 100644
--- a/addons/base/common/dispatch.py
+++ b/addons/web/common/dispatch.py
@@ -4,6 +4,7 @@ from __future__ import with_statement
import functools
import logging
import os
+import pprint
import sys
import traceback
import uuid
@@ -26,6 +27,8 @@ import backendrpc as backend
__all__ = ['Root', 'jsonrequest', 'httprequest', 'Controller',
'WebRequest', 'JsonRequest', 'HttpRequest']
+_logger = logging.getLogger(__name__)
+
#-----------------------------------------------------------
# Globals (wont move into a pool)
#-----------------------------------------------------------
@@ -159,8 +162,8 @@ class JsonRequest(WebRequest):
else:
self.jsonrequest = simplejson.loads(request, object_hook=nonliterals.non_literal_decoder)
self.init(self.jsonrequest.get("params", {}))
- if self.debug or 1:
- print "--> %s.%s %s" % (controller.__class__.__name__, method.__name__, self.jsonrequest)
+ if _logger.isEnabledFor(logging.DEBUG):
+ _logger.debug("--> %s.%s\n%s", controller.__class__.__name__, method.__name__, pprint.pformat(self.jsonrequest))
response['id'] = self.jsonrequest.get('id')
response["result"] = method(controller, self, **self.params)
except backend.OpenERPUnboundException:
@@ -184,7 +187,7 @@ class JsonRequest(WebRequest):
}
}
except Exception:
- logging.getLogger('openerp.JSONRequest.dispatch').exception\
+ logging.getLogger(__name__ + '.JSONRequest.dispatch').exception\
("An error occured while handling a json request")
error = {
'code': 300,
@@ -197,10 +200,8 @@ class JsonRequest(WebRequest):
if error:
response["error"] = error
- if self.debug or 1:
- print "<--", response
- print
-
+ if _logger.isEnabledFor(logging.DEBUG):
+ _logger.debug("<--\n%s", pprint.pformat(response))
content = simplejson.dumps(response, cls=nonliterals.NonLiteralEncoder)
return werkzeug.wrappers.Response(
content, headers=[('Content-Type', 'application/json'),
@@ -227,22 +228,23 @@ class HttpRequest(WebRequest):
""" Regular GET/POST request
"""
def dispatch(self, controller, method):
- self.init(dict(self.httprequest.args, **self.httprequest.form))
+ params = dict(self.httprequest.args)
+ params.update(self.httprequest.form)
+ params.update(self.httprequest.files)
+ self.init(params)
akw = {}
for key, value in self.httprequest.args.iteritems():
if isinstance(value, basestring) and len(value) < 1024:
akw[key] = value
else:
akw[key] = type(value)
- if self.debug or 1:
- print "%s --> %s.%s %r" % (self.httprequest.method, controller.__class__.__name__, method.__name__, akw)
+ _logger.debug("%s --> %s.%s %r", self.httprequest.method, controller.__class__.__name__, method.__name__, akw)
r = method(controller, self, **self.params)
if self.debug or 1:
if isinstance(r, werkzeug.wrappers.BaseResponse):
- print '<--', r
+ _logger.debug('<-- %s', r)
else:
- print "<--", 'size:', len(r)
- print
+ _logger.debug("<-- size: %s", len(r))
return r
def make_response(self, data, headers=None, cookies=None):
@@ -314,7 +316,7 @@ class Root(object):
by the server, will be filtered by this pattern
"""
def __init__(self, options):
- self.root = werkzeug.urls.Href('/base/webclient/home')
+ self.root = werkzeug.urls.Href('/web/webclient/home')
self.config = options
self.session_cookie = 'sessionid'
@@ -347,7 +349,7 @@ class Root(object):
if request.path == '/':
return werkzeug.utils.redirect(
- self.root(request.args), 301)(
+ self.root(dict(request.args, debug='')), 301)(
environ, start_response)
elif request.path == '/mobile':
return werkzeug.utils.redirect(
@@ -388,7 +390,7 @@ class Root(object):
manifest_path = os.path.join(addons_path, module, '__openerp__.py')
if os.path.isfile(manifest_path):
manifest = ast.literal_eval(open(manifest_path).read())
- print "Loading", module
+ _logger.info("Loading %s", module)
m = __import__(module)
addons_module[module] = m
addons_manifest[module] = manifest
@@ -421,6 +423,6 @@ class Root(object):
meth = rest[0]
m = getattr(c, meth)
if getattr(m, 'exposed', False):
- print "Dispatching to", ps, c, meth, m
+ _logger.debug("Dispatching to %s %s %s", ps, c, meth)
return m
return None
diff --git a/addons/base/common/http.py b/addons/web/common/http.py
index 3f6c96d1f42..3f6c96d1f42 100644
--- a/addons/base/common/http.py
+++ b/addons/web/common/http.py
diff --git a/addons/base/common/nonliterals.py b/addons/web/common/nonliterals.py
index 937da06ad9e..937da06ad9e 100644
--- a/addons/base/common/nonliterals.py
+++ b/addons/web/common/nonliterals.py
diff --git a/addons/web/common/release.py b/addons/web/common/release.py
new file mode 100644
index 00000000000..47570c032bb
--- /dev/null
+++ b/addons/web/common/release.py
@@ -0,0 +1,10 @@
+name = 'openerp-web'
+version = '6.1.0 alpha'
+description = "Web Client of OpenERP, the Enterprise Management Software"
+long_description = "OpenERP Web is the web client of the OpenERP, a free enterprise management software"
+author = "OpenERP SA"
+author_email = "info@openerp.com"
+support_email = 'support@openerp.com'
+url = "http://www.openerp.com/"
+download_url = ''
+license = "AGPL"
diff --git a/addons/web/controllers/__init__.py b/addons/web/controllers/__init__.py
new file mode 100644
index 00000000000..8ee9bae18d9
--- /dev/null
+++ b/addons/web/controllers/__init__.py
@@ -0,0 +1 @@
+import main
diff --git a/addons/base/controllers/main.py b/addons/web/controllers/main.py
index 3166f25b8c5..6ce4bd612f2 100644
--- a/addons/base/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -3,6 +3,7 @@
import base64
import csv
import glob
+import itertools
import operator
import os
import re
@@ -10,18 +11,19 @@ import simplejson
import textwrap
import xmlrpclib
import time
+import zlib
from xml.etree import ElementTree
from cStringIO import StringIO
-import base.common.dispatch as openerpweb
-import base.common.ast
-import base.common.nonliterals
-openerpweb.ast = base.common.ast
-openerpweb.nonliterals = base.common.nonliterals
-
from babel.messages.pofile import read_po
-_REPORT_POLLER_DELAY = 0.05
+import web.common.dispatch as openerpweb
+import web.common.ast
+import web.common.nonliterals
+import web.common.release
+openerpweb.ast = web.common.ast
+openerpweb.nonliterals = web.common.nonliterals
+
# Should move to openerpweb.Xml2Json
class Xml2Json:
@@ -63,7 +65,7 @@ class Xml2Json:
return res
#----------------------------------------------------------
-# OpenERP Web base Controllers
+# OpenERP Web web Controllers
#----------------------------------------------------------
def manifest_glob(addons_path, addons, key):
@@ -97,17 +99,13 @@ home_template = textwrap.dedent("""<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OpenERP</title>
- <link rel="shortcut icon" href="/base/static/src/img/favicon.ico" type="image/x-icon"/>
+ <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
%(css)s
- <!--[if lte IE 7]>
- <link rel="stylesheet" href="/base/static/src/css/base-ie7.css" type="text/css"/>
- <![endif]-->
%(javascript)s
<script type="text/javascript">
$(function() {
- QWeb = new QWeb2.Engine();
var c = new openerp.init();
- var wc = new c.base.WebClient("oe");
+ var wc = new c.web.WebClient("oe");
wc.start();
});
</script>
@@ -116,25 +114,25 @@ home_template = textwrap.dedent("""<!DOCTYPE html>
</html>
""")
class WebClient(openerpweb.Controller):
- _cp_path = "/base/webclient"
+ _cp_path = "/web/webclient"
@openerpweb.jsonrequest
- def csslist(self, req, mods='base'):
+ def csslist(self, req, mods='web'):
return manifest_glob(req.config.addons_path, mods.split(','), 'css')
@openerpweb.jsonrequest
- def jslist(self, req, mods='base'):
+ def jslist(self, req, mods='web'):
return manifest_glob(req.config.addons_path, mods.split(','), 'js')
@openerpweb.httprequest
- def css(self, req, mods='base'):
+ def css(self, req, mods='web'):
files = manifest_glob(req.config.addons_path, mods.split(','), 'css')
content,timestamp = concat_files(req.config.addons_path, files)
# TODO request set the Date of last modif and Etag
return req.make_response(content, [('Content-Type', 'text/css')])
@openerpweb.httprequest
- def js(self, req, mods='base'):
+ def js(self, req, mods='web'):
files = manifest_glob(req.config.addons_path, mods.split(','), 'js')
content,timestamp = concat_files(req.config.addons_path, files)
# TODO request set the Date of last modif and Etag
@@ -143,15 +141,15 @@ class WebClient(openerpweb.Controller):
@openerpweb.httprequest
def home(self, req, s_action=None, **kw):
# script tags
- jslist = ['/base/webclient/js']
+ jslist = ['/web/webclient/js']
if req.debug:
- jslist = manifest_glob(req.config.addons_path, ['base'], 'js')
+ jslist = [i + '?debug=' + str(time.time()) for i in manifest_glob(req.config.addons_path, ['web'], 'js')]
js = "\n ".join(['<script type="text/javascript" src="%s"></script>'%i for i in jslist])
# css tags
- csslist = ['/base/webclient/css']
+ csslist = ['/web/webclient/css']
if req.debug:
- csslist = manifest_glob(req.config.addons_path, ['base'], 'css')
+ csslist = [i + '?debug=' + str(time.time()) for i in manifest_glob(req.config.addons_path, ['web'], 'css')]
css = "\n ".join(['<link rel="stylesheet" href="%s">'%i for i in csslist])
r = home_template % {
'javascript': js,
@@ -195,8 +193,14 @@ class WebClient(openerpweb.Controller):
return {"modules": transs,
"lang_parameters": lang_obj}
+ @openerpweb.jsonrequest
+ def version_info(self, req):
+ return {
+ "version": web.common.release.version
+ }
+
class Database(openerpweb.Controller):
- _cp_path = "/base/database"
+ _cp_path = "/web/database"
@openerpweb.jsonrequest
def get_list(self, req):
@@ -247,12 +251,12 @@ class Database(openerpweb.Controller):
@openerpweb.httprequest
def backup(self, req, backup_db, backup_pwd, token):
try:
- db_dump = base64.decodestring(
+ db_dump = base64.b64decode(
req.session.proxy("db").dump(backup_pwd, backup_db))
return req.make_response(db_dump,
[('Content-Type', 'application/octet-stream; charset=binary'),
('Content-Disposition', 'attachment; filename="' + backup_db + '.dump"')],
- {'fileToken': token}
+ {'fileToken': int(token)}
)
except xmlrpclib.Fault, e:
if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
@@ -262,7 +266,7 @@ class Database(openerpweb.Controller):
@openerpweb.httprequest
def restore(self, req, db_file, restore_pwd, new_db):
try:
- data = base64.encodestring(db_file.file.read())
+ data = base64.b64encode(db_file.file.read())
req.session.proxy("db").restore(restore_pwd, new_db, data)
return ''
except xmlrpclib.Fault, e:
@@ -282,7 +286,7 @@ class Database(openerpweb.Controller):
return {'error': 'Error, password not changed !', 'title': 'Change Password'}
class Session(openerpweb.Controller):
- _cp_path = "/base/session"
+ _cp_path = "/web/session"
@openerpweb.jsonrequest
def login(self, req, db, login, password):
@@ -292,7 +296,15 @@ class Session(openerpweb.Controller):
return {
"session_id": req.session_id,
"uid": req.session._uid,
- "context": ctx
+ "context": ctx,
+ "db": req.session._db
+ }
+ @openerpweb.jsonrequest
+ def get_session_info(self, req):
+ return {
+ "uid": req.session._uid,
+ "context": req.session.get_context() if req.session._uid else False,
+ "db": req.session._db
}
@openerpweb.jsonrequest
def change_password (self,req,fields):
@@ -329,7 +341,7 @@ class Session(openerpweb.Controller):
# TODO query server for installed web modules
mods = []
for name, manifest in openerpweb.addons_manifest.items():
- if name != 'base' and manifest.get('active', True):
+ if name != 'web' and manifest.get('active', True):
mods.append(name)
return mods
@@ -448,8 +460,6 @@ def load_actions_from_ir_values(req, key, key2, models, meta):
def clean_action(req, action):
action.setdefault('flags', {})
- if action['type'] != 'ir.actions.act_window':
- return action
context = req.session.eval_context(req.context)
eval_ctx = req.session.evaluation_context(context)
@@ -461,7 +471,9 @@ def clean_action(req, action):
if isinstance(action.get('domain'), basestring):
action['domain'] = eval( action['domain'], eval_ctx ) or []
- return fix_view_modes(action)
+ 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):
@@ -533,7 +545,7 @@ def fix_view_modes(action):
return action
class Menu(openerpweb.Controller):
- _cp_path = "/base/menu"
+ _cp_path = "/web/menu"
@openerpweb.jsonrequest
def load(self, req):
@@ -581,7 +593,7 @@ class Menu(openerpweb.Controller):
return {"action": actions}
class DataSet(openerpweb.Controller):
- _cp_path = "/base/dataset"
+ _cp_path = "/web/dataset"
@openerpweb.jsonrequest
def fields(self, req, model):
@@ -702,6 +714,12 @@ class DataSet(openerpweb.Controller):
args[domain_id] = d
if context_id and len(args) - 1 >= context_id:
args[context_id] = c
+
+ for i in xrange(len(args)):
+ if isinstance(args[i], web.common.nonliterals.BaseContext):
+ args[i] = req.session.eval_context(args[i])
+ if isinstance(args[i], web.common.nonliterals.BaseDomain):
+ args[i] = req.session.eval_domain(args[i])
return getattr(req.session.model(model), method)(*args)
@@ -733,7 +751,7 @@ class DataSet(openerpweb.Controller):
return {'result': r}
class DataGroup(openerpweb.Controller):
- _cp_path = "/base/group"
+ _cp_path = "/web/group"
@openerpweb.jsonrequest
def read(self, req, model, fields, group_by_fields, domain=None, sort=None):
Model = req.session.model(model)
@@ -744,7 +762,7 @@ class DataGroup(openerpweb.Controller):
dict(context, group_by=group_by_fields), sort or False)
class View(openerpweb.Controller):
- _cp_path = "/base/view"
+ _cp_path = "/web/view"
def fields_view_get(self, req, model, view_id, view_type,
transform=True, toolbar=False, submenu=False):
@@ -753,6 +771,8 @@ class View(openerpweb.Controller):
fvg = Model.fields_view_get(view_id, view_type, context, toolbar, submenu)
# todo fme?: check that we should pass the evaluated context here
self.process_view(req.session, fvg, context, transform)
+ if toolbar and transform:
+ self.process_toolbar(req, fvg['toolbar'])
return fvg
def process_view(self, session, fvg, context, transform):
@@ -784,6 +804,22 @@ class View(openerpweb.Controller):
if field.get('context'):
field["context"] = self.parse_context(field["context"], session)
+ def process_toolbar(self, req, toolbar):
+ """
+ The toolbar is a mapping of section_key: [action_descriptor]
+
+ We need to clean all those actions in order to ensure correct
+ round-tripping
+ """
+ for actions in toolbar.itervalues():
+ for action in actions:
+ if 'context' in action:
+ action['context'] = self.parse_context(
+ action['context'], req.session)
+ if 'domain' in action:
+ action['domain'] = self.parse_domain(
+ action['domain'], req.session)
+
@openerpweb.jsonrequest
def add_custom(self, req, view_id, arch):
CustomView = req.session.model('ir.ui.view.custom')
@@ -873,21 +909,12 @@ class View(openerpweb.Controller):
if context_string:
elem.set(el, self.parse_context(context_string, session))
-class FormView(View):
- _cp_path = "/base/formview"
-
@openerpweb.jsonrequest
- def load(self, req, model, view_id, toolbar=False):
- fields_view = self.fields_view_get(req, model, view_id, 'form', toolbar=toolbar)
- return {'fields_view': fields_view}
+ def load(self, req, model, view_id, view_type, toolbar=False):
+ return self.fields_view_get(req, model, view_id, view_type, toolbar=toolbar)
class ListView(View):
- _cp_path = "/base/listview"
-
- @openerpweb.jsonrequest
- def load(self, req, model, view_id, toolbar=False):
- fields_view = self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar)
- return {'fields_view': fields_view}
+ _cp_path = "/web/listview"
def process_colors(self, view, row, context):
colors = view['arch']['attrs'].get('colors')
@@ -907,8 +934,17 @@ class ListView(View):
return color[0]
return 'maroon'
+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 SearchView(View):
- _cp_path = "/base/searchview"
+ _cp_path = "/web/searchview"
@openerpweb.jsonrequest
def load(self, req, model, view_id):
@@ -956,23 +992,25 @@ class SearchView(View):
return to_return
class Binary(openerpweb.Controller):
- _cp_path = "/base/binary"
+ _cp_path = "/web/binary"
@openerpweb.httprequest
def image(self, req, model, id, field, **kw):
- req.httpresponse.headers['Content-Type'] = 'image/png'
Model = req.session.model(model)
context = req.session.eval_context(req.context)
+
try:
if not id:
res = Model.default_get([field], context).get(field, '')
else:
res = Model.read([int(id)], [field], context)[0].get(field, '')
- return base64.decodestring(res)
- except: # TODO: what's the exception here?
- return self.placeholder(req)
+ image_data = base64.b64decode(res)
+ except (TypeError, xmlrpclib.Fault):
+ image_data = self.placeholder(req)
+ return req.make_response(image_data, [
+ ('Content-Type', 'image/png'), ('Content-Length', len(image_data))])
def placeholder(self, req):
- return open(os.path.join(req.addons_path, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
+ return open(os.path.join(req.addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
@openerpweb.httprequest
def saveas(self, req, model, id, field, fieldname, **kw):
@@ -991,11 +1029,7 @@ class Binary(openerpweb.Controller):
('Content-Disposition', 'attachment; filename=' + filename)])
@openerpweb.httprequest
- def upload(self, req, callback, ufile=None):
- headers = {}
- for key, val in req.httprequest.headers.iteritems():
- headers[key.lower()] = val
- size = int(headers.get('content-length', 0))
+ def upload(self, req, callback, ufile):
# TODO: might be useful to have a configuration flag for max-length file uploads
try:
out = """<script language="javascript" type="text/javascript">
@@ -1010,14 +1044,15 @@ class Binary(openerpweb.Controller):
});
}
</script>"""
- data = ufile.file.read()
- args = [size, ufile.filename, ufile.headers.getheader('Content-Type'), base64.encodestring(data)]
+ data = ufile.read()
+ args = [ufile.content_length, 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=None):
+ def upload_attachment(self, req, callback, model, id, ufile):
context = req.session.eval_context(req.context)
Model = req.session.model('ir.attachment')
try:
@@ -1030,7 +1065,7 @@ class Binary(openerpweb.Controller):
</script>"""
attachment_id = Model.create({
'name': ufile.filename,
- 'datas': base64.encodestring(ufile.file.read()),
+ 'datas': base64.encodestring(ufile.read()),
'res_model': model,
'res_id': int(id)
}, context)
@@ -1043,7 +1078,7 @@ class Binary(openerpweb.Controller):
return out % (simplejson.dumps(callback), simplejson.dumps(args))
class Action(openerpweb.Controller):
- _cp_path = "/base/action"
+ _cp_path = "/web/action"
@openerpweb.jsonrequest
def load(self, req, action_id):
@@ -1052,8 +1087,11 @@ class Action(openerpweb.Controller):
context = req.session.eval_context(req.context)
action_type = Actions.read([action_id], ['type'], context)
if action_type:
- action = req.session.model(action_type[0]['type']).read([action_id], False,
- context)
+ ctx = {}
+ if action_type[0]['type'] == 'ir.actions.report.xml':
+ ctx.update({'bin_size': True})
+ ctx.update(context)
+ action = req.session.model(action_type[0]['type']).read([action_id], False, ctx)
if action:
value = clean_action(req, action[0])
return {'result': value}
@@ -1063,250 +1101,308 @@ class Action(openerpweb.Controller):
return clean_action(req, req.session.model('ir.actions.server').run(
[action_id], req.session.eval_context(req.context)))
-class TreeView(View):
- _cp_path = "/base/treeview"
+class Export(View):
+ _cp_path = "/web/export"
@openerpweb.jsonrequest
- def load(self, req, model, view_id, toolbar=False):
- return self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar)
+ def formats(self, req):
+ """ Returns all valid export formats
- @openerpweb.jsonrequest
- def action(self, req, model, id):
- return load_actions_from_ir_values(
- req,'action', 'tree_but_open',[(model, id)],
- False)
+ :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(1))
-def export_csv(fields, result):
- fp = StringIO()
- writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
+ def fields_get(self, req, model):
+ Model = req.session.model(model)
+ fields = Model.fields_get(False, req.session.eval_context(req.context))
+ return fields
- writer.writerow(fields)
+ @openerpweb.jsonrequest
+ def get_fields(self, req, model, prefix='', parent_name= '',
+ import_compat=True, parent_field_type=None):
- for data in result:
- row = []
- for d in data:
- if isinstance(d, basestring):
- d = d.replace('\n',' ').replace('\t',' ')
- try:
- d = d.encode('utf-8')
- except:
- pass
- if d is False: d = None
- row.append(d)
- writer.writerow(row)
-
- fp.seek(0)
- data = fp.read()
- fp.close()
- return data
-
-def export_xls(fieldnames, table):
- try:
- import xlwt
- except ImportError:
- common.error(_('Import Error.'), _('Please install xlwt library to export to MS Excel.'))
+ if import_compat and parent_field_type == "many2one":
+ fields = {}
+ else:
+ fields = self.fields_get(req, model)
+ fields['.id'] = fields.pop('id') if 'id' in fields else {'string': 'ID'}
- workbook = xlwt.Workbook()
- worksheet = workbook.add_sheet('Sheet 1')
+ fields_sequence = sorted(fields.iteritems(),
+ key=lambda field: field[1].get('string', ''))
- for i, fieldname in enumerate(fieldnames):
- worksheet.write(0, i, str(fieldname))
- worksheet.col(i).width = 8000 # around 220 pixels
+ records = []
+ for field_name, field in fields_sequence:
+ if import_compat and 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
- style = xlwt.easyxf('align: wrap yes')
+ 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')}
+ records.append(record)
- for row_index, row in enumerate(table):
- for cell_index, cell_value in enumerate(row):
- cell_value = str(cell_value)
- cell_value = re.sub("\r", " ", cell_value)
- worksheet.write(row_index + 1, cell_index, cell_value, style)
+ 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
- fp = StringIO()
- workbook.save(fp)
- fp.seek(0)
- data = fp.read()
- fp.close()
- #return data.decode('ISO-8859-1')
- return unicode(data, 'utf-8', 'replace')
+ return records
-class Export(View):
- _cp_path = "/base/export"
+ @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'])
- def fields_get(self, req, model):
- Model = req.session.model(model)
- fields = Model.fields_get(False, req.session.eval_context(req.context))
- return fields
+ fields_data = self.fields_info(
+ req, model, map(operator.itemgetter('name'), export_fields_list))
- @openerpweb.jsonrequest
- def get_fields(self, req, model, prefix='', name= '', field_parent=None, params={}):
- import_compat = params.get("import_compat", False)
+ 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)
- field_parent_type = params.get("parent_field_type",False)
+ fields['.id'] = fields.pop('id') if 'id' in fields else {'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']
- if import_compat and field_parent_type and field_parent_type == "many2one":
- fields = {}
+ return info
- fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}})
- records = []
- fields_order = fields.keys()
- fields_order.sort(lambda x,y: -cmp(fields[x].get('string', ''), fields[y].get('string', '')))
-
- for index, field in enumerate(fields_order):
- value = fields[field]
- record = {}
- if import_compat and value.get('readonly', False):
- ok = False
- for sl in value.get('states', {}).values():
- for s in sl:
- ok = ok or (s==['readonly',False])
- if not ok: continue
-
- id = prefix + (prefix and '/'or '') + field
- nm = name + (name and '/' or '') + value['string']
- record.update(id=id, string= nm, action='javascript: void(0)',
- target=None, icon=None, children=[], field_type=value.get('type',False), required=value.get('required', False))
- records.append(record)
+ 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())
- if len(nm.split('/')) < 3 and value.get('relation', False):
- if import_compat:
- ref = value.pop('relation')
- cfields = self.fields_get(req, ref)
- if (value['type'] == 'many2many'):
- record['children'] = []
- record['params'] = {'model': ref, 'prefix': id, 'name': nm}
-
- elif value['type'] == 'many2one':
- record['children'] = [id + '/id', id + '/.id']
- record['params'] = {'model': ref, 'prefix': id, 'name': nm}
-
- else:
- cfields_order = cfields.keys()
- cfields_order.sort(lambda x,y: -cmp(cfields[x].get('string', ''), cfields[y].get('string', '')))
- children = []
- for j, fld in enumerate(cfields_order):
- cid = id + '/' + fld
- cid = cid.replace(' ', '_')
- children.append(cid)
- record['children'] = children or []
- record['params'] = {'model': ref, 'prefix': id, 'name': nm}
- else:
- ref = value.pop('relation')
- cfields = self.fields_get(req, ref)
- cfields_order = cfields.keys()
- cfields_order.sort(lambda x,y: -cmp(cfields[x].get('string', ''), cfields[y].get('string', '')))
- children = []
- for j, fld in enumerate(cfields_order):
- cid = id + '/' + fld
- cid = cid.replace(' ', '_')
- children.append(cid)
- record['children'] = children or []
- record['params'] = {'model': ref, 'prefix': id, 'name': nm}
-
- records.reverse()
- return records
+ #noinspection PyPropertyDefinition
+ @property
+ def content_type(self):
+ """ Provides the format's content type """
+ raise NotImplementedError()
- @openerpweb.jsonrequest
- def save_export_lists(self, req, name, model, field_list):
- result = {'resource':model, 'name':name, 'export_fields': []}
- for field in field_list:
- result['export_fields'].append((0, 0, {'name': field}))
- return req.session.model("ir.exports").create(result, req.session.eval_context(req.context))
+ def filename(self, base):
+ """ Creates a valid filename for the format (with extension) from the
+ provided base name (exension-less)
+ """
+ raise NotImplementedError()
- @openerpweb.jsonrequest
- def exist_export_lists(self, req, model):
- export_model = req.session.model("ir.exports")
- return export_model.read(export_model.search([('resource', '=', model)]), ['name'])
+ def from_data(self, fields, rows):
+ """ Conversion method from OpenERP's export data to whatever the
+ current export class outputs
- @openerpweb.jsonrequest
- def delete_export(self, req, export_id):
- req.session.model("ir.exports").unlink(export_id, req.session.eval_context(req.context))
- return True
+ :params list fields: a list of fields to export
+ :params list rows: a list of records to export
+ :returns:
+ :rtype: bytes
+ """
+ raise NotImplementedError()
- @openerpweb.jsonrequest
- def namelist(self,req, model, export_id):
+ @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))
- result = self.get_data(req, model, req.session.eval_context(req.context))
- ir_export_obj = req.session.model("ir.exports")
- ir_export_line_obj = req.session.model("ir.exports.line")
+ context = req.session.eval_context(req.context)
+ Model = req.session.model(model)
+ ids = ids or Model.search(domain, context=context)
- field = ir_export_obj.read(export_id)
- fields = ir_export_line_obj.read(field['export_fields'])
+ field_names = map(operator.itemgetter('name'), fields)
+ import_data = Model.export_data(ids, field_names, context).get('datas',[])
- name_list = {}
- [name_list.update({field['name']: result.get(field['name'])}) for field in fields]
- return name_list
+ if import_compat:
+ columns_headers = field_names
+ else:
+ columns_headers = [val['label'].strip() for val in fields]
- def get_data(self, req, model, context=None):
- ids = []
- context = context or {}
- fields_data = {}
- proxy = req.session.model(model)
- fields = self.fields_get(req, model)
- if not ids:
- f1 = proxy.fields_view_get(False, 'tree', context)['fields']
- f2 = proxy.fields_view_get(False, 'form', context)['fields']
-
- fields = dict(f1)
- fields.update(f2)
- fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}})
-
- def rec(fields):
- _fields = {'id': 'ID' , '.id': 'Database ID' }
- def model_populate(fields, prefix_node='', prefix=None, prefix_value='', level=2):
- fields_order = fields.keys()
- fields_order.sort(lambda x,y: -cmp(fields[x].get('string', ''), fields[y].get('string', '')))
-
- for field in fields_order:
- fields_data[prefix_node+field] = fields[field]
- if prefix_node:
- fields_data[prefix_node + field]['string'] = '%s%s' % (prefix_value, fields_data[prefix_node + field]['string'])
- st_name = fields[field]['string'] or field
- _fields[prefix_node+field] = st_name
- if fields[field].get('relation', False) and level>0:
- fields2 = self.fields_get(req, fields[field]['relation'])
- fields2.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}})
- model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1)
- model_populate(fields)
- return _fields
- return rec(fields)
- @openerpweb.jsonrequest
- def export_data(self, req, model, fields, ids, domain, import_compat=False, export_format="csv", context=None):
- context = req.session.eval_context(req.context)
- modle_obj = req.session.model(model)
- ids = ids or modle_obj.search(domain, context=context)
+ return req.make_response(self.from_data(columns_headers, import_data),
+ headers=[('Content-Disposition', 'attachment; filename="%s"' % self.filename(model)),
+ ('Content-Type', self.content_type)],
+ cookies={'fileToken': int(token)})
- field = fields.keys()
- result = modle_obj.export_data(ids, field , context).get('datas',[])
+class CSVExport(Export):
+ _cp_path = '/web/export/csv'
+ fmt = ('csv', 'CSV')
- if not import_compat:
- field = [val.strip() for val in fields.values()]
+ @property
+ def content_type(self):
+ return 'text/csv;charset=utf8'
- if export_format == 'xls':
- return export_xls(field, result)
- else:
- return export_csv(field, result)
+ def filename(self, base):
+ return base + '.csv'
-class Export(View):
- _cp_path = "/base/report"
+ def from_data(self, fields, rows):
+ fp = StringIO()
+ writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
+
+ writer.writerow(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:
+ 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 = ('xls', 'Excel')
+
+ @property
+ def content_type(self):
+ return 'application/vnd.ms-excel'
+
+ def filename(self, base):
+ return base + '.xls'
+
+ def from_data(self, fields, rows):
+ import xlwt
+
+ workbook = xlwt.Workbook()
+ worksheet = workbook.add_sheet('Sheet 1')
+
+ for i, fieldname in enumerate(fields):
+ worksheet.write(0, i, str(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)
+ 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)
- @openerpweb.jsonrequest
- def get_report(self, req, action):
report_srv = req.session.proxy("report")
- context = req.session.eval_context(openerpweb.nonliterals.CompoundContext(req.context, \
- action["context"]))
+ context = req.session.eval_context(
+ openerpweb.nonliterals.CompoundContext(
+ req.context or {}, 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 'form' in action['datas']:
+ report_data['form'] = action['datas']['form']
+ if 'ids' in action['datas']:
+ report_ids = action['datas']['ids']
+
+ report_id = report_srv.report(
+ req.session._db, req.session._uid, req.session._password,
+ action["report_name"], report_ids,
+ report_data, context)
- args = [req.session._db, req.session._uid, req.session._password, action["report_name"], context["active_ids"], {"id": context["active_id"], "model": context["active_model"], "report_type": action["report_type"]}, context]
- report_id = report_srv.report(*args)
- report = None
+ report_struct = None
while True:
- args2 = [req.session._db, req.session._uid, req.session._password, report_id]
- report = report_srv.report_get(*args2)
- if report["state"]:
+ report_struct = report_srv.report_get(
+ req.session._db, req.session._uid, req.session._password, report_id)
+ if report_struct["state"]:
break
- time.sleep(_REPORT_POLLER_DELAY)
-
- #TODO: ok now we've got the report, and so what?
- return False
+ 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')
+ return req.make_response(report,
+ headers=[
+ ('Content-Disposition', 'attachment; filename="%s.%s"' % (action['report_name'], report_struct['format'])),
+ ('Content-Type', report_mimetype),
+ ('Content-Length', len(report))],
+ cookies={'fileToken': int(token)})
diff --git a/addons/base/po/base.pot b/addons/web/po/base.pot
index e59c507c415..e59c507c415 100644
--- a/addons/base/po/base.pot
+++ b/addons/web/po/base.pot
diff --git a/addons/base/po/fr_FR.po b/addons/web/po/fr_FR.po
index 08905cac036..08905cac036 100644
--- a/addons/base/po/fr_FR.po
+++ b/addons/web/po/fr_FR.po
diff --git a/addons/web/po/web.pot b/addons/web/po/web.pot
new file mode 100644
index 00000000000..8d302a41fd7
--- /dev/null
+++ b/addons/web/po/web.pot
@@ -0,0 +1,574 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: addons/web/static/src/js/form.js:1473
+msgid "<em>   Search More...</em>"
+msgstr ""
+
+#: addons/web/static/src/js/form.js:1486
+#, python-format
+msgid "<em>   Create \"<strong>%s</strong>\"</em>"
+msgstr ""
+
+#: addons/web/static/src/js/form.js:1492
+msgid "<em>   Create and Edit...</em>"
+msgstr ""
+
+#: addons/web/static/src/js/views.js:484
+msgid "Translations"
+msgstr ""
+
+#: addons/web/static/src/js/views.js:489 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr ""
+
+#: addons/web/static/src/js/views.js:490
+msgid "Close"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for "
+"each need."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "In order to be productive, people need clean and easy to use interface."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "h3"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "</"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "h4"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "â™»"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria"
+" to a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&nbsp;"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It "
+"connects, improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac "
+"OS X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or "
+"application client."
+msgstr ""
+
diff --git a/addons/base/static/lib/datejs/core.js b/addons/web/static/lib/datejs/core.js
index 3e87087c476..3e87087c476 100644
--- a/addons/base/static/lib/datejs/core.js
+++ b/addons/web/static/lib/datejs/core.js
diff --git a/addons/base/static/lib/datejs/date.js b/addons/web/static/lib/datejs/date.js
index eda450113bb..eda450113bb 100644
--- a/addons/base/static/lib/datejs/date.js
+++ b/addons/web/static/lib/datejs/date.js
diff --git a/addons/base/static/lib/datejs/extras.js b/addons/web/static/lib/datejs/extras.js
index 5ea64b9ed30..5ea64b9ed30 100644
--- a/addons/base/static/lib/datejs/extras.js
+++ b/addons/web/static/lib/datejs/extras.js
diff --git a/addons/base/static/lib/datejs/globalization/af-ZA.js b/addons/web/static/lib/datejs/globalization/af-ZA.js
index 579b8ff29c7..579b8ff29c7 100644
--- a/addons/base/static/lib/datejs/globalization/af-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/af-ZA.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-AE.js b/addons/web/static/lib/datejs/globalization/ar-AE.js
index ce88ff57256..ce88ff57256 100644
--- a/addons/base/static/lib/datejs/globalization/ar-AE.js
+++ b/addons/web/static/lib/datejs/globalization/ar-AE.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-BH.js b/addons/web/static/lib/datejs/globalization/ar-BH.js
index bdd31de5ab9..bdd31de5ab9 100644
--- a/addons/base/static/lib/datejs/globalization/ar-BH.js
+++ b/addons/web/static/lib/datejs/globalization/ar-BH.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-DZ.js b/addons/web/static/lib/datejs/globalization/ar-DZ.js
index 404b26e2b34..404b26e2b34 100644
--- a/addons/base/static/lib/datejs/globalization/ar-DZ.js
+++ b/addons/web/static/lib/datejs/globalization/ar-DZ.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-EG.js b/addons/web/static/lib/datejs/globalization/ar-EG.js
index eaf2850ee61..eaf2850ee61 100644
--- a/addons/base/static/lib/datejs/globalization/ar-EG.js
+++ b/addons/web/static/lib/datejs/globalization/ar-EG.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-IQ.js b/addons/web/static/lib/datejs/globalization/ar-IQ.js
index 5263d32d44f..5263d32d44f 100644
--- a/addons/base/static/lib/datejs/globalization/ar-IQ.js
+++ b/addons/web/static/lib/datejs/globalization/ar-IQ.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-JO.js b/addons/web/static/lib/datejs/globalization/ar-JO.js
index 94d5797ec82..94d5797ec82 100644
--- a/addons/base/static/lib/datejs/globalization/ar-JO.js
+++ b/addons/web/static/lib/datejs/globalization/ar-JO.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-KW.js b/addons/web/static/lib/datejs/globalization/ar-KW.js
index 0918c330c1b..0918c330c1b 100644
--- a/addons/base/static/lib/datejs/globalization/ar-KW.js
+++ b/addons/web/static/lib/datejs/globalization/ar-KW.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-LB.js b/addons/web/static/lib/datejs/globalization/ar-LB.js
index dc06351ff66..dc06351ff66 100644
--- a/addons/base/static/lib/datejs/globalization/ar-LB.js
+++ b/addons/web/static/lib/datejs/globalization/ar-LB.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-LY.js b/addons/web/static/lib/datejs/globalization/ar-LY.js
index 95981d38f37..95981d38f37 100644
--- a/addons/base/static/lib/datejs/globalization/ar-LY.js
+++ b/addons/web/static/lib/datejs/globalization/ar-LY.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-MA.js b/addons/web/static/lib/datejs/globalization/ar-MA.js
index 050afc944da..050afc944da 100644
--- a/addons/base/static/lib/datejs/globalization/ar-MA.js
+++ b/addons/web/static/lib/datejs/globalization/ar-MA.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-OM.js b/addons/web/static/lib/datejs/globalization/ar-OM.js
index 133a782bec1..133a782bec1 100644
--- a/addons/base/static/lib/datejs/globalization/ar-OM.js
+++ b/addons/web/static/lib/datejs/globalization/ar-OM.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-QA.js b/addons/web/static/lib/datejs/globalization/ar-QA.js
index 55bb6ee84d2..55bb6ee84d2 100644
--- a/addons/base/static/lib/datejs/globalization/ar-QA.js
+++ b/addons/web/static/lib/datejs/globalization/ar-QA.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-SA.js b/addons/web/static/lib/datejs/globalization/ar-SA.js
index 6ec866913b1..6ec866913b1 100644
--- a/addons/base/static/lib/datejs/globalization/ar-SA.js
+++ b/addons/web/static/lib/datejs/globalization/ar-SA.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-SY.js b/addons/web/static/lib/datejs/globalization/ar-SY.js
index 317881211e6..317881211e6 100644
--- a/addons/base/static/lib/datejs/globalization/ar-SY.js
+++ b/addons/web/static/lib/datejs/globalization/ar-SY.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-TN.js b/addons/web/static/lib/datejs/globalization/ar-TN.js
index 2e08507f434..2e08507f434 100644
--- a/addons/base/static/lib/datejs/globalization/ar-TN.js
+++ b/addons/web/static/lib/datejs/globalization/ar-TN.js
diff --git a/addons/base/static/lib/datejs/globalization/ar-YE.js b/addons/web/static/lib/datejs/globalization/ar-YE.js
index 15f3e280842..15f3e280842 100644
--- a/addons/base/static/lib/datejs/globalization/ar-YE.js
+++ b/addons/web/static/lib/datejs/globalization/ar-YE.js
diff --git a/addons/base/static/lib/datejs/globalization/az-Cyrl-AZ.js b/addons/web/static/lib/datejs/globalization/az-Cyrl-AZ.js
index f4332edbf3a..f4332edbf3a 100644
--- a/addons/base/static/lib/datejs/globalization/az-Cyrl-AZ.js
+++ b/addons/web/static/lib/datejs/globalization/az-Cyrl-AZ.js
diff --git a/addons/base/static/lib/datejs/globalization/az-Latn-AZ.js b/addons/web/static/lib/datejs/globalization/az-Latn-AZ.js
index 448c185813c..448c185813c 100644
--- a/addons/base/static/lib/datejs/globalization/az-Latn-AZ.js
+++ b/addons/web/static/lib/datejs/globalization/az-Latn-AZ.js
diff --git a/addons/base/static/lib/datejs/globalization/be-BY.js b/addons/web/static/lib/datejs/globalization/be-BY.js
index 5add2e4d419..5add2e4d419 100644
--- a/addons/base/static/lib/datejs/globalization/be-BY.js
+++ b/addons/web/static/lib/datejs/globalization/be-BY.js
diff --git a/addons/base/static/lib/datejs/globalization/bg-BG.js b/addons/web/static/lib/datejs/globalization/bg-BG.js
index d331ea7d70a..d331ea7d70a 100644
--- a/addons/base/static/lib/datejs/globalization/bg-BG.js
+++ b/addons/web/static/lib/datejs/globalization/bg-BG.js
diff --git a/addons/base/static/lib/datejs/globalization/bs-Latn-BA.js b/addons/web/static/lib/datejs/globalization/bs-Latn-BA.js
index a63ccd154cf..a63ccd154cf 100644
--- a/addons/base/static/lib/datejs/globalization/bs-Latn-BA.js
+++ b/addons/web/static/lib/datejs/globalization/bs-Latn-BA.js
diff --git a/addons/base/static/lib/datejs/globalization/ca-ES.js b/addons/web/static/lib/datejs/globalization/ca-ES.js
index d2e426bc6c2..d2e426bc6c2 100644
--- a/addons/base/static/lib/datejs/globalization/ca-ES.js
+++ b/addons/web/static/lib/datejs/globalization/ca-ES.js
diff --git a/addons/base/static/lib/datejs/globalization/cs-CZ.js b/addons/web/static/lib/datejs/globalization/cs-CZ.js
index 1c573d3a320..1c573d3a320 100644
--- a/addons/base/static/lib/datejs/globalization/cs-CZ.js
+++ b/addons/web/static/lib/datejs/globalization/cs-CZ.js
diff --git a/addons/base/static/lib/datejs/globalization/cy-GB.js b/addons/web/static/lib/datejs/globalization/cy-GB.js
index 95aa8ec8805..95aa8ec8805 100644
--- a/addons/base/static/lib/datejs/globalization/cy-GB.js
+++ b/addons/web/static/lib/datejs/globalization/cy-GB.js
diff --git a/addons/base/static/lib/datejs/globalization/da-DK.js b/addons/web/static/lib/datejs/globalization/da-DK.js
index 7299b5b393a..7299b5b393a 100644
--- a/addons/base/static/lib/datejs/globalization/da-DK.js
+++ b/addons/web/static/lib/datejs/globalization/da-DK.js
diff --git a/addons/base/static/lib/datejs/globalization/de-AT.js b/addons/web/static/lib/datejs/globalization/de-AT.js
index f9bfe255ae9..f9bfe255ae9 100644
--- a/addons/base/static/lib/datejs/globalization/de-AT.js
+++ b/addons/web/static/lib/datejs/globalization/de-AT.js
diff --git a/addons/base/static/lib/datejs/globalization/de-CH.js b/addons/web/static/lib/datejs/globalization/de-CH.js
index d8230611eb8..d8230611eb8 100644
--- a/addons/base/static/lib/datejs/globalization/de-CH.js
+++ b/addons/web/static/lib/datejs/globalization/de-CH.js
diff --git a/addons/base/static/lib/datejs/globalization/de-DE.js b/addons/web/static/lib/datejs/globalization/de-DE.js
index 757f15281a3..757f15281a3 100644
--- a/addons/base/static/lib/datejs/globalization/de-DE.js
+++ b/addons/web/static/lib/datejs/globalization/de-DE.js
diff --git a/addons/base/static/lib/datejs/globalization/de-LI.js b/addons/web/static/lib/datejs/globalization/de-LI.js
index 42423d8e664..42423d8e664 100644
--- a/addons/base/static/lib/datejs/globalization/de-LI.js
+++ b/addons/web/static/lib/datejs/globalization/de-LI.js
diff --git a/addons/base/static/lib/datejs/globalization/de-LU.js b/addons/web/static/lib/datejs/globalization/de-LU.js
index bf0c0846ef9..bf0c0846ef9 100644
--- a/addons/base/static/lib/datejs/globalization/de-LU.js
+++ b/addons/web/static/lib/datejs/globalization/de-LU.js
diff --git a/addons/base/static/lib/datejs/globalization/dv-MV.js b/addons/web/static/lib/datejs/globalization/dv-MV.js
index fa15fdc4d6d..fa15fdc4d6d 100644
--- a/addons/base/static/lib/datejs/globalization/dv-MV.js
+++ b/addons/web/static/lib/datejs/globalization/dv-MV.js
diff --git a/addons/base/static/lib/datejs/globalization/el-GR.js b/addons/web/static/lib/datejs/globalization/el-GR.js
index 7d16738dce9..7d16738dce9 100644
--- a/addons/base/static/lib/datejs/globalization/el-GR.js
+++ b/addons/web/static/lib/datejs/globalization/el-GR.js
diff --git a/addons/base/static/lib/datejs/globalization/en-029.js b/addons/web/static/lib/datejs/globalization/en-029.js
index 3a338ac72b5..3a338ac72b5 100644
--- a/addons/base/static/lib/datejs/globalization/en-029.js
+++ b/addons/web/static/lib/datejs/globalization/en-029.js
diff --git a/addons/base/static/lib/datejs/globalization/en-AU.js b/addons/web/static/lib/datejs/globalization/en-AU.js
index 7a8b0b36593..7a8b0b36593 100644
--- a/addons/base/static/lib/datejs/globalization/en-AU.js
+++ b/addons/web/static/lib/datejs/globalization/en-AU.js
diff --git a/addons/base/static/lib/datejs/globalization/en-BZ.js b/addons/web/static/lib/datejs/globalization/en-BZ.js
index d92880048ec..d92880048ec 100644
--- a/addons/base/static/lib/datejs/globalization/en-BZ.js
+++ b/addons/web/static/lib/datejs/globalization/en-BZ.js
diff --git a/addons/base/static/lib/datejs/globalization/en-CA.js b/addons/web/static/lib/datejs/globalization/en-CA.js
index e919e1a48e9..e919e1a48e9 100644
--- a/addons/base/static/lib/datejs/globalization/en-CA.js
+++ b/addons/web/static/lib/datejs/globalization/en-CA.js
diff --git a/addons/base/static/lib/datejs/globalization/en-GB.js b/addons/web/static/lib/datejs/globalization/en-GB.js
index 6c43f4eb652..6c43f4eb652 100644
--- a/addons/base/static/lib/datejs/globalization/en-GB.js
+++ b/addons/web/static/lib/datejs/globalization/en-GB.js
diff --git a/addons/base/static/lib/datejs/globalization/en-IE.js b/addons/web/static/lib/datejs/globalization/en-IE.js
index 47538ef003b..47538ef003b 100644
--- a/addons/base/static/lib/datejs/globalization/en-IE.js
+++ b/addons/web/static/lib/datejs/globalization/en-IE.js
diff --git a/addons/base/static/lib/datejs/globalization/en-JM.js b/addons/web/static/lib/datejs/globalization/en-JM.js
index f7bcf959de0..f7bcf959de0 100644
--- a/addons/base/static/lib/datejs/globalization/en-JM.js
+++ b/addons/web/static/lib/datejs/globalization/en-JM.js
diff --git a/addons/base/static/lib/datejs/globalization/en-NZ.js b/addons/web/static/lib/datejs/globalization/en-NZ.js
index 2d87ecc5907..2d87ecc5907 100644
--- a/addons/base/static/lib/datejs/globalization/en-NZ.js
+++ b/addons/web/static/lib/datejs/globalization/en-NZ.js
diff --git a/addons/base/static/lib/datejs/globalization/en-PH.js b/addons/web/static/lib/datejs/globalization/en-PH.js
index cb72d0e6de6..cb72d0e6de6 100644
--- a/addons/base/static/lib/datejs/globalization/en-PH.js
+++ b/addons/web/static/lib/datejs/globalization/en-PH.js
diff --git a/addons/base/static/lib/datejs/globalization/en-TT.js b/addons/web/static/lib/datejs/globalization/en-TT.js
index 4ce78de5e13..4ce78de5e13 100644
--- a/addons/base/static/lib/datejs/globalization/en-TT.js
+++ b/addons/web/static/lib/datejs/globalization/en-TT.js
diff --git a/addons/base/static/lib/datejs/globalization/en-US.js b/addons/web/static/lib/datejs/globalization/en-US.js
index 190edc918b8..190edc918b8 100644
--- a/addons/base/static/lib/datejs/globalization/en-US.js
+++ b/addons/web/static/lib/datejs/globalization/en-US.js
diff --git a/addons/base/static/lib/datejs/globalization/en-ZA.js b/addons/web/static/lib/datejs/globalization/en-ZA.js
index 22219a329ca..22219a329ca 100644
--- a/addons/base/static/lib/datejs/globalization/en-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/en-ZA.js
diff --git a/addons/base/static/lib/datejs/globalization/en-ZW.js b/addons/web/static/lib/datejs/globalization/en-ZW.js
index ab88bcd1a5c..ab88bcd1a5c 100644
--- a/addons/base/static/lib/datejs/globalization/en-ZW.js
+++ b/addons/web/static/lib/datejs/globalization/en-ZW.js
diff --git a/addons/base/static/lib/datejs/globalization/es-AR.js b/addons/web/static/lib/datejs/globalization/es-AR.js
index 6fb5e6b0e02..6fb5e6b0e02 100644
--- a/addons/base/static/lib/datejs/globalization/es-AR.js
+++ b/addons/web/static/lib/datejs/globalization/es-AR.js
diff --git a/addons/base/static/lib/datejs/globalization/es-BO.js b/addons/web/static/lib/datejs/globalization/es-BO.js
index c2d422919b2..c2d422919b2 100644
--- a/addons/base/static/lib/datejs/globalization/es-BO.js
+++ b/addons/web/static/lib/datejs/globalization/es-BO.js
diff --git a/addons/base/static/lib/datejs/globalization/es-CL.js b/addons/web/static/lib/datejs/globalization/es-CL.js
index 8cf18922932..8cf18922932 100644
--- a/addons/base/static/lib/datejs/globalization/es-CL.js
+++ b/addons/web/static/lib/datejs/globalization/es-CL.js
diff --git a/addons/base/static/lib/datejs/globalization/es-CO.js b/addons/web/static/lib/datejs/globalization/es-CO.js
index 7d4cbfa5bf3..7d4cbfa5bf3 100644
--- a/addons/base/static/lib/datejs/globalization/es-CO.js
+++ b/addons/web/static/lib/datejs/globalization/es-CO.js
diff --git a/addons/base/static/lib/datejs/globalization/es-CR.js b/addons/web/static/lib/datejs/globalization/es-CR.js
index 1a5012c14e7..1a5012c14e7 100644
--- a/addons/base/static/lib/datejs/globalization/es-CR.js
+++ b/addons/web/static/lib/datejs/globalization/es-CR.js
diff --git a/addons/base/static/lib/datejs/globalization/es-DO.js b/addons/web/static/lib/datejs/globalization/es-DO.js
index 2ff8a2ea531..2ff8a2ea531 100644
--- a/addons/base/static/lib/datejs/globalization/es-DO.js
+++ b/addons/web/static/lib/datejs/globalization/es-DO.js
diff --git a/addons/base/static/lib/datejs/globalization/es-EC.js b/addons/web/static/lib/datejs/globalization/es-EC.js
index 9847d0c6d35..9847d0c6d35 100644
--- a/addons/base/static/lib/datejs/globalization/es-EC.js
+++ b/addons/web/static/lib/datejs/globalization/es-EC.js
diff --git a/addons/base/static/lib/datejs/globalization/es-ES.js b/addons/web/static/lib/datejs/globalization/es-ES.js
index 91e7183dd8d..91e7183dd8d 100644
--- a/addons/base/static/lib/datejs/globalization/es-ES.js
+++ b/addons/web/static/lib/datejs/globalization/es-ES.js
diff --git a/addons/base/static/lib/datejs/globalization/es-GT.js b/addons/web/static/lib/datejs/globalization/es-GT.js
index 7a7edaf863f..7a7edaf863f 100644
--- a/addons/base/static/lib/datejs/globalization/es-GT.js
+++ b/addons/web/static/lib/datejs/globalization/es-GT.js
diff --git a/addons/base/static/lib/datejs/globalization/es-HN.js b/addons/web/static/lib/datejs/globalization/es-HN.js
index c1dc596ee87..c1dc596ee87 100644
--- a/addons/base/static/lib/datejs/globalization/es-HN.js
+++ b/addons/web/static/lib/datejs/globalization/es-HN.js
diff --git a/addons/base/static/lib/datejs/globalization/es-MX.js b/addons/web/static/lib/datejs/globalization/es-MX.js
index 52ef0ab2b12..52ef0ab2b12 100644
--- a/addons/base/static/lib/datejs/globalization/es-MX.js
+++ b/addons/web/static/lib/datejs/globalization/es-MX.js
diff --git a/addons/base/static/lib/datejs/globalization/es-NI.js b/addons/web/static/lib/datejs/globalization/es-NI.js
index 850dbcb6abb..850dbcb6abb 100644
--- a/addons/base/static/lib/datejs/globalization/es-NI.js
+++ b/addons/web/static/lib/datejs/globalization/es-NI.js
diff --git a/addons/base/static/lib/datejs/globalization/es-PA.js b/addons/web/static/lib/datejs/globalization/es-PA.js
index 85351d74dc2..85351d74dc2 100644
--- a/addons/base/static/lib/datejs/globalization/es-PA.js
+++ b/addons/web/static/lib/datejs/globalization/es-PA.js
diff --git a/addons/base/static/lib/datejs/globalization/es-PE.js b/addons/web/static/lib/datejs/globalization/es-PE.js
index 3084ad4c120..3084ad4c120 100644
--- a/addons/base/static/lib/datejs/globalization/es-PE.js
+++ b/addons/web/static/lib/datejs/globalization/es-PE.js
diff --git a/addons/base/static/lib/datejs/globalization/es-PR.js b/addons/web/static/lib/datejs/globalization/es-PR.js
index a1c86c413c9..a1c86c413c9 100644
--- a/addons/base/static/lib/datejs/globalization/es-PR.js
+++ b/addons/web/static/lib/datejs/globalization/es-PR.js
diff --git a/addons/base/static/lib/datejs/globalization/es-PY.js b/addons/web/static/lib/datejs/globalization/es-PY.js
index 96f61aeeced..96f61aeeced 100644
--- a/addons/base/static/lib/datejs/globalization/es-PY.js
+++ b/addons/web/static/lib/datejs/globalization/es-PY.js
diff --git a/addons/base/static/lib/datejs/globalization/es-SV.js b/addons/web/static/lib/datejs/globalization/es-SV.js
index f92011935e4..f92011935e4 100644
--- a/addons/base/static/lib/datejs/globalization/es-SV.js
+++ b/addons/web/static/lib/datejs/globalization/es-SV.js
diff --git a/addons/base/static/lib/datejs/globalization/es-UY.js b/addons/web/static/lib/datejs/globalization/es-UY.js
index dc8ae404a53..dc8ae404a53 100644
--- a/addons/base/static/lib/datejs/globalization/es-UY.js
+++ b/addons/web/static/lib/datejs/globalization/es-UY.js
diff --git a/addons/base/static/lib/datejs/globalization/es-VE.js b/addons/web/static/lib/datejs/globalization/es-VE.js
index 087110fb229..087110fb229 100644
--- a/addons/base/static/lib/datejs/globalization/es-VE.js
+++ b/addons/web/static/lib/datejs/globalization/es-VE.js
diff --git a/addons/base/static/lib/datejs/globalization/et-EE.js b/addons/web/static/lib/datejs/globalization/et-EE.js
index aef9fddf778..aef9fddf778 100644
--- a/addons/base/static/lib/datejs/globalization/et-EE.js
+++ b/addons/web/static/lib/datejs/globalization/et-EE.js
diff --git a/addons/base/static/lib/datejs/globalization/eu-ES.js b/addons/web/static/lib/datejs/globalization/eu-ES.js
index 44d0cfa12ba..44d0cfa12ba 100644
--- a/addons/base/static/lib/datejs/globalization/eu-ES.js
+++ b/addons/web/static/lib/datejs/globalization/eu-ES.js
diff --git a/addons/base/static/lib/datejs/globalization/fa-IR.js b/addons/web/static/lib/datejs/globalization/fa-IR.js
index 03941d6142e..03941d6142e 100644
--- a/addons/base/static/lib/datejs/globalization/fa-IR.js
+++ b/addons/web/static/lib/datejs/globalization/fa-IR.js
diff --git a/addons/base/static/lib/datejs/globalization/fi-FI.js b/addons/web/static/lib/datejs/globalization/fi-FI.js
index 21febcc311a..21febcc311a 100644
--- a/addons/base/static/lib/datejs/globalization/fi-FI.js
+++ b/addons/web/static/lib/datejs/globalization/fi-FI.js
diff --git a/addons/base/static/lib/datejs/globalization/fo-FO.js b/addons/web/static/lib/datejs/globalization/fo-FO.js
index 4deb50d8d82..4deb50d8d82 100644
--- a/addons/base/static/lib/datejs/globalization/fo-FO.js
+++ b/addons/web/static/lib/datejs/globalization/fo-FO.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-BE.js b/addons/web/static/lib/datejs/globalization/fr-BE.js
index d4592a8a01a..d4592a8a01a 100644
--- a/addons/base/static/lib/datejs/globalization/fr-BE.js
+++ b/addons/web/static/lib/datejs/globalization/fr-BE.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-CA.js b/addons/web/static/lib/datejs/globalization/fr-CA.js
index 28f0d6bb617..28f0d6bb617 100644
--- a/addons/base/static/lib/datejs/globalization/fr-CA.js
+++ b/addons/web/static/lib/datejs/globalization/fr-CA.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-CH.js b/addons/web/static/lib/datejs/globalization/fr-CH.js
index a1cb4efc5c0..a1cb4efc5c0 100644
--- a/addons/base/static/lib/datejs/globalization/fr-CH.js
+++ b/addons/web/static/lib/datejs/globalization/fr-CH.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-FR.js b/addons/web/static/lib/datejs/globalization/fr-FR.js
index 50efe1e26d7..50efe1e26d7 100644
--- a/addons/base/static/lib/datejs/globalization/fr-FR.js
+++ b/addons/web/static/lib/datejs/globalization/fr-FR.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-LU.js b/addons/web/static/lib/datejs/globalization/fr-LU.js
index 0ee8fcbe333..0ee8fcbe333 100644
--- a/addons/base/static/lib/datejs/globalization/fr-LU.js
+++ b/addons/web/static/lib/datejs/globalization/fr-LU.js
diff --git a/addons/base/static/lib/datejs/globalization/fr-MC.js b/addons/web/static/lib/datejs/globalization/fr-MC.js
index d17af59e730..d17af59e730 100644
--- a/addons/base/static/lib/datejs/globalization/fr-MC.js
+++ b/addons/web/static/lib/datejs/globalization/fr-MC.js
diff --git a/addons/base/static/lib/datejs/globalization/gl-ES.js b/addons/web/static/lib/datejs/globalization/gl-ES.js
index edadc90b9d0..edadc90b9d0 100644
--- a/addons/base/static/lib/datejs/globalization/gl-ES.js
+++ b/addons/web/static/lib/datejs/globalization/gl-ES.js
diff --git a/addons/base/static/lib/datejs/globalization/gu-IN.js b/addons/web/static/lib/datejs/globalization/gu-IN.js
index f7998099be6..f7998099be6 100644
--- a/addons/base/static/lib/datejs/globalization/gu-IN.js
+++ b/addons/web/static/lib/datejs/globalization/gu-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/he-IL.js b/addons/web/static/lib/datejs/globalization/he-IL.js
index 07ebb4ccb20..07ebb4ccb20 100644
--- a/addons/base/static/lib/datejs/globalization/he-IL.js
+++ b/addons/web/static/lib/datejs/globalization/he-IL.js
diff --git a/addons/base/static/lib/datejs/globalization/hi-IN.js b/addons/web/static/lib/datejs/globalization/hi-IN.js
index 3e65e2aea7d..3e65e2aea7d 100644
--- a/addons/base/static/lib/datejs/globalization/hi-IN.js
+++ b/addons/web/static/lib/datejs/globalization/hi-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/hr-BA.js b/addons/web/static/lib/datejs/globalization/hr-BA.js
index b7314386f30..b7314386f30 100644
--- a/addons/base/static/lib/datejs/globalization/hr-BA.js
+++ b/addons/web/static/lib/datejs/globalization/hr-BA.js
diff --git a/addons/base/static/lib/datejs/globalization/hr-HR.js b/addons/web/static/lib/datejs/globalization/hr-HR.js
index 5f0ff352606..5f0ff352606 100644
--- a/addons/base/static/lib/datejs/globalization/hr-HR.js
+++ b/addons/web/static/lib/datejs/globalization/hr-HR.js
diff --git a/addons/base/static/lib/datejs/globalization/hu-HU.js b/addons/web/static/lib/datejs/globalization/hu-HU.js
index c6518182e67..c6518182e67 100644
--- a/addons/base/static/lib/datejs/globalization/hu-HU.js
+++ b/addons/web/static/lib/datejs/globalization/hu-HU.js
diff --git a/addons/base/static/lib/datejs/globalization/hy-AM.js b/addons/web/static/lib/datejs/globalization/hy-AM.js
index d230461c6a5..d230461c6a5 100644
--- a/addons/base/static/lib/datejs/globalization/hy-AM.js
+++ b/addons/web/static/lib/datejs/globalization/hy-AM.js
diff --git a/addons/base/static/lib/datejs/globalization/id-ID.js b/addons/web/static/lib/datejs/globalization/id-ID.js
index 082e9c99dcf..082e9c99dcf 100644
--- a/addons/base/static/lib/datejs/globalization/id-ID.js
+++ b/addons/web/static/lib/datejs/globalization/id-ID.js
diff --git a/addons/base/static/lib/datejs/globalization/is-IS.js b/addons/web/static/lib/datejs/globalization/is-IS.js
index 929cad34a75..929cad34a75 100644
--- a/addons/base/static/lib/datejs/globalization/is-IS.js
+++ b/addons/web/static/lib/datejs/globalization/is-IS.js
diff --git a/addons/base/static/lib/datejs/globalization/it-CH.js b/addons/web/static/lib/datejs/globalization/it-CH.js
index 5470e951c96..5470e951c96 100644
--- a/addons/base/static/lib/datejs/globalization/it-CH.js
+++ b/addons/web/static/lib/datejs/globalization/it-CH.js
diff --git a/addons/base/static/lib/datejs/globalization/it-IT.js b/addons/web/static/lib/datejs/globalization/it-IT.js
index 67789e1d32a..67789e1d32a 100644
--- a/addons/base/static/lib/datejs/globalization/it-IT.js
+++ b/addons/web/static/lib/datejs/globalization/it-IT.js
diff --git a/addons/base/static/lib/datejs/globalization/ja-JP.js b/addons/web/static/lib/datejs/globalization/ja-JP.js
index 95414922c7a..95414922c7a 100644
--- a/addons/base/static/lib/datejs/globalization/ja-JP.js
+++ b/addons/web/static/lib/datejs/globalization/ja-JP.js
diff --git a/addons/base/static/lib/datejs/globalization/ka-GE.js b/addons/web/static/lib/datejs/globalization/ka-GE.js
index 917698c301d..917698c301d 100644
--- a/addons/base/static/lib/datejs/globalization/ka-GE.js
+++ b/addons/web/static/lib/datejs/globalization/ka-GE.js
diff --git a/addons/base/static/lib/datejs/globalization/kk-KZ.js b/addons/web/static/lib/datejs/globalization/kk-KZ.js
index 4ec2e25fbb6..4ec2e25fbb6 100644
--- a/addons/base/static/lib/datejs/globalization/kk-KZ.js
+++ b/addons/web/static/lib/datejs/globalization/kk-KZ.js
diff --git a/addons/base/static/lib/datejs/globalization/kn-IN.js b/addons/web/static/lib/datejs/globalization/kn-IN.js
index aa5b5f4e999..aa5b5f4e999 100644
--- a/addons/base/static/lib/datejs/globalization/kn-IN.js
+++ b/addons/web/static/lib/datejs/globalization/kn-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/ko-KR.js b/addons/web/static/lib/datejs/globalization/ko-KR.js
index 24c3d4abd34..24c3d4abd34 100644
--- a/addons/base/static/lib/datejs/globalization/ko-KR.js
+++ b/addons/web/static/lib/datejs/globalization/ko-KR.js
diff --git a/addons/base/static/lib/datejs/globalization/kok-IN.js b/addons/web/static/lib/datejs/globalization/kok-IN.js
index 99668197060..99668197060 100644
--- a/addons/base/static/lib/datejs/globalization/kok-IN.js
+++ b/addons/web/static/lib/datejs/globalization/kok-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/ky-KG.js b/addons/web/static/lib/datejs/globalization/ky-KG.js
index aeeef00979a..aeeef00979a 100644
--- a/addons/base/static/lib/datejs/globalization/ky-KG.js
+++ b/addons/web/static/lib/datejs/globalization/ky-KG.js
diff --git a/addons/base/static/lib/datejs/globalization/lt-LT.js b/addons/web/static/lib/datejs/globalization/lt-LT.js
index 0efcc5b170b..0efcc5b170b 100644
--- a/addons/base/static/lib/datejs/globalization/lt-LT.js
+++ b/addons/web/static/lib/datejs/globalization/lt-LT.js
diff --git a/addons/base/static/lib/datejs/globalization/lv-LV.js b/addons/web/static/lib/datejs/globalization/lv-LV.js
index 09ac7772654..09ac7772654 100644
--- a/addons/base/static/lib/datejs/globalization/lv-LV.js
+++ b/addons/web/static/lib/datejs/globalization/lv-LV.js
diff --git a/addons/base/static/lib/datejs/globalization/mi-NZ.js b/addons/web/static/lib/datejs/globalization/mi-NZ.js
index e74f2b7b997..e74f2b7b997 100644
--- a/addons/base/static/lib/datejs/globalization/mi-NZ.js
+++ b/addons/web/static/lib/datejs/globalization/mi-NZ.js
diff --git a/addons/base/static/lib/datejs/globalization/mk-MK.js b/addons/web/static/lib/datejs/globalization/mk-MK.js
index 17a1fa0c9b8..17a1fa0c9b8 100644
--- a/addons/base/static/lib/datejs/globalization/mk-MK.js
+++ b/addons/web/static/lib/datejs/globalization/mk-MK.js
diff --git a/addons/base/static/lib/datejs/globalization/mn-MN.js b/addons/web/static/lib/datejs/globalization/mn-MN.js
index d9eba61a0b5..d9eba61a0b5 100644
--- a/addons/base/static/lib/datejs/globalization/mn-MN.js
+++ b/addons/web/static/lib/datejs/globalization/mn-MN.js
diff --git a/addons/base/static/lib/datejs/globalization/mr-IN.js b/addons/web/static/lib/datejs/globalization/mr-IN.js
index f9a75c42004..f9a75c42004 100644
--- a/addons/base/static/lib/datejs/globalization/mr-IN.js
+++ b/addons/web/static/lib/datejs/globalization/mr-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/ms-BN.js b/addons/web/static/lib/datejs/globalization/ms-BN.js
index ab5e4b710ed..ab5e4b710ed 100644
--- a/addons/base/static/lib/datejs/globalization/ms-BN.js
+++ b/addons/web/static/lib/datejs/globalization/ms-BN.js
diff --git a/addons/base/static/lib/datejs/globalization/ms-MY.js b/addons/web/static/lib/datejs/globalization/ms-MY.js
index 7deb311246f..7deb311246f 100644
--- a/addons/base/static/lib/datejs/globalization/ms-MY.js
+++ b/addons/web/static/lib/datejs/globalization/ms-MY.js
diff --git a/addons/base/static/lib/datejs/globalization/mt-MT.js b/addons/web/static/lib/datejs/globalization/mt-MT.js
index 0ee270f7456..0ee270f7456 100644
--- a/addons/base/static/lib/datejs/globalization/mt-MT.js
+++ b/addons/web/static/lib/datejs/globalization/mt-MT.js
diff --git a/addons/base/static/lib/datejs/globalization/nb-NO.js b/addons/web/static/lib/datejs/globalization/nb-NO.js
index 9da1b01e6e7..9da1b01e6e7 100644
--- a/addons/base/static/lib/datejs/globalization/nb-NO.js
+++ b/addons/web/static/lib/datejs/globalization/nb-NO.js
diff --git a/addons/base/static/lib/datejs/globalization/nl-BE.js b/addons/web/static/lib/datejs/globalization/nl-BE.js
index 69f9e3a5486..69f9e3a5486 100644
--- a/addons/base/static/lib/datejs/globalization/nl-BE.js
+++ b/addons/web/static/lib/datejs/globalization/nl-BE.js
diff --git a/addons/base/static/lib/datejs/globalization/nl-NL.js b/addons/web/static/lib/datejs/globalization/nl-NL.js
index ece102bb5f1..ece102bb5f1 100644
--- a/addons/base/static/lib/datejs/globalization/nl-NL.js
+++ b/addons/web/static/lib/datejs/globalization/nl-NL.js
diff --git a/addons/base/static/lib/datejs/globalization/nn-NO.js b/addons/web/static/lib/datejs/globalization/nn-NO.js
index a01a3a0f65a..a01a3a0f65a 100644
--- a/addons/base/static/lib/datejs/globalization/nn-NO.js
+++ b/addons/web/static/lib/datejs/globalization/nn-NO.js
diff --git a/addons/base/static/lib/datejs/globalization/ns-ZA.js b/addons/web/static/lib/datejs/globalization/ns-ZA.js
index ee157ddf09f..ee157ddf09f 100644
--- a/addons/base/static/lib/datejs/globalization/ns-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/ns-ZA.js
diff --git a/addons/base/static/lib/datejs/globalization/pa-IN.js b/addons/web/static/lib/datejs/globalization/pa-IN.js
index 3f3fe7bf695..3f3fe7bf695 100644
--- a/addons/base/static/lib/datejs/globalization/pa-IN.js
+++ b/addons/web/static/lib/datejs/globalization/pa-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/pl-PL.js b/addons/web/static/lib/datejs/globalization/pl-PL.js
index c44d002ffe4..c44d002ffe4 100644
--- a/addons/base/static/lib/datejs/globalization/pl-PL.js
+++ b/addons/web/static/lib/datejs/globalization/pl-PL.js
diff --git a/addons/base/static/lib/datejs/globalization/pt-BR.js b/addons/web/static/lib/datejs/globalization/pt-BR.js
index 6313c581d8d..6313c581d8d 100644
--- a/addons/base/static/lib/datejs/globalization/pt-BR.js
+++ b/addons/web/static/lib/datejs/globalization/pt-BR.js
diff --git a/addons/base/static/lib/datejs/globalization/pt-PT.js b/addons/web/static/lib/datejs/globalization/pt-PT.js
index 6c19c28f5bf..6c19c28f5bf 100644
--- a/addons/base/static/lib/datejs/globalization/pt-PT.js
+++ b/addons/web/static/lib/datejs/globalization/pt-PT.js
diff --git a/addons/base/static/lib/datejs/globalization/quz-BO.js b/addons/web/static/lib/datejs/globalization/quz-BO.js
index 86f0a4f74d9..86f0a4f74d9 100644
--- a/addons/base/static/lib/datejs/globalization/quz-BO.js
+++ b/addons/web/static/lib/datejs/globalization/quz-BO.js
diff --git a/addons/base/static/lib/datejs/globalization/quz-EC.js b/addons/web/static/lib/datejs/globalization/quz-EC.js
index e72514dd09f..e72514dd09f 100644
--- a/addons/base/static/lib/datejs/globalization/quz-EC.js
+++ b/addons/web/static/lib/datejs/globalization/quz-EC.js
diff --git a/addons/base/static/lib/datejs/globalization/quz-PE.js b/addons/web/static/lib/datejs/globalization/quz-PE.js
index 42c1e5c0c83..42c1e5c0c83 100644
--- a/addons/base/static/lib/datejs/globalization/quz-PE.js
+++ b/addons/web/static/lib/datejs/globalization/quz-PE.js
diff --git a/addons/base/static/lib/datejs/globalization/ro-RO.js b/addons/web/static/lib/datejs/globalization/ro-RO.js
index b35d3e5efbb..b35d3e5efbb 100644
--- a/addons/base/static/lib/datejs/globalization/ro-RO.js
+++ b/addons/web/static/lib/datejs/globalization/ro-RO.js
diff --git a/addons/base/static/lib/datejs/globalization/ru-RU.js b/addons/web/static/lib/datejs/globalization/ru-RU.js
index 3b741984c01..3b741984c01 100644
--- a/addons/base/static/lib/datejs/globalization/ru-RU.js
+++ b/addons/web/static/lib/datejs/globalization/ru-RU.js
diff --git a/addons/base/static/lib/datejs/globalization/sa-IN.js b/addons/web/static/lib/datejs/globalization/sa-IN.js
index 571cf0b451b..571cf0b451b 100644
--- a/addons/base/static/lib/datejs/globalization/sa-IN.js
+++ b/addons/web/static/lib/datejs/globalization/sa-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/se-FI.js b/addons/web/static/lib/datejs/globalization/se-FI.js
index e1324b05778..e1324b05778 100644
--- a/addons/base/static/lib/datejs/globalization/se-FI.js
+++ b/addons/web/static/lib/datejs/globalization/se-FI.js
diff --git a/addons/base/static/lib/datejs/globalization/se-NO.js b/addons/web/static/lib/datejs/globalization/se-NO.js
index 356be9bea89..356be9bea89 100644
--- a/addons/base/static/lib/datejs/globalization/se-NO.js
+++ b/addons/web/static/lib/datejs/globalization/se-NO.js
diff --git a/addons/base/static/lib/datejs/globalization/se-SE.js b/addons/web/static/lib/datejs/globalization/se-SE.js
index 400cb34cc20..400cb34cc20 100644
--- a/addons/base/static/lib/datejs/globalization/se-SE.js
+++ b/addons/web/static/lib/datejs/globalization/se-SE.js
diff --git a/addons/base/static/lib/datejs/globalization/sk-SK.js b/addons/web/static/lib/datejs/globalization/sk-SK.js
index 8d6359c6e32..8d6359c6e32 100644
--- a/addons/base/static/lib/datejs/globalization/sk-SK.js
+++ b/addons/web/static/lib/datejs/globalization/sk-SK.js
diff --git a/addons/base/static/lib/datejs/globalization/sl-SI.js b/addons/web/static/lib/datejs/globalization/sl-SI.js
index 901e00f2e54..901e00f2e54 100644
--- a/addons/base/static/lib/datejs/globalization/sl-SI.js
+++ b/addons/web/static/lib/datejs/globalization/sl-SI.js
diff --git a/addons/base/static/lib/datejs/globalization/sma-NO.js b/addons/web/static/lib/datejs/globalization/sma-NO.js
index 610f40b1eb9..610f40b1eb9 100644
--- a/addons/base/static/lib/datejs/globalization/sma-NO.js
+++ b/addons/web/static/lib/datejs/globalization/sma-NO.js
diff --git a/addons/base/static/lib/datejs/globalization/sma-SE.js b/addons/web/static/lib/datejs/globalization/sma-SE.js
index 9a5854e6a24..9a5854e6a24 100644
--- a/addons/base/static/lib/datejs/globalization/sma-SE.js
+++ b/addons/web/static/lib/datejs/globalization/sma-SE.js
diff --git a/addons/base/static/lib/datejs/globalization/smj-NO.js b/addons/web/static/lib/datejs/globalization/smj-NO.js
index 66e061deca9..66e061deca9 100644
--- a/addons/base/static/lib/datejs/globalization/smj-NO.js
+++ b/addons/web/static/lib/datejs/globalization/smj-NO.js
diff --git a/addons/base/static/lib/datejs/globalization/smj-SE.js b/addons/web/static/lib/datejs/globalization/smj-SE.js
index 9c6c628b1a7..9c6c628b1a7 100644
--- a/addons/base/static/lib/datejs/globalization/smj-SE.js
+++ b/addons/web/static/lib/datejs/globalization/smj-SE.js
diff --git a/addons/base/static/lib/datejs/globalization/smn-FI.js b/addons/web/static/lib/datejs/globalization/smn-FI.js
index 45cf715ad7e..45cf715ad7e 100644
--- a/addons/base/static/lib/datejs/globalization/smn-FI.js
+++ b/addons/web/static/lib/datejs/globalization/smn-FI.js
diff --git a/addons/base/static/lib/datejs/globalization/sms-FI.js b/addons/web/static/lib/datejs/globalization/sms-FI.js
index 4bffb33a13d..4bffb33a13d 100644
--- a/addons/base/static/lib/datejs/globalization/sms-FI.js
+++ b/addons/web/static/lib/datejs/globalization/sms-FI.js
diff --git a/addons/base/static/lib/datejs/globalization/sq-AL.js b/addons/web/static/lib/datejs/globalization/sq-AL.js
index 1690471ca18..1690471ca18 100644
--- a/addons/base/static/lib/datejs/globalization/sq-AL.js
+++ b/addons/web/static/lib/datejs/globalization/sq-AL.js
diff --git a/addons/base/static/lib/datejs/globalization/sr-Cyrl-BA.js b/addons/web/static/lib/datejs/globalization/sr-Cyrl-BA.js
index c22a8566ea2..c22a8566ea2 100644
--- a/addons/base/static/lib/datejs/globalization/sr-Cyrl-BA.js
+++ b/addons/web/static/lib/datejs/globalization/sr-Cyrl-BA.js
diff --git a/addons/base/static/lib/datejs/globalization/sr-Cyrl-CS.js b/addons/web/static/lib/datejs/globalization/sr-Cyrl-CS.js
index f0922068740..f0922068740 100644
--- a/addons/base/static/lib/datejs/globalization/sr-Cyrl-CS.js
+++ b/addons/web/static/lib/datejs/globalization/sr-Cyrl-CS.js
diff --git a/addons/base/static/lib/datejs/globalization/sr-Latn-BA.js b/addons/web/static/lib/datejs/globalization/sr-Latn-BA.js
index 052b146530f..052b146530f 100644
--- a/addons/base/static/lib/datejs/globalization/sr-Latn-BA.js
+++ b/addons/web/static/lib/datejs/globalization/sr-Latn-BA.js
diff --git a/addons/base/static/lib/datejs/globalization/sr-Latn-CS.js b/addons/web/static/lib/datejs/globalization/sr-Latn-CS.js
index 9baa010c021..9baa010c021 100644
--- a/addons/base/static/lib/datejs/globalization/sr-Latn-CS.js
+++ b/addons/web/static/lib/datejs/globalization/sr-Latn-CS.js
diff --git a/addons/base/static/lib/datejs/globalization/sv-FI.js b/addons/web/static/lib/datejs/globalization/sv-FI.js
index c3882a17d54..c3882a17d54 100644
--- a/addons/base/static/lib/datejs/globalization/sv-FI.js
+++ b/addons/web/static/lib/datejs/globalization/sv-FI.js
diff --git a/addons/base/static/lib/datejs/globalization/sv-SE.js b/addons/web/static/lib/datejs/globalization/sv-SE.js
index 1de63182bf4..1de63182bf4 100644
--- a/addons/base/static/lib/datejs/globalization/sv-SE.js
+++ b/addons/web/static/lib/datejs/globalization/sv-SE.js
diff --git a/addons/base/static/lib/datejs/globalization/sw-KE.js b/addons/web/static/lib/datejs/globalization/sw-KE.js
index de73841a7f2..de73841a7f2 100644
--- a/addons/base/static/lib/datejs/globalization/sw-KE.js
+++ b/addons/web/static/lib/datejs/globalization/sw-KE.js
diff --git a/addons/base/static/lib/datejs/globalization/syr-SY.js b/addons/web/static/lib/datejs/globalization/syr-SY.js
index 1e662406e93..1e662406e93 100644
--- a/addons/base/static/lib/datejs/globalization/syr-SY.js
+++ b/addons/web/static/lib/datejs/globalization/syr-SY.js
diff --git a/addons/base/static/lib/datejs/globalization/ta-IN.js b/addons/web/static/lib/datejs/globalization/ta-IN.js
index 63349a92ce0..63349a92ce0 100644
--- a/addons/base/static/lib/datejs/globalization/ta-IN.js
+++ b/addons/web/static/lib/datejs/globalization/ta-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/te-IN.js b/addons/web/static/lib/datejs/globalization/te-IN.js
index 94736b7a24e..94736b7a24e 100644
--- a/addons/base/static/lib/datejs/globalization/te-IN.js
+++ b/addons/web/static/lib/datejs/globalization/te-IN.js
diff --git a/addons/base/static/lib/datejs/globalization/th-TH.js b/addons/web/static/lib/datejs/globalization/th-TH.js
index f792de21ebb..f792de21ebb 100644
--- a/addons/base/static/lib/datejs/globalization/th-TH.js
+++ b/addons/web/static/lib/datejs/globalization/th-TH.js
diff --git a/addons/base/static/lib/datejs/globalization/tn-ZA.js b/addons/web/static/lib/datejs/globalization/tn-ZA.js
index 9c243d7cca7..9c243d7cca7 100644
--- a/addons/base/static/lib/datejs/globalization/tn-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/tn-ZA.js
diff --git a/addons/base/static/lib/datejs/globalization/tr-TR.js b/addons/web/static/lib/datejs/globalization/tr-TR.js
index 4018c2f24bd..4018c2f24bd 100644
--- a/addons/base/static/lib/datejs/globalization/tr-TR.js
+++ b/addons/web/static/lib/datejs/globalization/tr-TR.js
diff --git a/addons/base/static/lib/datejs/globalization/tt-RU.js b/addons/web/static/lib/datejs/globalization/tt-RU.js
index 271338a1827..271338a1827 100644
--- a/addons/base/static/lib/datejs/globalization/tt-RU.js
+++ b/addons/web/static/lib/datejs/globalization/tt-RU.js
diff --git a/addons/base/static/lib/datejs/globalization/uk-UA.js b/addons/web/static/lib/datejs/globalization/uk-UA.js
index 246c121dcd7..246c121dcd7 100644
--- a/addons/base/static/lib/datejs/globalization/uk-UA.js
+++ b/addons/web/static/lib/datejs/globalization/uk-UA.js
diff --git a/addons/base/static/lib/datejs/globalization/ur-PK.js b/addons/web/static/lib/datejs/globalization/ur-PK.js
index 6aa4662ccbb..6aa4662ccbb 100644
--- a/addons/base/static/lib/datejs/globalization/ur-PK.js
+++ b/addons/web/static/lib/datejs/globalization/ur-PK.js
diff --git a/addons/base/static/lib/datejs/globalization/uz-Cyrl-UZ.js b/addons/web/static/lib/datejs/globalization/uz-Cyrl-UZ.js
index a2eafa121cc..a2eafa121cc 100644
--- a/addons/base/static/lib/datejs/globalization/uz-Cyrl-UZ.js
+++ b/addons/web/static/lib/datejs/globalization/uz-Cyrl-UZ.js
diff --git a/addons/base/static/lib/datejs/globalization/uz-Latn-UZ.js b/addons/web/static/lib/datejs/globalization/uz-Latn-UZ.js
index 6a9a5af533c..6a9a5af533c 100644
--- a/addons/base/static/lib/datejs/globalization/uz-Latn-UZ.js
+++ b/addons/web/static/lib/datejs/globalization/uz-Latn-UZ.js
diff --git a/addons/base/static/lib/datejs/globalization/vi-VN.js b/addons/web/static/lib/datejs/globalization/vi-VN.js
index 271480360ee..271480360ee 100644
--- a/addons/base/static/lib/datejs/globalization/vi-VN.js
+++ b/addons/web/static/lib/datejs/globalization/vi-VN.js
diff --git a/addons/base/static/lib/datejs/globalization/xh-ZA.js b/addons/web/static/lib/datejs/globalization/xh-ZA.js
index dfcdb3b1338..dfcdb3b1338 100644
--- a/addons/base/static/lib/datejs/globalization/xh-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/xh-ZA.js
diff --git a/addons/base/static/lib/datejs/globalization/zh-CN.js b/addons/web/static/lib/datejs/globalization/zh-CN.js
index 8dac6692b46..8dac6692b46 100644
--- a/addons/base/static/lib/datejs/globalization/zh-CN.js
+++ b/addons/web/static/lib/datejs/globalization/zh-CN.js
diff --git a/addons/base/static/lib/datejs/globalization/zh-HK.js b/addons/web/static/lib/datejs/globalization/zh-HK.js
index 989e988492b..989e988492b 100644
--- a/addons/base/static/lib/datejs/globalization/zh-HK.js
+++ b/addons/web/static/lib/datejs/globalization/zh-HK.js
diff --git a/addons/base/static/lib/datejs/globalization/zh-MO.js b/addons/web/static/lib/datejs/globalization/zh-MO.js
index 390d8340c79..390d8340c79 100644
--- a/addons/base/static/lib/datejs/globalization/zh-MO.js
+++ b/addons/web/static/lib/datejs/globalization/zh-MO.js
diff --git a/addons/base/static/lib/datejs/globalization/zh-SG.js b/addons/web/static/lib/datejs/globalization/zh-SG.js
index e6a3ff9c3fd..e6a3ff9c3fd 100644
--- a/addons/base/static/lib/datejs/globalization/zh-SG.js
+++ b/addons/web/static/lib/datejs/globalization/zh-SG.js
diff --git a/addons/base/static/lib/datejs/globalization/zh-TW.js b/addons/web/static/lib/datejs/globalization/zh-TW.js
index 3e54de90cc0..3e54de90cc0 100644
--- a/addons/base/static/lib/datejs/globalization/zh-TW.js
+++ b/addons/web/static/lib/datejs/globalization/zh-TW.js
diff --git a/addons/base/static/lib/datejs/globalization/zu-ZA.js b/addons/web/static/lib/datejs/globalization/zu-ZA.js
index 61c5ca0e09c..61c5ca0e09c 100644
--- a/addons/base/static/lib/datejs/globalization/zu-ZA.js
+++ b/addons/web/static/lib/datejs/globalization/zu-ZA.js
diff --git a/addons/base/static/lib/datejs/parser.js b/addons/web/static/lib/datejs/parser.js
index 4a9f16da4e4..4a9f16da4e4 100644
--- a/addons/base/static/lib/datejs/parser.js
+++ b/addons/web/static/lib/datejs/parser.js
diff --git a/addons/base/static/lib/datejs/sugarpak.js b/addons/web/static/lib/datejs/sugarpak.js
index 7438a49f35c..7438a49f35c 100644
--- a/addons/base/static/lib/datejs/sugarpak.js
+++ b/addons/web/static/lib/datejs/sugarpak.js
diff --git a/addons/base/static/lib/datejs/time.js b/addons/web/static/lib/datejs/time.js
index c3ac11f224d..c3ac11f224d 100644
--- a/addons/base/static/lib/datejs/time.js
+++ b/addons/web/static/lib/datejs/time.js
diff --git a/addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.js b/addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js
index f251123acd7..f251123acd7 100644
--- a/addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.js
+++ b/addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js
diff --git a/addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js b/addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js
index bcbf24834ac..bcbf24834ac 100644
--- a/addons/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js
+++ b/addons/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.min.js
diff --git a/addons/base/static/lib/jquery.blockUI/jquery.blockUI.js b/addons/web/static/lib/jquery.blockUI/jquery.blockUI.js
index 04db883c76e..04db883c76e 100644
--- a/addons/base/static/lib/jquery.blockUI/jquery.blockUI.js
+++ b/addons/web/static/lib/jquery.blockUI/jquery.blockUI.js
diff --git a/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js b/addons/web/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js
index 2356f3b606b..2356f3b606b 100644
--- a/addons/base/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js
+++ b/addons/web/static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js
diff --git a/addons/base/static/lib/jquery.form/jquery.form.js b/addons/web/static/lib/jquery.form/jquery.form.js
index 66ac5142238..66ac5142238 100644
--- a/addons/base/static/lib/jquery.form/jquery.form.js
+++ b/addons/web/static/lib/jquery.form/jquery.form.js
diff --git a/addons/base/static/lib/jquery.superfish/changelog.txt b/addons/web/static/lib/jquery.superfish/changelog.txt
index 3399f057ec3..3399f057ec3 100644
--- a/addons/base/static/lib/jquery.superfish/changelog.txt
+++ b/addons/web/static/lib/jquery.superfish/changelog.txt
diff --git a/addons/base/static/lib/jquery.superfish/css/superfish-navbar.css b/addons/web/static/lib/jquery.superfish/css/superfish-navbar.css
index 68c713584aa..68c713584aa 100644
--- a/addons/base/static/lib/jquery.superfish/css/superfish-navbar.css
+++ b/addons/web/static/lib/jquery.superfish/css/superfish-navbar.css
diff --git a/addons/base/static/lib/jquery.superfish/css/superfish-vertical.css b/addons/web/static/lib/jquery.superfish/css/superfish-vertical.css
index 8025b7859f6..8025b7859f6 100644
--- a/addons/base/static/lib/jquery.superfish/css/superfish-vertical.css
+++ b/addons/web/static/lib/jquery.superfish/css/superfish-vertical.css
diff --git a/addons/base/static/lib/jquery.superfish/css/superfish.css b/addons/web/static/lib/jquery.superfish/css/superfish.css
index cc33fdb4e7f..cc33fdb4e7f 100644
--- a/addons/base/static/lib/jquery.superfish/css/superfish.css
+++ b/addons/web/static/lib/jquery.superfish/css/superfish.css
diff --git a/addons/base/static/lib/jquery.superfish/example.html b/addons/web/static/lib/jquery.superfish/example.html
index 58205271719..58205271719 100644
--- a/addons/base/static/lib/jquery.superfish/example.html
+++ b/addons/web/static/lib/jquery.superfish/example.html
diff --git a/addons/base/static/lib/jquery.superfish/images/arrows-ffffff.png b/addons/web/static/lib/jquery.superfish/images/arrows-ffffff.png
index 995df52065b..995df52065b 100644
--- a/addons/base/static/lib/jquery.superfish/images/arrows-ffffff.png
+++ b/addons/web/static/lib/jquery.superfish/images/arrows-ffffff.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.superfish/images/shadow.png b/addons/web/static/lib/jquery.superfish/images/shadow.png
index c04d21b76ec..c04d21b76ec 100644
--- a/addons/base/static/lib/jquery.superfish/images/shadow.png
+++ b/addons/web/static/lib/jquery.superfish/images/shadow.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.superfish/js/hoverIntent.js b/addons/web/static/lib/jquery.superfish/js/hoverIntent.js
index 91da57b2448..91da57b2448 100644
--- a/addons/base/static/lib/jquery.superfish/js/hoverIntent.js
+++ b/addons/web/static/lib/jquery.superfish/js/hoverIntent.js
diff --git a/addons/base/static/lib/jquery.superfish/js/jquery-1.2.6.min.js b/addons/web/static/lib/jquery.superfish/js/jquery-1.2.6.min.js
index 82b98e1d766..82b98e1d766 100644
--- a/addons/base/static/lib/jquery.superfish/js/jquery-1.2.6.min.js
+++ b/addons/web/static/lib/jquery.superfish/js/jquery-1.2.6.min.js
diff --git a/addons/base/static/lib/jquery.superfish/js/jquery.bgiframe.min.js b/addons/web/static/lib/jquery.superfish/js/jquery.bgiframe.min.js
index b5af5204322..b5af5204322 100644
--- a/addons/base/static/lib/jquery.superfish/js/jquery.bgiframe.min.js
+++ b/addons/web/static/lib/jquery.superfish/js/jquery.bgiframe.min.js
diff --git a/addons/base/static/lib/jquery.superfish/js/superfish.js b/addons/web/static/lib/jquery.superfish/js/superfish.js
index c6a9c7de045..c6a9c7de045 100644
--- a/addons/base/static/lib/jquery.superfish/js/superfish.js
+++ b/addons/web/static/lib/jquery.superfish/js/superfish.js
diff --git a/addons/base/static/lib/jquery.superfish/js/supersubs.js b/addons/web/static/lib/jquery.superfish/js/supersubs.js
index 45221510fc9..45221510fc9 100644
--- a/addons/base/static/lib/jquery.superfish/js/supersubs.js
+++ b/addons/web/static/lib/jquery.superfish/js/supersubs.js
diff --git a/addons/base/static/lib/jquery.ui.notify/css/ui.notify.css b/addons/web/static/lib/jquery.ui.notify/css/ui.notify.css
index dcd2823b9d1..dcd2823b9d1 100644
--- a/addons/base/static/lib/jquery.ui.notify/css/ui.notify.css
+++ b/addons/web/static/lib/jquery.ui.notify/css/ui.notify.css
diff --git a/addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js b/addons/web/static/lib/jquery.ui.notify/js/jquery.notify.js
index c2c4657f4c2..c2c4657f4c2 100644
--- a/addons/base/static/lib/jquery.ui.notify/js/jquery.notify.js
+++ b/addons/web/static/lib/jquery.ui.notify/js/jquery.notify.js
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
index 5b5dab2ab7b..5b5dab2ab7b 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
index ac8b229af95..ac8b229af95 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
index ad3d6346e00..ad3d6346e00 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
index 42ccba269b6..42ccba269b6 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
index 5a46b47cb16..5a46b47cb16 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
index 86c2baa655e..86c2baa655e 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
index 4443fdc1a15..4443fdc1a15 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
index 7c9fa6c6edc..7c9fa6c6edc 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
index b273ff111d2..b273ff111d2 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
index 09d1cdc856c..09d1cdc856c 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
index 59bd45b907c..59bd45b907c 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
index 6d02426c114..6d02426c114 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
index 2ab019b73ec..2ab019b73ec 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/addons/base/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css b/addons/web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css
index fd5057b2f6d..fd5057b2f6d 100644
--- a/addons/base/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.8.9.custom.css
diff --git a/addons/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js b/addons/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js
index 45cc2744f16..45cc2744f16 100644
--- a/addons/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js
+++ b/addons/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js
diff --git a/addons/base/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js b/addons/web/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js
index 85c795c2e79..85c795c2e79 100644
--- a/addons/base/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js
+++ b/addons/web/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js
diff --git a/addons/base/static/lib/jquery.validate/jquery.validate.js b/addons/web/static/lib/jquery.validate/jquery.validate.js
index 72296a61f20..72296a61f20 100644
--- a/addons/base/static/lib/jquery.validate/jquery.validate.js
+++ b/addons/web/static/lib/jquery.validate/jquery.validate.js
diff --git a/addons/base/static/lib/jquery/jquery-1.6.2.js b/addons/web/static/lib/jquery/jquery-1.6.2.js
index f3201aacb6f..f3201aacb6f 100644
--- a/addons/base/static/lib/jquery/jquery-1.6.2.js
+++ b/addons/web/static/lib/jquery/jquery-1.6.2.js
diff --git a/addons/base/static/lib/json/json2.js b/addons/web/static/lib/json/json2.js
index b4c02d3f08b..b4c02d3f08b 100755
--- a/addons/base/static/lib/json/json2.js
+++ b/addons/web/static/lib/json/json2.js
diff --git a/addons/base/static/lib/labjs/LAB.src.js b/addons/web/static/lib/labjs/LAB.src.js
index 99807cd222e..99807cd222e 100644
--- a/addons/base/static/lib/labjs/LAB.src.js
+++ b/addons/web/static/lib/labjs/LAB.src.js
diff --git a/addons/base/static/lib/qunit/qunit-2011-23-22.css b/addons/web/static/lib/qunit/qunit-2011-23-22.css
index cc791a9b099..cc791a9b099 100644
--- a/addons/base/static/lib/qunit/qunit-2011-23-22.css
+++ b/addons/web/static/lib/qunit/qunit-2011-23-22.css
diff --git a/addons/base/static/lib/qunit/qunit-2011-23-22.js b/addons/web/static/lib/qunit/qunit-2011-23-22.js
index 18f8ae1715c..18f8ae1715c 100644
--- a/addons/base/static/lib/qunit/qunit-2011-23-22.js
+++ b/addons/web/static/lib/qunit/qunit-2011-23-22.js
diff --git a/addons/base/static/lib/qweb/qweb-benchmark.html b/addons/web/static/lib/qweb/qweb-benchmark.html
index 0cc67e7e54f..0cc67e7e54f 100644
--- a/addons/base/static/lib/qweb/qweb-benchmark.html
+++ b/addons/web/static/lib/qweb/qweb-benchmark.html
diff --git a/addons/base/static/lib/qweb/qweb-benchmark.xml b/addons/web/static/lib/qweb/qweb-benchmark.xml
index 71452572e51..71452572e51 100644
--- a/addons/base/static/lib/qweb/qweb-benchmark.xml
+++ b/addons/web/static/lib/qweb/qweb-benchmark.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-attributes.xml b/addons/web/static/lib/qweb/qweb-test-attributes.xml
index 91317d5194b..91317d5194b 100644
--- a/addons/base/static/lib/qweb/qweb-test-attributes.xml
+++ b/addons/web/static/lib/qweb/qweb-test-attributes.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-call.xml b/addons/web/static/lib/qweb/qweb-test-call.xml
index 5d8f0019f7c..5d8f0019f7c 100644
--- a/addons/base/static/lib/qweb/qweb-test-call.xml
+++ b/addons/web/static/lib/qweb/qweb-test-call.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-conditionals.xml b/addons/web/static/lib/qweb/qweb-test-conditionals.xml
index 43d16578bfc..43d16578bfc 100644
--- a/addons/base/static/lib/qweb/qweb-test-conditionals.xml
+++ b/addons/web/static/lib/qweb/qweb-test-conditionals.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-extend.xml b/addons/web/static/lib/qweb/qweb-test-extend.xml
index 44fda920e43..44fda920e43 100644
--- a/addons/base/static/lib/qweb/qweb-test-extend.xml
+++ b/addons/web/static/lib/qweb/qweb-test-extend.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-foreach.xml b/addons/web/static/lib/qweb/qweb-test-foreach.xml
index 80749882aaf..80749882aaf 100644
--- a/addons/base/static/lib/qweb/qweb-test-foreach.xml
+++ b/addons/web/static/lib/qweb/qweb-test-foreach.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-output.xml b/addons/web/static/lib/qweb/qweb-test-output.xml
index 2660e519273..2660e519273 100644
--- a/addons/base/static/lib/qweb/qweb-test-output.xml
+++ b/addons/web/static/lib/qweb/qweb-test-output.xml
diff --git a/addons/base/static/lib/qweb/qweb-test-set.xml b/addons/web/static/lib/qweb/qweb-test-set.xml
index 6a7b4f53d23..6a7b4f53d23 100644
--- a/addons/base/static/lib/qweb/qweb-test-set.xml
+++ b/addons/web/static/lib/qweb/qweb-test-set.xml
diff --git a/addons/base/static/lib/qweb/qweb-test.js.html b/addons/web/static/lib/qweb/qweb-test.js.html
index fda837497c4..fda837497c4 100644
--- a/addons/base/static/lib/qweb/qweb-test.js.html
+++ b/addons/web/static/lib/qweb/qweb-test.js.html
diff --git a/addons/base/static/lib/qweb/qweb.js b/addons/web/static/lib/qweb/qweb.js
index 46728f1dcf7..46728f1dcf7 100644
--- a/addons/base/static/lib/qweb/qweb.js
+++ b/addons/web/static/lib/qweb/qweb.js
diff --git a/addons/base/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js
index cfb9c9c461d..621ea39c74f 100644
--- a/addons/base/static/lib/qweb/qweb2.js
+++ b/addons/web/static/lib/qweb/qweb2.js
@@ -201,7 +201,7 @@ QWeb2.Engine = (function() {
this.templates = {};
this.compiled_templates = {};
this.extend_templates = {};
- this.dict = {};
+ this.default_dict = {};
this.tools = QWeb2.tools;
this.jQuery = window.jQuery;
this.reserved_words = QWeb2.RESERVED_WORDS.slice(0);
@@ -259,6 +259,9 @@ QWeb2.Engine = (function() {
if (req) {
// TODO: third parameter is async : https://developer.mozilla.org/en/XMLHttpRequest#open()
// do an on_ready in QWeb2{} that could be passed to add_template
+ if (this.debug) {
+ s += '?debug=' + (new Date()).getTime(); // TODO fme: do it properly in case there's already url parameters
+ }
req.open('GET', s, false);
req.send(null);
if (req.responseXML) {
@@ -323,13 +326,15 @@ QWeb2.Engine = (function() {
" return r.join('');";
},
render : function(template, dict) {
- if (this.debug && window['console'] !== undefined) {
+ var ndict = QWeb2.tools.extend({}, this.default_dict);
+ QWeb2.tools.extend(ndict, dict);
+ /*if (this.debug && window['console'] !== undefined) {
console.time("QWeb render template " + template);
- }
- var r = this._render(template, dict);
- if (this.debug && window['console'] !== undefined) {
+ }*/
+ var r = this._render(template, ndict);
+ /*if (this.debug && window['console'] !== undefined) {
console.timeEnd("QWeb render template " + template);
- }
+ }*/
return r;
},
_render : function(template, dict) {
diff --git a/addons/base/static/lib/underscore/underscore.js b/addons/web/static/lib/underscore/underscore.js
index 4f56013259b..4f56013259b 100644
--- a/addons/base/static/lib/underscore/underscore.js
+++ b/addons/web/static/lib/underscore/underscore.js
diff --git a/addons/base/static/lib/underscore/underscore.string.js b/addons/web/static/lib/underscore/underscore.string.js
index 4da2b26ec1c..4da2b26ec1c 100644
--- a/addons/base/static/lib/underscore/underscore.string.js
+++ b/addons/web/static/lib/underscore/underscore.string.js
diff --git a/addons/base/static/src/css/base-ie7.css b/addons/web/static/src/css/base-ie7.css
index 35599dbdd4b..35599dbdd4b 100644
--- a/addons/base/static/src/css/base-ie7.css
+++ b/addons/web/static/src/css/base-ie7.css
diff --git a/addons/base/static/src/css/base.css b/addons/web/static/src/css/base.css
index c9894e42cef..cc8b596e6f5 100644
--- a/addons/base/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -174,7 +174,7 @@ ul.db_options li {
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */
border: none;
/* overriding jquery ui */
- -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px;
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
display: block;
font-weight: bold;
text-transform: uppercase;
@@ -294,6 +294,9 @@ label.error {
color: #fff;
}
+.openerp .oe-application-container {
+ height: 100%;
+}
/* Secondary Menu */
.openerp .secondary_menu {
width: 200px;
@@ -324,7 +327,7 @@ label.error {
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#949292', endColorstr='#5B5A5A',GradientType=0 ); /* IE6-9 */
border: none;
/* overriding jquery ui */
- -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px;
+ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
}
.openerp .secondary_menu h4 {
padding: 0 0 2px 10px;
@@ -379,7 +382,7 @@ label.error {
/* Header */
.openerp .header {
height: 65px;
- background: url("/base/static/src/img/header-background.png") repeat-x scroll left top transparent;
+ background: url("/web/static/src/img/header-background.png") repeat-x scroll left top transparent;
color: #FFFFFF;
letter-spacing: 0.5px;
text-shadow: 0 1px 0 #333333;
@@ -401,7 +404,7 @@ label.error {
margin-top: 7px;
margin-left: 10px;
display: block;
- background: url(/base/static/src/img/logo.png);
+ background: url(/web/static/src/img/logo.png);
width:180px;
height:46px;
}
@@ -409,7 +412,7 @@ label.error {
float: left;
font-size: 100%;
margin: 0;
- padding: 4px 0;
+ padding: 4px 10px;
text-shadow: 0 1px 0 #111111;
}
.openerp .header_title small {
@@ -597,13 +600,13 @@ label.error {
background-color: #ccc;
}
.openerp .searchview_group.folded .searchview_group_string {
- background: url("/base/static/src/img/ui/group-folded.png") no-repeat scroll 0 50%;
+ background: url("/web/static/src/img/ui/group-folded.png") no-repeat scroll 0 50%;
}
.openerp .searchview_group.folded .searchview_group_content {
display: none;
}
.openerp .searchview_group.expanded .searchview_group_string {
- background: url("/base/static/src/img/ui/group-expanded.png") no-repeat scroll 0 50%;
+ background: url("/web/static/src/img/ui/group-expanded.png") no-repeat scroll 0 50%;
}
.openerp .searchview_group.expanded .searchview_group_content {
display: block;
@@ -635,13 +638,13 @@ label.error {
}
.openerp .oe_search-view-custom-filter-btn span {
- background: url(/base/static/src/img/icons/gtk-add.png) repeat-y;
+ background: url(/web/static/src/img/icons/gtk-add.png) repeat-y;
padding-left: 18px;
}
.openerp .searchview_extended_add_proposition span {
font-size: 0.9em;
- background: url(/base/static/src/img/icons/gtk-add.png) repeat-y;
+ background: url(/web/static/src/img/icons/gtk-add.png) repeat-y;
padding-left: 18px;
}
@@ -657,7 +660,7 @@ label.error {
.openerp .searchview_extended_delete_group span,
.openerp .searchview_extended_delete_prop span {
font-size: 0.9em;
- background: url(/base/static/src/img/icons/gtk-close.png) repeat-y;
+ background: url(/web/static/src/img/icons/gtk-close.png) repeat-y;
padding-left: 18px;
}
/* List */
@@ -820,7 +823,7 @@ label.error {
padding: 2px;
}
.openerp td.oe_form_frame_cell.oe_form_group {
- padding: 0px;
+ padding: 0;
}
.openerp .required.error {
border: 1px solid #900;
@@ -838,7 +841,8 @@ label.error {
.openerp label.oe_label_help {
cursor: help;
}
-.openerp .oe_form_field label.oe_label, .openerp .oe_form_field label.oe_label_help {
+.openerp label.oe_label,
+.openerp label.oe_label_help {
text-align: right;
margin: 3px 0 0 10px;
}
@@ -1096,7 +1100,7 @@ label.error {
cursor: pointer;
border: 1px solid #D2CFCF;
display: block;
- background: url(/base/static/src/img/toggle-a-bg.png);
+ background: url(/web/static/src/img/toggle-a-bg.png);
width: 21px;
height: 21px;
z-index: 10;
@@ -1111,7 +1115,7 @@ label.error {
}
.openerp li.oe_sidebar_print {
padding-left: 20px;
- background: 1px 3px url(/base/static/src/img/icons/gtk-print.png) no-repeat;
+ background: 1px 3px url(/web/static/src/img/icons/gtk-print.png) no-repeat;
}
.openerp.kitten-mode-activated .main_table {
@@ -1212,10 +1216,10 @@ label.error {
display: block;
}
.treeview-tr:first-of-type {
- background: transparent url(/base/static/src/img/expand.gif) 0 50% no-repeat;
+ background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat;
}
.oe-open .treeview-tr:first-of-type {
- background-image: url(/base/static/src/img/collapse.gif);
+ background-image: url(/web/static/src/img/collapse.gif);
}
.treeview-tr:first-of-type span,
.treeview-td:first-of-type span {
@@ -1233,18 +1237,18 @@ label.error {
width: 24px;
cursor: pointer;
display: block;
- background: url(/base/static/src/img/add-shortcut.png) no-repeat bottom;
+ background: url(/web/static/src/img/add-shortcut.png) no-repeat bottom;
float: left;
}
.oe-shortcut-remove{
- background: url(/base/static/src/img/remove-shortcut.png) no-repeat bottom;
+ background: url(/web/static/src/img/remove-shortcut.png) no-repeat bottom;
}
/* ================ */
.oe-shortcuts {
position: absolute;
margin: 0;
- padding: 6px 5px;
+ padding: 6px 15px;
top: 37px;
left: 197px;
right: 0;
@@ -1275,3 +1279,39 @@ label.error {
border-left: none;
padding-left: 0;
}
+
+ul.oe-arrow-list {
+ padding-left: 0.5em;
+ margin: 0;
+}
+ul.oe-arrow-list li {
+ display: inline-block;
+ margin-left: -0.5em;
+}
+ul.oe-arrow-list li span {
+ vertical-align: top;
+ display: inline-block;
+ border-width:1em;
+ border-style:solid;
+ border-color: white;
+ line-height:0em;
+}
+ul.oe-arrow-list .oe-arrow-list-before {
+ border-left-color: rgba(0,0,0,0);
+ border-right-width:0;
+}
+ul.oe-arrow-list .oe-arrow-list-after {
+ border-color: rgba(0,0,0,0);
+ border-left-color: white;
+ border-right-width:0;
+}
+ul.oe-arrow-list li.oe-arrow-list-selected span {
+ border-color: #CFCCCC;
+}
+ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-before {
+ border-left-color: rgba(0,0,0,0);
+}
+ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after {
+ border-color: rgba(0,0,0,0);
+ border-left-color: #CFCCCC;
+}
diff --git a/addons/base/static/src/css/data_export.css b/addons/web/static/src/css/data_export.css
index 7b4b9707b39..149fcea81e6 100644
--- a/addons/base/static/src/css/data_export.css
+++ b/addons/web/static/src/css/data_export.css
@@ -1,3 +1,6 @@
+.openerp .oe-export {
+ width: 100%;
+}
.openerp .oe_export_row tr{
background-color: #FFFFFF;
font-size: 0.8em;
@@ -20,11 +23,6 @@
background-color: #F3F3F3;
}
-.openerp .oe_export_fields_selector_export {
- width: 100%;
- height: 400px;
-}
-
.openerp .oe_export_fields_selector_left {
width: 50%;
}
@@ -35,9 +33,15 @@
height: 400px;
border: solid #999999 1px;
}
+.openerp div#left_field_panel table {
+ width: 100%;
+}
.openerp .oe_export_fields_selector_center {
- width: 102px;
+ text-align: center;
+}
+.openerp .oe_export_fields_selector_center button {
+ white-space: nowrap;
}
.openerp .oe_export_fields_selector_right {
@@ -45,7 +49,7 @@
height: 400px;
}
-.openerp .oe_export_fields_selector_export select{
+.openerp .oe_export_fields_selector_right select{
width: 100%;
height: 100%;
}
@@ -55,7 +59,7 @@
text-align: left;
white-space: nowrap;
padding: 4px 5px;
- background: url(/base/static/src/img/header.gif);
+ background: url(/web/static/src/img/header.gif);
}
@@ -78,8 +82,3 @@
border: none;
display: block;
}
-
-.openerp .oe_export_button_export {
- border: 1px solid #006;
- background-color: #F3F3F3;
-}
diff --git a/addons/base/static/src/img/accessories-archiver.png b/addons/web/static/src/img/accessories-archiver.png
index 8bcbe4566bc..8bcbe4566bc 100644
--- a/addons/base/static/src/img/accessories-archiver.png
+++ b/addons/web/static/src/img/accessories-archiver.png
Binary files differ
diff --git a/addons/base/static/src/img/add-shortcut.png b/addons/web/static/src/img/add-shortcut.png
index bcc0a09eb45..bcc0a09eb45 100644
--- a/addons/base/static/src/img/add-shortcut.png
+++ b/addons/web/static/src/img/add-shortcut.png
Binary files differ
diff --git a/addons/base/static/src/img/attachments-close.png b/addons/web/static/src/img/attachments-close.png
index 14d645534b8..14d645534b8 100644
--- a/addons/base/static/src/img/attachments-close.png
+++ b/addons/web/static/src/img/attachments-close.png
Binary files differ
diff --git a/addons/base/static/src/img/collapse.gif b/addons/web/static/src/img/collapse.gif
index 759e72ebcfe..759e72ebcfe 100644
--- a/addons/base/static/src/img/collapse.gif
+++ b/addons/web/static/src/img/collapse.gif
Binary files differ
diff --git a/addons/base/static/src/img/db.png b/addons/web/static/src/img/db.png
index 83e42df26b3..83e42df26b3 100644
--- a/addons/base/static/src/img/db.png
+++ b/addons/web/static/src/img/db.png
Binary files differ
diff --git a/addons/base/static/src/img/down-arrow.png b/addons/web/static/src/img/down-arrow.png
index b1288e52682..b1288e52682 100644
--- a/addons/base/static/src/img/down-arrow.png
+++ b/addons/web/static/src/img/down-arrow.png
Binary files differ
diff --git a/addons/base/static/src/img/expand.gif b/addons/web/static/src/img/expand.gif
index ca98d0b5f2b..ca98d0b5f2b 100644
--- a/addons/base/static/src/img/expand.gif
+++ b/addons/web/static/src/img/expand.gif
Binary files differ
diff --git a/addons/base/static/src/img/favicon.ico b/addons/web/static/src/img/favicon.ico
index a323cc21c00..a323cc21c00 100644
--- a/addons/base/static/src/img/favicon.ico
+++ b/addons/web/static/src/img/favicon.ico
Binary files differ
diff --git a/addons/base/static/src/img/header-about.png b/addons/web/static/src/img/header-about.png
index b53e9a86ebe..b53e9a86ebe 100644
--- a/addons/base/static/src/img/header-about.png
+++ b/addons/web/static/src/img/header-about.png
Binary files differ
diff --git a/addons/base/static/src/img/header-background.png b/addons/web/static/src/img/header-background.png
index 774b3954124..774b3954124 100644
--- a/addons/base/static/src/img/header-background.png
+++ b/addons/web/static/src/img/header-background.png
Binary files differ
diff --git a/addons/base/static/src/img/header-help.png b/addons/web/static/src/img/header-help.png
index 19e9906fdef..19e9906fdef 100644
--- a/addons/base/static/src/img/header-help.png
+++ b/addons/web/static/src/img/header-help.png
Binary files differ
diff --git a/addons/base/static/src/img/header-home.png b/addons/web/static/src/img/header-home.png
index fd96742d15a..fd96742d15a 100644
--- a/addons/base/static/src/img/header-home.png
+++ b/addons/web/static/src/img/header-home.png
Binary files differ
diff --git a/addons/base/static/src/img/header-preferences.png b/addons/web/static/src/img/header-preferences.png
index 6c978b49f55..6c978b49f55 100644
--- a/addons/base/static/src/img/header-preferences.png
+++ b/addons/web/static/src/img/header-preferences.png
Binary files differ
diff --git a/addons/base/static/src/img/header-requests.png b/addons/web/static/src/img/header-requests.png
index 6577e7e6448..6577e7e6448 100644
--- a/addons/base/static/src/img/header-requests.png
+++ b/addons/web/static/src/img/header-requests.png
Binary files differ
diff --git a/addons/base/static/src/img/header.gif b/addons/web/static/src/img/header.gif
index f40bd9c0f6a..f40bd9c0f6a 100644
--- a/addons/base/static/src/img/header.gif
+++ b/addons/web/static/src/img/header.gif
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ABOUT.png b/addons/web/static/src/img/icons/STOCK_ABOUT.png
index 1b430a35758..1b430a35758 100644
--- a/addons/base/static/src/img/icons/STOCK_ABOUT.png
+++ b/addons/web/static/src/img/icons/STOCK_ABOUT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ADD.png b/addons/web/static/src/img/icons/STOCK_ADD.png
index 70612c181c6..70612c181c6 100644
--- a/addons/base/static/src/img/icons/STOCK_ADD.png
+++ b/addons/web/static/src/img/icons/STOCK_ADD.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_APPLY.png b/addons/web/static/src/img/icons/STOCK_APPLY.png
index 116f2e433bb..116f2e433bb 100644
--- a/addons/base/static/src/img/icons/STOCK_APPLY.png
+++ b/addons/web/static/src/img/icons/STOCK_APPLY.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_BOLD.png b/addons/web/static/src/img/icons/STOCK_BOLD.png
index 408f25aa20b..408f25aa20b 100644
--- a/addons/base/static/src/img/icons/STOCK_BOLD.png
+++ b/addons/web/static/src/img/icons/STOCK_BOLD.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CANCEL.png b/addons/web/static/src/img/icons/STOCK_CANCEL.png
index 8cf6273281b..8cf6273281b 100644
--- a/addons/base/static/src/img/icons/STOCK_CANCEL.png
+++ b/addons/web/static/src/img/icons/STOCK_CANCEL.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CDROM.png b/addons/web/static/src/img/icons/STOCK_CDROM.png
index 27e8edd8a0b..27e8edd8a0b 100644
--- a/addons/base/static/src/img/icons/STOCK_CDROM.png
+++ b/addons/web/static/src/img/icons/STOCK_CDROM.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CLEAR.png b/addons/web/static/src/img/icons/STOCK_CLEAR.png
index b2874fb84fa..b2874fb84fa 100644
--- a/addons/base/static/src/img/icons/STOCK_CLEAR.png
+++ b/addons/web/static/src/img/icons/STOCK_CLEAR.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CLOSE.png b/addons/web/static/src/img/icons/STOCK_CLOSE.png
index 4966974e178..4966974e178 100644
--- a/addons/base/static/src/img/icons/STOCK_CLOSE.png
+++ b/addons/web/static/src/img/icons/STOCK_CLOSE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_COLOR_PICKER.png b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png
index 232d54f8f3b..232d54f8f3b 100644
--- a/addons/base/static/src/img/icons/STOCK_COLOR_PICKER.png
+++ b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CONNECT.png b/addons/web/static/src/img/icons/STOCK_CONNECT.png
index c820b54abcc..c820b54abcc 100644
--- a/addons/base/static/src/img/icons/STOCK_CONNECT.png
+++ b/addons/web/static/src/img/icons/STOCK_CONNECT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CONVERT.png b/addons/web/static/src/img/icons/STOCK_CONVERT.png
index 6288b964cc0..6288b964cc0 100644
--- a/addons/base/static/src/img/icons/STOCK_CONVERT.png
+++ b/addons/web/static/src/img/icons/STOCK_CONVERT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_COPY.png b/addons/web/static/src/img/icons/STOCK_COPY.png
index 3d68da606d2..3d68da606d2 100644
--- a/addons/base/static/src/img/icons/STOCK_COPY.png
+++ b/addons/web/static/src/img/icons/STOCK_COPY.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_CUT.png b/addons/web/static/src/img/icons/STOCK_CUT.png
index 96681d26968..96681d26968 100644
--- a/addons/base/static/src/img/icons/STOCK_CUT.png
+++ b/addons/web/static/src/img/icons/STOCK_CUT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DELETE.png b/addons/web/static/src/img/icons/STOCK_DELETE.png
index 879d6fd1cbe..879d6fd1cbe 100644
--- a/addons/base/static/src/img/icons/STOCK_DELETE.png
+++ b/addons/web/static/src/img/icons/STOCK_DELETE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png b/addons/web/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png
index eb411112f83..eb411112f83 100644
--- a/addons/base/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png
+++ b/addons/web/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_ERROR.png b/addons/web/static/src/img/icons/STOCK_DIALOG_ERROR.png
index e97bc43504b..e97bc43504b 100644
--- a/addons/base/static/src/img/icons/STOCK_DIALOG_ERROR.png
+++ b/addons/web/static/src/img/icons/STOCK_DIALOG_ERROR.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_INFO.png b/addons/web/static/src/img/icons/STOCK_DIALOG_INFO.png
index ed46c3ecdb3..ed46c3ecdb3 100644
--- a/addons/base/static/src/img/icons/STOCK_DIALOG_INFO.png
+++ b/addons/web/static/src/img/icons/STOCK_DIALOG_INFO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_QUESTION.png b/addons/web/static/src/img/icons/STOCK_DIALOG_QUESTION.png
index ef68f43f43f..ef68f43f43f 100644
--- a/addons/base/static/src/img/icons/STOCK_DIALOG_QUESTION.png
+++ b/addons/web/static/src/img/icons/STOCK_DIALOG_QUESTION.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_WARNING.png b/addons/web/static/src/img/icons/STOCK_DIALOG_WARNING.png
index 65a4d2c7220..65a4d2c7220 100644
--- a/addons/base/static/src/img/icons/STOCK_DIALOG_WARNING.png
+++ b/addons/web/static/src/img/icons/STOCK_DIALOG_WARNING.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DIRECTORY.png b/addons/web/static/src/img/icons/STOCK_DIRECTORY.png
index 8e41b7878a9..8e41b7878a9 100644
--- a/addons/base/static/src/img/icons/STOCK_DIRECTORY.png
+++ b/addons/web/static/src/img/icons/STOCK_DIRECTORY.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DISCONNECT.png b/addons/web/static/src/img/icons/STOCK_DISCONNECT.png
index fd188701fc2..fd188701fc2 100644
--- a/addons/base/static/src/img/icons/STOCK_DISCONNECT.png
+++ b/addons/web/static/src/img/icons/STOCK_DISCONNECT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DND.png b/addons/web/static/src/img/icons/STOCK_DND.png
index bf3b8068397..bf3b8068397 100644
--- a/addons/base/static/src/img/icons/STOCK_DND.png
+++ b/addons/web/static/src/img/icons/STOCK_DND.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_DND_MULTIPLE.png b/addons/web/static/src/img/icons/STOCK_DND_MULTIPLE.png
index aa4c65ad5b1..aa4c65ad5b1 100644
--- a/addons/base/static/src/img/icons/STOCK_DND_MULTIPLE.png
+++ b/addons/web/static/src/img/icons/STOCK_DND_MULTIPLE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_EDIT.png b/addons/web/static/src/img/icons/STOCK_EDIT.png
index 53b7d0855ed..53b7d0855ed 100644
--- a/addons/base/static/src/img/icons/STOCK_EDIT.png
+++ b/addons/web/static/src/img/icons/STOCK_EDIT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_EXECUTE.png b/addons/web/static/src/img/icons/STOCK_EXECUTE.png
index eddc0f86b25..eddc0f86b25 100644
--- a/addons/base/static/src/img/icons/STOCK_EXECUTE.png
+++ b/addons/web/static/src/img/icons/STOCK_EXECUTE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_FILE.png b/addons/web/static/src/img/icons/STOCK_FILE.png
index fa157156bcc..fa157156bcc 100644
--- a/addons/base/static/src/img/icons/STOCK_FILE.png
+++ b/addons/web/static/src/img/icons/STOCK_FILE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_FIND.png b/addons/web/static/src/img/icons/STOCK_FIND.png
index 7a23b0125b5..7a23b0125b5 100644
--- a/addons/base/static/src/img/icons/STOCK_FIND.png
+++ b/addons/web/static/src/img/icons/STOCK_FIND.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_FIND_AND_REPLACE.png b/addons/web/static/src/img/icons/STOCK_FIND_AND_REPLACE.png
index b8d8eeec1b2..b8d8eeec1b2 100644
--- a/addons/base/static/src/img/icons/STOCK_FIND_AND_REPLACE.png
+++ b/addons/web/static/src/img/icons/STOCK_FIND_AND_REPLACE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_FLOPPY.png b/addons/web/static/src/img/icons/STOCK_FLOPPY.png
index 7d8209cfb6f..7d8209cfb6f 100644
--- a/addons/base/static/src/img/icons/STOCK_FLOPPY.png
+++ b/addons/web/static/src/img/icons/STOCK_FLOPPY.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_FULLSCREEN.png
index 8ddc31e7481..8ddc31e7481 100644
--- a/addons/base/static/src/img/icons/STOCK_FULLSCREEN.png
+++ b/addons/web/static/src/img/icons/STOCK_FULLSCREEN.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_BOTTOM.png b/addons/web/static/src/img/icons/STOCK_GOTO_BOTTOM.png
index be52840dee1..be52840dee1 100644
--- a/addons/base/static/src/img/icons/STOCK_GOTO_BOTTOM.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_BOTTOM.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_FIRST.png b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png
index 3d00e36d696..3d00e36d696 100644
--- a/addons/base/static/src/img/icons/STOCK_GOTO_FIRST.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_LAST.png b/addons/web/static/src/img/icons/STOCK_GOTO_LAST.png
index 2028226996d..2028226996d 100644
--- a/addons/base/static/src/img/icons/STOCK_GOTO_LAST.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_LAST.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_TOP.png b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png
index 227a91e5157..227a91e5157 100644
--- a/addons/base/static/src/img/icons/STOCK_GOTO_TOP.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GO_BACK.png b/addons/web/static/src/img/icons/STOCK_GO_BACK.png
index 568117dc170..568117dc170 100644
--- a/addons/base/static/src/img/icons/STOCK_GO_BACK.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_BACK.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GO_DOWN.png b/addons/web/static/src/img/icons/STOCK_GO_DOWN.png
index 5677cffe6a3..5677cffe6a3 100644
--- a/addons/base/static/src/img/icons/STOCK_GO_DOWN.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_DOWN.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GO_FORWARD.png b/addons/web/static/src/img/icons/STOCK_GO_FORWARD.png
index fa89d31b734..fa89d31b734 100644
--- a/addons/base/static/src/img/icons/STOCK_GO_FORWARD.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_FORWARD.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_GO_UP.png b/addons/web/static/src/img/icons/STOCK_GO_UP.png
index 84f96fdfca2..84f96fdfca2 100644
--- a/addons/base/static/src/img/icons/STOCK_GO_UP.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_UP.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_HARDDISK.png b/addons/web/static/src/img/icons/STOCK_HARDDISK.png
index 73e5ef0a82e..73e5ef0a82e 100644
--- a/addons/base/static/src/img/icons/STOCK_HARDDISK.png
+++ b/addons/web/static/src/img/icons/STOCK_HARDDISK.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_HELP.png b/addons/web/static/src/img/icons/STOCK_HELP.png
index f8e17009dd6..f8e17009dd6 100644
--- a/addons/base/static/src/img/icons/STOCK_HELP.png
+++ b/addons/web/static/src/img/icons/STOCK_HELP.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_HOME.png b/addons/web/static/src/img/icons/STOCK_HOME.png
index 9d3d50d0fcb..9d3d50d0fcb 100644
--- a/addons/base/static/src/img/icons/STOCK_HOME.png
+++ b/addons/web/static/src/img/icons/STOCK_HOME.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_INDENT.png b/addons/web/static/src/img/icons/STOCK_INDENT.png
index 19f2669447d..19f2669447d 100644
--- a/addons/base/static/src/img/icons/STOCK_INDENT.png
+++ b/addons/web/static/src/img/icons/STOCK_INDENT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_INDEX.png b/addons/web/static/src/img/icons/STOCK_INDEX.png
index 0b63cc25fa8..0b63cc25fa8 100644
--- a/addons/base/static/src/img/icons/STOCK_INDEX.png
+++ b/addons/web/static/src/img/icons/STOCK_INDEX.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_INFO.png b/addons/web/static/src/img/icons/STOCK_INFO.png
index 272019f5c99..272019f5c99 100644
--- a/addons/base/static/src/img/icons/STOCK_INFO.png
+++ b/addons/web/static/src/img/icons/STOCK_INFO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ITALIC.png b/addons/web/static/src/img/icons/STOCK_ITALIC.png
index 26c57226a31..26c57226a31 100644
--- a/addons/base/static/src/img/icons/STOCK_ITALIC.png
+++ b/addons/web/static/src/img/icons/STOCK_ITALIC.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_JUMP_TO.png b/addons/web/static/src/img/icons/STOCK_JUMP_TO.png
index 82d7896bdac..82d7896bdac 100644
--- a/addons/base/static/src/img/icons/STOCK_JUMP_TO.png
+++ b/addons/web/static/src/img/icons/STOCK_JUMP_TO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_CENTER.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_CENTER.png
index d5f514298eb..d5f514298eb 100644
--- a/addons/base/static/src/img/icons/STOCK_JUSTIFY_CENTER.png
+++ b/addons/web/static/src/img/icons/STOCK_JUSTIFY_CENTER.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_FILL.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_FILL.png
index 5e2f5c73f30..5e2f5c73f30 100644
--- a/addons/base/static/src/img/icons/STOCK_JUSTIFY_FILL.png
+++ b/addons/web/static/src/img/icons/STOCK_JUSTIFY_FILL.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_LEFT.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_LEFT.png
index ecb76b117eb..ecb76b117eb 100644
--- a/addons/base/static/src/img/icons/STOCK_JUSTIFY_LEFT.png
+++ b/addons/web/static/src/img/icons/STOCK_JUSTIFY_LEFT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png
index 3cd4d161420..3cd4d161420 100644
--- a/addons/base/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png
+++ b/addons/web/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
index 15bc8ab7d7b..15bc8ab7d7b 100644
--- a/addons/base/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
+++ b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_FORWARD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
index e5e198fbb79..e5e198fbb79 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_FORWARD.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_NEXT.png b/addons/web/static/src/img/icons/STOCK_MEDIA_NEXT.png
index e0aa2431cf0..e0aa2431cf0 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_NEXT.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_NEXT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PAUSE.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
index 6721994eb8d..6721994eb8d 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_PAUSE.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PLAY.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png
index b0832712c81..b0832712c81 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_PLAY.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png
index 756899e0bc1..756899e0bc1 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_RECORD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_RECORD.png
index 904974c81e5..904974c81e5 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_RECORD.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_RECORD.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_REWIND.png b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png
index 9c22d9e2778..9c22d9e2778 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_REWIND.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_STOP.png b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png
index 128cc2313ec..128cc2313ec 100644
--- a/addons/base/static/src/img/icons/STOCK_MEDIA_STOP.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_MISSING_IMAGE.png b/addons/web/static/src/img/icons/STOCK_MISSING_IMAGE.png
index cc69ed33e4b..cc69ed33e4b 100644
--- a/addons/base/static/src/img/icons/STOCK_MISSING_IMAGE.png
+++ b/addons/web/static/src/img/icons/STOCK_MISSING_IMAGE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_NETWORK.png b/addons/web/static/src/img/icons/STOCK_NETWORK.png
index df94a515fec..df94a515fec 100644
--- a/addons/base/static/src/img/icons/STOCK_NETWORK.png
+++ b/addons/web/static/src/img/icons/STOCK_NETWORK.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_NEW.png b/addons/web/static/src/img/icons/STOCK_NEW.png
index 04a290fac7d..04a290fac7d 100644
--- a/addons/base/static/src/img/icons/STOCK_NEW.png
+++ b/addons/web/static/src/img/icons/STOCK_NEW.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_NO.png b/addons/web/static/src/img/icons/STOCK_NO.png
index 047ddcd9289..047ddcd9289 100644
--- a/addons/base/static/src/img/icons/STOCK_NO.png
+++ b/addons/web/static/src/img/icons/STOCK_NO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_OK.png b/addons/web/static/src/img/icons/STOCK_OK.png
index 7755b8769f0..7755b8769f0 100644
--- a/addons/base/static/src/img/icons/STOCK_OK.png
+++ b/addons/web/static/src/img/icons/STOCK_OK.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_OPEN.png b/addons/web/static/src/img/icons/STOCK_OPEN.png
index 9cdd8c66770..9cdd8c66770 100644
--- a/addons/base/static/src/img/icons/STOCK_OPEN.png
+++ b/addons/web/static/src/img/icons/STOCK_OPEN.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_PASTE.png b/addons/web/static/src/img/icons/STOCK_PASTE.png
index 840f26c8b38..840f26c8b38 100644
--- a/addons/base/static/src/img/icons/STOCK_PASTE.png
+++ b/addons/web/static/src/img/icons/STOCK_PASTE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_PREFERENCES.png b/addons/web/static/src/img/icons/STOCK_PREFERENCES.png
index 9ba17a0ab20..9ba17a0ab20 100644
--- a/addons/base/static/src/img/icons/STOCK_PREFERENCES.png
+++ b/addons/web/static/src/img/icons/STOCK_PREFERENCES.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_PRINT.png b/addons/web/static/src/img/icons/STOCK_PRINT.png
index be0ed4efb44..be0ed4efb44 100644
--- a/addons/base/static/src/img/icons/STOCK_PRINT.png
+++ b/addons/web/static/src/img/icons/STOCK_PRINT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_PRINT_PREVIEW.png b/addons/web/static/src/img/icons/STOCK_PRINT_PREVIEW.png
index ab15fcbd307..ab15fcbd307 100644
--- a/addons/base/static/src/img/icons/STOCK_PRINT_PREVIEW.png
+++ b/addons/web/static/src/img/icons/STOCK_PRINT_PREVIEW.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_PROPERTIES.png b/addons/web/static/src/img/icons/STOCK_PROPERTIES.png
index 894415ec1ce..894415ec1ce 100644
--- a/addons/base/static/src/img/icons/STOCK_PROPERTIES.png
+++ b/addons/web/static/src/img/icons/STOCK_PROPERTIES.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_QUIT.png b/addons/web/static/src/img/icons/STOCK_QUIT.png
index 50b5144660b..50b5144660b 100644
--- a/addons/base/static/src/img/icons/STOCK_QUIT.png
+++ b/addons/web/static/src/img/icons/STOCK_QUIT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_REDO.png b/addons/web/static/src/img/icons/STOCK_REDO.png
index 54055b3966d..54055b3966d 100644
--- a/addons/base/static/src/img/icons/STOCK_REDO.png
+++ b/addons/web/static/src/img/icons/STOCK_REDO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_REFRESH.png b/addons/web/static/src/img/icons/STOCK_REFRESH.png
index 7474728b4c0..7474728b4c0 100644
--- a/addons/base/static/src/img/icons/STOCK_REFRESH.png
+++ b/addons/web/static/src/img/icons/STOCK_REFRESH.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_REMOVE.png b/addons/web/static/src/img/icons/STOCK_REMOVE.png
index c2b6e915f77..c2b6e915f77 100644
--- a/addons/base/static/src/img/icons/STOCK_REMOVE.png
+++ b/addons/web/static/src/img/icons/STOCK_REMOVE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_REVERT_TO_SAVED.png b/addons/web/static/src/img/icons/STOCK_REVERT_TO_SAVED.png
index eaf54584edf..eaf54584edf 100644
--- a/addons/base/static/src/img/icons/STOCK_REVERT_TO_SAVED.png
+++ b/addons/web/static/src/img/icons/STOCK_REVERT_TO_SAVED.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SAVE.png b/addons/web/static/src/img/icons/STOCK_SAVE.png
index c61836548a7..c61836548a7 100644
--- a/addons/base/static/src/img/icons/STOCK_SAVE.png
+++ b/addons/web/static/src/img/icons/STOCK_SAVE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SAVE_AS.png b/addons/web/static/src/img/icons/STOCK_SAVE_AS.png
index 1831e4e0a4b..1831e4e0a4b 100644
--- a/addons/base/static/src/img/icons/STOCK_SAVE_AS.png
+++ b/addons/web/static/src/img/icons/STOCK_SAVE_AS.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SELECT_COLOR.png b/addons/web/static/src/img/icons/STOCK_SELECT_COLOR.png
index 12b015df107..12b015df107 100644
--- a/addons/base/static/src/img/icons/STOCK_SELECT_COLOR.png
+++ b/addons/web/static/src/img/icons/STOCK_SELECT_COLOR.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SELECT_FONT.png b/addons/web/static/src/img/icons/STOCK_SELECT_FONT.png
index 66e606313a5..66e606313a5 100644
--- a/addons/base/static/src/img/icons/STOCK_SELECT_FONT.png
+++ b/addons/web/static/src/img/icons/STOCK_SELECT_FONT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SORT_ASCENDING.png b/addons/web/static/src/img/icons/STOCK_SORT_ASCENDING.png
index a648fa0d359..a648fa0d359 100644
--- a/addons/base/static/src/img/icons/STOCK_SORT_ASCENDING.png
+++ b/addons/web/static/src/img/icons/STOCK_SORT_ASCENDING.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SORT_DESCENDING.png b/addons/web/static/src/img/icons/STOCK_SORT_DESCENDING.png
index a90b588d797..a90b588d797 100644
--- a/addons/base/static/src/img/icons/STOCK_SORT_DESCENDING.png
+++ b/addons/web/static/src/img/icons/STOCK_SORT_DESCENDING.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_SPELL_CHECK.png b/addons/web/static/src/img/icons/STOCK_SPELL_CHECK.png
index 698f7c24a43..698f7c24a43 100644
--- a/addons/base/static/src/img/icons/STOCK_SPELL_CHECK.png
+++ b/addons/web/static/src/img/icons/STOCK_SPELL_CHECK.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_STOP.png b/addons/web/static/src/img/icons/STOCK_STOP.png
index 2ee93ed6415..2ee93ed6415 100644
--- a/addons/base/static/src/img/icons/STOCK_STOP.png
+++ b/addons/web/static/src/img/icons/STOCK_STOP.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_STRIKETHROUGH.png b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png
index 1c11f214622..1c11f214622 100644
--- a/addons/base/static/src/img/icons/STOCK_STRIKETHROUGH.png
+++ b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_UNDELETE.png b/addons/web/static/src/img/icons/STOCK_UNDELETE.png
index c44b940c03b..c44b940c03b 100644
--- a/addons/base/static/src/img/icons/STOCK_UNDELETE.png
+++ b/addons/web/static/src/img/icons/STOCK_UNDELETE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_UNDERLINE.png b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png
index 7dbb5d7e60a..7dbb5d7e60a 100644
--- a/addons/base/static/src/img/icons/STOCK_UNDERLINE.png
+++ b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_UNDO.png b/addons/web/static/src/img/icons/STOCK_UNDO.png
index 7a50de0c61e..7a50de0c61e 100644
--- a/addons/base/static/src/img/icons/STOCK_UNDO.png
+++ b/addons/web/static/src/img/icons/STOCK_UNDO.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_UNINDENT.png b/addons/web/static/src/img/icons/STOCK_UNINDENT.png
index 8ace914c1bd..8ace914c1bd 100644
--- a/addons/base/static/src/img/icons/STOCK_UNINDENT.png
+++ b/addons/web/static/src/img/icons/STOCK_UNINDENT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_YES.png b/addons/web/static/src/img/icons/STOCK_YES.png
index 01fb373c251..01fb373c251 100644
--- a/addons/base/static/src/img/icons/STOCK_YES.png
+++ b/addons/web/static/src/img/icons/STOCK_YES.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_100.png b/addons/web/static/src/img/icons/STOCK_ZOOM_100.png
index 5193406b787..5193406b787 100644
--- a/addons/base/static/src/img/icons/STOCK_ZOOM_100.png
+++ b/addons/web/static/src/img/icons/STOCK_ZOOM_100.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_FIT.png b/addons/web/static/src/img/icons/STOCK_ZOOM_FIT.png
index 1e70e619466..1e70e619466 100644
--- a/addons/base/static/src/img/icons/STOCK_ZOOM_FIT.png
+++ b/addons/web/static/src/img/icons/STOCK_ZOOM_FIT.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_IN.png b/addons/web/static/src/img/icons/STOCK_ZOOM_IN.png
index 29e50e45d4a..29e50e45d4a 100644
--- a/addons/base/static/src/img/icons/STOCK_ZOOM_IN.png
+++ b/addons/web/static/src/img/icons/STOCK_ZOOM_IN.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_OUT.png b/addons/web/static/src/img/icons/STOCK_ZOOM_OUT.png
index 0da5ee7ec13..0da5ee7ec13 100644
--- a/addons/base/static/src/img/icons/STOCK_ZOOM_OUT.png
+++ b/addons/web/static/src/img/icons/STOCK_ZOOM_OUT.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/color-picker.png b/addons/web/static/src/img/icons/color-picker.png
new file mode 100644
index 00000000000..765294c6bdd
--- /dev/null
+++ b/addons/web/static/src/img/icons/color-picker.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-about.png b/addons/web/static/src/img/icons/gtk-about.png
new file mode 100644
index 00000000000..1b430a35758
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-about.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-add.png b/addons/web/static/src/img/icons/gtk-add.png
index 70612c181c6..70612c181c6 100644
--- a/addons/base/static/src/img/icons/gtk-add.png
+++ b/addons/web/static/src/img/icons/gtk-add.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-apply.png b/addons/web/static/src/img/icons/gtk-apply.png
index 116f2e433bb..116f2e433bb 100644
--- a/addons/base/static/src/img/icons/gtk-apply.png
+++ b/addons/web/static/src/img/icons/gtk-apply.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-bold.png b/addons/web/static/src/img/icons/gtk-bold.png
new file mode 100644
index 00000000000..408f25aa20b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-bold.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-cancel.png b/addons/web/static/src/img/icons/gtk-cancel.png
index 8cf6273281b..8cf6273281b 100644
--- a/addons/base/static/src/img/icons/gtk-cancel.png
+++ b/addons/web/static/src/img/icons/gtk-cancel.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-cdrom.png b/addons/web/static/src/img/icons/gtk-cdrom.png
new file mode 100644
index 00000000000..27e8edd8a0b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-cdrom.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-clear.png b/addons/web/static/src/img/icons/gtk-clear.png
new file mode 100644
index 00000000000..b2874fb84fa
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-clear.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-close.png b/addons/web/static/src/img/icons/gtk-close.png
index 4966974e178..4966974e178 100644
--- a/addons/base/static/src/img/icons/gtk-close.png
+++ b/addons/web/static/src/img/icons/gtk-close.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-color-picker.png b/addons/web/static/src/img/icons/gtk-color-picker.png
new file mode 100644
index 00000000000..232d54f8f3b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-color-picker.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-connect.png b/addons/web/static/src/img/icons/gtk-connect.png
new file mode 100644
index 00000000000..c820b54abcc
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-connect.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-convert.png b/addons/web/static/src/img/icons/gtk-convert.png
index 6288b964cc0..6288b964cc0 100644
--- a/addons/base/static/src/img/icons/gtk-convert.png
+++ b/addons/web/static/src/img/icons/gtk-convert.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-copy.png b/addons/web/static/src/img/icons/gtk-copy.png
new file mode 100644
index 00000000000..3d68da606d2
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-copy.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-cut.png b/addons/web/static/src/img/icons/gtk-cut.png
new file mode 100644
index 00000000000..96681d26968
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-cut.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-delete.png b/addons/web/static/src/img/icons/gtk-delete.png
index 879d6fd1cbe..879d6fd1cbe 100644
--- a/addons/base/static/src/img/icons/gtk-delete.png
+++ b/addons/web/static/src/img/icons/gtk-delete.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dialog-authentication.png b/addons/web/static/src/img/icons/gtk-dialog-authentication.png
new file mode 100644
index 00000000000..eb411112f83
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dialog-authentication.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dialog-error.png b/addons/web/static/src/img/icons/gtk-dialog-error.png
new file mode 100644
index 00000000000..e97bc43504b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dialog-error.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dialog-info.png b/addons/web/static/src/img/icons/gtk-dialog-info.png
new file mode 100644
index 00000000000..ed46c3ecdb3
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dialog-info.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dialog-question.png b/addons/web/static/src/img/icons/gtk-dialog-question.png
new file mode 100644
index 00000000000..ef68f43f43f
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dialog-question.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dialog-warning.png b/addons/web/static/src/img/icons/gtk-dialog-warning.png
new file mode 100644
index 00000000000..65a4d2c7220
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dialog-warning.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-directory-remote.png b/addons/web/static/src/img/icons/gtk-directory-remote.png
new file mode 100644
index 00000000000..34e737d7c07
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-directory-remote.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-directory.png b/addons/web/static/src/img/icons/gtk-directory.png
new file mode 100644
index 00000000000..8e41b7878a9
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-directory.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-disconnect.png b/addons/web/static/src/img/icons/gtk-disconnect.png
new file mode 100644
index 00000000000..fd188701fc2
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-disconnect.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dnd-multiple.png b/addons/web/static/src/img/icons/gtk-dnd-multiple.png
new file mode 100644
index 00000000000..aa4c65ad5b1
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-dnd-multiple.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-dnd.png b/addons/web/static/src/img/icons/gtk-dnd.png
index bf3b8068397..bf3b8068397 100644
--- a/addons/base/static/src/img/icons/gtk-dnd.png
+++ b/addons/web/static/src/img/icons/gtk-dnd.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-edit.png b/addons/web/static/src/img/icons/gtk-edit.png
index 53b7d0855ed..53b7d0855ed 100644
--- a/addons/base/static/src/img/icons/gtk-edit.png
+++ b/addons/web/static/src/img/icons/gtk-edit.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-execute.png b/addons/web/static/src/img/icons/gtk-execute.png
index eddc0f86b25..eddc0f86b25 100644
--- a/addons/base/static/src/img/icons/gtk-execute.png
+++ b/addons/web/static/src/img/icons/gtk-execute.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-file.png b/addons/web/static/src/img/icons/gtk-file.png
new file mode 100644
index 00000000000..fa157156bcc
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-file.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-find-and-replace.png b/addons/web/static/src/img/icons/gtk-find-and-replace.png
new file mode 100644
index 00000000000..b8d8eeec1b2
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-find-and-replace.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-find.png b/addons/web/static/src/img/icons/gtk-find.png
index 7a23b0125b5..7a23b0125b5 100644
--- a/addons/base/static/src/img/icons/gtk-find.png
+++ b/addons/web/static/src/img/icons/gtk-find.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-floppy.png b/addons/web/static/src/img/icons/gtk-floppy.png
new file mode 100644
index 00000000000..7d8209cfb6f
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-floppy.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-fullscreen.png b/addons/web/static/src/img/icons/gtk-fullscreen.png
new file mode 100644
index 00000000000..8ddc31e7481
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-fullscreen.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-go-back.png b/addons/web/static/src/img/icons/gtk-go-back.png
index 568117dc170..568117dc170 100644
--- a/addons/base/static/src/img/icons/gtk-go-back.png
+++ b/addons/web/static/src/img/icons/gtk-go-back.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-go-down.png b/addons/web/static/src/img/icons/gtk-go-down.png
index 5677cffe6a3..5677cffe6a3 100644
--- a/addons/base/static/src/img/icons/gtk-go-down.png
+++ b/addons/web/static/src/img/icons/gtk-go-down.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-go-forward.png b/addons/web/static/src/img/icons/gtk-go-forward.png
index fa89d31b734..fa89d31b734 100644
--- a/addons/base/static/src/img/icons/gtk-go-forward.png
+++ b/addons/web/static/src/img/icons/gtk-go-forward.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-go-up.png b/addons/web/static/src/img/icons/gtk-go-up.png
index 84f96fdfca2..84f96fdfca2 100644
--- a/addons/base/static/src/img/icons/gtk-go-up.png
+++ b/addons/web/static/src/img/icons/gtk-go-up.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-goto-bottom.png b/addons/web/static/src/img/icons/gtk-goto-bottom.png
new file mode 100644
index 00000000000..be52840dee1
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-goto-bottom.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-goto-first.png b/addons/web/static/src/img/icons/gtk-goto-first.png
new file mode 100644
index 00000000000..3d00e36d696
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-goto-first.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-goto-last.png b/addons/web/static/src/img/icons/gtk-goto-last.png
index 2028226996d..2028226996d 100644
--- a/addons/base/static/src/img/icons/gtk-goto-last.png
+++ b/addons/web/static/src/img/icons/gtk-goto-last.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-goto-top.png b/addons/web/static/src/img/icons/gtk-goto-top.png
new file mode 100644
index 00000000000..227a91e5157
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-goto-top.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-harddisk.png b/addons/web/static/src/img/icons/gtk-harddisk.png
new file mode 100644
index 00000000000..73e5ef0a82e
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-harddisk.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-help.png b/addons/web/static/src/img/icons/gtk-help.png
new file mode 100644
index 00000000000..f8e17009dd6
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-help.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-home.png b/addons/web/static/src/img/icons/gtk-home.png
new file mode 100644
index 00000000000..9d3d50d0fcb
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-home.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-indent.png b/addons/web/static/src/img/icons/gtk-indent.png
index 19f2669447d..19f2669447d 100644
--- a/addons/base/static/src/img/icons/gtk-indent.png
+++ b/addons/web/static/src/img/icons/gtk-indent.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-index.png b/addons/web/static/src/img/icons/gtk-index.png
index 0b63cc25fa8..0b63cc25fa8 100644
--- a/addons/base/static/src/img/icons/gtk-index.png
+++ b/addons/web/static/src/img/icons/gtk-index.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-info.png b/addons/web/static/src/img/icons/gtk-info.png
new file mode 100644
index 00000000000..272019f5c99
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-info.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-italic.png b/addons/web/static/src/img/icons/gtk-italic.png
new file mode 100644
index 00000000000..26c57226a31
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-italic.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-jump-to.png b/addons/web/static/src/img/icons/gtk-jump-to.png
index 82d7896bdac..82d7896bdac 100644
--- a/addons/base/static/src/img/icons/gtk-jump-to.png
+++ b/addons/web/static/src/img/icons/gtk-jump-to.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-justify-center.png b/addons/web/static/src/img/icons/gtk-justify-center.png
new file mode 100644
index 00000000000..d5f514298eb
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-justify-center.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-justify-fill.png b/addons/web/static/src/img/icons/gtk-justify-fill.png
index 5e2f5c73f30..5e2f5c73f30 100644
--- a/addons/base/static/src/img/icons/gtk-justify-fill.png
+++ b/addons/web/static/src/img/icons/gtk-justify-fill.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-justify-left.png b/addons/web/static/src/img/icons/gtk-justify-left.png
new file mode 100644
index 00000000000..ecb76b117eb
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-justify-left.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-justify-right.png b/addons/web/static/src/img/icons/gtk-justify-right.png
new file mode 100644
index 00000000000..3cd4d161420
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-justify-right.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-leave-fullscreen.png b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png
new file mode 100644
index 00000000000..15bc8ab7d7b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-forward.png b/addons/web/static/src/img/icons/gtk-media-forward.png
new file mode 100644
index 00000000000..e5e198fbb79
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-forward.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-next.png b/addons/web/static/src/img/icons/gtk-media-next.png
new file mode 100644
index 00000000000..e0aa2431cf0
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-next.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-media-pause.png b/addons/web/static/src/img/icons/gtk-media-pause.png
index 6721994eb8d..6721994eb8d 100644
--- a/addons/base/static/src/img/icons/gtk-media-pause.png
+++ b/addons/web/static/src/img/icons/gtk-media-pause.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-media-play.png b/addons/web/static/src/img/icons/gtk-media-play.png
index b0832712c81..b0832712c81 100644
--- a/addons/base/static/src/img/icons/gtk-media-play.png
+++ b/addons/web/static/src/img/icons/gtk-media-play.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-previous.png b/addons/web/static/src/img/icons/gtk-media-previous.png
new file mode 100644
index 00000000000..756899e0bc1
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-previous.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-record.png b/addons/web/static/src/img/icons/gtk-media-record.png
new file mode 100644
index 00000000000..904974c81e5
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-record.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-rewind.png b/addons/web/static/src/img/icons/gtk-media-rewind.png
new file mode 100644
index 00000000000..9c22d9e2778
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-rewind.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-stop.png b/addons/web/static/src/img/icons/gtk-media-stop.png
new file mode 100644
index 00000000000..128cc2313ec
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-media-stop.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-missing-image.png b/addons/web/static/src/img/icons/gtk-missing-image.png
new file mode 100644
index 00000000000..cc69ed33e4b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-missing-image.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-network.png b/addons/web/static/src/img/icons/gtk-network.png
index df94a515fec..df94a515fec 100644
--- a/addons/base/static/src/img/icons/gtk-network.png
+++ b/addons/web/static/src/img/icons/gtk-network.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-new.png b/addons/web/static/src/img/icons/gtk-new.png
index 04a290fac7d..04a290fac7d 100644
--- a/addons/base/static/src/img/icons/gtk-new.png
+++ b/addons/web/static/src/img/icons/gtk-new.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-no.png b/addons/web/static/src/img/icons/gtk-no.png
index 047ddcd9289..047ddcd9289 100644
--- a/addons/base/static/src/img/icons/gtk-no.png
+++ b/addons/web/static/src/img/icons/gtk-no.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-ok.png b/addons/web/static/src/img/icons/gtk-ok.png
index 7755b8769f0..7755b8769f0 100644
--- a/addons/base/static/src/img/icons/gtk-ok.png
+++ b/addons/web/static/src/img/icons/gtk-ok.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-open.png b/addons/web/static/src/img/icons/gtk-open.png
index 9cdd8c66770..9cdd8c66770 100644
--- a/addons/base/static/src/img/icons/gtk-open.png
+++ b/addons/web/static/src/img/icons/gtk-open.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-paste-v.png b/addons/web/static/src/img/icons/gtk-paste-v.png
new file mode 100644
index 00000000000..76ec896f70e
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-paste-v.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-paste.png b/addons/web/static/src/img/icons/gtk-paste.png
new file mode 100644
index 00000000000..840f26c8b38
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-paste.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-preferences.png b/addons/web/static/src/img/icons/gtk-preferences.png
new file mode 100644
index 00000000000..9ba17a0ab20
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-preferences.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-print-preview.png b/addons/web/static/src/img/icons/gtk-print-preview.png
new file mode 100644
index 00000000000..ab15fcbd307
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-print-preview.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-print.png b/addons/web/static/src/img/icons/gtk-print.png
index be0ed4efb44..be0ed4efb44 100644
--- a/addons/base/static/src/img/icons/gtk-print.png
+++ b/addons/web/static/src/img/icons/gtk-print.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-properties.png b/addons/web/static/src/img/icons/gtk-properties.png
new file mode 100644
index 00000000000..894415ec1ce
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-properties.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-quit.png b/addons/web/static/src/img/icons/gtk-quit.png
new file mode 100644
index 00000000000..50b5144660b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-quit.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-redo.png b/addons/web/static/src/img/icons/gtk-redo.png
index 54055b3966d..54055b3966d 100644
--- a/addons/base/static/src/img/icons/gtk-redo.png
+++ b/addons/web/static/src/img/icons/gtk-redo.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-refresh.png b/addons/web/static/src/img/icons/gtk-refresh.png
new file mode 100644
index 00000000000..7474728b4c0
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-refresh.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-remove.png b/addons/web/static/src/img/icons/gtk-remove.png
index c2b6e915f77..c2b6e915f77 100644
--- a/addons/base/static/src/img/icons/gtk-remove.png
+++ b/addons/web/static/src/img/icons/gtk-remove.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-revert-to-saved.png b/addons/web/static/src/img/icons/gtk-revert-to-saved.png
new file mode 100644
index 00000000000..eaf54584edf
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-revert-to-saved.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-save-as.png b/addons/web/static/src/img/icons/gtk-save-as.png
new file mode 100644
index 00000000000..1831e4e0a4b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-save-as.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-save.png b/addons/web/static/src/img/icons/gtk-save.png
index c61836548a7..c61836548a7 100644
--- a/addons/base/static/src/img/icons/gtk-save.png
+++ b/addons/web/static/src/img/icons/gtk-save.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-select-color.png b/addons/web/static/src/img/icons/gtk-select-color.png
new file mode 100644
index 00000000000..12b015df107
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-select-color.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-select-font.png b/addons/web/static/src/img/icons/gtk-select-font.png
new file mode 100644
index 00000000000..66e606313a5
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-select-font.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-sort-ascending.png b/addons/web/static/src/img/icons/gtk-sort-ascending.png
new file mode 100644
index 00000000000..a648fa0d359
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-sort-ascending.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-sort-descending.png b/addons/web/static/src/img/icons/gtk-sort-descending.png
index a90b588d797..a90b588d797 100644
--- a/addons/base/static/src/img/icons/gtk-sort-descending.png
+++ b/addons/web/static/src/img/icons/gtk-sort-descending.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-spell-check.png b/addons/web/static/src/img/icons/gtk-spell-check.png
new file mode 100644
index 00000000000..698f7c24a43
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-spell-check.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-stop.png b/addons/web/static/src/img/icons/gtk-stop.png
index 2ee93ed6415..2ee93ed6415 100644
--- a/addons/base/static/src/img/icons/gtk-stop.png
+++ b/addons/web/static/src/img/icons/gtk-stop.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-strikethrough.png b/addons/web/static/src/img/icons/gtk-strikethrough.png
new file mode 100644
index 00000000000..1c11f214622
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-strikethrough.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-undelete.png b/addons/web/static/src/img/icons/gtk-undelete.png
new file mode 100644
index 00000000000..c44b940c03b
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-undelete.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-underline.png b/addons/web/static/src/img/icons/gtk-underline.png
new file mode 100644
index 00000000000..7dbb5d7e60a
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-underline.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-undo.png b/addons/web/static/src/img/icons/gtk-undo.png
index 7a50de0c61e..7a50de0c61e 100644
--- a/addons/base/static/src/img/icons/gtk-undo.png
+++ b/addons/web/static/src/img/icons/gtk-undo.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-unindent.png b/addons/web/static/src/img/icons/gtk-unindent.png
new file mode 100644
index 00000000000..8ace914c1bd
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-unindent.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-yes.png b/addons/web/static/src/img/icons/gtk-yes.png
index 01fb373c251..01fb373c251 100644
--- a/addons/base/static/src/img/icons/gtk-yes.png
+++ b/addons/web/static/src/img/icons/gtk-yes.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-zoom-100.png b/addons/web/static/src/img/icons/gtk-zoom-100.png
new file mode 100644
index 00000000000..5193406b787
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-zoom-100.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-zoom-fit.png b/addons/web/static/src/img/icons/gtk-zoom-fit.png
index 1e70e619466..1e70e619466 100644
--- a/addons/base/static/src/img/icons/gtk-zoom-fit.png
+++ b/addons/web/static/src/img/icons/gtk-zoom-fit.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/gtk-zoom-in.png b/addons/web/static/src/img/icons/gtk-zoom-in.png
index 29e50e45d4a..29e50e45d4a 100644
--- a/addons/base/static/src/img/icons/gtk-zoom-in.png
+++ b/addons/web/static/src/img/icons/gtk-zoom-in.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-zoom-out.png b/addons/web/static/src/img/icons/gtk-zoom-out.png
new file mode 100644
index 00000000000..0da5ee7ec13
--- /dev/null
+++ b/addons/web/static/src/img/icons/gtk-zoom-out.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/index1.jpeg b/addons/web/static/src/img/icons/index1.jpeg
index f43c68d79ec..f43c68d79ec 100644
--- a/addons/base/static/src/img/icons/index1.jpeg
+++ b/addons/web/static/src/img/icons/index1.jpeg
Binary files differ
diff --git a/addons/base/static/src/img/icons/index2.jpeg b/addons/web/static/src/img/icons/index2.jpeg
index ec9d1eb6d3c..ec9d1eb6d3c 100644
--- a/addons/base/static/src/img/icons/index2.jpeg
+++ b/addons/web/static/src/img/icons/index2.jpeg
Binary files differ
diff --git a/addons/web/static/src/img/icons/lead-stage-lost.png b/addons/web/static/src/img/icons/lead-stage-lost.png
new file mode 100644
index 00000000000..e1f98a26b59
--- /dev/null
+++ b/addons/web/static/src/img/icons/lead-stage-lost.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/lead-stage-pending.png b/addons/web/static/src/img/icons/lead-stage-pending.png
new file mode 100644
index 00000000000..9e9544ee178
--- /dev/null
+++ b/addons/web/static/src/img/icons/lead-stage-pending.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/lead-stage-won.png b/addons/web/static/src/img/icons/lead-stage-won.png
new file mode 100644
index 00000000000..02effd5f14c
--- /dev/null
+++ b/addons/web/static/src/img/icons/lead-stage-won.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/star-off.png b/addons/web/static/src/img/icons/star-off.png
new file mode 100644
index 00000000000..7cd0afd4f03
--- /dev/null
+++ b/addons/web/static/src/img/icons/star-off.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/star-on.png b/addons/web/static/src/img/icons/star-on.png
new file mode 100644
index 00000000000..4f2295e1395
--- /dev/null
+++ b/addons/web/static/src/img/icons/star-on.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock.png b/addons/web/static/src/img/icons/stock.png
new file mode 100644
index 00000000000..ca38181db90
--- /dev/null
+++ b/addons/web/static/src/img/icons/stock.png
Binary files differ
diff --git a/addons/base/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/icons/stock_calendar.png
index 99a1f3f9ef1..99a1f3f9ef1 100644
--- a/addons/base/static/src/img/ui/field_calendar.png
+++ b/addons/web/static/src/img/icons/stock_calendar.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock_gantt.png b/addons/web/static/src/img/icons/stock_gantt.png
new file mode 100644
index 00000000000..585761b9220
--- /dev/null
+++ b/addons/web/static/src/img/icons/stock_gantt.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock_graph.png b/addons/web/static/src/img/icons/stock_graph.png
new file mode 100644
index 00000000000..4d8310621ea
--- /dev/null
+++ b/addons/web/static/src/img/icons/stock_graph.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock_log.png b/addons/web/static/src/img/icons/stock_log.png
new file mode 100644
index 00000000000..32af4dd6901
--- /dev/null
+++ b/addons/web/static/src/img/icons/stock_log.png
Binary files differ
diff --git a/addons/base/static/src/img/stock_person.png b/addons/web/static/src/img/icons/stock_person.png
index 202cf0ee6c5..202cf0ee6c5 100644
--- a/addons/base/static/src/img/stock_person.png
+++ b/addons/web/static/src/img/icons/stock_person.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-translate.png b/addons/web/static/src/img/icons/stock_translate.png
index 5ab41d49343..5ab41d49343 100644
--- a/addons/base/static/src/img/icons/terp-translate.png
+++ b/addons/web/static/src/img/icons/stock_translate.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-accessories-archiver+.png b/addons/web/static/src/img/icons/terp-accessories-archiver+.png
index 14d6d02536e..14d6d02536e 100644
--- a/addons/base/static/src/img/icons/terp-accessories-archiver+.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver+.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-accessories-archiver-minus.png b/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png
index 024c8f692d8..024c8f692d8 100644
--- a/addons/base/static/src/img/icons/terp-accessories-archiver-minus.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-accessories-archiver.png b/addons/web/static/src/img/icons/terp-accessories-archiver.png
index 8bcbe4566bc..8bcbe4566bc 100644
--- a/addons/base/static/src/img/icons/terp-accessories-archiver.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-account.png b/addons/web/static/src/img/icons/terp-account.png
index 30dea82a105..30dea82a105 100644
--- a/addons/base/static/src/img/icons/terp-account.png
+++ b/addons/web/static/src/img/icons/terp-account.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-administration.png b/addons/web/static/src/img/icons/terp-administration.png
index ab129b2e4b3..ab129b2e4b3 100644
--- a/addons/base/static/src/img/icons/terp-administration.png
+++ b/addons/web/static/src/img/icons/terp-administration.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-calendar.png b/addons/web/static/src/img/icons/terp-calendar.png
index 37206565792..37206565792 100644
--- a/addons/base/static/src/img/icons/terp-calendar.png
+++ b/addons/web/static/src/img/icons/terp-calendar.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-call-start.png b/addons/web/static/src/img/icons/terp-call-start.png
index 602a1cdd4b8..602a1cdd4b8 100644
--- a/addons/base/static/src/img/icons/terp-call-start.png
+++ b/addons/web/static/src/img/icons/terp-call-start.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-camera_test.png b/addons/web/static/src/img/icons/terp-camera_test.png
index e97e0416de3..e97e0416de3 100644
--- a/addons/base/static/src/img/icons/terp-camera_test.png
+++ b/addons/web/static/src/img/icons/terp-camera_test.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-check.png b/addons/web/static/src/img/icons/terp-check.png
index 003b09fdeb9..003b09fdeb9 100644
--- a/addons/base/static/src/img/icons/terp-check.png
+++ b/addons/web/static/src/img/icons/terp-check.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-crm.png b/addons/web/static/src/img/icons/terp-crm.png
index fdac61ca92d..fdac61ca92d 100644
--- a/addons/base/static/src/img/icons/terp-crm.png
+++ b/addons/web/static/src/img/icons/terp-crm.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-dialog-close.png b/addons/web/static/src/img/icons/terp-dialog-close.png
index 8f51ec05fd6..8f51ec05fd6 100644
--- a/addons/base/static/src/img/icons/terp-dialog-close.png
+++ b/addons/web/static/src/img/icons/terp-dialog-close.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-document-new.png b/addons/web/static/src/img/icons/terp-document-new.png
index 2815cbb403f..2815cbb403f 100644
--- a/addons/base/static/src/img/icons/terp-document-new.png
+++ b/addons/web/static/src/img/icons/terp-document-new.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-dolar.png b/addons/web/static/src/img/icons/terp-dolar.png
index bca7021c82f..bca7021c82f 100644
--- a/addons/base/static/src/img/icons/terp-dolar.png
+++ b/addons/web/static/src/img/icons/terp-dolar.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-dolar_ok!.png b/addons/web/static/src/img/icons/terp-dolar_ok!.png
index b1005aae7b9..b1005aae7b9 100644
--- a/addons/base/static/src/img/icons/terp-dolar_ok!.png
+++ b/addons/web/static/src/img/icons/terp-dolar_ok!.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-emblem-important.png b/addons/web/static/src/img/icons/terp-emblem-important.png
index a8321066abb..a8321066abb 100644
--- a/addons/base/static/src/img/icons/terp-emblem-important.png
+++ b/addons/web/static/src/img/icons/terp-emblem-important.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-face-plain.png b/addons/web/static/src/img/icons/terp-face-plain.png
index ea90aaa7ef4..ea90aaa7ef4 100644
--- a/addons/base/static/src/img/icons/terp-face-plain.png
+++ b/addons/web/static/src/img/icons/terp-face-plain.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-folder-blue.png b/addons/web/static/src/img/icons/terp-folder-blue.png
index addc480d49a..addc480d49a 100644
--- a/addons/base/static/src/img/icons/terp-folder-blue.png
+++ b/addons/web/static/src/img/icons/terp-folder-blue.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-folder-green.png b/addons/web/static/src/img/icons/terp-folder-green.png
index 206cd39603e..206cd39603e 100644
--- a/addons/base/static/src/img/icons/terp-folder-green.png
+++ b/addons/web/static/src/img/icons/terp-folder-green.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-folder-orange.png b/addons/web/static/src/img/icons/terp-folder-orange.png
index 726dbd7f00e..726dbd7f00e 100644
--- a/addons/base/static/src/img/icons/terp-folder-orange.png
+++ b/addons/web/static/src/img/icons/terp-folder-orange.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-folder-violet.png b/addons/web/static/src/img/icons/terp-folder-violet.png
index c6f5cfb87ff..c6f5cfb87ff 100644
--- a/addons/base/static/src/img/icons/terp-folder-violet.png
+++ b/addons/web/static/src/img/icons/terp-folder-violet.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-folder-yellow.png b/addons/web/static/src/img/icons/terp-folder-yellow.png
index cd7295dcdd7..cd7295dcdd7 100644
--- a/addons/base/static/src/img/icons/terp-folder-yellow.png
+++ b/addons/web/static/src/img/icons/terp-folder-yellow.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gdu-smart-failing.png b/addons/web/static/src/img/icons/terp-gdu-smart-failing.png
index a4448fd553e..a4448fd553e 100644
--- a/addons/base/static/src/img/icons/terp-gdu-smart-failing.png
+++ b/addons/web/static/src/img/icons/terp-gdu-smart-failing.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png b/addons/web/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png
index 23e246f3be9..23e246f3be9 100644
--- a/addons/base/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png
+++ b/addons/web/static/src/img/icons/terp-gnome-cpu-frequency-applet+.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-go-home.png b/addons/web/static/src/img/icons/terp-go-home.png
index 912256bf7a7..912256bf7a7 100644
--- a/addons/base/static/src/img/icons/terp-go-home.png
+++ b/addons/web/static/src/img/icons/terp-go-home.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-go-month.png b/addons/web/static/src/img/icons/terp-go-month.png
index cf5e305053e..cf5e305053e 100644
--- a/addons/base/static/src/img/icons/terp-go-month.png
+++ b/addons/web/static/src/img/icons/terp-go-month.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-go-today.png b/addons/web/static/src/img/icons/terp-go-today.png
index 2a4dbeed49a..2a4dbeed49a 100644
--- a/addons/base/static/src/img/icons/terp-go-today.png
+++ b/addons/web/static/src/img/icons/terp-go-today.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-go-week.png b/addons/web/static/src/img/icons/terp-go-week.png
index b3ce6f562b2..b3ce6f562b2 100644
--- a/addons/base/static/src/img/icons/terp-go-week.png
+++ b/addons/web/static/src/img/icons/terp-go-week.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-go-year.png b/addons/web/static/src/img/icons/terp-go-year.png
index f45efc9dd0c..f45efc9dd0c 100644
--- a/addons/base/static/src/img/icons/terp-go-year.png
+++ b/addons/web/static/src/img/icons/terp-go-year.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-graph.png b/addons/web/static/src/img/icons/terp-graph.png
index 30dea82a105..30dea82a105 100644
--- a/addons/base/static/src/img/icons/terp-graph.png
+++ b/addons/web/static/src/img/icons/terp-graph.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-go-back-ltr.png b/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png
index a76138d2e0d..a76138d2e0d 100644
--- a/addons/base/static/src/img/icons/terp-gtk-go-back-ltr.png
+++ b/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-go-back-rtl.png b/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png
index 10d10b582fe..10d10b582fe 100644
--- a/addons/base/static/src/img/icons/terp-gtk-go-back-rtl.png
+++ b/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-jump-to-ltr.png b/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png
index fa517749d10..fa517749d10 100644
--- a/addons/base/static/src/img/icons/terp-gtk-jump-to-ltr.png
+++ b/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-jump-to-rtl.png b/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png
index 7b5785c4963..7b5785c4963 100644
--- a/addons/base/static/src/img/icons/terp-gtk-jump-to-rtl.png
+++ b/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-media-pause.png b/addons/web/static/src/img/icons/terp-gtk-media-pause.png
index 2896ad8e27f..2896ad8e27f 100644
--- a/addons/base/static/src/img/icons/terp-gtk-media-pause.png
+++ b/addons/web/static/src/img/icons/terp-gtk-media-pause.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-select-all.png b/addons/web/static/src/img/icons/terp-gtk-select-all.png
index b71a6493791..b71a6493791 100644
--- a/addons/base/static/src/img/icons/terp-gtk-select-all.png
+++ b/addons/web/static/src/img/icons/terp-gtk-select-all.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-gtk-stop.png b/addons/web/static/src/img/icons/terp-gtk-stop.png
index 5fe021e19df..5fe021e19df 100644
--- a/addons/base/static/src/img/icons/terp-gtk-stop.png
+++ b/addons/web/static/src/img/icons/terp-gtk-stop.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-hr.png b/addons/web/static/src/img/icons/terp-hr.png
index ba0241e6362..ba0241e6362 100644
--- a/addons/base/static/src/img/icons/terp-hr.png
+++ b/addons/web/static/src/img/icons/terp-hr.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-idea.png b/addons/web/static/src/img/icons/terp-idea.png
index fd5e2a25f14..fd5e2a25f14 100644
--- a/addons/base/static/src/img/icons/terp-idea.png
+++ b/addons/web/static/src/img/icons/terp-idea.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-locked.png b/addons/web/static/src/img/icons/terp-locked.png
index cd2b4c2c9c2..cd2b4c2c9c2 100644
--- a/addons/base/static/src/img/icons/terp-locked.png
+++ b/addons/web/static/src/img/icons/terp-locked.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mail-.png b/addons/web/static/src/img/icons/terp-mail-.png
index cbc85e4c000..cbc85e4c000 100644
--- a/addons/base/static/src/img/icons/terp-mail-.png
+++ b/addons/web/static/src/img/icons/terp-mail-.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mail-forward.png b/addons/web/static/src/img/icons/terp-mail-forward.png
index 3d4e694b6dc..3d4e694b6dc 100644
--- a/addons/base/static/src/img/icons/terp-mail-forward.png
+++ b/addons/web/static/src/img/icons/terp-mail-forward.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mail-message-new.png b/addons/web/static/src/img/icons/terp-mail-message-new.png
index 25b4d5b5d50..25b4d5b5d50 100644
--- a/addons/base/static/src/img/icons/terp-mail-message-new.png
+++ b/addons/web/static/src/img/icons/terp-mail-message-new.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mail-replied.png b/addons/web/static/src/img/icons/terp-mail-replied.png
index 6615f4352cc..6615f4352cc 100644
--- a/addons/base/static/src/img/icons/terp-mail-replied.png
+++ b/addons/web/static/src/img/icons/terp-mail-replied.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mail_delete.png b/addons/web/static/src/img/icons/terp-mail_delete.png
index 90fb5239f02..90fb5239f02 100644
--- a/addons/base/static/src/img/icons/terp-mail_delete.png
+++ b/addons/web/static/src/img/icons/terp-mail_delete.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-marketing.png b/addons/web/static/src/img/icons/terp-marketing.png
index 1b04b599734..1b04b599734 100644
--- a/addons/base/static/src/img/icons/terp-marketing.png
+++ b/addons/web/static/src/img/icons/terp-marketing.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-mrp.png b/addons/web/static/src/img/icons/terp-mrp.png
index c2b4ea31ec3..c2b4ea31ec3 100644
--- a/addons/base/static/src/img/icons/terp-mrp.png
+++ b/addons/web/static/src/img/icons/terp-mrp.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-partner.png b/addons/web/static/src/img/icons/terp-partner.png
index aab206a1d42..aab206a1d42 100644
--- a/addons/base/static/src/img/icons/terp-partner.png
+++ b/addons/web/static/src/img/icons/terp-partner.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-personal+.png b/addons/web/static/src/img/icons/terp-personal+.png
index 8afa4d7041d..8afa4d7041d 100644
--- a/addons/base/static/src/img/icons/terp-personal+.png
+++ b/addons/web/static/src/img/icons/terp-personal+.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-personal-.png b/addons/web/static/src/img/icons/terp-personal-.png
index a2554df3615..a2554df3615 100644
--- a/addons/base/static/src/img/icons/terp-personal-.png
+++ b/addons/web/static/src/img/icons/terp-personal-.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-personal.png b/addons/web/static/src/img/icons/terp-personal.png
index 0890c4d0e51..0890c4d0e51 100644
--- a/addons/base/static/src/img/icons/terp-personal.png
+++ b/addons/web/static/src/img/icons/terp-personal.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-product.png b/addons/web/static/src/img/icons/terp-product.png
index 99f58d95a8b..99f58d95a8b 100644
--- a/addons/base/static/src/img/icons/terp-product.png
+++ b/addons/web/static/src/img/icons/terp-product.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-project.png b/addons/web/static/src/img/icons/terp-project.png
index cd95ae84e43..cd95ae84e43 100644
--- a/addons/base/static/src/img/icons/terp-project.png
+++ b/addons/web/static/src/img/icons/terp-project.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-purchase.png b/addons/web/static/src/img/icons/terp-purchase.png
index 1e801f57485..1e801f57485 100644
--- a/addons/base/static/src/img/icons/terp-purchase.png
+++ b/addons/web/static/src/img/icons/terp-purchase.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-rating-rated.png b/addons/web/static/src/img/icons/terp-rating-rated.png
index 9bff03fe584..9bff03fe584 100644
--- a/addons/base/static/src/img/icons/terp-rating-rated.png
+++ b/addons/web/static/src/img/icons/terp-rating-rated.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-report.png b/addons/web/static/src/img/icons/terp-report.png
index ada36a2de24..ada36a2de24 100644
--- a/addons/base/static/src/img/icons/terp-report.png
+++ b/addons/web/static/src/img/icons/terp-report.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-sale.png b/addons/web/static/src/img/icons/terp-sale.png
index ba0241e6362..ba0241e6362 100644
--- a/addons/base/static/src/img/icons/terp-sale.png
+++ b/addons/web/static/src/img/icons/terp-sale.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stage.png b/addons/web/static/src/img/icons/terp-stage.png
index 591c1594f78..591c1594f78 100644
--- a/addons/base/static/src/img/icons/terp-stage.png
+++ b/addons/web/static/src/img/icons/terp-stage.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock.png b/addons/web/static/src/img/icons/terp-stock.png
index 0365dfdb8e1..0365dfdb8e1 100644
--- a/addons/base/static/src/img/icons/terp-stock.png
+++ b/addons/web/static/src/img/icons/terp-stock.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_align_left_24.png b/addons/web/static/src/img/icons/terp-stock_align_left_24.png
index 844367bb1a7..844367bb1a7 100644
--- a/addons/base/static/src/img/icons/terp-stock_align_left_24.png
+++ b/addons/web/static/src/img/icons/terp-stock_align_left_24.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_effects-object-colorize.png b/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png
index 0ffd95a740a..0ffd95a740a 100644
--- a/addons/base/static/src/img/icons/terp-stock_effects-object-colorize.png
+++ b/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_format-default.png b/addons/web/static/src/img/icons/terp-stock_format-default.png
index e44b2b26be5..e44b2b26be5 100644
--- a/addons/base/static/src/img/icons/terp-stock_format-default.png
+++ b/addons/web/static/src/img/icons/terp-stock_format-default.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_format-scientific.png b/addons/web/static/src/img/icons/terp-stock_format-scientific.png
index 01f83950804..01f83950804 100644
--- a/addons/base/static/src/img/icons/terp-stock_format-scientific.png
+++ b/addons/web/static/src/img/icons/terp-stock_format-scientific.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_symbol-selection.png b/addons/web/static/src/img/icons/terp-stock_symbol-selection.png
index 5773be57c9b..5773be57c9b 100644
--- a/addons/base/static/src/img/icons/terp-stock_symbol-selection.png
+++ b/addons/web/static/src/img/icons/terp-stock_symbol-selection.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-stock_zoom.png b/addons/web/static/src/img/icons/terp-stock_zoom.png
index e96f05e5905..e96f05e5905 100644
--- a/addons/base/static/src/img/icons/terp-stock_zoom.png
+++ b/addons/web/static/src/img/icons/terp-stock_zoom.png
Binary files differ
diff --git a/addons/base/static/src/img/icons/terp-tools.png b/addons/web/static/src/img/icons/terp-tools.png
index 379f7617427..379f7617427 100644
--- a/addons/base/static/src/img/icons/terp-tools.png
+++ b/addons/web/static/src/img/icons/terp-tools.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-translate.png b/addons/web/static/src/img/icons/terp-translate.png
new file mode 100644
index 00000000000..5ab41d49343
--- /dev/null
+++ b/addons/web/static/src/img/icons/terp-translate.png
Binary files differ
diff --git a/addons/base/static/src/img/iconset-d-drop.gif b/addons/web/static/src/img/iconset-d-drop.gif
index 4907a927619..4907a927619 100644
--- a/addons/base/static/src/img/iconset-d-drop.gif
+++ b/addons/web/static/src/img/iconset-d-drop.gif
Binary files differ
diff --git a/addons/base/static/src/img/logo.png b/addons/web/static/src/img/logo.png
index 8f1c5c6085f..8f1c5c6085f 100644
--- a/addons/base/static/src/img/logo.png
+++ b/addons/web/static/src/img/logo.png
Binary files differ
diff --git a/addons/base/static/src/img/partner.png b/addons/web/static/src/img/partner.png
index aab206a1d42..aab206a1d42 100644
--- a/addons/base/static/src/img/partner.png
+++ b/addons/web/static/src/img/partner.png
Binary files differ
diff --git a/addons/base/static/src/img/placeholder.png b/addons/web/static/src/img/placeholder.png
index 25af75ee815..25af75ee815 100644
--- a/addons/base/static/src/img/placeholder.png
+++ b/addons/web/static/src/img/placeholder.png
Binary files differ
diff --git a/addons/base/static/src/img/product.png b/addons/web/static/src/img/product.png
index 99f58d95a8b..99f58d95a8b 100644
--- a/addons/base/static/src/img/product.png
+++ b/addons/web/static/src/img/product.png
Binary files differ
diff --git a/addons/base/static/src/img/remove-shortcut.png b/addons/web/static/src/img/remove-shortcut.png
index 9bff03fe584..9bff03fe584 100644
--- a/addons/base/static/src/img/remove-shortcut.png
+++ b/addons/web/static/src/img/remove-shortcut.png
Binary files differ
diff --git a/addons/web/static/src/img/stock_person.png b/addons/web/static/src/img/stock_person.png
new file mode 100644
index 00000000000..202cf0ee6c5
--- /dev/null
+++ b/addons/web/static/src/img/stock_person.png
Binary files differ
diff --git a/addons/base/static/src/img/throbber.gif b/addons/web/static/src/img/throbber.gif
index ded8d36d486..ded8d36d486 100644
--- a/addons/base/static/src/img/throbber.gif
+++ b/addons/web/static/src/img/throbber.gif
Binary files differ
diff --git a/addons/base/static/src/img/throbber2.gif b/addons/web/static/src/img/throbber2.gif
index 5d2057ae0e7..5d2057ae0e7 100644
--- a/addons/base/static/src/img/throbber2.gif
+++ b/addons/web/static/src/img/throbber2.gif
Binary files differ
diff --git a/addons/base/static/src/img/toggle-a-bg.png b/addons/web/static/src/img/toggle-a-bg.png
index b9837ab233e..b9837ab233e 100644
--- a/addons/base/static/src/img/toggle-a-bg.png
+++ b/addons/web/static/src/img/toggle-a-bg.png
Binary files differ
diff --git a/addons/web/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/ui/field_calendar.png
new file mode 100644
index 00000000000..99a1f3f9ef1
--- /dev/null
+++ b/addons/web/static/src/img/ui/field_calendar.png
Binary files differ
diff --git a/addons/base/static/src/img/ui/group-expanded.png b/addons/web/static/src/img/ui/group-expanded.png
index 3f16536e123..3f16536e123 100644
--- a/addons/base/static/src/img/ui/group-expanded.png
+++ b/addons/web/static/src/img/ui/group-expanded.png
Binary files differ
diff --git a/addons/base/static/src/img/ui/group-folded.png b/addons/web/static/src/img/ui/group-folded.png
index 2909b0c268f..2909b0c268f 100644
--- a/addons/base/static/src/img/ui/group-folded.png
+++ b/addons/web/static/src/img/ui/group-folded.png
Binary files differ
diff --git a/addons/base/static/src/img/warning.png b/addons/web/static/src/img/warning.png
index cbfb25a89cd..cbfb25a89cd 100644
--- a/addons/base/static/src/img/warning.png
+++ b/addons/web/static/src/img/warning.png
Binary files differ
diff --git a/addons/base/static/src/js/boot.js b/addons/web/static/src/js/boot.js
index 8fe62d2e5a4..38f8eaa1e7c 100644
--- a/addons/base/static/src/js/boot.js
+++ b/addons/web/static/src/js/boot.js
@@ -5,7 +5,6 @@
/**
* @name openerp
* @namespace openerp
- * @namespace window.openerp
*/
(function() {
if (this.openerp)
@@ -26,18 +25,18 @@
var new_instance = {
// links to the global openerp
_openerp: openerp,
- // Only base will be loaded, the rest will be by loaded by
- // openerp.base.Connection on the first connection
+ // Only web will be loaded, the rest will be by loaded by
+ // openerp.web.Connection on the first connection
_modules_loaded: false,
// this unique id will be replaced by hostname_databasename by
- // openerp.base.Connection on the first connection
+ // openerp.web.Connection on the first connection
_session_id: "session" + session_counter++,
- base: {},
+ web: {},
web_mobile: {}
};
openerp.sessions[new_instance._session_id] = new_instance;
if (!skip_init){
- openerp.base(new_instance);
+ openerp.web(new_instance);
}
return new_instance;
}
@@ -45,21 +44,24 @@
})();
/*---------------------------------------------------------
- * OpenERP Web base module split
+ * OpenERP Web web module split
*---------------------------------------------------------*/
-openerp.base = function(instance) {
- openerp.base.core(instance);
- if (openerp.base.dates) {
- openerp.base.dates(instance);
+/**
+ * @namespace
+ */
+openerp.web = function(instance) {
+ openerp.web.core(instance);
+ if (openerp.web.dates) {
+ openerp.web.dates(instance);
}
- openerp.base.formats(instance);
- openerp.base.chrome(instance);
- openerp.base.data(instance);
- files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","view_editor"];
- for(i=0; i<files.length; i++) {
- if(openerp.base[files[i]]) {
- openerp.base[files[i]](instance);
+ openerp.web.formats(instance);
+ openerp.web.chrome(instance);
+ openerp.web.data(instance);
+ var files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","view_editor"];
+ for(var i=0; i<files.length; i++) {
+ if(openerp.web[files[i]]) {
+ openerp.web[files[i]](instance);
}
}
};
diff --git a/addons/base/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js
index ee20e393d67..a04456cfaa5 100644
--- a/addons/base/static/src/js/chrome.js
+++ b/addons/web/static/src/js/chrome.js
@@ -2,9 +2,17 @@
* OpenERP Web chrome
*---------------------------------------------------------*/
-openerp.base.chrome = function(openerp) {
+openerp.web.chrome = function(openerp) {
+var QWeb = openerp.web.qweb;
-openerp.base.Notification = openerp.base.Widget.extend({
+openerp.web.Notification = openerp.web.Widget.extend(/** @lends openerp.web.Notification# */{
+ /**
+ * @constructs openerp.web.Notification
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ */
init: function(parent, element_id) {
this._super(parent, element_id);
this.$element.notify({
@@ -26,9 +34,16 @@ openerp.base.Notification = openerp.base.Widget.extend({
}
});
-openerp.base.Dialog = openerp.base.OldWidget.extend({
+openerp.web.Dialog = openerp.web.OldWidget.extend(/** @lends openerp.web.Dialog# */{
dialog_title: "",
identifier_prefix: 'dialog',
+ /**
+ * @constructs openerp.web.Dialog
+ * @extends openerp.web.OldWidget
+ *
+ * @param parent
+ * @param dialog_options
+ */
init: function (parent, dialog_options) {
var self = this;
this._super(parent);
@@ -117,8 +132,14 @@ openerp.base.Dialog = openerp.base.OldWidget.extend({
}
});
-openerp.base.CrashManager = openerp.base.Dialog.extend({
+openerp.web.CrashManager = openerp.web.Dialog.extend(/** @lends openerp.web.CrashManager# */{
identifier_prefix: 'dialog_crash',
+ /**
+ * @constructs opener.web.CrashManager
+ * @extends openerp.web.Dialog
+ *
+ * @param parent
+ */
init: function(parent) {
this._super(parent);
this.session.on_rpc_error.add(this.on_rpc_error);
@@ -129,7 +150,7 @@ openerp.base.CrashManager = openerp.base.Dialog.extend({
on_rpc_error: function(error) {
this.error = error;
if (error.data.fault_code) {
- var split = error.data.fault_code.split('\n')[0].split(' -- ');
+ var split = ("" + error.data.fault_code).split('\n')[0].split(' -- ');
if (split.length > 1) {
error.type = split.shift();
error.data.fault_code = error.data.fault_code.substr(error.type.length + 4);
@@ -153,7 +174,14 @@ openerp.base.CrashManager = openerp.base.Dialog.extend({
}
});
-openerp.base.Loading = openerp.base.Widget.extend({
+openerp.web.Loading = openerp.web.Widget.extend(/** @lends openerp.web.Loading# */{
+ /**
+ * @constructs openerp.web.Loading
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ */
init: function(parent, element_id) {
this._super(parent, element_id);
this.count = 0;
@@ -172,7 +200,15 @@ openerp.base.Loading = openerp.base.Widget.extend({
}
});
-openerp.base.Database = openerp.base.Widget.extend({
+openerp.web.Database = openerp.web.Widget.extend(/** @lends openerp.web.Database# */{
+ /**
+ * @constructs openerp.web.Database
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ * @param option_id
+ */
init: function(parent, element_id, option_id) {
this._super(parent, element_id);
this.$option_id = $('#' + option_id);
@@ -185,10 +221,10 @@ openerp.base.Database = openerp.base.Widget.extend({
var self = this;
- var fetch_db = this.rpc("/base/database/get_list", {}, function(result) {
+ var fetch_db = this.rpc("/web/database/get_list", {}, function(result) {
self.db_list = result.db_list;
});
- var fetch_langs = this.rpc("/base/session/get_lang_list", {}, function(result) {
+ var fetch_langs = this.rpc("/web/session/get_lang_list", {}, function(result) {
if (result.error) {
self.display_error(result);
return;
@@ -244,7 +280,7 @@ openerp.base.Database = openerp.base.Widget.extend({
*/
wait_for_newdb: function (db_creation_id, info) {
var self = this;
- self.rpc('/base/database/progress', {
+ self.rpc('/web/database/progress', {
id: db_creation_id,
password: info.password
}, function (result) {
@@ -296,8 +332,8 @@ openerp.base.Database = openerp.base.Widget.extend({
self.$option_id.find("form[name=create_db_form]").validate({
submitHandler: function (form) {
var fields = $(form).serializeArray();
- $.blockUI({message:'<img src="/base/static/src/img/throbber2.gif">'});
- self.rpc("/base/database/create", {'fields': fields}, function(result) {
+ $.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
+ self.rpc("/web/database/create", {'fields': fields}, function(result) {
if (result.error) {
$.unblockUI();
self.display_error(result);
@@ -327,7 +363,7 @@ openerp.base.Database = openerp.base.Widget.extend({
if (!confirm("Do you really want to delete the database: " + db + " ?")) {
return;
}
- self.rpc("/base/database/drop", {'fields': fields}, function(result) {
+ self.rpc("/web/database/drop", {'fields': fields}, function(result) {
if (result.error) {
self.display_error(result);
return;
@@ -339,62 +375,23 @@ openerp.base.Database = openerp.base.Widget.extend({
}
});
},
- wait_for_file: function (token, cleanup) {
- var self = this,
- cookie_name = 'fileToken',
- cookie_length = cookie_name.length;
- this.backup_timer = setInterval(function () {
- var cookies = document.cookie.split(';');
- for(var i=0; i<cookies.length; ++i) {
- var cookie = cookies[i].replace(/^\s*/, '');
- if(!cookie.indexOf(cookie_name) === 0) { continue; }
- var cookie_val = cookie.substring(cookie_length + 1);
- if(parseInt(cookie_val, 10) !== token) { continue; }
-
- // clear waiter
- clearInterval(self.backup_timer);
- // clear cookie
- document.cookie = _.sprintf("%s=;expires=%s;path=/",
- cookie_name, new Date().toGMTString());
-
- if (cleanup) { cleanup(); }
- }
- }, 200);
- },
do_backup: function() {
var self = this;
- self.$option_id.html(QWeb.render("BackupDB", self));
-
- self.$option_id.find("form[name=backup_db_form]").validate({
+ self.$option_id
+ .html(QWeb.render("BackupDB", self))
+ .find("form[name=backup_db_form]").validate({
submitHandler: function (form) {
- $.blockUI({message:'<img src="/base/static/src/img/throbber2.gif">'});
- // need to detect when the file is done downloading (not used
- // yet, but we'll need it to fix the UI e.g. with a throbber
- // while dump is being generated), iframe load event only fires
- // when the iframe content loads, so we need to go smarter:
- // http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx
- var $target = $('#backup-target'),
- token = new Date().getTime();
- if (!$target.length) {
- $target = $('<iframe id="backup-target" style="display: none;">')
- .appendTo(document.body)
- .load(function () {
- $.unblockUI();
- clearInterval(self.backup_timer);
- var error = this.contentDocument.body
- .firstChild.data
- .split('|');
- self.display_error({
- title: error[0],
- error: error[1]
- });
+ $.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
+ self.session.get_file({
+ form: form,
+ error: function (body) {
+ var error = body.firstChild.data.split('|');
+ self.display_error({
+ title: error[0],
+ error: error[1]
});
- }
- $(form).find('input[name=token]').val(token);
- form.submit();
-
- self.wait_for_file(token, function () {
- $.unblockUI();
+ },
+ complete: $.unblockUI
});
}
});
@@ -405,9 +402,9 @@ openerp.base.Database = openerp.base.Widget.extend({
self.$option_id.find("form[name=restore_db_form]").validate({
submitHandler: function (form) {
- $.blockUI({message:'<img src="/base/static/src/img/throbber2.gif">'});
+ $.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
$(form).ajaxSubmit({
- url: '/base/database/restore',
+ url: '/web/database/restore',
type: 'POST',
resetForm: true,
success: function (body) {
@@ -451,7 +448,7 @@ openerp.base.Database = openerp.base.Widget.extend({
}
},
submitHandler: function (form) {
- self.rpc("/base/database/change_password", {
+ self.rpc("/web/database/change_password", {
'fields': $(form).serializeArray()
}, function(result) {
if (result.error) {
@@ -465,9 +462,15 @@ openerp.base.Database = openerp.base.Widget.extend({
}
});
-openerp.base.Login = openerp.base.Widget.extend({
+openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
remember_creditentials: true,
-
+ /**
+ * @constructs openerp.web.Login
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ */
init: function(parent, element_id) {
this._super(parent, element_id);
this.has_local_storage = typeof(localStorage) != 'undefined';
@@ -477,14 +480,14 @@ openerp.base.Login = openerp.base.Widget.extend({
if (this.has_local_storage && this.remember_creditentials) {
this.selected_db = localStorage.getItem('last_db_login_success');
this.selected_login = localStorage.getItem('last_login_login_success');
- }
- if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
- this.selected_password = this.selected_password || "a";
+ if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
+ this.selected_password = localStorage.getItem('last_password_login_success');
+ }
}
},
start: function() {
var self = this;
- this.rpc("/base/database/get_list", {}, function(result) {
+ this.rpc("/web/database/get_list", {}, function(result) {
self.db_list = result.db_list;
self.display();
}, function() {
@@ -493,9 +496,9 @@ openerp.base.Login = openerp.base.Widget.extend({
},
display: function() {
var self = this;
-
+
this.$element.html(QWeb.render("Login", this));
- this.database = new openerp.base.Database(
+ this.database = new openerp.web.Database(
this, "oe_database", "oe_db_options");
this.$element.find('#oe-db-config').click(function() {
@@ -534,9 +537,13 @@ openerp.base.Login = openerp.base.Widget.extend({
if(self.remember_creditentials) {
localStorage.setItem('last_db_login_success', db);
localStorage.setItem('last_login_login_success', login);
+ if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
+ localStorage.setItem('last_password_login_success', password);
+ }
} else {
localStorage.setItem('last_db_login_success', '');
localStorage.setItem('last_login_login_success', '');
+ localStorage.setItem('last_password_login_success', '');
}
}
self.on_login_valid();
@@ -553,7 +560,7 @@ openerp.base.Login = openerp.base.Widget.extend({
this.on_login_valid.add({
position: "last",
unique: true,
- callback: continuation
+ callback: continuation || function() {}
});
},
on_logout: function() {
@@ -561,31 +568,55 @@ openerp.base.Login = openerp.base.Widget.extend({
}
});
-openerp.base.Header = openerp.base.Widget.extend({
+openerp.web.Header = openerp.web.Widget.extend(/** @lends openerp.web.Header# */{
template: "Header",
identifier_prefix: 'oe-app-header-',
+ /**
+ * @constructs openerp.web.Header
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ */
init: function(parent) {
this._super(parent);
this.qs = "?" + jQuery.param.querystring();
this.$content = $();
+ console.debug("initializing header with id", this.element_id);
+ this.update_promise = $.Deferred().resolve();
},
start: function() {
this._super();
},
do_update: function () {
- this.$content = $(QWeb.render("Header-content", {widget: this}));
- this.$content.appendTo(this.$element);
- this.$element.find(".logout").click(this.on_logout);
- this.$element.find("a.preferences").click(this.on_preferences);
- return this.shortcut_load();
+ var self = this;
+ var fct = function() {
+ self.$content.remove();
+ if (!self.session.uid)
+ return;
+ var func = new openerp.web.Model(self.session, "res.users").get_func("read");
+ return func(self.session.uid, ["name", "company_id"]).pipe(function(res) {
+ self.$content = $(QWeb.render("Header-content", {widget: self, user: res}));
+ self.$content.appendTo(self.$element);
+ self.$element.find(".logout").click(self.on_logout);
+ self.$element.find("a.preferences").click(self.on_preferences);
+ self.$element.find(".about").click(self.on_about);
+ return self.shortcut_load();
+ });
+ };
+ this.update_promise = this.update_promise.pipe(fct, fct);
},
- do_reset: function() {
- this.$content.remove();
+ on_about: function() {
+ var self = this;
+ self.rpc("/web/webclient/version_info", {}).then(function(res) {
+ var $help = $(QWeb.render("About-Page", {version_info: res}));
+ $help.dialog({autoOpen: true,
+ modal: true, width: 960, title: "About"});
+ });
},
shortcut_load :function(){
var self = this,
sc = self.session.shortcuts,
- shortcuts_ds = new openerp.base.DataSet(this, 'ir.ui.view_sc');
+ shortcuts_ds = new openerp.web.DataSet(this, 'ir.ui.view_sc');
// TODO: better way to communicate between sections.
// sc.bindings, because jquery does not bind/trigger on arrays...
if (!sc.binding) {
@@ -615,7 +646,7 @@ openerp.base.Header = openerp.base.Widget.extend({
}
});
}
- return this.rpc('/base/session/sc_list', {}, function(shortcuts) {
+ return this.rpc('/web/session/sc_list', {}, function(shortcuts) {
sc.splice(0, sc.length);
sc.push.apply(sc, shortcuts);
@@ -627,7 +658,7 @@ openerp.base.Header = openerp.base.Widget.extend({
e.stopPropagation();
var id = $(this).data('id');
self.session.active_id = id;
- self.rpc('/base/menu/action', {'menu_id':id}, function(ir_menu_data) {
+ self.rpc('/web/menu/action', {'menu_id':id}, function(ir_menu_data) {
if (ir_menu_data.action.length){
self.on_action(ir_menu_data.action[0][2]);
}
@@ -640,10 +671,10 @@ openerp.base.Header = openerp.base.Widget.extend({
},
on_preferences: function(){
var self = this;
- var action_manager = new openerp.base.ActionManager(this);
- var dataset = new openerp.base.DataSet (this,'res.users',this.context);
+ var action_manager = new openerp.web.ActionManager(this);
+ var dataset = new openerp.web.DataSet (this,'res.users',this.context);
dataset.call ('action_get','',function (result){
- self.rpc('/base/action/load', {action_id:result}, function(result){
+ self.rpc('/web/action/load', {action_id:result}, function(result){
action_manager.do_action(_.extend(result['result'], {
res_id: self.session.uid,
res_model: 'res.users',
@@ -657,7 +688,7 @@ openerp.base.Header = openerp.base.Widget.extend({
}));
});
});
- this.dialog = new openerp.base.Dialog(this,{
+ this.dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'Preferences',
width: 600,
@@ -685,7 +716,7 @@ openerp.base.Header = openerp.base.Widget.extend({
change_password :function() {
var self = this;
- this.dialog = new openerp.base.Dialog(this,{
+ this.dialog = new openerp.web.Dialog(this,{
modal : true,
title : 'Change Password',
width : 'auto',
@@ -695,7 +726,7 @@ openerp.base.Header = openerp.base.Widget.extend({
this.dialog.$element.html(QWeb.render("Change_Pwd", self));
this.dialog.$element.find("form[name=change_password_form]").validate({
submitHandler: function (form) {
- self.rpc("/base/session/change_password",{
+ self.rpc("/web/session/change_password",{
'fields': $(form).serializeArray()
}, function(result) {
if (result.error) {
@@ -705,7 +736,7 @@ openerp.base.Header = openerp.base.Widget.extend({
else {
if (result.new_password) {
self.session.password = result.new_password;
- var session = new openerp.base.Session(self.session.server, self.session.port);
+ var session = new openerp.web.Session(self.session.server, self.session.port);
session.start();
session.session_login(self.session.db, self.session.login, self.session.password)
}
@@ -715,7 +746,7 @@ openerp.base.Header = openerp.base.Widget.extend({
});
}
});
-},
+ },
display_error: function (error) {
return $('<div>').dialog({
modal: true,
@@ -728,11 +759,18 @@ openerp.base.Header = openerp.base.Widget.extend({
}).html(error.error);
},
on_logout: function() {
- this.$element.find('.oe-shortcuts ul').empty();
}
});
-openerp.base.Menu = openerp.base.Widget.extend({
+openerp.web.Menu = openerp.web.Widget.extend(/** @lends openerp.web.Menu# */{
+ /**
+ * @constructs openerp.web.Menu
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ * @param secondary_menu_id
+ */
init: function(parent, element_id, secondary_menu_id) {
this._super(parent, element_id);
this.secondary_menu_id = secondary_menu_id;
@@ -740,7 +778,7 @@ openerp.base.Menu = openerp.base.Widget.extend({
this.menu = false;
},
start: function() {
- this.rpc("/base/menu/load", {}, this.on_loaded);
+ this.rpc("/web/menu/load", {}, this.on_loaded);
},
on_loaded: function(data) {
this.data = data;
@@ -792,7 +830,7 @@ openerp.base.Menu = openerp.base.Widget.extend({
if (id) {
this.session.active_id = id;
- this.rpc('/base/menu/action', {'menu_id': id},
+ this.rpc('/web/menu/action', {'menu_id': id},
this.on_menu_action_loaded);
}
@@ -814,44 +852,44 @@ openerp.base.Menu = openerp.base.Widget.extend({
}
});
-openerp.base.Homepage = openerp.base.Widget.extend({
-});
-
-openerp.base.Preferences = openerp.base.Widget.extend({
-});
-
-openerp.base.WebClient = openerp.base.Widget.extend({
+openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClient */{
+ /**
+ * @constructs openerp.web.WebClient
+ * @extends openerp.web.Widget
+ *
+ * @param element_id
+ */
init: function(element_id) {
this._super(null, element_id);
openerp.webclient = this;
- QWeb.add_template("/base/static/src/xml/base.xml");
+ QWeb.add_template("/web/static/src/xml/base.xml");
var params = {};
if(jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) {
this.$element.addClass("kitten-mode-activated");
}
this.$element.html(QWeb.render("Interface", params));
- this.session = new openerp.base.Session();
- this.loading = new openerp.base.Loading(this,"oe_loading");
- this.crashmanager = new openerp.base.CrashManager(this);
+ this.session = new openerp.web.Session();
+ this.loading = new openerp.web.Loading(this,"oe_loading");
+ this.crashmanager = new openerp.web.CrashManager(this);
this.crashmanager.start();
// Do you autorize this ? will be replaced by notify() in controller
- openerp.base.Widget.prototype.notification = new openerp.base.Notification(this, "oe_notification");
+ openerp.web.Widget.prototype.notification = new openerp.web.Notification(this, "oe_notification");
- this.header = new openerp.base.Header(this);
- this.login = new openerp.base.Login(this, "oe_login");
+ this.header = new openerp.web.Header(this);
+ this.login = new openerp.web.Login(this, "oe_login");
this.header.on_logout.add(this.login.on_logout);
this.header.on_action.add(this.on_menu_action);
this.session.on_session_invalid.add(this.login.do_ask_login);
this.session.on_session_valid.add_last(this.header.do_update);
- this.session.on_session_invalid.add_last(this.header.do_reset);
+ this.session.on_session_invalid.add_last(this.header.do_update);
this.session.on_session_valid.add_last(this.on_logged);
- this.menu = new openerp.base.Menu(this, "oe_menu", "oe_secondary_menu");
+ this.menu = new openerp.web.Menu(this, "oe_menu", "oe_secondary_menu");
this.menu.on_action.add(this.on_menu_action);
},
start: function() {
@@ -859,12 +897,12 @@ openerp.base.WebClient = openerp.base.Widget.extend({
this.session.start();
this.login.start();
this.menu.start();
- this.notification.notify("OpenERP Client", "The openerp client has been initialized.");
+ console.debug("The openerp client has been initialized.");
},
on_logged: function() {
if(this.action_manager)
this.action_manager.stop();
- this.action_manager = new openerp.base.ActionManager(this);
+ this.action_manager = new openerp.web.ActionManager(this);
this.action_manager.appendTo($("#oe_app"));
// if using saved actions, load the action and give it to action manager
@@ -872,7 +910,7 @@ openerp.base.WebClient = openerp.base.Widget.extend({
if (parameters["s_action"] != undefined) {
var key = parseInt(parameters["s_action"], 10);
var self = this;
- this.rpc("/base/session/get_session_action", {key:key}, function(action) {
+ this.rpc("/web/session/get_session_action", {key:key}, function(action) {
self.action_manager.do_action(action);
});
} else if (openerp._modules_loaded) { // TODO: find better option than this
@@ -895,7 +933,7 @@ openerp.base.WebClient = openerp.base.Widget.extend({
// not logged in
if (!this.session.uid) { return; }
- var ds = new openerp.base.DataSetSearch(this, 'res.users');
+ var ds = new openerp.web.DataSetSearch(this, 'res.users');
ds.read_ids([this.session.uid], ['action_id'], function (users) {
var home_action = users[0].action_id;
if (!home_action) {
@@ -911,11 +949,11 @@ openerp.base.WebClient = openerp.base.Widget.extend({
* Bundles the execution of the home action
*
* @param {Number} action action id
- * @param {openerp.base.DataSet} dataset action executor
+ * @param {openerp.web.DataSet} dataset action executor
*/
execute_home_action: function (action, dataset) {
var self = this;
- this.rpc('/base/action/load', {
+ this.rpc('/web/action/load', {
action_id: action,
context: dataset.get_context()
}, function (meh) {
diff --git a/addons/base/static/src/js/core.js b/addons/web/static/src/js/core.js
index 4cd46504a69..19a915c0f78 100644
--- a/addons/base/static/src/js/core.js
+++ b/addons/web/static/src/js/core.js
@@ -2,24 +2,36 @@
* OpenERP Web core
*--------------------------------------------------------*/
-openerp.base.core = function(openerp) {
+if (!console.debug) {
+ console.debug = console.log;
+}
+
+openerp.web.core = function(openerp) {
+openerp.web.qweb = new QWeb2.Engine();
+openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
/**
* John Resig Class with factory improvement
*/
(function() {
var initializing = false,
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
- // The base Class implementation (does nothing)
+ // The web Class implementation (does nothing)
/**
+ * Extended version of John Resig's Class pattern
+ *
* @class
*/
- openerp.base.Class = function(){};
+ openerp.web.Class = function(){};
- // Create a new Class that inherits from this class
- openerp.base.Class.extend = function(prop) {
+ /**
+ * Subclass an existing class
+ *
+ * @param {Object} prop class-level properties (class attributes and instance methods) to set on the new class
+ */
+ openerp.web.Class.extend = function(prop) {
var _super = this.prototype;
- // Instantiate a base class (but only create the instance,
+ // Instantiate a web class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
@@ -102,7 +114,7 @@ openerp.base.core = function(openerp) {
};
})();
-openerp.base.callback = function(obj, method) {
+openerp.web.callback = function(obj, method) {
var callback = function() {
var args = Array.prototype.slice.call(arguments);
var r;
@@ -114,7 +126,7 @@ openerp.base.callback = function(obj, method) {
}
r = c.callback.apply(c.self, c.args.concat(args));
// TODO special value to stop the chain
- // openerp.base.callback_stop
+ // openerp.web.callback_stop
}
return r;
};
@@ -156,10 +168,10 @@ openerp.base.callback = function(obj, method) {
* that does nothing and always return undefined).
*
* @param {Class} claz
- * @param {dict} add Additional functions to override.
+ * @param {Object} add Additional functions to override.
* @return {Class}
*/
-openerp.base.generate_null_object_class = function(claz, add) {
+openerp.web.generate_null_object_class = function(claz, add) {
var newer = {};
var copy_proto = function(prototype) {
for (var name in prototype) {
@@ -171,24 +183,24 @@ openerp.base.generate_null_object_class = function(claz, add) {
copy_proto(prototype.prototype);
};
copy_proto(claz.prototype);
- newer.init = openerp.base.Widget.prototype.init;
+ newer.init = openerp.web.Widget.prototype.init;
var tmpclass = claz.extend(newer);
return tmpclass.extend(add || {});
};
/**
- * Base error for lookup failure
+ * web error for lookup failure
*
* @class
*/
-openerp.base.NotFound = openerp.base.Class.extend( /** @lends openerp.base.NotFound# */ {
+openerp.web.NotFound = openerp.web.Class.extend( /** @lends openerp.web.NotFound# */ {
});
-openerp.base.KeyNotFound = openerp.base.NotFound.extend( /** @lends openerp.base.KeyNotFound# */ {
+openerp.web.KeyNotFound = openerp.web.NotFound.extend( /** @lends openerp.web.KeyNotFound# */ {
/**
* Thrown when a key could not be found in a mapping
*
- * @constructs
- * @extends openerp.base.NotFound
+ * @constructs openerp.web.KeyNotFound
+ * @extends openerp.web.NotFound
* @param {String} key the key which could not be found
*/
init: function (key) {
@@ -198,13 +210,13 @@ openerp.base.KeyNotFound = openerp.base.NotFound.extend( /** @lends openerp.base
return "The key " + this.key + " was not found";
}
});
-openerp.base.ObjectNotFound = openerp.base.NotFound.extend( /** @lends openerp.base.ObjectNotFound# */ {
+openerp.web.ObjectNotFound = openerp.web.NotFound.extend( /** @lends openerp.web.ObjectNotFound# */ {
/**
* Thrown when an object path does not designate a valid class or object
* in the openerp hierarchy.
*
- * @constructs
- * @extends openerp.base.NotFound
+ * @constructs openerp.web.ObjectNotFound
+ * @extends openerp.web.NotFound
* @param {String} path the invalid object path
*/
init: function (path) {
@@ -214,7 +226,7 @@ openerp.base.ObjectNotFound = openerp.base.NotFound.extend( /** @lends openerp.b
return "Could not find any object of path " + this.path;
}
});
-openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Registry# */ {
+openerp.web.Registry = openerp.web.Class.extend( /** @lends openerp.web.Registry# */ {
/**
* Stores a mapping of arbitrary key (strings) to object paths (as strings
* as well).
@@ -224,10 +236,10 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
* registry was created.
*
* An object path is simply a dotted name from the openerp root to the
- * object pointed to (e.g. ``"openerp.base.Session"`` for an OpenERP
+ * object pointed to (e.g. ``"openerp.web.Session"`` for an OpenERP
* session object).
*
- * @constructs
+ * @constructs openerp.web.Registry
* @param {Object} mapping a mapping of keys to object-paths
*/
init: function (mapping) {
@@ -239,13 +251,13 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
* @param {String} key the key to fetch the object for
* @returns {Class} the stored class, to initialize
*
- * @throws {openerp.base.KeyNotFound} if the object was not in the mapping
- * @throws {openerp.base.ObjectNotFound} if the object path was invalid
+ * @throws {openerp.web.KeyNotFound} if the object was not in the mapping
+ * @throws {openerp.web.ObjectNotFound} if the object path was invalid
*/
get_object: function (key) {
var path_string = this.map[key];
if (path_string === undefined) {
- throw new openerp.base.KeyNotFound(key);
+ throw new openerp.web.KeyNotFound(key);
}
var object_match = openerp;
@@ -255,7 +267,7 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
object_match = object_match[path[i]];
if (object_match === undefined) {
- throw new openerp.base.ObjectNotFound(path_string);
+ throw new openerp.web.ObjectNotFound(path_string);
}
}
return object_match;
@@ -267,21 +279,21 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
* @param {Array} keys a sequence of keys to fetch the object for
* @returns {Class} the first class found matching an object
*
- * @throws {openerp.base.KeyNotFound} if none of the keys was in the mapping
- * @trows {openerp.base.ObjectNotFound} if a found object path was invalid
+ * @throws {openerp.web.KeyNotFound} if none of the keys was in the mapping
+ * @trows {openerp.web.ObjectNotFound} if a found object path was invalid
*/
get_any: function (keys) {
for (var i=0; i<keys.length; ++i) {
try {
return this.get_object(keys[i]);
} catch (e) {
- if (e instanceof openerp.base.KeyNotFound) {
+ if (e instanceof openerp.web.KeyNotFound) {
continue;
}
throw e;
}
}
- throw new openerp.base.KeyNotFound(keys.join(','));
+ throw new openerp.web.KeyNotFound(keys.join(','));
},
/**
* Adds a new key and value to the registry.
@@ -290,7 +302,7 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
*
* @param {String} key
* @param {String} object_path fully qualified dotted object path
- * @returns {openerp.base.Registry} itself
+ * @returns {openerp.web.Registry} itself
*/
add: function (key, object_path) {
this.map[key] = object_path;
@@ -303,31 +315,37 @@ openerp.base.Registry = openerp.base.Class.extend( /** @lends openerp.base.Regis
* @param {Object} [mapping={}] a mapping of keys to object-paths
*/
clone: function (mapping) {
- return new openerp.base.Registry(
+ return new openerp.web.Registry(
_.extend({}, this.map, mapping || {}));
}
});
-openerp.base.CallbackEnabled = openerp.base.Class.extend({
+openerp.web.CallbackEnabled = openerp.web.Class.extend(/** @lends openerp.web.CallbackEnabled# */{
+ /**
+ * @constructs openerp.web.CallbackEnabled
+ * @extends openerp.web.Class
+ */
init: function() {
- // Transform on_* method into openerp.base.callbacks
+ // Transform on_* method into openerp.web.callbacks
for (var name in this) {
if(typeof(this[name]) == "function") {
this[name].debug_name = name;
// bind ALL function to this not only on_and _do ?
if((/^on_|^do_/).test(name)) {
- this[name] = openerp.base.callback(this, this[name]);
+ this[name] = openerp.web.callback(this, this[name]);
}
}
}
}
});
-openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.base.Session# */{
+openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web.Session# */{
/**
- * @constructs
- * @param server
- * @param port
+ * @constructs openerp.web.Session
+ * @extends openerp.web.CallbackEnabled
+ *
+ * @param {String} [server] JSON-RPC endpoint hostname
+ * @param {String} [port] JSON-RPC endpoint port
*/
init: function(server, port) {
this._super();
@@ -335,18 +353,15 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
this.port = (port == undefined) ? location.port : port;
this.rpc_mode = (server == location.hostname) ? "ajax" : "jsonp";
this.debug = (window.location.search.indexOf('?debug') !== -1);
- this.db = "";
- this.login = "";
- this.password = "";
- this.user_context= {};
- this.uid = false;
this.session_id = false;
+ this.uid = false;
+ this.user_context= {};
+ this.db = false;
this.module_list = [];
- this.module_loaded = {"base": true};
+ this.module_loaded = {"web": true};
this.context = {};
this.shortcuts = [];
this.active_id = null;
- this.session = this;
},
start: function() {
this.session_restore();
@@ -375,7 +390,7 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
jsonrpc: "2.0",
method: "call",
params: params,
- id:null
+ id: _.uniqueId('browser-client-')
}).then(function () {deferred.resolve.apply(deferred, arguments);},
function(error) {deferred.reject(error, $.Event());});
return deferred.fail(function() {
@@ -389,7 +404,7 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
/**
* Raw JSON-RPC call
*
- * @returns {jQuery.Deferred} ajax-based deferred object
+ * @returns {jQuery.Deferred} ajax-webd deferred object
*/
rpc_ajax: function(url, payload) {
var self = this;
@@ -461,56 +476,45 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
},
session_login: function(db, login, password, success_callback) {
var self = this;
- this.db = db;
- this.login = login;
- this.password = password;
- var params = { db: this.db, login: this.login, password: this.password };
- this.rpc("/base/session/login", params, function(result) {
+ var params = { db: db, login: login, password: password };
+ this.rpc("/web/session/login", params, function(result) {
self.session_id = result.session_id;
self.uid = result.uid;
self.user_context = result.context;
+ self.db = result.db;
self.session_save();
self.on_session_valid();
- if (success_callback)
- success_callback();
- });
- },
- session_logout: function() {
- this.uid = false;
+ return true;
+ }).then(success_callback);
},
/**
* Reloads uid and session_id from local storage, if they exist
*/
session_restore: function () {
- this.uid = this.get_cookie('uid');
+ var self = this;
this.session_id = this.get_cookie('session_id');
- this.db = this.get_cookie('db');
- this.login = this.get_cookie('login');
- this.user_context = this.get_cookie("user_context");
- // we should do an rpc to confirm that this session_id is valid and if it is retrieve the information about db and login
- // then call on_session_valid
- this.on_session_valid();
+ return this.rpc("/web/session/get_session_info", {}).then(function(result) {
+ self.uid = result.uid;
+ self.user_context = result.context;
+ self.db = result.db;
+ if (self.uid)
+ self.on_session_valid();
+ else
+ self.on_session_invalid();
+ });
},
/**
* Saves the session id and uid locally
*/
session_save: function () {
- this.set_cookie('uid', this.uid);
this.set_cookie('session_id', this.session_id);
- this.set_cookie('db', this.db);
- this.set_cookie('login', this.login);
- this.set_cookie('user_context', this.user_context);
},
logout: function() {
- delete this.uid;
- delete this.session_id;
- delete this.db;
- delete this.login;
- this.set_cookie('uid', '');
this.set_cookie('session_id', '');
- this.set_cookie('db', '');
- this.set_cookie('login', '');
- this.on_session_invalid(function() {});
+ this.reload_client();
+ },
+ reload_client: function() {
+ window.location.reload();
},
/**
* Fetches a cookie stored by an openerp session
@@ -550,34 +554,34 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
*/
load_modules: function() {
var self = this;
- this.rpc('/base/session/modules', {}, function(result) {
+ this.rpc('/web/session/modules', {}, function(result) {
self.module_list = result;
var lang = self.user_context.lang;
- params = { mods: ["base"].concat(result), lang: lang};
- self.rpc('/base/webclient/translations',params).then(function(transs) {
- openerp.base._t.database.set_bundle(transs);
+ var params = { mods: ["web"].concat(result), lang: lang};
+ self.rpc('/web/webclient/translations',params).then(function(transs) {
+ openerp.web._t.database.set_bundle(transs);
var modules = self.module_list.join(',');
- var file_list = ["/base/static/lib/datejs/globalization/" +
- self.user_context.lang.replace("_", "-") + ".js",
-
- ];
+ var file_list = ["/web/static/lib/datejs/globalization/" +
+ self.user_context.lang.replace("_", "-") + ".js"
+ ];
if(self.debug) {
- self.rpc('/base/webclient/csslist', {"mods": modules}, self.do_load_css);
- self.rpc('/base/webclient/jslist', {"mods": modules}, function(files) {
+ self.rpc('/web/webclient/csslist', {"mods": modules}, self.do_load_css);
+ self.rpc('/web/webclient/jslist', {"mods": modules}, function(files) {
self.do_load_js(file_list.concat(files));
});
} else {
- self.do_load_css(["/base/webclient/css?mods="+modules]);
- self.do_load_js(file_list.concat(["/base/webclient/js?mods="+modules]));
+ self.do_load_css(["/web/webclient/css?mods="+modules]);
+ self.do_load_js(file_list.concat(["/web/webclient/js?mods="+modules]));
}
openerp._modules_loaded = true;
});
});
},
do_load_css: function (files) {
+ var self = this;
_.each(files, function (file) {
$('head').append($('<link>', {
- 'href': file,
+ 'href': file + (self.debug ? '?debug=' + (new Date().getTime()) : ''),
'rel': 'stylesheet',
'type': 'text/css'
}));
@@ -589,7 +593,7 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
var file = files.shift();
var tag = document.createElement('script');
tag.type = 'text/javascript';
- tag.src = file;
+ tag.src = file + (this.debug ? '?debug=' + (new Date().getTime()) : '');
tag.onload = tag.onreadystatechange = function() {
if ( (tag.readyState && tag.readyState != "loaded" && tag.readyState != "complete") || tag.onload_done )
return;
@@ -614,16 +618,112 @@ openerp.base.Session = openerp.base.CallbackEnabled.extend( /** @lends openerp.b
this.module_loaded[mod] = true;
}
}
+ },
+ /**
+ * Cooperative file download implementation, for ajaxy APIs.
+ *
+ * Requires that the server side implements an httprequest correctly
+ * setting the `fileToken` cookie to the value provided as the `token`
+ * parameter. The cookie *must* be set on the `/` path and *must not* be
+ * `httpOnly`.
+ *
+ * It would probably also be a good idea for the response to use a
+ * `Content-Disposition: attachment` header, especially if the MIME is a
+ * "known" type (e.g. text/plain, or for some browsers application/json
+ *
+ * @param {Object} options
+ * @param {String} [options.url] used to dynamically create a form
+ * @param {Object} [options.data] data to add to the form submission. If can be used without a form, in which case a form is created from scratch. Otherwise, added to form data
+ * @param {HTMLFormElement} [options.form] the form to submit in order to fetch the file
+ * @param {Function} [options.success] callback in case of download success
+ * @param {Function} [options.error] callback in case of request error, provided with the error body
+ * @param {Function} [options.complete] called after both ``success`` and ``error` callbacks have executed
+ */
+ get_file: function (options) {
+ // need to detect when the file is done downloading (not used
+ // yet, but we'll need it to fix the UI e.g. with a throbber
+ // while dump is being generated), iframe load event only fires
+ // when the iframe content loads, so we need to go smarter:
+ // http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx
+ var timer, token = new Date().getTime(),
+ cookie_name = 'fileToken', cookie_length = cookie_name.length,
+ CHECK_INTERVAL = 1000, id = _.uniqueId('get_file_frame'),
+ remove_form = false;
+
+ var $form, $form_data = $('<div>');
+
+ var complete = function () {
+ if (options.complete) { options.complete(); }
+ clearTimeout(timer);
+ $form_data.remove();
+ $target.remove();
+ if (remove_form && $form) { $form.remove(); }
+ };
+ var $target = $('<iframe style="display: none;">')
+ .attr({id: id, name: id})
+ .appendTo(document.body)
+ .load(function () {
+ if (options.error) { options.error(this.contentDocument.body); }
+ complete();
+ });
+
+ if (options.form) {
+ $form = $(options.form);
+ } else {
+ remove_form = true;
+ $form = $('<form>', {
+ action: options.url,
+ method: 'POST'
+ }).appendTo(document.body);
+ }
+
+ _(_.extend({}, options.data || {},
+ {session_id: this.session_id, token: token}))
+ .each(function (value, key) {
+ $('<input type="hidden" name="' + key + '">')
+ .val(value)
+ .appendTo($form_data);
+ });
+
+ $form
+ .append($form_data)
+ .attr('target', id)
+ .get(0).submit();
+
+ var waitLoop = function () {
+ var cookies = document.cookie.split(';');
+ // setup next check
+ timer = setTimeout(waitLoop, CHECK_INTERVAL);
+ for (var i=0; i<cookies.length; ++i) {
+ var cookie = cookies[i].replace(/^\s*/, '');
+ if (!cookie.indexOf(cookie_name === 0)) { continue; }
+ var cookie_val = cookie.substring(cookie_length + 1);
+ if (parseInt(cookie_val, 10) !== token) { continue; }
+
+ // clear cookie
+ document.cookie = _.sprintf("%s=;expires=%s;path=/",
+ cookie_name, new Date().toGMTString());
+ if (options.success) { options.success(); }
+ complete();
+ return;
+ }
+ };
+ timer = setTimeout(waitLoop, CHECK_INTERVAL);
}
});
-/**
- * Utility class that any class is allowed to extend to easy common manipulations.
- *
- * It provides rpc calls, callback on all methods preceded by "on_" or "do_" and a
- * logging facility.
- */
-openerp.base.SessionAware = openerp.base.CallbackEnabled.extend({
+openerp.web.SessionAware = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.SessionAware# */{
+ /**
+ * Utility class that any class is allowed to extend to easy common manipulations.
+ *
+ * It provides rpc calls, callback on all methods preceded by "on_" or "do_" and a
+ * logging facility.
+ *
+ * @constructs openerp.web.SessionAware
+ * @extends openerp.web.CallbackEnabled
+ *
+ * @param {openerp.web.Session} session
+ */
init: function(session) {
this._super();
this.session = session;
@@ -639,43 +739,10 @@ openerp.base.SessionAware = openerp.base.CallbackEnabled.extend({
*/
rpc: function(url, data, success, error) {
return this.session.rpc(url, data, success, error);
- },
- log: function() {
- var args = Array.prototype.slice.call(arguments);
- var caller = arguments.callee.caller;
- // TODO add support for line number using
- // https://github.com/emwendelin/javascript-stacktrace/blob/master/stacktrace.js
- // args.unshift("" + caller.debug_name);
- this.on_log.apply(this,args);
- },
- on_log: function() {
- if(this.session.debug) {
- var notify = false;
- var body = false;
- if(window.console) {
- console.log(arguments);
- } else {
- body = true;
- }
- var a = Array.prototype.slice.call(arguments, 0);
- for(var i = 0; i < a.length; i++) {
- var v = a[i]==null ? "null" : a[i].toString();
- if(i==0) {
- notify = v.match(/^not/);
- body = v.match(/^bod/);
- }
- if(body) {
- $('<pre></pre>').text(v).appendTo($('body'));
- }
- if(notify && this.notification) {
- this.notification.notify("Logging:",v);
- }
- }
- }
}
});
-openerp.base.Widget = openerp.base.SessionAware.extend({
+openerp.web.Widget = openerp.web.SessionAware.extend(/** @lends openerp.web.Widget# */{
/**
* The name of the QWeb template that will be used for rendering. Must be
* redefined in subclasses or the default render() method can not be used.
@@ -693,8 +760,10 @@ openerp.base.Widget = openerp.base.SessionAware.extend({
/**
* Construct the widget and set its parent if a parent is given.
*
- * @constructs
- * @param {openerp.base.Widget} parent Binds the current instance to the given Widget instance.
+ * @constructs openerp.web.Widget
+ * @extends openerp.web.SessionAware
+ *
+ * @param {openerp.web.Widget} parent Binds the current instance to the given Widget instance.
* When that widget is destroyed by calling stop(), the current instance will be
* destroyed too. Can be null.
* @param {String} element_id Deprecated. Sets the element_id. Only useful when you want
@@ -766,11 +835,13 @@ openerp.base.Widget = openerp.base.SessionAware.extend({
_render_and_insert: function(insertion, target) {
var rendered = this.render();
this.$element = $(rendered);
- if (target instanceof openerp.base.Widget)
+ if (target instanceof openerp.web.Widget)
target = target.$element;
insertion(target);
+ this.on_inserted(this.$element, this);
return this.start();
},
+ on_inserted: function(element, widget) {},
/**
* Renders the widget using QWeb, `this.template` must be defined.
* The context given to QWeb contains the "widget" key that references `this`.
@@ -778,7 +849,7 @@ openerp.base.Widget = openerp.base.SessionAware.extend({
* @param {Object} additional Additional context arguments to pass to the template.
*/
render: function (additional) {
- return QWeb.render(this.template, _.extend({widget: this}, additional || {}));
+ return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {}));
},
/**
* Method called after rendering. Mostly used to bind actions, perform asynchronous
@@ -850,17 +921,23 @@ openerp.base.Widget = openerp.base.SessionAware.extend({
});
/**
+ * @class
+ * @extends openerp.web.Widget
* @deprecated
* For retro compatibility only, the only difference with is that render() uses
- * directly `this` instead of context with a "widget" key.
+ * directly ``this`` instead of context with a ``widget`` key.
*/
-openerp.base.OldWidget = openerp.base.Widget.extend({
+openerp.web.OldWidget = openerp.web.Widget.extend(/** @lends openerp.web.OldWidget# */{
render: function (additional) {
- return QWeb.render(this.template, _.extend(_.extend({}, this), additional || {}));
+ return openerp.web.qweb.render(this.template, _.extend(_.extend({}, this), additional || {}));
}
});
-openerp.base.TranslationDataBase = openerp.base.Class.extend({
+openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.web.TranslationDataBase# */{
+ /**
+ * @constructs openerp.web.TranslationDataBase
+ * @extends openerp.web.Class
+ */
init: function() {
this.db = {};
this.parameters = {"direction": 'ltr',
@@ -874,8 +951,8 @@ openerp.base.TranslationDataBase = openerp.base.Class.extend({
var self = this;
this.db = {};
var modules = _.keys(translation_bundle.modules).sort();
- if (_.include(modules, "base")) {
- modules = ["base"].concat(_.without(modules, "base"));
+ if (_.include(modules, "web")) {
+ modules = ["web"].concat(_.without(modules, "web"));
}
_.each(modules, function(name) {
self.add_module_translation(translation_bundle.modules[name]);
@@ -897,7 +974,7 @@ openerp.base.TranslationDataBase = openerp.base.Class.extend({
var fcnt = function(str) {
var tmp = self.get(str);
return tmp === undefined ? str : tmp;
- }
+ };
fcnt.database = this;
return fcnt;
},
@@ -908,7 +985,7 @@ openerp.base.TranslationDataBase = openerp.base.Class.extend({
}
});
-openerp.base._t = new openerp.base.TranslationDataBase().build_translation_function();
+openerp.web._t = new openerp.web.TranslationDataBase().build_translation_function();
};
diff --git a/addons/base/static/src/js/data.js b/addons/web/static/src/js/data.js
index e95adaf8870..1eb57241fa6 100644
--- a/addons/base/static/src/js/data.js
+++ b/addons/web/static/src/js/data.js
@@ -1,5 +1,5 @@
-openerp.base.data = function(openerp) {
+openerp.web.data = function(openerp) {
/**
* Serializes the sort criterion array of a dataset into a form which can be
@@ -8,7 +8,7 @@ openerp.base.data = function(openerp) {
* @param {Array} criterion array of fields, from first to last criteria, prefixed with '-' for reverse sorting
* @returns {String} SQL-like sorting string (``ORDER BY``) clause
*/
-openerp.base.serialize_sort = function (criterion) {
+openerp.web.serialize_sort = function (criterion) {
return _.map(criterion,
function (criteria) {
if (criteria[0] === '-') {
@@ -18,7 +18,7 @@ openerp.base.serialize_sort = function (criterion) {
}).join(', ');
};
-openerp.base.DataGroup = openerp.base.Widget.extend( /** @lends openerp.base.DataGroup# */{
+openerp.web.DataGroup = openerp.web.Widget.extend( /** @lends openerp.web.DataGroup# */{
/**
* Management interface between views and grouped collections of OpenERP
* records.
@@ -26,13 +26,13 @@ openerp.base.DataGroup = openerp.base.Widget.extend( /** @lends openerp.base.Da
* The root DataGroup is instantiated with the relevant information
* (a session, a model, a domain, a context and a group_by sequence), the
* domain and context may be empty. It is then interacted with via
- * :js:func:`~openerp.base.DataGroup.list`, which is used to read the
+ * :js:func:`~openerp.web.DataGroup.list`, which is used to read the
* content of the current grouping level.
*
- * @constructs
- * @extends openerp.base.Widget
+ * @constructs openerp.web.DataGroup
+ * @extends openerp.web.Widget
*
- * @param {openerp.base.Session} session Current OpenERP session
+ * @param {openerp.web.Session} session Current OpenERP session
* @param {String} model name of the model managed by this DataGroup
* @param {Array} domain search domain for this DataGroup
* @param {Object} context context of the DataGroup's searches
@@ -43,9 +43,9 @@ openerp.base.DataGroup = openerp.base.Widget.extend( /** @lends openerp.base.Da
this._super(parent, null);
if (group_by) {
if (group_by.length || context['group_by_no_leaf']) {
- return new openerp.base.ContainerDataGroup( this, model, domain, context, group_by, level);
+ return new openerp.web.ContainerDataGroup( this, model, domain, context, group_by, level);
} else {
- return new openerp.base.GrouplessDataGroup( this, model, domain, context, level);
+ return new openerp.web.GrouplessDataGroup( this, model, domain, context, level);
}
}
@@ -57,11 +57,11 @@ openerp.base.DataGroup = openerp.base.Widget.extend( /** @lends openerp.base.Da
},
cls: 'DataGroup'
});
-openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( /** @lends openerp.base.ContainerDataGroup# */ {
+openerp.web.ContainerDataGroup = openerp.web.DataGroup.extend( /** @lends openerp.web.ContainerDataGroup# */ {
/**
*
- * @constructs
- * @extends openerp.base.DataGroup
+ * @constructs openerp.web.ContainerDataGroup
+ * @extends openerp.web.DataGroup
*
* @param session
* @param model
@@ -139,13 +139,13 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( /** @lends open
var d = new $.Deferred();
var self = this;
- this.rpc('/base/group/read', {
+ this.rpc('/web/group/read', {
model: this.model,
context: this.context,
domain: this.domain,
fields: _.uniq(this.group_by.concat(fields)),
group_by_fields: this.group_by,
- sort: openerp.base.serialize_sort(this.sort)
+ sort: openerp.web.serialize_sort(this.sort)
}, function () { }).then(function (response) {
var data_groups = _(response).map(
_.bind(self.transform_group, self));
@@ -185,7 +185,7 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( /** @lends open
ifGroups(_(group_records).map(function (group) {
var child_context = _.extend({}, self.context, group.__context);
return _.extend(
- new openerp.base.DataGroup(
+ new openerp.web.DataGroup(
self, self.model, group.__domain,
child_context, child_context.group_by,
self.level + 1),
@@ -194,11 +194,11 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( /** @lends open
});
}
});
-openerp.base.GrouplessDataGroup = openerp.base.DataGroup.extend( /** @lends openerp.base.GrouplessDataGroup# */ {
+openerp.web.GrouplessDataGroup = openerp.web.DataGroup.extend( /** @lends openerp.web.GrouplessDataGroup# */ {
/**
*
- * @constructs
- * @extends openerp.base.DataGroup
+ * @constructs openerp.web.GrouplessDataGroup
+ * @extends openerp.web.DataGroup
*
* @param session
* @param model
@@ -211,18 +211,18 @@ openerp.base.GrouplessDataGroup = openerp.base.DataGroup.extend( /** @lends open
},
list: function (fields, ifGroups, ifRecords) {
ifRecords(_.extend(
- new openerp.base.DataSetSearch(this, this.model),
+ new openerp.web.DataSetSearch(this, this.model),
{domain: this.domain, context: this.context, _sort: this.sort}));
}
});
-openerp.base.StaticDataGroup = openerp.base.GrouplessDataGroup.extend( /** @lends openerp.base.StaticDataGroup# */ {
+openerp.web.StaticDataGroup = openerp.web.GrouplessDataGroup.extend( /** @lends openerp.web.StaticDataGroup# */ {
/**
* A specialization of groupless data groups, relying on a single static
* dataset as its records provider.
*
- * @constructs
- * @extends openerp.base.GrouplessDataGroup
- * @param {openep.base.DataSetStatic} dataset a static dataset backing the groups
+ * @constructs openerp.web.StaticDataGroup
+ * @extends openerp.web.GrouplessDataGroup
+ * @param {openep.web.DataSetStatic} dataset a static dataset backing the groups
*/
init: function (dataset) {
this.dataset = dataset;
@@ -232,13 +232,13 @@ openerp.base.StaticDataGroup = openerp.base.GrouplessDataGroup.extend( /** @lend
}
});
-openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.DataSet# */{
+openerp.web.DataSet = openerp.web.Widget.extend( /** @lends openerp.web.DataSet# */{
/**
* DateaManagement interface between views and the collection of selected
* OpenERP records (represents the view's state?)
*
- * @constructs
- * @extends openerp.base.Widget
+ * @constructs openerp.web.DataSet
+ * @extends openerp.web.Widget
*
* @param {String} model the OpenERP model this dataset will manage
*/
@@ -275,7 +275,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
read_ids: function (ids, fields, callback) {
- return this.rpc('/base/dataset/get', {
+ return this.rpc('/web/dataset/get', {
model: this.model,
ids: ids,
fields: fields,
@@ -325,7 +325,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
default_get: function(fields, callback) {
- return this.rpc('/base/dataset/default_get', {
+ return this.rpc('/web/dataset/default_get', {
model: this.model,
fields: fields,
context: this.get_context()
@@ -340,7 +340,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
create: function(data, callback, error_callback) {
- return this.rpc('/base/dataset/create', {
+ return this.rpc('/web/dataset/create', {
model: this.model,
data: data,
context: this.get_context()
@@ -357,7 +357,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
*/
write: function (id, data, options, callback, error_callback) {
var options = options || {};
- return this.rpc('/base/dataset/save', {
+ return this.rpc('/web/dataset/save', {
model: this.model,
id: id,
data: data,
@@ -386,7 +386,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
call: function (method, args, callback, error_callback) {
- return this.rpc('/base/dataset/call', {
+ return this.rpc('/web/dataset/call', {
model: this.model,
method: method,
args: args || []
@@ -404,7 +404,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
call_and_eval: function (method, args, domain_index, context_index, callback, error_callback) {
- return this.rpc('/base/dataset/call', {
+ return this.rpc('/web/dataset/call', {
model: this.model,
method: method,
domain_id: domain_index || null,
@@ -422,7 +422,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
* @returns {$.Deferred}
*/
call_button: function (method, args, callback, error_callback) {
- return this.rpc('/base/dataset/call_button', {
+ return this.rpc('/web/dataset/call_button', {
model: this.model,
method: method,
domain_id: null,
@@ -462,7 +462,7 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
return this.call_and_eval('name_create', [name, this.get_context()], null, 1, callback);
},
exec_workflow: function (id, signal, callback) {
- return this.rpc('/base/dataset/exec_workflow', {
+ return this.rpc('/web/dataset/exec_workflow', {
model: this.model,
id: id,
signal: signal
@@ -470,12 +470,12 @@ openerp.base.DataSet = openerp.base.Widget.extend( /** @lends openerp.base.Data
},
get_context: function(request_context) {
if (request_context) {
- return new openerp.base.CompoundContext(this.context, request_context);
+ return new openerp.web.CompoundContext(this.context, request_context);
}
return this.context;
}
});
-openerp.base.DataSetStatic = openerp.base.DataSet.extend({
+openerp.web.DataSetStatic = openerp.web.DataSet.extend({
init: function(parent, model, context, ids) {
this._super(parent, model, context);
// all local records
@@ -505,9 +505,10 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({
this.set_ids(_.without.apply(null, [this.ids].concat(ids)));
}
});
-openerp.base.DataSetSearch = openerp.base.DataSet.extend({
+openerp.web.DataSetSearch = openerp.web.DataSet.extend(/** @lends openerp.web.DataSetSearch */{
/**
- * @constructs
+ * @constructs openerp.web.DataSetSearch
+ * @extends openerp.web.DataSet
*
* @param {Object} parent
* @param {String} model
@@ -540,7 +541,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
var self = this;
var options = options || {};
var offset = options.offset || 0;
- return this.rpc('/base/dataset/search_read', {
+ return this.rpc('/web/dataset/search_read', {
model: this.model,
fields: fields || false,
domain: this.get_domain(options.domain),
@@ -558,7 +559,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
},
get_domain: function (other_domain) {
if (other_domain) {
- return new openerp.base.CompoundDomain(this.domain, other_domain);
+ return new openerp.web.CompoundDomain(this.domain, other_domain);
}
return this.domain;
},
@@ -577,7 +578,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
*/
sort: function (field, force_reverse) {
if (!field) {
- return openerp.base.serialize_sort(this._sort);
+ return openerp.web.serialize_sort(this._sort);
}
var reverse = force_reverse || (this._sort[0] === field);
this._sort.splice.apply(
@@ -600,7 +601,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({
}, error_callback);
}
});
-openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({
+openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
virtual_id_prefix: "one2many_v_id_",
virtual_id_regex: /one2many_v_id_.*/,
debug_mode: true,
@@ -612,17 +613,18 @@ openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({
var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data};
this.to_create.push(cached);
this.cache.push(cached);
+ this.on_change();
var to_return = $.Deferred().then(callback);
to_return.resolve({result: cached.id});
return to_return.promise();
},
- write: function (id, data, callback) {
+ write: function (id, data, options, callback) {
var self = this;
var record = _.detect(this.to_create, function(x) {return x.id === id;});
record = record || _.detect(this.to_write, function(x) {return x.id === id;});
var dirty = false;
if (record) {
- for (k in data) {
+ for (var k in data) {
if (record.values[k] === undefined || record.values[k] !== data[k]) {
dirty = true;
break;
@@ -691,7 +693,7 @@ openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({
}
}
setTimeout(function () {completion.resolve(records);}, 0);
- }
+ };
if(to_get.length > 0) {
var rpc_promise = this._super(to_get, fields, function(records) {
_.each(records, function(record, index) {
@@ -713,7 +715,7 @@ openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({
return completion.promise();
}
});
-openerp.base.ReadOnlyDataSetSearch = openerp.base.DataSetSearch.extend({
+openerp.web.ReadOnlyDataSetSearch = openerp.web.DataSetSearch.extend({
create: function(data, callback, error_callback) {
this.on_create(data);
var to_return = $.Deferred().then(callback);
@@ -721,7 +723,7 @@ openerp.base.ReadOnlyDataSetSearch = openerp.base.DataSetSearch.extend({
return to_return.promise();
},
on_create: function(data) {},
- write: function (id, data, callback) {
+ write: function (id, data, options, callback) {
this.on_write(id, data);
var to_return = $.Deferred().then(callback);
setTimeout(function () {to_return.resolve({"result": true});}, 0);
@@ -737,7 +739,51 @@ openerp.base.ReadOnlyDataSetSearch = openerp.base.DataSetSearch.extend({
on_unlink: function(ids) {}
});
-openerp.base.CompoundContext = openerp.base.Class.extend({
+openerp.web.Model = openerp.web.SessionAware.extend({
+ init: function(session, model_name) {
+ this._super(session);
+ this.model_name = model_name;
+ },
+ get_func: function(method_name) {
+ var self = this;
+ return function() {
+ if (method_name == "search_read")
+ return self._search_read.apply(self, arguments);
+ return self._call(method_name, _.toArray(arguments));
+ };
+ },
+ _call: function (method, args) {
+ return this.rpc('/web/dataset/call', {
+ model: this.model_name,
+ method: method,
+ args: args
+ }).pipe(function(result) {
+ if (method == "read" && result instanceof Array && result.length > 0 && result[0]["id"]) {
+ var index = {};
+ _.each(_.range(result.length), function(i) {
+ index[result[i]["id"]] = result[i];
+ })
+ result = _.map(args[0], function(x) {return index[x];});
+ }
+ return result;
+ });
+ },
+ _search_read: function(domain, fields, offset, limit, order, context) {
+ return this.rpc('/web/dataset/search_read', {
+ model: this.model_name,
+ fields: fields,
+ offset: offset,
+ limit: limit,
+ domain: domain,
+ sort: order,
+ context: context
+ }).pipe(function(result) {
+ return result.records;
+ });;
+ }
+});
+
+openerp.web.CompoundContext = openerp.web.Class.extend({
init: function () {
this.__ref = "compound_context";
this.__contexts = [];
@@ -760,7 +806,7 @@ openerp.base.CompoundContext = openerp.base.Class.extend({
}
});
-openerp.base.CompoundDomain = openerp.base.Class.extend({
+openerp.web.CompoundDomain = openerp.web.Class.extend({
init: function () {
this.__ref = "compound_domain";
this.__domains = [];
diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js
new file mode 100644
index 00000000000..51ac2cbd568
--- /dev/null
+++ b/addons/web/static/src/js/data_export.js
@@ -0,0 +1,391 @@
+openerp.web.data_export = function(openerp) {
+var QWeb = openerp.web.qweb;
+openerp.web.DataExport = openerp.web.Dialog.extend({
+ template: 'ExportTreeView',
+ dialog_title: 'Export Data',
+ init: function(parent, dataset) {
+ this._super(parent);
+ this.records = {};
+ this.dataset = dataset;
+ this.exports = new openerp.web.DataSetSearch(
+ this, 'ir.exports', this.dataset.get_context());
+ },
+ start: function() {
+ var self = this;
+ this._super.apply(this, arguments);
+ this.open({
+ modal: true,
+ width: '55%',
+ height: 'auto',
+ position: 'top',
+ buttons : {
+ "Close" : function() {
+ self.close();
+ },
+ "Export To File" : function() {
+ self.on_click_export_data();
+ }
+ },
+ close: function(event, ui){ self.close();}
+ });
+ self.$element.removeClass('ui-dialog-content ui-widget-content');
+ self.$element.find('#add_field').click(function() {
+ if ($('#field-tree-structure tr.ui-selected')) {
+ var fld = self.$element.find('#field-tree-structure tr.ui-selected').find('a');
+ for (var i = 0; i < fld.length; i++) {
+ var id = $(fld[i]).attr('id').split('-')[1];
+ var string = $(fld[i]).attr('string');
+ self.add_field(id, string);
+ }
+ self.$element.find('#field-tree-structure tr').removeClass('ui-selected');
+ }
+ });
+ self.$element.find('#remove_field').click(function() {
+ self.$element.find('#fields_list option:selected').remove();
+ });
+ self.$element.find('#remove_all_field').click(function() {
+ self.$element.find('#fields_list').empty();
+ });
+ this.$element.find('#export_new_list').click(this.on_show_save_list);
+
+ var got_fields = new $.Deferred();
+ this.$element.find('#import_compat').change(function() {
+ self.$element.find('#fields_list').empty();
+ self.$element.find('#field-tree-structure').remove();
+ var import_comp = self.$element.find("#import_compat").val();
+ self.rpc("/web/export/get_fields", {
+ model: self.dataset.model,
+ import_compat: Boolean(import_comp)
+ }, function (records) {
+ got_fields.resolve();
+ self.on_show_data(records);
+ });
+ }).change();
+
+ return $.when(
+ got_fields,
+ this.rpc('/web/export/formats', {}, this.do_setup_export_formats),
+ this.show_exports_list());
+ },
+ do_setup_export_formats: function (formats) {
+ var $fmts = this.$element.find('#export_format');
+ _(formats).each(function (format) {
+ $fmts.append(new Option(format[1], format[0]));
+ });
+ },
+ show_exports_list: function() {
+ var self = this;
+ if (self.$element.find('#saved_export_list').is(':hidden')) {
+ self.$element.find('#ExistsExportList').show();
+ return;
+ }
+ return this.exports.read_slice(['name'], {
+ domain: [['resource', '=', this.dataset.model]]
+ }, function (export_list) {
+ if (!export_list.length) {
+ return;
+ }
+ self.$element.find('#ExistsExportList').append(QWeb.render('Exists.ExportList', {'existing_exports': export_list}));
+ self.$element.find('#saved_export_list').change(function() {
+ self.$element.find('#fields_list option').remove();
+ var export_id = self.$element.find('#saved_export_list option:selected').val();
+ if (export_id) {
+ self.rpc('/web/export/namelist', {'model': self.dataset.model, export_id: parseInt(export_id)}, self.do_load_export_field);
+ }
+ });
+ self.$element.find('#delete_export_list').click(function() {
+ var select_exp = self.$element.find('#saved_export_list option:selected');
+ if (select_exp.val()) {
+ self.exports.unlink([parseInt(select_exp.val(), 10)]);
+ select_exp.remove();
+ if (self.$element.find('#saved_export_list option').length <= 1) {
+ self.$element.find('#ExistsExportList').hide();
+ }
+ }
+ });
+ });
+ },
+ do_load_export_field: function(field_list) {
+ var export_node = this.$element.find("#fields_list");
+ _(field_list).each(function (field) {
+ export_node.append(new Option(field.label, field.name));
+ });
+ },
+ on_show_save_list: function() {
+ var self = this;
+ var current_node = self.$element.find("#savenewlist");
+ if (!(current_node.find("label")).length) {
+ current_node.append(QWeb.render('ExportNewList'));
+ current_node.find("#add_export_list").click(function() {
+ var value = current_node.find("#savelist_name").val();
+ if (value) {
+ self.do_save_export_list(value);
+ } else {
+ alert("Pleae Enter Save Field List Name");
+ }
+ });
+ } else {
+ if (current_node.is(':hidden')) {
+ current_node.show();
+ current_node.find("#savelist_name").val("");
+ } else {
+ current_node.hide();
+ }
+ }
+ },
+ do_save_export_list: function(value) {
+ var self = this;
+ var fields = self.get_fields();
+ if (!fields.length) {
+ return;
+ }
+ this.exports.create({
+ name: value,
+ resource: this.dataset.model,
+ export_fields: _(fields).map(function (field) {
+ return [0, 0, {name: field}];
+ })
+ }, function (export_list_id) {
+ if (!export_list_id.result) {
+ return;
+ }
+ self.$element.find("#saved_export_list").append(
+ new Option(value, export_list_id.result));
+ if (self.$element.find("#saved_export_list").is(":hidden")) {
+ self.show_exports_list();
+ }
+ });
+ this.on_show_save_list();
+ this.$element.find("#fields_list option").remove();
+ },
+ on_click: function(id, record) {
+ var self = this;
+ if (!record['children']) {
+ return;
+ }
+ var model = record['params']['model'],
+ prefix = record['params']['prefix'],
+ name = record['params']['name'];
+
+ if (!record.loaded) {
+ var import_comp = self.$element.find("#import_compat").val();
+ self.rpc("/web/export/get_fields", {
+ model: model,
+ prefix: prefix,
+ parent_name: name,
+ import_compat: Boolean(import_comp),
+ parent_field_type : record['field_type']
+ }, function(results) {
+ record.loaded = true;
+ self.on_show_data(results, record.id);
+ });
+ } else {
+ self.showcontent(record.id);
+ }
+ },
+ on_show_data: function(result, after) {
+ var self = this;
+ var imp_cmpt = Boolean(self.$element.find("#import_compat").val());
+
+ if (after) {
+ var current_tr = self.$element.find("tr[id='treerow-" + after + "']");
+ current_tr.addClass('open');
+ current_tr.find('img').attr('src','/web/static/src/img/collapse.gif');
+ current_tr.after(QWeb.render('ExportTreeView-Secondary.children', {'fields': result}));
+ } else {
+ self.$element.find('#left_field_panel').append(QWeb.render('ExportTreeView-Secondary', {'fields': result}));
+ }
+ _.each(result, function(record) {
+ self.records[record.id] = record.value;
+ if (record.required) {
+ var required_fld = self.$element.find("tr[id='treerow-" + record.id + "']").find('#tree-column');
+ required_fld.addClass("oe_export_requiredfield");
+ }
+ self.$element.find("img[id='parentimg-" + record.id +"']").click(function() {
+ self.on_click(this.id, record);
+ });
+
+ self.$element.find("tr[id='treerow-" + record.id + "']").click(function(e) {
+ if (e.shiftKey) {
+ var frst_click, scnd_click = '';
+ if (self.row_index == 0) {
+ self.row_index = this.rowIndex;
+ frst_click = self.$element.find("tr[id^='treerow-']")[self.row_index-1];
+ $(frst_click).addClass("ui-selected");
+ } else {
+ if (this.rowIndex >=self.row_index) {
+ for (var i = (self.row_index-1); i < this.rowIndex; i++) {
+ scnd_click = self.$element.find("tr[id^='treerow-']")[i];
+ if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) {
+ $(scnd_click).addClass("ui-selected");
+ }
+ }
+ } else {
+ for (var i = (self.row_index-1); i >= (this.rowIndex-1); i--) {
+ scnd_click = self.$element.find("tr[id^='treerow-']")[i];
+ if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) {
+ $(scnd_click).addClass("ui-selected");
+ }
+ }
+ }
+ }
+ }
+ self.row_index = this.rowIndex;
+
+ self.$element.find("tr[id='treerow-" + record.id + "']").keyup(function() {
+ self.row_index = 0;
+ });
+ var o2m_selection = self.$element.find("tr[id='treerow-" + record.id + "']").find('#tree-column');
+ if ($(o2m_selection).hasClass("oe_export_readonlyfield")) {
+ return false;
+ }
+ if (e.ctrlKey) {
+ if ($(this).hasClass('ui-selected')) {
+ $(this).removeClass('ui-selected').find('a').blur();
+ } else {
+ $(this).addClass('ui-selected').find('a').focus();
+ }
+ } else if (!e.shiftKey) {
+ self.$element.find("tr.ui-selected")
+ .removeClass("ui-selected").find('a').blur();
+ $(this).addClass("ui-selected").find('a').focus();
+ }
+ return false;
+ });
+
+ self.$element.find("tr[id='treerow-" + record.id + "']").keydown(function(e) {
+ var keyCode = e.keyCode || e.which;
+ var arrow = {left: 37, up: 38, right: 39, down: 40 };
+ switch (keyCode) {
+ case arrow.left:
+ if ($(this).hasClass('open')) {
+ self.on_click(this.id, record);
+ }
+ break;
+ case arrow.right:
+ if (!$(this).hasClass('open')) {
+ self.on_click(this.id, record);
+ }
+ break;
+ case arrow.up:
+ var elem = this;
+ $(elem).removeClass("ui-selected");
+ while (!$(elem).prev().is(":visible")) {
+ elem = $(elem).prev();
+ }
+ if (!$(elem).prev().find('#tree-column').hasClass("oe_export_readonlyfield")) {
+ $(elem).prev().addClass("ui-selected");
+ }
+ $(elem).prev().find('a').focus();
+ break;
+ case arrow.down:
+ var elem = this;
+ $(elem).removeClass("ui-selected");
+ while(!$(elem).next().is(":visible")) {
+ elem = $(elem).next();
+ }
+ if (!$(elem).next().find('#tree-column').hasClass("oe_export_readonlyfield")) {
+ $(elem).next().addClass("ui-selected");
+ }
+ $(elem).next().find('a').focus();
+ break;
+ }
+ });
+ self.$element.find("tr[id='treerow-" + record.id + "']").dblclick(function() {
+ var $o2m_selection = self.$element.find("tr[id^='treerow-" + record.id + "']").find('#tree-column');
+ if (!$o2m_selection.hasClass("oe_export_readonlyfield")) {
+ self.add_field(record.id, $(this).find("a").attr("string"));
+ }
+ });
+ });
+ self.$element.find('#fields_list').mouseover(function(event) {
+ if (event.relatedTarget) {
+ if (event.relatedTarget.attributes['id'] && event.relatedTarget.attributes['string']) {
+ var field_id = event.relatedTarget.attributes["id"]["value"];
+ if (field_id && field_id.split("-")[0] === 'export') {
+ if (!self.$element.find("tr[id='treerow-" + field_id.split("-")[1] + "']").find('#tree-column').hasClass("oe_export_readonlyfield")) {
+ self.add_field(field_id.split("-")[1], event.relatedTarget.attributes["string"]["value"]);
+ }
+ }
+ }
+ }
+ });
+ },
+ showcontent: function(id) {
+ // show & hide the contents
+ var $this = this.$element.find("tr[id='treerow-" + id + "']");
+ var is_open = $this.hasClass('open');
+ $this.toggleClass('open');
+
+ var first_child = $this.find('img');
+ if (is_open) {
+ first_child.attr('src', '/web/static/src/img/expand.gif');
+ } else {
+ first_child.attr('src', '/web/static/src/img/collapse.gif');
+ }
+ var child_field = this.$element.find("tr[id^='treerow-" + id +"/']");
+ var child_len = (id.split("/")).length + 1;
+ for (var i = 0; i < child_field.length; i++) {
+ var $child = $(child_field[i]);
+ if (is_open) {
+ $child.hide();
+ } else if (child_len == (child_field[i].id.split("/")).length) {
+ if ($child.hasClass('open')) {
+ $child.removeClass('open');
+ $child.find('img').attr('src', '/web/static/src/img/expand.gif');
+ }
+ $child.show();
+ }
+ }
+ },
+ add_field: function(field_id, string) {
+ var field_list = this.$element.find('#fields_list');
+ if (this.$element.find("#fields_list option[value='" + field_id + "']")
+ && !this.$element.find("#fields_list option[value='" + field_id + "']").length) {
+ field_list.append(new Option(string, field_id));
+ }
+ },
+ get_fields: function() {
+ var export_field = [];
+ this.$element.find("#fields_list option").each(function() {
+ export_field.push($(this).val());
+ });
+ if (!export_field.length) {
+ alert('Please select fields to save export list...');
+ }
+ return export_field;
+ },
+ on_click_export_data: function() {
+ $.blockUI(this.$element);
+ var exported_fields = [], self = this;
+ this.$element.find("#fields_list option").each(function() {
+ var fieldname = self.records[$(this).val()];
+ exported_fields.push({name: fieldname, label: $(this).text()});
+ });
+ if (_.isEmpty(exported_fields)) {
+ alert('Please select fields to export...');
+ return;
+ }
+
+ exported_fields.unshift({name: 'id', label: 'External ID'});
+ var export_format = this.$element.find("#export_format").val();
+ this.session.get_file({
+ url: '/web/export/' + export_format,
+ data: {data: JSON.stringify({
+ model: this.dataset.model,
+ fields: exported_fields,
+ ids: this.dataset.ids,
+ domain: this.dataset.domain,
+ import_compat: Boolean(
+ this.$element.find("#import_compat").val())
+ })},
+ complete: $.unblockUI
+ });
+ },
+ close: function() {
+ $(this.$dialog).remove();
+ this._super();
+ }
+});
+
+};
diff --git a/addons/base/static/src/js/dates.js b/addons/web/static/src/js/dates.js
index 71fdb759a63..036cf8cd90b 100644
--- a/addons/base/static/src/js/dates.js
+++ b/addons/web/static/src/js/dates.js
@@ -1,5 +1,5 @@
-openerp.base.dates = function(openerp) {
+openerp.web.dates = function(openerp) {
/**
* Converts a string to a Date javascript object using OpenERP's
@@ -11,7 +11,7 @@ openerp.base.dates = function(openerp) {
* @param {String} str A string representing a datetime.
* @returns {Date}
*/
-openerp.base.str_to_datetime = function(str) {
+openerp.web.str_to_datetime = function(str) {
if(!str) {
return str;
}
@@ -34,7 +34,7 @@ openerp.base.str_to_datetime = function(str) {
* @param {String} str A string representing a date.
* @returns {Date}
*/
-openerp.base.str_to_date = function(str) {
+openerp.web.str_to_date = function(str) {
if(!str) {
return str;
}
@@ -57,7 +57,7 @@ openerp.base.str_to_date = function(str) {
* @param {String} str A string representing a time.
* @returns {Date}
*/
-openerp.base.str_to_time = function(str) {
+openerp.web.str_to_time = function(str) {
if(!str) {
return str;
}
@@ -96,7 +96,7 @@ var zpad = function(str, size) {
* @param {Date} obj
* @returns {String} A string representing a datetime.
*/
-openerp.base.datetime_to_str = function(obj) {
+openerp.web.datetime_to_str = function(obj) {
if (!obj) {
return false;
}
@@ -112,7 +112,7 @@ openerp.base.datetime_to_str = function(obj) {
* @param {Date} obj
* @returns {String} A string representing a date.
*/
-openerp.base.date_to_str = function(obj) {
+openerp.web.date_to_str = function(obj) {
if (!obj) {
return false;
}
@@ -127,7 +127,7 @@ openerp.base.date_to_str = function(obj) {
* @param {Date} obj
* @returns {String} A string representing a time.
*/
-openerp.base.time_to_str = function(obj) {
+openerp.web.time_to_str = function(obj) {
if (!obj) {
return false;
}
diff --git a/addons/base/static/src/js/form.js b/addons/web/static/src/js/form.js
index 2a3c8ab476e..c4540d591a2 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/web/static/src/js/form.js
@@ -1,9 +1,10 @@
-openerp.base.form = function (openerp) {
+openerp.web.form = function (openerp) {
-var _t = openerp.base._t;
+var _t = openerp.web._t;
+var QWeb = openerp.web.qweb;
-openerp.base.views.add('form', 'openerp.base.FormView');
-openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormView# */{
+openerp.web.views.add('form', 'openerp.web.FormView');
+openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# */{
/**
* Indicates that this view is not searchable, and thus that no search
* view should be displayed (if there is one active).
@@ -11,13 +12,15 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
searchable: false,
template: "FormView",
/**
- * @constructs
- * @param {openerp.base.Session} session the current openerp session
+ * @constructs openerp.web.FormView
+ * @extends openerp.web.View
+ *
+ * @param {openerp.web.Session} session the current openerp session
* @param {String} element_id this view's root element id
- * @param {openerp.base.DataSet} dataset the dataset this view will work with
+ * @param {openerp.web.DataSet} dataset the dataset this view will work with
* @param {String} view_id the identifier of the OpenERP view object
*
- * @property {openerp.base.Registry} registry=openerp.base.form.widgets widgets registry for this form view instance
+ * @property {openerp.web.Registry} registry=openerp.web.form.widgets widgets registry for this form view instance
*/
init: function(parent, element_id, dataset, view_id, options) {
this._super(parent, element_id);
@@ -35,23 +38,27 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
this.dirty = false;
this.default_focus_field = null;
this.default_focus_button = null;
- this.registry = openerp.base.form.widgets;
+ this.registry = openerp.web.form.widgets;
this.has_been_loaded = $.Deferred();
this.$form_header = null;
this.translatable_fields = [];
_.defaults(this.options, {"always_show_new_button": true});
},
start: function() {
- //this.log('Starting FormView '+this.model+this.view_id)
if (this.embedded_view) {
var def = $.Deferred().then(this.on_loaded);
var self = this;
- setTimeout(function() {def.resolve({fields_view: self.embedded_view});}, 0);
+ setTimeout(function() {def.resolve(self.embedded_view);}, 0);
return def.promise();
} else {
- var context = new openerp.base.CompoundContext(this.dataset.get_context());
- return this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id,
- toolbar: this.options.sidebar, context: context}, this.on_loaded);
+ var context = new openerp.web.CompoundContext(this.dataset.get_context());
+ return this.rpc("/web/view/load", {
+ "model": this.model,
+ "view_id": this.view_id,
+ "view_type": "form",
+ toolbar: this.options.sidebar,
+ context: context
+ }, this.on_loaded);
}
},
stop: function() {
@@ -65,7 +72,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
},
on_loaded: function(data) {
var self = this;
- this.fields_view = data.fields_view;
+ this.fields_view = data;
var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch);
this.$element.html(QWeb.render(this.template, { 'frame': frame, 'view': this }));
@@ -85,16 +92,16 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
if (this.session.debug) {
this.$form_header.find('button.oe_get_xml_view').click(function() {
- $('<xmp>' + openerp.base.json_node_to_xml(self.fields_view.arch, true) + '</xmp>').dialog({ width: '95%', height: 600});
+ $('<xmp>' + openerp.web.json_node_to_xml(self.fields_view.arch, true) + '</xmp>').dialog({ width: '95%', height: 600});
});
}
if (this.options.sidebar && this.options.sidebar_id) {
- this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id);
+ this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
this.sidebar.start();
this.sidebar.do_unfold();
- this.sidebar.attachments = new openerp.base.form.SidebarAttachments(this.sidebar, this.sidebar.add_section('attachments', "Attachments"), this);
- this.sidebar.add_toolbar(data.fields_view.toolbar);
+ this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this.sidebar.add_section('attachments', "Attachments"), this);
+ this.sidebar.add_toolbar(this.fields_view.toolbar);
this.set_common_sidebar_sections(this.sidebar);
}
this.has_been_loaded.resolve();
@@ -214,7 +221,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
var ctx = widget.build_context ? widget.build_context() : {};
return ctx;
}
- }
+ };
var parent_fields = null;
_.each(call[2].split(','), function(a, i) {
var field = _.trim(a);
@@ -242,7 +249,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
"' for onchange '" + onchange + "'";
});
var ajax = {
- url: '/base/dataset/call',
+ url: '/web/dataset/call',
async: false
};
return this.rpc(ajax, {
@@ -254,7 +261,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
self.on_processed_onchange(response, processed);
});
} else {
- this.log("Wrong on_change format", on_change);
+ console.log("Wrong on_change format", on_change);
}
}
},
@@ -289,7 +296,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
});
}
if (result.domain) {
- // TODO:
+ // TODO:
}
this.ready = true;
},
@@ -339,7 +346,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
this.on_invalid();
return false;
} else if (form_dirty) {
- this.log("About to save", values);
+ console.log("About to save", values);
if (!this.datarecord.id) {
return this.dataset.create(values, function(r) {
self.on_created(r, success, prepend_on_create);
@@ -376,9 +383,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
},
on_saved: function(r, success) {
if (!r.result) {
- this.notification.warn("Record not saved", "Problem while saving record.");
+ // should not happen in the server, but may happen for internal purpose
} else {
- this.notification.notify("Record saved", "The record #" + this.datarecord.id + " has been saved.");
+ console.debug(_.sprintf("The record #%s has been saved.", this.datarecord.id));
if (success) {
success(r);
}
@@ -400,7 +407,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
*/
on_created: function(r, success, prepend_on_create) {
if (!r.result) {
- this.notification.warn("Record not created", "Problem while creating record.");
+ // should not happen in the server, but may happen for internal purpose
} else {
this.datarecord.id = r.result;
if (!prepend_on_create) {
@@ -414,7 +421,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
if (this.sidebar) {
this.sidebar.attachments.do_update();
}
- this.notification.notify("Record created", "The record has been created with id #" + this.datarecord.id);
+ console.debug("The record has been created with id #" + this.datarecord.id);
if (success) {
success(_.extend(r, {created: true}));
}
@@ -422,13 +429,13 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
}
},
do_search: function (domains, contexts, groupbys) {
- this.notification.notify("Searching form");
+ console.debug("Searching form");
},
on_action: function (action) {
- this.notification.notify('Executing action ' + action);
+ console.debug('Executing action', action);
},
do_cancel: function () {
- this.notification.notify("Cancelling form");
+ console.debug("Cancelling form");
},
reload: function() {
if (this.dataset.index == null || this.dataset.index < 0) {
@@ -450,11 +457,39 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormVi
return id ? [id] : [];
}
});
+openerp.web.FormDialog = openerp.web.Dialog.extend({
+ init: function(parent, options, view_id, dataset) {
+ this._super(parent, options);
+ this.dataset = dataset;
+ this.view_id = view_id;
+ return this;
+ },
+ start: function() {
+ this._super();
+ this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, {
+ sidebar: false,
+ pager: false
+ });
+ this.form.start();
+ this.form.on_created.add_last(this.on_form_dialog_saved);
+ this.form.on_saved.add_last(this.on_form_dialog_saved);
+ return this;
+ },
+ load_id: function(id) {
+ var self = this;
+ return this.dataset.read_ids([id], _.keys(this.form.fields_view.fields), function(records) {
+ self.form.on_record_loaded(records[0]);
+ });
+ },
+ on_form_dialog_saved: function(r) {
+ this.close();
+ }
+});
/** @namespace */
-openerp.base.form = {};
+openerp.web.form = {};
-openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({
+openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({
init: function(parent, element_id, form_view) {
this._super(parent, element_id);
this.view = form_view;
@@ -463,7 +498,7 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({
if (!this.view.datarecord.id) {
this.on_attachments_loaded([]);
} else {
- (new openerp.base.DataSetSearch(
+ (new openerp.web.DataSetSearch(
this, 'ir.attachment', this.view.dataset.get_context(),
[
['res_model', '=', this.view.dataset.model],
@@ -491,7 +526,7 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({
var self = this, $e = $(e.currentTarget);
var name = _.trim($e.parent().find('a.oe-sidebar-attachments-link').text());
if (confirm("Do you really want to delete the attachment " + name + " ?")) {
- this.rpc('/base/dataset/unlink', {
+ this.rpc('/web/dataset/unlink', {
model: 'ir.attachment',
ids: [parseInt($e.attr('data-id'))]
}, function(r) {
@@ -502,7 +537,7 @@ openerp.base.form.SidebarAttachments = openerp.base.Widget.extend({
}
});
-openerp.base.form.compute_domain = function(expr, fields) {
+openerp.web.form.compute_domain = function(expr, fields) {
var stack = [];
for (var i = expr.length - 1; i >= 0; i--) {
var ex = expr[i];
@@ -559,14 +594,21 @@ openerp.base.form.compute_domain = function(expr, fields) {
stack.push(!_(val).contains(field_value));
break;
default:
- this.log("Unsupported operator in modifiers :", op);
+ console.log("Unsupported operator in modifiers :", op);
}
}
return _.all(stack, _.identity);
};
-openerp.base.form.Widget = openerp.base.Widget.extend({
+openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.Widget# */{
template: 'Widget',
+ /**
+ * @constructs openerp.web.form.Widget
+ * @extends openerp.web.Widget
+ *
+ * @param view
+ * @param node
+ */
init: function(view, node) {
this.view = view;
this.node = node;
@@ -598,7 +640,7 @@ openerp.base.form.Widget = openerp.base.Widget.extend({
}
},
process_modifiers: function() {
- var compute_domain = openerp.base.form.compute_domain;
+ var compute_domain = openerp.web.form.compute_domain;
for (var a in this.modifiers) {
this[a] = compute_domain(this.modifiers[a], this.view.fields);
}
@@ -612,7 +654,7 @@ openerp.base.form.Widget = openerp.base.Widget.extend({
}
});
-openerp.base.form.WidgetFrame = openerp.base.form.Widget.extend({
+openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({
template: 'WidgetFrame',
init: function(view, node) {
this._super(view, node);
@@ -691,7 +733,7 @@ openerp.base.form.WidgetFrame = openerp.base.form.Widget.extend({
}
});
-openerp.base.form.WidgetNotebook = openerp.base.form.Widget.extend({
+openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
template: 'WidgetNotebook',
init: function(view, node) {
this._super(view, node);
@@ -699,7 +741,7 @@ openerp.base.form.WidgetNotebook = openerp.base.form.Widget.extend({
for (var i = 0; i < node.children.length; i++) {
var n = node.children[i];
if (n.tag == "page") {
- var page = new openerp.base.form.WidgetNotebookPage(this.view, n, this, this.pages.length);
+ var page = new openerp.web.form.WidgetNotebookPage(this.view, n, this, this.pages.length);
this.pages.push(page);
}
}
@@ -720,7 +762,7 @@ openerp.base.form.WidgetNotebook = openerp.base.form.Widget.extend({
}
});
-openerp.base.form.WidgetNotebookPage = openerp.base.form.WidgetFrame.extend({
+openerp.web.form.WidgetNotebookPage = openerp.web.form.WidgetFrame.extend({
template: 'WidgetNotebookPage',
init: function(view, node, notebook, index) {
this.notebook = notebook;
@@ -742,7 +784,7 @@ openerp.base.form.WidgetNotebookPage = openerp.base.form.WidgetFrame.extend({
}
});
-openerp.base.form.WidgetSeparator = openerp.base.form.Widget.extend({
+openerp.web.form.WidgetSeparator = openerp.web.form.Widget.extend({
init: function(view, node) {
this._super(view, node);
this.template = "WidgetSeparator";
@@ -754,7 +796,7 @@ openerp.base.form.WidgetSeparator = openerp.base.form.Widget.extend({
}
});
-openerp.base.form.WidgetButton = openerp.base.form.Widget.extend({
+openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
init: function(view, node) {
this._super(view, node);
this.template = "WidgetButton";
@@ -807,7 +849,7 @@ openerp.base.form.WidgetButton = openerp.base.form.Widget.extend({
}
});
-openerp.base.form.WidgetLabel = openerp.base.form.Widget.extend({
+openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({
init: function(view, node) {
this.element_name = 'label_' + node.attrs.name;
@@ -837,13 +879,20 @@ openerp.base.form.WidgetLabel = openerp.base.form.Widget.extend({
var self = this;
this.$element.find("label").dblclick(function() {
var widget = self['for'] || self;
- self.log(widget.element_id , widget);
+ console.log(widget.element_id , widget);
window.w = widget;
});
}
});
-openerp.base.form.Field = openerp.base.form.Widget.extend({
+openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.form.Field# */{
+ /**
+ * @constructs openerp.web.form.Field
+ * @extends openerp.web.form.Widget
+ *
+ * @param view
+ * @param node
+ */
init: function(view, node) {
this.name = node.attrs.name;
this.value = undefined;
@@ -947,7 +996,7 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({
// maybe the default_get should only be used when we do a default_get?
var v_context1 = this.node.attrs.default_get || {};
var v_context2 = this.node.attrs.context || {};
- var v_context = new openerp.base.CompoundContext(v_context1, v_context2);
+ var v_context = new openerp.web.CompoundContext(v_context1, v_context2);
if (v_context1.__ref || v_context2.__ref || true) { //TODO niv: remove || true
var fields_values = this._build_view_fields_values();
v_context.set_eval_context(fields_values);
@@ -961,14 +1010,14 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({
var v_domain = this.node.attrs.domain || [];
if (!(v_domain instanceof Array) || true) { //TODO niv: remove || true
var fields_values = this._build_view_fields_values();
- v_domain = new openerp.base.CompoundDomain(v_domain).set_eval_context(fields_values);
+ v_domain = new openerp.web.CompoundDomain(v_domain).set_eval_context(fields_values);
}
// if there is a domain on the node, overrides the model's domain
return f_domain || v_domain;
}
});
-openerp.base.form.FieldChar = openerp.base.form.Field.extend({
+openerp.web.form.FieldChar = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldChar";
@@ -979,7 +1028,7 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({
},
set_value: function(value) {
this._super.apply(this, arguments);
- var show_value = openerp.base.format_value(value, this, '');
+ var show_value = openerp.web.format_value(value, this, '');
this.$element.find('input').val(show_value);
},
update_dom: function() {
@@ -987,13 +1036,13 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({
this.$element.find('input').attr('disabled', this.readonly);
},
set_value_from_ui: function() {
- this.value = openerp.base.parse_value(this.$element.find('input').val(), this);
+ this.value = openerp.web.parse_value(this.$element.find('input').val(), this);
this._super();
},
validate: function() {
this.invalid = false;
try {
- var value = openerp.base.parse_value(this.$element.find('input').val(), this, '');
+ var value = openerp.web.parse_value(this.$element.find('input').val(), this, '');
this.invalid = this.required && value === '';
} catch(e) {
this.invalid = true;
@@ -1004,7 +1053,7 @@ openerp.base.form.FieldChar = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldEmail = openerp.base.form.FieldChar.extend({
+openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldEmail";
@@ -1026,7 +1075,7 @@ openerp.base.form.FieldEmail = openerp.base.form.FieldChar.extend({
}
});
-openerp.base.form.FieldUrl = openerp.base.form.FieldChar.extend({
+openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldUrl";
@@ -1044,7 +1093,7 @@ openerp.base.form.FieldUrl = openerp.base.form.FieldChar.extend({
}
});
-openerp.base.form.FieldFloat = openerp.base.form.FieldChar.extend({
+openerp.web.form.FieldFloat = openerp.web.form.FieldChar.extend({
set_value: function(value) {
if (value === false || value === undefined) {
// As in GTK client, floats default to 0
@@ -1055,7 +1104,7 @@ openerp.base.form.FieldFloat = openerp.base.form.FieldChar.extend({
}
});
-openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({
+openerp.web.form.FieldDatetime = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldDate";
@@ -1067,7 +1116,7 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({
dateFormat: 'yy-mm-dd',
timeFormat: 'hh:mm:ss',
showOn: 'button',
- buttonImage: '/base/static/src/img/ui/field_calendar.png',
+ buttonImage: '/web/static/src/img/ui/field_calendar.png',
buttonImageOnly: true,
constrainInput: false
});
@@ -1106,20 +1155,20 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({
focus: function() {
this.$element.find('input').focus();
},
- parse: openerp.base.auto_str_to_date,
+ parse: openerp.web.auto_str_to_date,
format: function(val) {
- return openerp.base.auto_date_to_str(val, this.field.type);
+ return openerp.web.auto_date_to_str(val, this.field.type);
}
});
-openerp.base.form.FieldDate = openerp.base.form.FieldDatetime.extend({
+openerp.web.form.FieldDate = openerp.web.form.FieldDatetime.extend({
init: function(view, node) {
this._super(view, node);
this.jqueryui_object = 'datepicker';
}
});
-openerp.base.form.FieldText = openerp.base.form.Field.extend({
+openerp.web.form.FieldText = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldText";
@@ -1130,7 +1179,7 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({
},
set_value: function(value) {
this._super.apply(this, arguments);
- var show_value = openerp.base.format_value(value, this, '');
+ var show_value = openerp.web.format_value(value, this, '');
this.$element.find('textarea').val(show_value);
},
update_dom: function() {
@@ -1138,13 +1187,13 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({
this.$element.find('textarea').attr('disabled', this.readonly);
},
set_value_from_ui: function() {
- this.value = openerp.base.parse_value(this.$element.find('textarea').val(), this);
+ this.value = openerp.web.parse_value(this.$element.find('textarea').val(), this);
this._super();
},
validate: function() {
this.invalid = false;
try {
- var value = openerp.base.parse_value(this.$element.find('textarea').val(), this, '');
+ var value = openerp.web.parse_value(this.$element.find('textarea').val(), this, '');
this.invalid = this.required && value === '';
} catch(e) {
this.invalid = true;
@@ -1155,7 +1204,7 @@ openerp.base.form.FieldText = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldBoolean = openerp.base.form.Field.extend({
+openerp.web.form.FieldBoolean = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldBoolean";
@@ -1189,7 +1238,7 @@ openerp.base.form.FieldBoolean = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldProgressBar = openerp.base.form.Field.extend({
+openerp.web.form.FieldProgressBar = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldProgressBar";
@@ -1211,17 +1260,22 @@ openerp.base.form.FieldProgressBar = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldTextXml = openerp.base.form.Field.extend({
+openerp.web.form.FieldTextXml = openerp.web.form.Field.extend({
// to replace view editor
});
-openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
+openerp.web.form.FieldSelection = openerp.web.form.Field.extend({
init: function(view, node) {
+ var self = this;
this._super(view, node);
this.template = "FieldSelection";
- this.field_index = _.map(this.field.selection, function(x, index) {
- return {"ikey": "" + index, "ekey": x[0], "label": x[1]};
+ this.values = this.field.selection;
+ _.each(this.values, function(v, i) {
+ if (v[0] === false && v[1] === '') {
+ self.values.splice(i, 1);
+ }
});
+ this.values.unshift([false, '']);
},
start: function() {
// Flag indicating whether we're in an event chain containing a change
@@ -1251,13 +1305,14 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
value = value === null ? false : value;
value = value instanceof Array ? value[0] : value;
this._super(value);
- var option = _.detect(this.field_index, function(x) {return x.ekey === value;});
- this.$element.find('select').val(option === undefined ? '' : option.ikey);
+ var index = 0;
+ for (var i = 0, ii = this.values.length; i < ii; i++) {
+ if (this.values[i][0] === value) index = i;
+ }
+ this.$element.find('select')[0].selectedIndex = index;
},
set_value_from_ui: function() {
- var ikey = this.$element.find('select').val();
- var option = _.detect(this.field_index, function(x) {return x.ikey === ikey;});
- this.value = option === undefined ? false : option.ekey;
+ this.value = this.values[this.$element.find('select')[0].selectedIndex][0];
this._super();
},
update_dom: function() {
@@ -1265,9 +1320,8 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
this.$element.find('select').attr('disabled', this.readonly);
},
validate: function() {
- var ikey = this.$element.find('select').val();
- var option = _.detect(this.field_index, function(x) {return x.ikey === ikey;});
- this.invalid = this.required && (option === undefined || option.ekey === false);
+ var value = this.values[this.$element.find('select')[0].selectedIndex];
+ this.invalid = !(value && !(this.required && value[0] === false));
},
focus: function() {
this.$element.find('select').focus();
@@ -1306,7 +1360,7 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({
});
})();
-openerp.base.form.dialog = function(content, options) {
+openerp.web.form.dialog = function(content, options) {
options = _.extend({
autoOpen: true,
width: '90%',
@@ -1315,12 +1369,12 @@ openerp.base.form.dialog = function(content, options) {
min_height: '600px'
}, options || {});
options.autoOpen = true;
- var dialog = new openerp.base.Dialog(null, options);
+ var dialog = new openerp.web.Dialog(null, options);
dialog.$dialog = $(content).dialog(dialog.dialog_options);
return dialog.$dialog;
-}
+};
-openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
+openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldMany2One";
@@ -1339,7 +1393,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
// context menu
var init_context_menu_def = $.Deferred().then(function(e) {
- var rdataset = new openerp.base.DataSetStatic(self, "ir.values", self.build_context());
+ var rdataset = new openerp.web.DataSetStatic(self, "ir.values", self.build_context());
rdataset.call("get", ['action', 'client_action_relate',
[[self.field.relation, false]], false, rdataset.get_context()], false, 0)
.then(function(result) {
@@ -1358,7 +1412,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
if (!self.value) {
return;
}
- var pop = new openerp.base.form.FormOpenPopup(self.view);
+ var pop = new openerp.web.form.FormOpenPopup(self.view);
pop.show_element(self.field.relation, self.value[0],self.build_context(), {});
pop.on_write_completed.add_last(function() {
self.set_value(self.value[0]);
@@ -1411,13 +1465,13 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
if (!self.$input.is(":focus") &&
!self.$input.autocomplete("widget").is(":visible") &&
!self.value) {
- if(self.value === undefined && self.last_search.length > 0) {
+ if (self.value === undefined && self.last_search.length > 0) {
self._change_int_ext_value(self.last_search[0]);
} else {
self._change_int_ext_value(null);
}
}
- }
+ };
this.$input.focusout(anyoneLoosesFocus);
var isSelecting = false;
@@ -1457,7 +1511,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var search_val = request.term;
var self = this;
- var dataset = new openerp.base.DataSetStatic(this, this.field.relation, self.build_context());
+ var dataset = new openerp.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_search(search_val, self.build_domain(), 'ilike',
this.limit + 1, function(data) {
@@ -1479,7 +1533,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
}});
}
// quick create
- var raw_result = _(data.result).map(function(x) {return x[1];})
+ var raw_result = _(data.result).map(function(x) {return x[1];});
if (search_val.length > 0 &&
!_.include(raw_result, search_val) &&
(!self.value || search_val !== self.value[1])) {
@@ -1499,7 +1553,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
},
_quick_create: function(name) {
var self = this;
- var dataset = new openerp.base.DataSetStatic(this, this.field.relation, self.build_context());
+ var dataset = new openerp.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_create(name, function(data) {
self._change_int_ext_value(data);
}).fail(function(error, event) {
@@ -1511,15 +1565,15 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
// all search/create popup handling
_search_create_popup: function(view, ids, context) {
var self = this;
- var pop = new openerp.base.form.SelectCreatePopup(this);
+ var pop = new openerp.web.form.SelectCreatePopup(this);
pop.select_element(self.field.relation,{
initial_ids: ids ? _.map(ids, function(x) {return x[0]}) : undefined,
initial_view: view,
disable_multiple_selection: true
}, self.build_domain(),
- new openerp.base.CompoundContext(self.build_context(), context || {}));
+ new openerp.web.CompoundContext(self.build_context(), context || {}));
pop.on_select_elements.add(function(element_ids) {
- var dataset = new openerp.base.DataSetStatic(self, self.field.relation, self.build_context());
+ var dataset = new openerp.web.DataSetStatic(self, self.field.relation, self.build_context());
dataset.name_get([element_ids[0]], function(data) {
self._change_int_ext_value(data[0]);
});
@@ -1557,7 +1611,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
self._change_int_ext_value(rval);
};
if(typeof(value) === "number") {
- var dataset = new openerp.base.DataSetStatic(this, this.field.relation, self.build_context());
+ var dataset = new openerp.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_get([value], function(data) {
real_set_value(data[0]);
}).fail(function() {self.tmp_value = undefined;});
@@ -1592,7 +1646,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
active_ids: [self.value[0]],
active_model: self.field.relation
};
- self.rpc("/base/action/load", {
+ self.rpc("/web/action/load", {
action_id: related[2].id,
context: additional_context
}, function(result) {
@@ -1647,7 +1701,7 @@ var commands = {
return [6, false, ids];
}
};
-openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
+openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
multi_selection: false,
init: function(view, node) {
this._super(view, node);
@@ -1661,7 +1715,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
var self = this;
- this.dataset = new openerp.base.form.One2ManyDataSet(this, this.field.relation);
+ this.dataset = new openerp.web.form.One2ManyDataSet(this, this.field.relation);
this.dataset.o2m = this;
this.dataset.parent_view = this.view;
this.dataset.on_change.add_last(function() {
@@ -1687,10 +1741,10 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
});
this.views = views;
- this.viewmanager = new openerp.base.ViewManager(this, this.dataset, views);
- this.viewmanager.registry = openerp.base.views.clone({
- list: 'openerp.base.form.One2ManyListView',
- form: 'openerp.base.form.One2ManyFormView'
+ this.viewmanager = new openerp.web.ViewManager(this, this.dataset, views);
+ this.viewmanager.registry = openerp.web.views.clone({
+ list: 'openerp.web.form.One2ManyListView',
+ form: 'openerp.web.form.One2ManyFormView'
});
var once = $.Deferred().then(function() {
self.form_last_update.resolve();
@@ -1813,7 +1867,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
this.viewmanager.views[this.viewmanager.active_view].controller) {
var view = this.viewmanager.views[this.viewmanager.active_view].controller;
if (this.viewmanager.active_view === "form") {
- var res = view.do_save();
+ var res = $.when(view.do_save());
if (res === false) {
// ignore
} else if (res.isRejected()) {
@@ -1854,24 +1908,23 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
}
});
-openerp.base.form.One2ManyDataSet = openerp.base.BufferedDataSet.extend({
+openerp.web.form.One2ManyDataSet = openerp.web.BufferedDataSet.extend({
get_context: function() {
this.context = this.o2m.build_context();
return this.context;
}
});
-openerp.base.form.One2ManyFormView = openerp.base.FormView.extend({
-
+openerp.web.form.One2ManyFormView = openerp.web.FormView.extend({
});
-openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
+openerp.web.form.One2ManyListView = openerp.web.ListView.extend({
do_add_record: function () {
if (this.options.editable) {
this._super.apply(this, arguments);
} else {
var self = this;
- var pop = new openerp.base.form.SelectCreatePopup(this);
+ var pop = new openerp.web.form.SelectCreatePopup(this);
pop.select_element(self.o2m.field.relation,{
initial_view: "form",
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
@@ -1890,7 +1943,7 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
},
do_activate_record: function(index, id) {
var self = this;
- var pop = new openerp.base.form.FormOpenPopup(self.o2m.view);
+ var pop = new openerp.web.form.FormOpenPopup(self.o2m.view);
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(),{
auto_write: false,
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
@@ -1907,7 +1960,7 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
}
});
-openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
+openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({
multi_selection: false,
init: function(view, node) {
this._super(view, node);
@@ -1920,13 +1973,13 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
var self = this;
- this.dataset = new openerp.base.form.Many2ManyDataSet(this, this.field.relation);
+ this.dataset = new openerp.web.form.Many2ManyDataSet(this, this.field.relation);
this.dataset.m2m = this;
this.dataset.on_unlink.add_last(function(ids) {
self.on_ui_change();
});
- this.list_view = new openerp.base.form.Many2ManyListView(this, this.list_id, this.dataset, false, {
+ this.list_view = new openerp.web.form.Many2ManyListView(this, this.list_id, this.dataset, false, {
'addable': 'Add',
'selectable': self.multi_selection
});
@@ -1959,18 +2012,22 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
}
});
-openerp.base.form.Many2ManyDataSet = openerp.base.DataSetStatic.extend({
+openerp.web.form.Many2ManyDataSet = openerp.web.DataSetStatic.extend({
get_context: function() {
this.context = this.m2m.build_context();
return this.context;
}
});
-openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
+/**
+ * @class
+ * @extends openerp.web.ListView
+ */
+openerp.web.form.Many2ManyListView = openerp.web.ListView.extend(/** @lends openerp.web.form.Many2ManyListView# */{
do_add_record: function () {
- var pop = new openerp.base.form.SelectCreatePopup(this);
+ var pop = new openerp.web.form.SelectCreatePopup(this);
pop.select_element(this.model, {},
- new openerp.base.CompoundDomain(this.m2m_field.build_domain(), ["!", ["id", "in", this.m2m_field.dataset.ids]]),
+ new openerp.web.CompoundDomain(this.m2m_field.build_domain(), ["!", ["id", "in", this.m2m_field.dataset.ids]]),
this.m2m_field.build_context());
var self = this;
pop.on_select_elements.add(function(element_ids) {
@@ -1985,7 +2042,7 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
},
do_activate_record: function(index, id) {
var self = this;
- var pop = new openerp.base.form.FormOpenPopup(this);
+ var pop = new openerp.web.form.FormOpenPopup(this);
pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), {});
pop.on_write_completed.add_last(function() {
self.reload_content();
@@ -1993,7 +2050,11 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
}
});
-openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
+/**
+ * @class
+ * @extends openerp.web.OldWidget
+ */
+openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends openerp.web.form.SelectCreatePopup# */{
identifier_prefix: "selectcreatepopup",
template: "SelectCreatePopup",
/**
@@ -2015,14 +2076,14 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
}});
this.initial_ids = this.options.initial_ids;
this.created_elements = [];
- openerp.base.form.dialog(this.render(), {close:function() {
+ openerp.web.form.dialog(this.render(), {close:function() {
self.check_exit();
}});
this.start();
},
start: function() {
this._super();
- this.dataset = new openerp.base.ReadOnlyDataSetSearch(this, this.model,
+ this.dataset = new openerp.web.ReadOnlyDataSetSearch(this, this.model,
this.context);
this.dataset.parent_view = this.options.parent_view;
if (this.options.initial_view == "search") {
@@ -2036,7 +2097,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
if (this.searchview) {
this.searchview.stop();
}
- this.searchview = new openerp.base.SearchView(this,
+ this.searchview = new openerp.web.SearchView(this,
this.element_id + "_search", this.dataset, false, {
"selectable": !this.options.disable_multiple_selection,
"deletable": false
@@ -2065,7 +2126,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
self.on_select_elements(self.selected_ids);
self.stop();
});
- self.view_list = new openerp.base.form.SelectCreateListView(self,
+ self.view_list = new openerp.web.form.SelectCreateListView(self,
self.element_id + "_view_list", self.dataset, false,
{'deletable': false});
self.view_list.popup = self;
@@ -2078,7 +2139,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
},
create_row: function(data) {
var self = this;
- var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain);
+ var wdataset = new openerp.web.DataSetSearch(this, this.model, this.context, this.domain);
wdataset.parent_view = this.options.parent_view;
return wdataset.create(data);
},
@@ -2101,7 +2162,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
this.view_list.$element.hide();
}
this.dataset.index = null;
- this.view_form = new openerp.base.FormView(this, this.element_id + "_view_form", this.dataset, false);
+ this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false);
if (this.options.alternative_form_view) {
this.view_form.set_embedded_view(this.options.alternative_form_view);
}
@@ -2148,7 +2209,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
}
});
-openerp.base.form.SelectCreateListView = openerp.base.ListView.extend({
+openerp.web.form.SelectCreateListView = openerp.web.ListView.extend({
do_add_record: function () {
this.popup.new_object();
},
@@ -2162,7 +2223,11 @@ openerp.base.form.SelectCreateListView = openerp.base.ListView.extend({
}
});
-openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
+/**
+ * @class
+ * @extends openerp.web.OldWidget
+ */
+openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp.web.form.FormOpenPopup# */{
identifier_prefix: "formopenpopup",
template: "FormOpenPopup",
/**
@@ -2185,7 +2250,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
},
start: function() {
this._super();
- this.dataset = new openerp.base.form.FormOpenDataset(this, this.model, this.context);
+ this.dataset = new openerp.web.form.FormOpenDataset(this, this.model, this.context);
this.dataset.fop = this;
this.dataset.ids = [this.row_id];
this.dataset.index = 0;
@@ -2197,7 +2262,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
if (!this.options.auto_write)
return;
var self = this;
- var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain);
+ var wdataset = new openerp.web.DataSetSearch(this, this.model, this.context, this.domain);
wdataset.parent_view = this.options.parent_view;
wdataset.write(id, data, {}, function(r) {
self.on_write_completed();
@@ -2206,7 +2271,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
on_write_completed: function() {},
setup_form_view: function() {
var self = this;
- this.view_form = new openerp.base.FormView(this, this.element_id + "_view_form", this.dataset, false);
+ this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false);
if (this.options.alternative_form_view) {
this.view_form.set_embedded_view(this.options.alternative_form_view);
}
@@ -2228,7 +2293,7 @@ openerp.base.form.FormOpenPopup = openerp.base.OldWidget.extend({
}
});
-openerp.base.form.FormOpenDataset = openerp.base.ReadOnlyDataSetSearch.extend({
+openerp.web.form.FormOpenDataset = openerp.web.ReadOnlyDataSetSearch.extend({
read_ids: function() {
if (this.fop.options.read_function) {
return this.fop.options.read_function.apply(null, arguments);
@@ -2238,7 +2303,7 @@ openerp.base.form.FormOpenDataset = openerp.base.ReadOnlyDataSetSearch.extend({
}
});
-openerp.base.form.FieldReference = openerp.base.form.Field.extend({
+openerp.web.form.FieldReference = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldReference";
@@ -2251,17 +2316,17 @@ openerp.base.form.FieldReference = openerp.base.form.Field.extend({
relation: null
}
}
- }
+ };
this.get_fields_values = view.get_fields_values;
this.do_onchange = this.on_form_changed = this.on_nop;
this.widgets = {};
this.fields = {};
- this.selection = new openerp.base.form.FieldSelection(this, { attrs: {
+ this.selection = new openerp.web.form.FieldSelection(this, { attrs: {
name: 'selection',
widget: 'selection'
}});
this.selection.on_value_changed.add_last(this.on_selection_changed);
- this.m2o = new openerp.base.form.FieldMany2One(this, { attrs: {
+ this.m2o = new openerp.web.form.FieldMany2One(this, { attrs: {
name: 'm2o',
widget: 'many2one'
}});
@@ -2302,7 +2367,7 @@ openerp.base.form.FieldReference = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
+openerp.web.form.FieldBinary = openerp.web.form.Field.extend({
init: function(view, node) {
this._super(view, node);
this.iframe = this.element_id + '_iframe';
@@ -2346,7 +2411,7 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
if (size === false) {
this.notification.warn("File Upload", "There was a problem while uploading your file");
// TODO: use openerp web crashmanager
- this.log("Error while uploading file : ", name);
+ console.warn("Error while uploading file : ", name);
} else {
this.on_file_uploaded_and_valid.apply(this, arguments);
this.on_ui_change();
@@ -2359,9 +2424,9 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
if (!this.view.datarecord.id) {
this.notification.warn("Can't save file", "The record has not yet been saved");
} else {
- var url = '/base/binary/saveas?session_id=' + this.session.session_id + '&model=' +
+ var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' +
this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name +
- '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime())
+ '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime());
window.open(url);
}
},
@@ -2375,7 +2440,7 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
}
});
-openerp.base.form.FieldBinaryFile = openerp.base.form.FieldBinary.extend({
+openerp.web.form.FieldBinaryFile = openerp.web.form.FieldBinary.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldBinaryFile";
@@ -2406,7 +2471,7 @@ openerp.base.form.FieldBinaryFile = openerp.base.form.FieldBinary.extend({
}
});
-openerp.base.form.FieldBinaryImage = openerp.base.form.FieldBinary.extend({
+openerp.web.form.FieldBinaryImage = openerp.web.form.FieldBinary.extend({
init: function(view, node) {
this._super(view, node);
this.template = "FieldBinaryImage";
@@ -2418,8 +2483,8 @@ openerp.base.form.FieldBinaryImage = openerp.base.form.FieldBinary.extend({
set_value: function(value) {
this._super.apply(this, arguments);
this.set_image_maxwidth();
- var url = '/base/binary/image?session_id=' + this.session.session_id + '&model=' +
- this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + '&t=' + (new Date().getTime())
+ var url = '/web/binary/image?session_id=' + this.session.session_id + '&model=' +
+ this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + '&t=' + (new Date().getTime());
this.$image.attr('src', url);
},
set_image_maxwidth: function() {
@@ -2436,40 +2501,86 @@ openerp.base.form.FieldBinaryImage = openerp.base.form.FieldBinary.extend({
},
on_clear: function() {
this._super.apply(this, arguments);
- this.$image.attr('src', '/base/static/src/img/placeholder.png');
+ this.$image.attr('src', '/web/static/src/img/placeholder.png');
+ }
+});
+
+openerp.web.form.FieldStatus = openerp.web.form.Field.extend({
+ template: "FieldStatus",
+ start: function() {
+ this._super();
+ this.selected_value = null;
+
+ this.render_list();
+ },
+ set_value: function(value) {
+ this._super(value);
+ this.selected_value = value;
+
+ this.render_list();
+ },
+ render_list: function() {
+ var self = this;
+ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","),
+ function(x) { return x.trim(); });
+ shown = _.select(shown, function(x) { return x.length > 0; });
+
+ if (shown.length == 0) {
+ this.to_show = this.field.selection;
+ } else {
+ this.to_show = _.select(this.field.selection, function(x) {
+ return _.indexOf(shown, x[0]) !== -1 || x[0] === self.selected_value;
+ });
+ }
+
+ var content = openerp.web.qweb.render("FieldStatus.content", {widget: this, _:_});
+ this.$element.html(content);
+
+ var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}");
+ var color = colors[this.selected_value];
+ if (color) {
+ var elem = this.$element.find("li.oe-arrow-list-selected span");
+ elem.css("border-color", color);
+ elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-before");
+ elem.css("border-left-color", "rgba(0,0,0,0)");
+ elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-after");
+ elem.css("border-color", "rgba(0,0,0,0)");
+ elem.css("border-left-color", color);
+ }
}
});
/**
- * Registry of form widgets, called by :js:`openerp.base.FormView`
+ * Registry of form widgets, called by :js:`openerp.web.FormView`
*/
-openerp.base.form.widgets = new openerp.base.Registry({
- 'frame' : 'openerp.base.form.WidgetFrame',
- 'group' : 'openerp.base.form.WidgetFrame',
- 'notebook' : 'openerp.base.form.WidgetNotebook',
- 'separator' : 'openerp.base.form.WidgetSeparator',
- 'label' : 'openerp.base.form.WidgetLabel',
- 'button' : 'openerp.base.form.WidgetButton',
- 'char' : 'openerp.base.form.FieldChar',
- 'email' : 'openerp.base.form.FieldEmail',
- 'url' : 'openerp.base.form.FieldUrl',
- 'text' : 'openerp.base.form.FieldText',
- 'text_wiki' : 'openerp.base.form.FieldText',
- 'date' : 'openerp.base.form.FieldDate',
- 'datetime' : 'openerp.base.form.FieldDatetime',
- 'selection' : 'openerp.base.form.FieldSelection',
- 'many2one' : 'openerp.base.form.FieldMany2One',
- 'many2many' : 'openerp.base.form.FieldMany2Many',
- 'one2many' : 'openerp.base.form.FieldOne2Many',
- 'one2many_list' : 'openerp.base.form.FieldOne2Many',
- 'reference' : 'openerp.base.form.FieldReference',
- 'boolean' : 'openerp.base.form.FieldBoolean',
- 'float' : 'openerp.base.form.FieldFloat',
- 'integer': 'openerp.base.form.FieldFloat',
- 'float_time': 'openerp.base.form.FieldFloat',
- 'progressbar': 'openerp.base.form.FieldProgressBar',
- 'image': 'openerp.base.form.FieldBinaryImage',
- 'binary': 'openerp.base.form.FieldBinaryFile'
+openerp.web.form.widgets = new openerp.web.Registry({
+ 'frame' : 'openerp.web.form.WidgetFrame',
+ 'group' : 'openerp.web.form.WidgetFrame',
+ 'notebook' : 'openerp.web.form.WidgetNotebook',
+ 'separator' : 'openerp.web.form.WidgetSeparator',
+ 'label' : 'openerp.web.form.WidgetLabel',
+ 'button' : 'openerp.web.form.WidgetButton',
+ 'char' : 'openerp.web.form.FieldChar',
+ 'email' : 'openerp.web.form.FieldEmail',
+ 'url' : 'openerp.web.form.FieldUrl',
+ 'text' : 'openerp.web.form.FieldText',
+ 'text_wiki' : 'openerp.web.form.FieldText',
+ 'date' : 'openerp.web.form.FieldDate',
+ 'datetime' : 'openerp.web.form.FieldDatetime',
+ 'selection' : 'openerp.web.form.FieldSelection',
+ 'many2one' : 'openerp.web.form.FieldMany2One',
+ 'many2many' : 'openerp.web.form.FieldMany2Many',
+ 'one2many' : 'openerp.web.form.FieldOne2Many',
+ 'one2many_list' : 'openerp.web.form.FieldOne2Many',
+ 'reference' : 'openerp.web.form.FieldReference',
+ 'boolean' : 'openerp.web.form.FieldBoolean',
+ 'float' : 'openerp.web.form.FieldFloat',
+ 'integer': 'openerp.web.form.FieldFloat',
+ 'float_time': 'openerp.web.form.FieldFloat',
+ 'progressbar': 'openerp.web.form.FieldProgressBar',
+ 'image': 'openerp.web.form.FieldBinaryImage',
+ 'binary': 'openerp.web.form.FieldBinaryFile',
+ 'statusbar': 'openerp.web.form.FieldStatus'
});
};
diff --git a/addons/base/static/src/js/formats.js b/addons/web/static/src/js/formats.js
index 625868eee75..b0dc4fcc289 100644
--- a/addons/base/static/src/js/formats.js
+++ b/addons/web/static/src/js/formats.js
@@ -1,5 +1,5 @@
-openerp.base.formats = function(openerp) {
+openerp.web.formats = function(openerp) {
/**
* Formats a single atomic value based on a field descriptor
@@ -11,7 +11,7 @@ openerp.base.formats = function(openerp) {
* @param {Object} [descriptor.digits] used for the formatting of floats
* @param {String} [value_if_empty=''] returned if the ``value`` argument is considered empty
*/
-openerp.base.format_value = function (value, descriptor, value_if_empty) {
+openerp.web.format_value = function (value, descriptor, value_if_empty) {
// If NaN value, display as with a `false` (empty cell)
if (typeof value === 'number' && isNaN(value)) {
value = false;
@@ -31,7 +31,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) {
var dec_part = Math.abs(Math.floor((value % 1) * Math.pow(10, precision)));
return _.sprintf('%d%s%d',
int_part,
- openerp.base._t.database.parameters.decimal_point, dec_part);
+ openerp.web._t.database.parameters.decimal_point, dec_part);
case 'float_time':
return _.sprintf("%02d:%02d",
Math.floor(value),
@@ -45,7 +45,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) {
return value[1];
case 'datetime':
if (typeof(value) == "string")
- value = openerp.base.auto_str_to_date(value);
+ value = openerp.web.auto_str_to_date(value);
try {
return value.toString(_.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate,
Date.CultureInfo.formatPatterns.longTime));
@@ -55,7 +55,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) {
return value;
case 'date':
if (typeof(value) == "string")
- value = openerp.base.auto_str_to_date(value);
+ value = openerp.web.auto_str_to_date(value);
try {
return value.toString(Date.CultureInfo.formatPatterns.shortDate);
} catch (e) {
@@ -63,7 +63,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) {
}
case 'time':
if (typeof(value) == "string")
- value = openerp.base.auto_str_to_date(value);
+ value = openerp.web.auto_str_to_date(value);
try {
return value.toString(Date.CultureInfo.formatPatterns.longTime);
} catch (e) {
@@ -74,7 +74,7 @@ openerp.base.format_value = function (value, descriptor, value_if_empty) {
}
};
-openerp.base.parse_value = function (value, descriptor, value_if_empty) {
+openerp.web.parse_value = function (value, descriptor, value_if_empty) {
switch (value) {
case false:
case "":
@@ -90,11 +90,11 @@ openerp.base.parse_value = function (value, descriptor, value_if_empty) {
var tmp = Number(value);
if (!isNaN(tmp))
return tmp;
- tmp = value.replace(openerp.base._t.database.parameters.decimal_point, ".");
+ tmp = value.replace(openerp.web._t.database.parameters.decimal_point, ".");
var tmp2 = tmp;
do {
tmp = tmp2;
- tmp2 = tmp.replace(openerp.base._t.database.parameters.thousands_sep, "");
+ tmp2 = tmp.replace(openerp.web._t.database.parameters.thousands_sep, "");
} while(tmp !== tmp2);
tmp = Number(tmp);
if (isNaN(tmp))
@@ -104,11 +104,11 @@ openerp.base.parse_value = function (value, descriptor, value_if_empty) {
var tmp = value.split(":");
if (tmp.length != 2)
throw value + " is not a correct float_time";
- var tmp1 = openerp.base.parse_value(tmp[0], {type: "integer"});
- var tmp2 = openerp.base.parse_value(tmp[1], {type: "integer"});
+ var tmp1 = openerp.web.parse_value(tmp[0], {type: "integer"});
+ var tmp2 = openerp.web.parse_value(tmp[1], {type: "integer"});
return tmp1 + (tmp2 / 60);
case 'progressbar':
- return openerp.base.parse_value(value, {type: "float"});
+ return openerp.web.parse_value(value, {type: "float"});
case 'datetime':
var tmp = Date.parseExact(value, _.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate,
Date.CultureInfo.formatPatterns.longTime));
@@ -138,27 +138,27 @@ openerp.base.parse_value = function (value, descriptor, value_if_empty) {
return value;
};
-openerp.base.auto_str_to_date = function(value, type) {
+openerp.web.auto_str_to_date = function(value, type) {
try {
- return openerp.base.str_to_datetime(value);
+ return openerp.web.str_to_datetime(value);
} catch(e) {}
try {
- return openerp.base.str_to_date(value);
+ return openerp.web.str_to_date(value);
} catch(e) {}
try {
- return openerp.base.str_to_time(value);
+ return openerp.web.str_to_time(value);
} catch(e) {}
throw "'" + value + "' is not a valid date, datetime nor time"
};
-openerp.base.auto_date_to_str = function(value, type) {
+openerp.web.auto_date_to_str = function(value, type) {
switch(type) {
case 'datetime':
- return openerp.base.datetime_to_str(value);
+ return openerp.web.datetime_to_str(value);
case 'date':
- return openerp.base.date_to_str(value);
+ return openerp.web.date_to_str(value);
case 'time':
- return openerp.base.time_to_str(value);
+ return openerp.web.time_to_str(value);
default:
throw type + " is not convertible to date, datetime nor time"
}
@@ -175,13 +175,13 @@ openerp.base.auto_date_to_str = function(value, type) {
* @param {String} [column.icon] button icon
* @param {String} [value_if_empty=''] what to display if the field's value is ``false``
*/
-openerp.base.format_cell = function (row_data, column, value_if_empty) {
+openerp.web.format_cell = function (row_data, column, value_if_empty) {
var attrs = column.modifiers_for(row_data);
if (attrs.invisible) { return ''; }
if (column.tag === 'button') {
return [
'<button type="button" title="', column.string || '', '">',
- '<img src="/base/static/src/img/icons/', column.icon, '.png"',
+ '<img src="/web/static/src/img/icons/', column.icon, '.png"',
' alt="', column.string || '', '"/>',
'</button>'
].join('')
@@ -190,7 +190,7 @@ openerp.base.format_cell = function (row_data, column, value_if_empty) {
if (!row_data[column.id]) {
return value_if_empty === undefined ? '' : value_if_empty;
}
- return openerp.base.format_value(
+ return openerp.web.format_value(
row_data[column.id].value, column, value_if_empty);
}
diff --git a/addons/base/static/src/js/list-editable.js b/addons/web/static/src/js/list-editable.js
index 1cd43fd6ea8..c38c43a4c9c 100644
--- a/addons/base/static/src/js/list-editable.js
+++ b/addons/web/static/src/js/list-editable.js
@@ -1,15 +1,16 @@
/**
- * @namespace handles editability case for lists, because it depends on form and forms already depends on lists it had to be split out
+ * handles editability case for lists, because it depends on form and forms already depends on lists it had to be split out
+ * @namespace
*/
-openerp.base.list_editable = function (openerp) {
+openerp.web.list_editable = function (openerp) {
var KEY_RETURN = 13,
KEY_ESCAPE = 27;
// editability status of list rows
- openerp.base.ListView.prototype.defaults.editable = null;
+ openerp.web.ListView.prototype.defaults.editable = null;
// TODO: not sure second @lends on existing item is correct, to check
- openerp.base.ListView.include(/** @lends openerp.base.ListView# */{
+ openerp.web.ListView.include(/** @lends openerp.web.ListView# */{
init: function () {
var self = this;
this._super.apply(this, arguments);
@@ -34,7 +35,7 @@ openerp.base.list_editable = function (openerp) {
*
* @param {Number} index index of the record in the dataset
* @param {Object} id identifier of the record being edited
- * @param {openerp.base.DataSet} dataset dataset in which the record is available
+ * @param {openerp.web.DataSet} dataset dataset in which the record is available
*/
do_edit: function (index, id, dataset) {
_.extend(this.dataset, dataset);
@@ -74,20 +75,20 @@ openerp.base.list_editable = function (openerp) {
},
on_loaded: function (data, grouped) {
// tree/@editable takes priority on everything else if present.
- this.options.editable = data.fields_view.arch.attrs.editable || this.options.editable;
+ this.options.editable = data.arch.attrs.editable || this.options.editable;
return this._super(data, grouped);
}
});
- openerp.base.ListView.Groups.include(/** @lends openerp.base.ListView.Groups# */{
- passtrough_events: openerp.base.ListView.Groups.prototype.passtrough_events + " edit saved",
+ openerp.web.ListView.Groups.include(/** @lends openerp.web.ListView.Groups# */{
+ passtrough_events: openerp.web.ListView.Groups.prototype.passtrough_events + " edit saved",
new_record: function () {
// TODO: handle multiple children
this.children[null].new_record();
}
});
- openerp.base.ListView.List.include(/** @lends openerp.base.ListView.List */{
+ openerp.web.ListView.List.include(/** @lends openerp.web.ListView.List# */{
row_clicked: function (event) {
if (!this.options.editable) {
return this._super(event);
@@ -112,6 +113,7 @@ openerp.base.list_editable = function (openerp) {
cancelled.resolve();
}
cancelled.then(function () {
+ self.view.unpad_columns();
self.edition_form.stop();
self.edition_form.$element.remove();
delete self.edition_form;
@@ -178,12 +180,12 @@ openerp.base.list_editable = function (openerp) {
}
self.edition = true;
self.edition_id = record_id;
- self.edition_form = _.extend(new openerp.base.FormView(
+ self.edition_form = _.extend(new openerp.web.FormView(
self, $new_row.attr('id'), self.dataset, false), {
template: 'ListView.row.form',
- registry: openerp.base.list.form.widgets
+ registry: openerp.web.list.form.widgets
});
- $.when(self.edition_form.on_loaded({fields_view: self.get_form_fields_view()})).then(function () {
+ $.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () {
// put in $.when just in case FormView.on_loaded becomes asynchronous
$new_row.find('td')
.addClass('oe-field-cell')
@@ -197,6 +199,16 @@ openerp.base.list_editable = function (openerp) {
$new_row.prepend('<td>');
}
});
+ // Add columns for the cancel and save buttons, if
+ // there are none in the list
+ if (!self.options.selectable) {
+ self.view.pad_columns(
+ 1, {except: $new_row, position: 'before'});
+ }
+ if (!self.options.deletable) {
+ self.view.pad_columns(
+ 1, {except: $new_row});
+ }
self.edition_form.do_show();
});
@@ -213,7 +225,7 @@ openerp.base.list_editable = function (openerp) {
// insert after the source record
var index = self.records.indexOf(
self.records.get(source_record_id)) + 1;
- record = new openerp.base.list.Record({id: id});
+ record = new openerp.web.list.Record({id: id});
self.records.add(record, {at: index});
self.dataset.ids.splice(index, 0, id);
}
@@ -283,30 +295,30 @@ openerp.base.list_editable = function (openerp) {
this.render_row_as_form();
}
});
- if (!openerp.base.list) {
- openerp.base.list = {};
+ if (!openerp.web.list) {
+ openerp.web.list = {};
}
- if (!openerp.base.list.form) {
- openerp.base.list.form = {};
+ if (!openerp.web.list.form) {
+ openerp.web.list.form = {};
}
- openerp.base.list.form.WidgetFrame = openerp.base.form.WidgetFrame.extend({
+ openerp.web.list.form.WidgetFrame = openerp.web.form.WidgetFrame.extend({
template: 'ListView.row.frame'
});
- var form_widgets = openerp.base.form.widgets;
- openerp.base.list.form.widgets = form_widgets.clone({
- 'frame': 'openerp.base.list.form.WidgetFrame'
+ var form_widgets = openerp.web.form.widgets;
+ openerp.web.list.form.widgets = form_widgets.clone({
+ 'frame': 'openerp.web.list.form.WidgetFrame'
});
// All form widgets inherit a problematic behavior from
- // openerp.base.form.WidgetFrame: the cell itself is removed when invisible
+ // openerp.web.form.WidgetFrame: the cell itself is removed when invisible
// whether it's @invisible or @attrs[invisible]. In list view, only the
// former should completely remove the cell. We need to override update_dom
// on all widgets since we can't just hit on widget itself (I think)
- var list_form_widgets = openerp.base.list.form.widgets;
+ var list_form_widgets = openerp.web.list.form.widgets;
_(list_form_widgets.map).each(function (widget_path, key) {
if (key === 'frame') { return; }
- var new_path = 'openerp.base.list.form.' + key;
+ var new_path = 'openerp.web.list.form.' + key;
- openerp.base.list.form[key] = (form_widgets.get_object(key)).extend({
+ openerp.web.list.form[key] = (form_widgets.get_object(key)).extend({
update_dom: function () {
this.$element.children().css('visibility', '');
if (this.modifiers.tree_invisible) {
diff --git a/addons/base/static/src/js/list.js b/addons/web/static/src/js/list.js
index 786c8cb2068..95a8207144b 100644
--- a/addons/base/static/src/js/list.js
+++ b/addons/web/static/src/js/list.js
@@ -1,6 +1,7 @@
-openerp.base.list = function (openerp) {
-openerp.base.views.add('list', 'openerp.base.ListView');
-openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListView# */ {
+openerp.web.list = function (openerp) {
+var QWeb = openerp.web.qweb;
+openerp.web.views.add('list', 'openerp.web.ListView');
+openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# */ {
defaults: {
// records can be selected one by one
'selectable': true,
@@ -26,10 +27,12 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* See constructor parameters and method documentations for information on
* the default behaviors and possible options for the list view.
*
- * @constructs
+ * @constructs openerp.web.ListView
+ * @extends openerp.web.View
+ *
* @param parent parent object
* @param element_id the id of the DOM elements this view should link itself to
- * @param {openerp.base.DataSet} dataset the dataset the view should work with
+ * @param {openerp.web.DataSet} dataset the dataset the view should work with
* @param {String} view_id the listview's identifier, if any
* @param {Object} options A set of options used to configure the view
* @param {Boolean} [options.selectable=true] determines whether view rows are selectable (e.g. via a checkbox)
@@ -39,7 +42,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* @param {Boolean} [options.sortable=true] is it possible to sort the table by clicking on column headers
* @param {Boolean} [options.reorderable=true] is it possible to reorder list rows
*
- * @borrows openerp.base.ActionExecutor#execute_action as #execute_action
+ * @borrows openerp.web.ActionExecutor#execute_action as #execute_action
*/
init: function(parent, element_id, dataset, view_id, options) {
var self = this;
@@ -48,15 +51,23 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
+ this.previous_colspan = null;
this.columns = [];
this.records = new Collection();
- this.set_groups(new openerp.base.ListView.Groups(this));
+ this.set_groups(new openerp.web.ListView.Groups(this));
- if (this.dataset instanceof openerp.base.DataSetStatic) {
- this.groups.datagroup = new openerp.base.StaticDataGroup(this.dataset);
+ if (this.dataset instanceof openerp.web.DataSetStatic) {
+ this.groups.datagroup = new openerp.web.StaticDataGroup(this.dataset);
+ } else {
+ this.groups.datagroup = new openerp.web.DataGroup(
+ this, this.model,
+ dataset.get_domain(),
+ dataset.get_context(),
+ {});
+ this.groups.datagroup.sort = this.dataset._sort;
}
this.page = 0;
@@ -87,7 +98,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
/**
* Set a custom Group construct as the root of the List View.
*
- * @param {openerp.base.ListView.Groups} groups
+ * @param {openerp.web.ListView.Groups} groups
*/
set_groups: function (groups) {
var self = this;
@@ -147,8 +158,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*/
on_loaded: function(data, grouped) {
var self = this;
- this.fields_view = data.fields_view;
- //this.log(this.fields_view);
+ this.fields_view = data;
this.name = "" + this.fields_view.arch.attrs.string;
this.setup_columns(this.fields_view.fields, grouped);
@@ -216,9 +226,9 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
.val(self._limit || 'NaN');
});
if (!this.sidebar && this.options.sidebar && this.options.sidebar_id) {
- this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id);
+ this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
this.sidebar.start();
- this.sidebar.add_toolbar(data.fields_view.toolbar);
+ this.sidebar.add_toolbar(this.fields_view.toolbar);
this.set_common_sidebar_sections(this.sidebar);
}
},
@@ -227,7 +237,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*
* Horrifying side-effect: sets the dataset's data on this.dataset?
*
- * @param {openerp.base.DataSet} dataset
+ * @param {openerp.web.DataSet} dataset
*/
configure_pager: function (dataset) {
this.dataset.ids = dataset.ids;
@@ -260,7 +270,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* @param {Boolean} [grouped] Should the grouping columns (group and count) be displayed
*/
setup_columns: function (fields, grouped) {
- var domain_computer = openerp.base.form.compute_domain;
+ var domain_computer = openerp.web.form.compute_domain;
var noop = function () { return {}; };
var field_to_column = function (field) {
@@ -324,7 +334,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*
* The default implementation asks the list view's view manager to switch
* to a different view (by calling
- * :js:func:`~openerp.base.ViewManager.on_mode_switch`), using the
+ * :js:func:`~openerp.web.ViewManager.on_mode_switch`), using the
* provided record index (within the current list view's dataset).
*
* If the index is null, ``switch_to_record`` asks for the creation of a
@@ -345,7 +355,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
if (this.sidebar) {
this.sidebar.$element.show();
}
- if (this.hidden) {
+ if (!_(this.dataset.ids).isEmpty()) {
this.reload_content();
}
},
@@ -354,7 +364,6 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
if (this.sidebar) {
this.sidebar.$element.hide();
}
- this.hidden = true;
},
/**
* Reloads the list view based on the current settings (dataset & al)
@@ -368,11 +377,12 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
self.on_loaded(field_view_get, grouped);
};
if (this.embedded_view) {
- return $.Deferred().then(callback).resolve({fields_view: this.embedded_view});
+ return $.Deferred().then(callback).resolve(this.embedded_view);
} else {
- return this.rpc('/base/listview/load', {
+ return this.rpc('/web/listview/load', {
model: this.model,
view_id: this.view_id,
+ view_type: "tree",
context: this.dataset.get_context(context),
toolbar: this.options.sidebar
}, callback);
@@ -406,7 +416,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* @returns {$.Deferred} fold request evaluation promise
*/
do_search: function (domains, contexts, groupbys) {
- return this.rpc('/base/session/eval_domain_and_context', {
+ return this.rpc('/web/session/eval_domain_and_context', {
domains: [this.dataset.get_domain()].concat(domains),
contexts: [this.dataset.get_context()].concat(contexts),
group_by_seq: groupbys
@@ -419,7 +429,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* @param {Object} results results of evaluating domain and process for a search
*/
do_actual_search: function (results) {
- this.groups.datagroup = new openerp.base.DataGroup(
+ this.groups.datagroup = new openerp.web.DataGroup(
this, this.model,
results.domain,
results.context,
@@ -487,7 +497,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
*
* @param {Number} index index of the record in the dataset
* @param {Object} id identifier of the activated record
- * @param {openerp.base.DataSet} dataset dataset in which the record is available (may not be the listview's dataset in case of nested groups)
+ * @param {openerp.web.DataSet} dataset dataset in which the record is available (may not be the listview's dataset in case of nested groups)
*/
do_activate_record: function (index, id, dataset) {
var self = this;
@@ -517,11 +527,11 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
/**
* Computes the aggregates for the current list view, either on the
* records provided or on the records of the internal
- * :js:class:`~openerp.base.ListView.Group`, by calling
- * :js:func:`~openerp.base.ListView.group.get_records`.
+ * :js:class:`~openerp.web.ListView.Group`, by calling
+ * :js:func:`~openerp.web.ListView.group.get_records`.
*
* Then displays the aggregates in the table through
- * :js:method:`~openerp.base.ListView.display_aggregates`.
+ * :js:method:`~openerp.web.ListView.display_aggregates`.
*
* @param {Array} [records]
*/
@@ -595,15 +605,58 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
}
$footer_cells.filter(_.sprintf('[data-field=%s]', column.id))
- .html(openerp.base.format_cell(aggregation, column));
+ .html(openerp.web.format_cell(aggregation, column));
});
},
get_selected_ids: function() {
var ids = this.groups.get_selection().ids;
return ids;
+ },
+ /**
+ * Adds padding columns at the start or end of all table rows (including
+ * field names row)
+ *
+ * @param {Number} count number of columns to add
+ * @param {Object} options
+ * @param {"before"|"after"} [position="after"] insertion position for the new columns
+ * @param {Object} [except] content row to not pad
+ */
+ pad_columns: function (count, options) {
+ options = options || {};
+ // padding for action/pager header
+ var $first_header = this.$element.find('thead tr:first th');
+ var colspan = $first_header.attr('colspan');
+ if (colspan) {
+ if (!this.previous_colspan) {
+ this.previous_colspan = colspan;
+ }
+ $first_header.attr('colspan', parseInt(colspan, 10) + count);
+ }
+ // Padding for column titles, footer and data rows
+ var $rows = this.$element
+ .find('.oe-listview-header-columns, tr:not(thead tr)')
+ .not(options['except']);
+ var newcols = new Array(count+1).join('<td class="oe-listview-padding"></td>');
+ if (options.position === 'before') {
+ $rows.prepend(newcols);
+ } else {
+ $rows.append(newcols);
+ }
+ },
+ /**
+ * Removes all padding columns of the table
+ */
+ unpad_columns: function () {
+ this.$element.find('.oe-listview-padding').remove();
+ if (this.previous_colspan) {
+ this.$element
+ .find('thead tr:first th')
+ .attr('colspan', this.previous_colspan);
+ this.previous_colspan = null;
+ }
}
});
-openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.ListView.List# */{
+openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.ListView.List# */{
/**
* List display for the ListView, handles basic DOM events and transforms
* them in the relevant higher-level events, to which the list view (or
@@ -628,8 +681,10 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.
* Triggered when a row of the table is clicked, provides the index (in
* the rows array) and id of the selected record to the handle function.
*
- * @constructs
- * @param {Object} opts display options, identical to those of :js:class:`openerp.base.ListView`
+ * @constructs openerp.web.ListView.List
+ * @extends openerp.web.Class
+ *
+ * @param {Object} opts display options, identical to those of :js:class:`openerp.web.ListView`
*/
init: function (group, opts) {
var self = this;
@@ -721,7 +776,7 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.
this.$current = this.$_element.clone(true);
this.$current.empty().append(
QWeb.render('ListView.rows', _.extend({
- render_cell: openerp.base.format_cell}, this)));
+ render_cell: openerp.web.format_cell}, this)));
},
/**
* Gets the ids of all currently selected records, if any
@@ -801,7 +856,7 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.
options: this.options,
record: record,
row_parity: (index % 2 === 0) ? 'even' : 'odd',
- render_cell: openerp.base.format_cell
+ render_cell: openerp.web.format_cell
});
},
/**
@@ -824,17 +879,19 @@ openerp.base.ListView.List = openerp.base.Class.extend( /** @lends openerp.base.
});
}
});
-openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.base.ListView.Groups# */{
+openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.ListView.Groups# */{
passtrough_events: 'action deleted row_link',
/**
* Grouped display for the ListView. Handles basic DOM events and interacts
- * with the :js:class:`~openerp.base.DataGroup` bound to it.
+ * with the :js:class:`~openerp.web.DataGroup` bound to it.
*
* Provides events similar to those of
- * :js:class:`~openerp.base.ListView.List`
+ * :js:class:`~openerp.web.ListView.List`
+ *
+ * @constructs openerp.web.ListView.Groups
+ * @extends openerp.web.Class
*
- * @constructs
- * @param {openerp.base.ListView} view
+ * @param {openerp.web.ListView} view
* @param {Object} [options]
* @param {Collection} [options.records]
* @param {Object} [options.options]
@@ -938,7 +995,7 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas
self.records.proxy(group.value).reset();
delete self.children[group.value];
}
- var child = self.children[group.value] = new openerp.base.ListView.Groups(self.view, {
+ var child = self.children[group.value] = new openerp.web.ListView.Groups(self.view, {
records: self.records.proxy(group.value),
options: self.options,
columns: self.columns
@@ -973,7 +1030,7 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas
row_data[group.grouped_on] = group;
var group_column = _(self.columns).detect(function (column) {
return column.id === group.grouped_on; });
- $group_column.html(openerp.base.format_cell(
+ $group_column.html(openerp.web.format_cell(
row_data, group_column, "Undefined"
));
if (group.openable) {
@@ -1035,7 +1092,7 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas
},
render_dataset: function (dataset) {
var self = this,
- list = new openerp.base.ListView.List(this, {
+ list = new openerp.web.ListView.List(this, {
options: this.options,
columns: this.columns,
dataset: dataset,
@@ -1166,10 +1223,9 @@ openerp.base.ListView.Groups = openerp.base.Class.extend( /** @lends openerp.bas
});
/**
- * @class
- * @extends openerp.base.Class
+ * @mixin Events
*/
-var Events = {
+var Events = /** @lends Events# */{
/**
* @param {String} event event to listen to on the current object, null for all events
* @param {Function} handler event handler to bind to the relevant event
@@ -1217,12 +1273,12 @@ var Events = {
return this;
}
};
-var Record = openerp.base.Class.extend(/** @lends Record# */{
+var Record = openerp.web.Class.extend(/** @lends Record# */{
/**
- * @constructs
- * @extends openerp.base.Class
- * @borrows Events#bind as this.bind
- * @borrows Events#trigger as this.trigger
+ * @constructs Record
+ * @extends openerp.web.Class
+ *
+ * @mixes Events
* @param {Object} [data]
*/
init: function (data) {
@@ -1279,17 +1335,17 @@ var Record = openerp.base.Class.extend(/** @lends Record# */{
}
});
Record.include(Events);
-var Collection = openerp.base.Class.extend(/** @lends Collection# */{
+var Collection = openerp.web.Class.extend(/** @lends Collection# */{
/**
* Smarter collections, with events, very strongly inspired by Backbone's.
*
* Using a "dumb" array of records makes synchronization between the
* various serious
*
- * @constructs
- * @extends openerp.base.Class
- * @borrows Events#bind as this.bind
- * @borrows Events#trigger as this.trigger
+ * @constructs Collection
+ * @extends openerp.web.Class
+ *
+ * @mixes Events
* @param {Array} [records] records to initialize the collection with
* @param {Object} [options]
*/
@@ -1458,7 +1514,7 @@ var Collection = openerp.base.Class.extend(/** @lends Collection# */{
}
});
Collection.include(Events);
-openerp.base.list = {
+openerp.web.list = {
Events: Events,
Record: Record,
Collection: Collection
diff --git a/addons/base/static/src/js/search.js b/addons/web/static/src/js/search.js
index 94a8fa51aa0..f6c53b4ad17 100644
--- a/addons/base/static/src/js/search.js
+++ b/addons/web/static/src/js/search.js
@@ -1,6 +1,17 @@
-openerp.base.search = function(openerp) {
+openerp.web.search = function(openerp) {
+var QWeb = openerp.web.qweb;
-openerp.base.SearchView = openerp.base.Widget.extend({
+openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.SearchView# */{
+ /**
+ * @constructs openerp.web.SearchView
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param element_id
+ * @param dataset
+ * @param view_id
+ * @param defaults
+ */
init: function(parent, element_id, dataset, view_id, defaults) {
this._super(parent, element_id);
this.dataset = dataset;
@@ -17,8 +28,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
this.ready = $.Deferred();
},
start: function() {
- //this.log('Starting SearchView '+this.model+this.view_id)
- this.rpc("/base/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
+ this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
return this.ready.promise();
},
show: function () {
@@ -42,7 +52,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
_.each(items, function (item) {
if (filters.length && item.tag !== 'filter') {
row.push(
- new openerp.base.search.FilterGroup(
+ new openerp.web.search.FilterGroup(
filters, this));
filters = [];
}
@@ -56,7 +66,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
this.has_focus = true;
}
filters.push(
- new openerp.base.search.Filter(
+ new openerp.web.search.Filter(
item, this));
} else if (item.tag === 'separator') {
// a separator is a no-op
@@ -64,7 +74,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
if (item.tag === 'group') {
// TODO: group and field should be fetched from registries, maybe even filters
row.push(
- new openerp.base.search.Group(
+ new openerp.web.search.Group(
item, this, fields));
} else if (item.tag === 'field') {
if (!this.has_focus) {
@@ -78,7 +88,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
}
}, this);
if (filters.length) {
- row.push(new openerp.base.search.FilterGroup(filters, this));
+ row.push(new openerp.web.search.FilterGroup(filters, this));
}
return rows;
@@ -89,14 +99,14 @@ openerp.base.SearchView = openerp.base.Widget.extend({
*
* @param {Object} item fields_view_get node for the field
* @param {Object} field fields_get result for the field
- * @returns openerp.base.search.Field
+ * @returns openerp.web.search.Field
*/
make_field: function (item, field) {
try {
- return new (openerp.base.search.fields.get_object(field.type))
+ return new (openerp.web.search.fields.get_object(field.type))
(item, field, this);
} catch (e) {
- if (! e instanceof openerp.base.KeyNotFound) {
+ if (! e instanceof openerp.web.KeyNotFound) {
throw e;
}
// KeyNotFound means unknown field type
@@ -115,7 +125,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
data.fields_view.fields);
// for extended search view
- var ext = new openerp.base.search.ExtendedSearch(this, this.model);
+ var ext = new openerp.web.search.ExtendedSearch(this, this.model);
lines.push([ext]);
this.inputs.push(ext);
@@ -148,7 +158,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
},
reload_managed_filters: function() {
var self = this;
- return this.rpc('/base/searchview/get_filters', {
+ return this.rpc('/web/searchview/get_filters', {
model: this.dataset.model
}).then(function(result) {
self.managed_filters = result;
@@ -177,11 +187,11 @@ openerp.base.SearchView = openerp.base.Widget.extend({
} else if (val == "save_filter") {
select.val("_filters");
var data = this.build_search_data();
- var context = new openerp.base.CompoundContext();
+ var context = new openerp.web.CompoundContext();
_.each(data.contexts, function(x) {
context.add(x);
});
- var domain = new openerp.base.CompoundDomain();
+ var domain = new openerp.web.CompoundDomain();
_.each(data.domains, function(x) {
domain.add(x);
});
@@ -197,7 +207,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
OK: function() {
$(this).dialog("close");
var name = $(this).find("input").val();
- self.rpc('/base/searchview/save_filter', {
+ self.rpc('/web/searchview/save_filter', {
model: self.dataset.model,
context_to_save: context,
domain: domain,
@@ -226,10 +236,10 @@ openerp.base.SearchView = openerp.base.Widget.extend({
* Performs the search view collection of widget data.
*
* If the collection went well (all fields are valid), then triggers
- * :js:func:`openerp.base.SearchView.on_search`.
+ * :js:func:`openerp.web.SearchView.on_search`.
*
* If at least one field failed its validation, triggers
- * :js:func:`openerp.base.SearchView.on_invalid` instead.
+ * :js:func:`openerp.web.SearchView.on_invalid` instead.
*
* @param e jQuery event object coming from the "Search" button
*/
@@ -266,7 +276,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
contexts.push(context);
}
} catch (e) {
- if (e instanceof openerp.base.search.Invalid) {
+ if (e instanceof openerp.web.search.Invalid) {
errors.push(e);
} else {
throw e;
@@ -336,7 +346,7 @@ openerp.base.SearchView = openerp.base.Widget.extend({
/**
* Called by a filter propagating its state changes
*
- * @param {openerp.base.search.Filter} filter a filter which got toggled
+ * @param {openerp.web.search.Filter} filter a filter which got toggled
* @param {Boolean} default_enabled filter got enabled through the default values, at render time.
*/
do_toggle_filter: function (filter, default_enabled) {
@@ -356,30 +366,32 @@ openerp.base.SearchView = openerp.base.Widget.extend({
});
/** @namespace */
-openerp.base.search = {};
+openerp.web.search = {};
/**
- * Registry of search fields, called by :js:class:`openerp.base.SearchView` to
+ * Registry of search fields, called by :js:class:`openerp.web.SearchView` to
* find and instantiate its field widgets.
*/
-openerp.base.search.fields = new openerp.base.Registry({
- 'char': 'openerp.base.search.CharField',
- 'text': 'openerp.base.search.CharField',
- 'boolean': 'openerp.base.search.BooleanField',
- 'integer': 'openerp.base.search.IntegerField',
- 'float': 'openerp.base.search.FloatField',
- 'selection': 'openerp.base.search.SelectionField',
- 'datetime': 'openerp.base.search.DateTimeField',
- 'date': 'openerp.base.search.DateField',
- 'many2one': 'openerp.base.search.ManyToOneField',
- 'many2many': 'openerp.base.search.CharField',
- 'one2many': 'openerp.base.search.CharField'
+openerp.web.search.fields = new openerp.web.Registry({
+ 'char': 'openerp.web.search.CharField',
+ 'text': 'openerp.web.search.CharField',
+ 'boolean': 'openerp.web.search.BooleanField',
+ 'integer': 'openerp.web.search.IntegerField',
+ 'float': 'openerp.web.search.FloatField',
+ 'selection': 'openerp.web.search.SelectionField',
+ 'datetime': 'openerp.web.search.DateTimeField',
+ 'date': 'openerp.web.search.DateField',
+ 'many2one': 'openerp.web.search.ManyToOneField',
+ 'many2many': 'openerp.web.search.CharField',
+ 'one2many': 'openerp.web.search.CharField'
});
-openerp.base.search.Invalid = openerp.base.Class.extend( /** @lends openerp.base.search.Invalid# */{
+openerp.web.search.Invalid = openerp.web.Class.extend( /** @lends openerp.web.search.Invalid# */{
/**
* Exception thrown by search widgets when they hold invalid values,
* which they can not return when asked.
*
- * @constructs
+ * @constructs openerp.web.search.Invalid
+ * @extends openerp.web.Class
+ *
* @param field the name of the field holding an invalid value
* @param value the invalid value
* @param message validation failure message
@@ -394,13 +406,13 @@ openerp.base.search.Invalid = openerp.base.Class.extend( /** @lends openerp.base
': [' + this.value + '] is ' + this.message);
}
});
-openerp.base.search.Widget = openerp.base.Widget.extend( /** @lends openerp.base.search.Widget# */{
+openerp.web.search.Widget = openerp.web.Widget.extend( /** @lends openerp.web.search.Widget# */{
template: null,
/**
* Root class of all search widgets
*
- * @constructs
- * @extends openerp.base.Widget
+ * @constructs openerp.web.search.Widget
+ * @extends openerp.web.Widget
*
* @param view the ancestor view of this widget
*/
@@ -451,8 +463,18 @@ openerp.base.search.Widget = openerp.base.Widget.extend( /** @lends openerp.base
}));
}
});
-openerp.base.search.FilterGroup = openerp.base.search.Widget.extend({
+openerp.web.search.FilterGroup = openerp.web.search.Widget.extend(/** @lends openerp.web.search.FilterGroup# */{
template: 'SearchView.filters',
+ /**
+ * Inclusive group of filters, creates a continuous "button" with clickable
+ * sections (the normal display for filters is to be a self-contained button)
+ *
+ * @constructs openerp.web.search.FilterGroup
+ * @extends openerp.web.search.Widget
+ *
+ * @param {Array<openerp.web.search.Filter>} filters elements of the group
+ * @param {openerp.web.SearchView} view view in which the filters are contained
+ */
init: function (filters, view) {
this._super(view);
this.filters = filters;
@@ -465,14 +487,14 @@ openerp.base.search.FilterGroup = openerp.base.search.Widget.extend({
});
}
});
-openerp.base.search.add_expand_listener = function($root) {
+openerp.web.search.add_expand_listener = function($root) {
$root.find('a.searchview_group_string').click(function (e) {
$root.toggleClass('folded expanded');
e.stopPropagation();
e.preventDefault();
});
};
-openerp.base.search.Group = openerp.base.search.Widget.extend({
+openerp.web.search.Group = openerp.web.search.Widget.extend({
template: 'SearchView.group',
init: function (view_section, view, fields) {
this._super(view);
@@ -483,7 +505,7 @@ openerp.base.search.Group = openerp.base.search.Widget.extend({
},
start: function () {
this._super();
- openerp.base.search.add_expand_listener(this.$element);
+ openerp.web.search.add_expand_listener(this.$element);
var widget_starts = _(this.lines).chain().flatten()
.map(function (widget) { return widget.start(); })
.value();
@@ -491,10 +513,10 @@ openerp.base.search.Group = openerp.base.search.Widget.extend({
}
});
-openerp.base.search.Input = openerp.base.search.Widget.extend( /** @lends openerp.base.search.Input# */{
+openerp.web.search.Input = openerp.web.search.Widget.extend( /** @lends openerp.web.search.Input# */{
/**
- * @constructs
- * @extends openerp.base.search.Widget
+ * @constructs openerp.web.search.Input
+ * @extends openerp.web.search.Widget
*
* @param view
*/
@@ -511,8 +533,18 @@ openerp.base.search.Input = openerp.base.search.Widget.extend( /** @lends opener
"get_domain not implemented for widget " + this.attrs.type);
}
});
-openerp.base.search.Filter = openerp.base.search.Input.extend({
+openerp.web.search.Filter = openerp.web.search.Input.extend(/** @lends openerp.web.search.Filter# */{
template: 'SearchView.filter',
+ /**
+ * Implementation of the OpenERP filters (button with a context and/or
+ * a domain sent as-is to the search view)
+ *
+ * @constructs openerp.web.search.Filter
+ * @extends openerp.web.search.Input
+ *
+ * @param node
+ * @param view
+ */
init: function (node, view) {
this._super(view);
this.attrs = node.attrs;
@@ -561,12 +593,12 @@ openerp.base.search.Filter = openerp.base.search.Input.extend({
return this.attrs.domain;
}
});
-openerp.base.search.Field = openerp.base.search.Input.extend( /** @lends openerp.base.search.Field# */ {
+openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.web.search.Field# */ {
template: 'SearchView.field',
default_operator: '=',
/**
- * @constructs
- * @extends openerp.base.search.Input
+ * @constructs openerp.web.search.Field
+ * @extends openerp.web.search.Input
*
* @param view_section
* @param field
@@ -575,9 +607,9 @@ openerp.base.search.Field = openerp.base.search.Input.extend( /** @lends openerp
init: function (view_section, field, view) {
this._super(view);
this.attrs = _.extend({}, field, view_section.attrs);
- this.filters = new openerp.base.search.FilterGroup(_.map(
+ this.filters = new openerp.web.search.FilterGroup(_.map(
view_section.children, function (filter_node) {
- return new openerp.base.search.Filter(
+ return new openerp.web.search.Filter(
filter_node, view);
}), view);
this.make_id('input', field.type, this.attrs.name);
@@ -637,15 +669,15 @@ openerp.base.search.Field = openerp.base.search.Input.extend( /** @lends openerp
* * The Javascript and the HTML values are identical (strings)
*
* @class
- * @extends openerp.base.search.Field
+ * @extends openerp.web.search.Field
*/
-openerp.base.search.CharField = openerp.base.search.Field.extend( /** @lends openerp.base.search.CharField# */ {
+openerp.web.search.CharField = openerp.web.search.Field.extend( /** @lends openerp.web.search.CharField# */ {
default_operator: 'ilike',
get_value: function () {
return this.$element.val();
}
});
-openerp.base.search.NumberField = openerp.base.search.Field.extend(/** @lends openerp.base.search.NumberField# */{
+openerp.web.search.NumberField = openerp.web.search.Field.extend(/** @lends openerp.web.search.NumberField# */{
get_value: function () {
if (!this.$element.val()) {
return null;
@@ -654,7 +686,7 @@ openerp.base.search.NumberField = openerp.base.search.Field.extend(/** @lends op
check = Number(this.$element.val());
if (isNaN(val) || val !== check) {
this.$element.addClass('error');
- throw new openerp.base.search.Invalid(
+ throw new openerp.web.search.Invalid(
this.attrs.name, this.$element.val(), this.error_message);
}
this.$element.removeClass('error');
@@ -663,9 +695,9 @@ openerp.base.search.NumberField = openerp.base.search.Field.extend(/** @lends op
});
/**
* @class
- * @extends openerp.base.search.NumberField
+ * @extends openerp.web.search.NumberField
*/
-openerp.base.search.IntegerField = openerp.base.search.NumberField.extend(/** @lends openerp.base.search.IntegerField# */{
+openerp.web.search.IntegerField = openerp.web.search.NumberField.extend(/** @lends openerp.web.search.IntegerField# */{
error_message: "not a valid integer",
parse: function (value) {
return parseInt(value, 10);
@@ -673,9 +705,9 @@ openerp.base.search.IntegerField = openerp.base.search.NumberField.extend(/** @l
});
/**
* @class
- * @extends openerp.base.search.NumberField
+ * @extends openerp.web.search.NumberField
*/
-openerp.base.search.FloatField = openerp.base.search.NumberField.extend(/** @lends openerp.base.search.FloatField# */{
+openerp.web.search.FloatField = openerp.web.search.NumberField.extend(/** @lends openerp.web.search.FloatField# */{
error_message: "not a valid number",
parse: function (value) {
return parseFloat(value);
@@ -683,18 +715,18 @@ openerp.base.search.FloatField = openerp.base.search.NumberField.extend(/** @len
});
/**
* @class
- * @extends openerp.base.search.Field
+ * @extends openerp.web.search.Field
*/
-openerp.base.search.SelectionField = openerp.base.search.Field.extend(/** @lends openerp.base.search.SelectionField# */{
+openerp.web.search.SelectionField = openerp.web.search.Field.extend(/** @lends openerp.web.search.SelectionField# */{
template: 'SearchView.field.selection',
get_value: function () {
return this.$element.val();
}
});
-openerp.base.search.BooleanField = openerp.base.search.SelectionField.extend(/** @lends openerp.base.search.BooleanField# */{
+openerp.web.search.BooleanField = openerp.web.search.SelectionField.extend(/** @lends openerp.web.search.BooleanField# */{
/**
- * @constructs
- * @extends openerp.base.search.BooleanField
+ * @constructs openerp.web.search.BooleanField
+ * @extends openerp.web.search.BooleanField
*/
init: function () {
this._super.apply(this, arguments);
@@ -728,7 +760,11 @@ openerp.base.search.BooleanField = openerp.base.search.SelectionField.extend(/**
}
}
});
-openerp.base.search.DateField = openerp.base.search.Field.extend( /** @lends openerp.base.search.DateField# */{
+/**
+ * @class
+ * @extends openerp.web.search.DateField
+ */
+openerp.web.search.DateField = openerp.web.search.Field.extend(/** @lends openerp.web.search.DateField# */{
/**
* enables date picker on the HTML widgets
*/
@@ -754,22 +790,22 @@ openerp.base.search.DateField = openerp.base.search.Field.extend( /** @lends ope
* spanning the whole day selected by the date widget
*
* @class
- * @extends openerp.base.DateField
+ * @extends openerp.web.DateField
*/
-openerp.base.search.DateTimeField = openerp.base.search.DateField.extend(/** @lends openerp.base.search.DateTimeField# */{
+openerp.web.search.DateTimeField = openerp.web.search.DateField.extend(/** @lends openerp.web.search.DateTimeField# */{
make_domain: function (name, operator, value) {
return ['&', [name, '>=', value + ' 00:00:00'],
[name, '<=', value + ' 23:59:59']];
}
});
-openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({
+openerp.web.search.ManyToOneField = openerp.web.search.CharField.extend({
init: function (view_section, field, view) {
this._super(view_section, field, view);
var self = this;
this.got_name = $.Deferred().then(function () {
self.$element.val(self.name);
});
- this.dataset = new openerp.base.DataSet(
+ this.dataset = new openerp.web.DataSet(
this.view, this.attrs['relation']);
},
start: function () {
@@ -833,7 +869,7 @@ openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({
}
});
-openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearch = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search',
identifier_prefix: 'extended-search',
init: function (parent, model) {
@@ -841,7 +877,7 @@ openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({
this.model = model;
},
add_group: function() {
- var group = new openerp.base.search.ExtendedSearchGroup(this, this.fields);
+ var group = new openerp.web.search.ExtendedSearchGroup(this, this.fields);
group.appendTo(this.$element.find('.searchview_extended_groups_list'));
this.check_last_element();
},
@@ -852,10 +888,10 @@ openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({
}
this.$element.closest("table.oe-searchview-render-line").css("display", "none");
var self = this;
- this.rpc("/base/searchview/fields_get",
+ this.rpc("/web/searchview/fields_get",
{"model": this.model}, function(data) {
self.fields = data.fields;
- openerp.base.search.add_expand_listener(self.$element);
+ openerp.web.search.add_expand_listener(self.$element);
self.$element.find('.searchview_extended_add_group').click(function (e) {
self.add_group();
});
@@ -897,7 +933,7 @@ openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({
}
});
-openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchGroup = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.group',
identifier_prefix: 'extended-search-group',
init: function (parent, fields) {
@@ -905,7 +941,7 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({
this.fields = fields;
},
add_prop: function() {
- var prop = new openerp.base.search.ExtendedSearchProposition(this, this.fields);
+ var prop = new openerp.web.search.ExtendedSearchProposition(this, this.fields);
var render = prop.render({'index': this.widget_children.length - 1});
this.$element.find('.searchview_extended_propositions_list').append(render);
prop.start();
@@ -943,9 +979,16 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.OldWidget.extend({
}
});
-openerp.base.search.ExtendedSearchProposition = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition = openerp.web.OldWidget.extend(/** @lends openerp.web.search.ExtendedSearchProposition# */{
template: 'SearchView.extended_search.proposition',
identifier_prefix: 'extended-search-proposition',
+ /**
+ * @constructs openerp.web.search.ExtendedSearchProposition
+ * @extends openerp.web.OldWidget
+ *
+ * @param parent
+ * @param fields
+ */
init: function (parent, fields) {
this._super(parent);
this.fields = _(fields).chain()
@@ -999,15 +1042,15 @@ openerp.base.search.ExtendedSearchProposition = openerp.base.OldWidget.extend({
var type = field.type;
try {
- openerp.base.search.custom_filters.get_object(type);
+ openerp.web.search.custom_filters.get_object(type);
} catch (e) {
- if (! e instanceof openerp.base.KeyNotFound) {
+ if (! e instanceof openerp.web.KeyNotFound) {
throw e;
}
type = "char";
- this.log('Unknow field type ' + e.key);
+ console.log('Unknow field type ' + e.key);
}
- this.value = new (openerp.base.search.custom_filters.get_object(type))
+ this.value = new (openerp.web.search.custom_filters.get_object(type))
(this);
if(this.value.set_field) {
this.value.set_field(field);
@@ -1032,7 +1075,7 @@ openerp.base.search.ExtendedSearchProposition = openerp.base.OldWidget.extend({
}
});
-openerp.base.search.ExtendedSearchProposition.Char = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Char = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.char',
identifier_prefix: 'extended-search-proposition-char',
operators: [
@@ -1049,7 +1092,7 @@ openerp.base.search.ExtendedSearchProposition.Char = openerp.base.OldWidget.exte
return this.$element.val();
}
});
-openerp.base.search.ExtendedSearchProposition.DateTime = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.DateTime = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.datetime',
identifier_prefix: 'extended-search-proposition-datetime',
operators: [
@@ -1071,7 +1114,7 @@ openerp.base.search.ExtendedSearchProposition.DateTime = openerp.base.OldWidget.
});
}
});
-openerp.base.search.ExtendedSearchProposition.Date = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Date = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.date',
identifier_prefix: 'extended-search-proposition-date',
operators: [
@@ -1093,7 +1136,7 @@ openerp.base.search.ExtendedSearchProposition.Date = openerp.base.OldWidget.exte
});
}
});
-openerp.base.search.ExtendedSearchProposition.Integer = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Integer = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.integer',
identifier_prefix: 'extended-search-proposition-integer',
operators: [
@@ -1112,7 +1155,7 @@ openerp.base.search.ExtendedSearchProposition.Integer = openerp.base.OldWidget.e
return Math.round(value);
}
});
-openerp.base.search.ExtendedSearchProposition.Float = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Float = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.float',
identifier_prefix: 'extended-search-proposition-float',
operators: [
@@ -1131,7 +1174,7 @@ openerp.base.search.ExtendedSearchProposition.Float = openerp.base.OldWidget.ext
return value;
}
});
-openerp.base.search.ExtendedSearchProposition.Selection = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Selection = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.selection',
identifier_prefix: 'extended-search-proposition-selection',
operators: [
@@ -1145,7 +1188,7 @@ openerp.base.search.ExtendedSearchProposition.Selection = openerp.base.OldWidget
return this.$element.val();
}
});
-openerp.base.search.ExtendedSearchProposition.Boolean = openerp.base.OldWidget.extend({
+openerp.web.search.ExtendedSearchProposition.Boolean = openerp.web.OldWidget.extend({
template: 'SearchView.extended_search.proposition.boolean',
identifier_prefix: 'extended-search-proposition-boolean',
operators: [
@@ -1157,19 +1200,19 @@ openerp.base.search.ExtendedSearchProposition.Boolean = openerp.base.OldWidget.e
}
});
-openerp.base.search.custom_filters = new openerp.base.Registry({
- 'char': 'openerp.base.search.ExtendedSearchProposition.Char',
- 'text': 'openerp.base.search.ExtendedSearchProposition.Char',
- 'one2many': 'openerp.base.search.ExtendedSearchProposition.Char',
- 'many2one': 'openerp.base.search.ExtendedSearchProposition.Char',
- 'many2many': 'openerp.base.search.ExtendedSearchProposition.Char',
+openerp.web.search.custom_filters = new openerp.web.Registry({
+ 'char': 'openerp.web.search.ExtendedSearchProposition.Char',
+ 'text': 'openerp.web.search.ExtendedSearchProposition.Char',
+ 'one2many': 'openerp.web.search.ExtendedSearchProposition.Char',
+ 'many2one': 'openerp.web.search.ExtendedSearchProposition.Char',
+ 'many2many': 'openerp.web.search.ExtendedSearchProposition.Char',
- 'datetime': 'openerp.base.search.ExtendedSearchProposition.DateTime',
- 'date': 'openerp.base.search.ExtendedSearchProposition.Date',
- 'integer': 'openerp.base.search.ExtendedSearchProposition.Integer',
- 'float': 'openerp.base.search.ExtendedSearchProposition.Float',
- 'boolean': 'openerp.base.search.ExtendedSearchProposition.Boolean',
- 'selection': 'openerp.base.search.ExtendedSearchProposition.Selection'
+ 'datetime': 'openerp.web.search.ExtendedSearchProposition.DateTime',
+ 'date': 'openerp.web.search.ExtendedSearchProposition.Date',
+ 'integer': 'openerp.web.search.ExtendedSearchProposition.Integer',
+ 'float': 'openerp.web.search.ExtendedSearchProposition.Float',
+ 'boolean': 'openerp.web.search.ExtendedSearchProposition.Boolean',
+ 'selection': 'openerp.web.search.ExtendedSearchProposition.Selection'
});
};
diff --git a/addons/base/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js
index 753f9ac6d4e..22800facf9b 100644
--- a/addons/base/static/src/js/view_editor.js
+++ b/addons/web/static/src/js/view_editor.js
@@ -1,5 +1,5 @@
-openerp.base.view_editor = function(openerp) {
-openerp.base.ViewEditor = openerp.base.Widget.extend({
+openerp.web.view_editor = function(openerp) {
+openerp.web.ViewEditor = openerp.web.Widget.extend({
init: function(parent, element_id, dataset, view, options) {
this._super(parent);
this.element_id = element_id
@@ -32,8 +32,8 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({
radio:true
},
};
- var action_manager = new openerp.base.ActionManager(this);
- this.dialog = new openerp.base.Dialog(this,{
+ var action_manager = new openerp.web.ActionManager(this);
+ this.dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'ViewEditor',
width: 750,
@@ -112,7 +112,7 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({
edit_view : function(){
var self = this;
var view_id =(($("input[name='radiogroup']:checked").parent()).parent()).attr('data-id');
- var ve_dataset = new openerp.base.DataSet(this,'ir.ui.view');
+ var ve_dataset = new openerp.web.DataSet(this,'ir.ui.view');
ve_dataset.read_ids([parseInt(view_id)],['arch'],function (arch) {
var arch = arch[0].arch;
var root = $(arch).filter(":first")[0];
@@ -122,7 +122,7 @@ openerp.base.ViewEditor = openerp.base.Widget.extend({
//todo render the final object of tree view so xml with it child node display...
});
- this.dialog = new openerp.base.Dialog(this,{
+ this.dialog = new openerp.web.Dialog(this,{
modal: true,
title: 'Edit Xml',
width: 750,
diff --git a/addons/base/static/src/js/view_help.js b/addons/web/static/src/js/view_help.js
index aa98f59c3ab..f7e5f7c259e 100644
--- a/addons/base/static/src/js/view_help.js
+++ b/addons/web/static/src/js/view_help.js
@@ -1,13 +1,13 @@
/*---------------------------------------------------------
- * OpenERP base library
+ * OpenERP web library
*---------------------------------------------------------*/
-openerp.base.view_help = function(openerp) {
+openerp.web.view_help = function(openerp) {
-openerp.base.ProcessView = openerp.base.Widget.extend({
+openerp.web.ProcessView = openerp.web.Widget.extend({
});
-openerp.base.HelpView = openerp.base.Widget.extend({
+openerp.web.HelpView = openerp.web.Widget.extend({
});
};
diff --git a/addons/base/static/src/js/view_tree.js b/addons/web/static/src/js/view_tree.js
index 59544a998b3..2a314f57fa8 100644
--- a/addons/base/static/src/js/view_tree.js
+++ b/addons/web/static/src/js/view_tree.js
@@ -1,20 +1,29 @@
/*---------------------------------------------------------
- * OpenERP base library
+ * OpenERP web library
*---------------------------------------------------------*/
-openerp.base.view_tree = function(openerp) {
+openerp.web.view_tree = function(openerp) {
+var QWeb = openerp.web.qweb;
-openerp.base.views.add('tree', 'openerp.base.TreeView');
-/**
- * Genuine tree view (the one displayed as a tree, not the list)
- */
-openerp.base.TreeView = openerp.base.View.extend({
+openerp.web.views.add('tree', 'openerp.web.TreeView');
+openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView# */{
/**
* Indicates that this view is not searchable, and thus that no search
* view should be displayed (if there is one active).
*/
searchable : false,
-
+ /**
+ * Genuine tree view (the one displayed as a tree, not the list)
+ *
+ * @constructs openerp.web.TreeView
+ * @extends openerp.web.View
+ *
+ * @param parent
+ * @param element_id
+ * @param dataset
+ * @param view_id
+ * @param options
+ */
init: function(parent, element_id, dataset, view_id, options) {
this._super(parent, element_id);
this.dataset = dataset;
@@ -28,9 +37,10 @@ openerp.base.TreeView = openerp.base.View.extend({
start: function () {
this._super();
- return this.rpc("/base/treeview/load", {
+ return this.rpc("/web/treeview/load", {
model: this.model,
view_id: this.view_id,
+ view_type: "tree",
toolbar: this.view_manager ? !!this.view_manager.sidebar : false
}, this.on_loaded);
},
@@ -150,7 +160,7 @@ openerp.base.TreeView = openerp.base.View.extend({
'fields_view': self.fields_view.arch.children,
'fields': self.fields,
'level': $curr_node.data('level') || 0,
- 'render': openerp.base.format_value
+ 'render': openerp.web.format_value
});
if ($curr_node.length) {
@@ -165,10 +175,10 @@ openerp.base.TreeView = openerp.base.View.extend({
// Get details in listview
activate: function(id) {
var self = this;
- this.rpc('/base/treeview/action', {
+ this.rpc('/web/treeview/action', {
id: id,
model: this.dataset.model,
- context: new openerp.base.CompoundContext(
+ context: new openerp.web.CompoundContext(
this.dataset.get_context(), {
active_model: this.dataset.model,
active_id: id,
diff --git a/addons/base/static/src/js/views.js b/addons/web/static/src/js/views.js
index 11b45cbfeb0..39d02d221ff 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -1,17 +1,18 @@
/*---------------------------------------------------------
- * OpenERP base library
+ * OpenERP web library
*---------------------------------------------------------*/
-openerp.base.views = function(openerp) {
+openerp.web.views = function(openerp) {
-var _t = openerp.base._t;
+var _t = openerp.web._t;
+var QWeb = openerp.web.qweb;
/**
* Registry for all the client actions key: tag value: widget
*/
-openerp.base.client_actions = new openerp.base.Registry();
+openerp.web.client_actions = new openerp.web.Registry();
-openerp.base.ActionManager = openerp.base.Widget.extend({
+openerp.web.ActionManager = openerp.web.Widget.extend({
identifier_prefix: "actionmanager",
init: function(parent) {
this._super(parent);
@@ -75,7 +76,7 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
pager : !popup
}, action.flags || {});
if (!(type in this)) {
- this.log("Action manager can't handle action of type " + action.type, action);
+ console.log("Action manager can't handle action of type " + action.type, action);
return;
}
this[type](action, on_close);
@@ -83,25 +84,25 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
ir_actions_act_window: function (action, on_close) {
if (action.target === 'new') {
if (this.dialog == null) {
- this.dialog = new openerp.base.Dialog(this, { title: action.name, width: '80%' });
+ this.dialog = new openerp.web.Dialog(this, { title: action.name, width: '80%' });
if(on_close)
this.dialog.on_close.add(on_close);
this.dialog.start();
} else {
this.dialog_viewmanager.stop();
}
- this.dialog_viewmanager = new openerp.base.ViewManagerAction(this, action);
+ this.dialog_viewmanager = new openerp.web.ViewManagerAction(this, action);
this.dialog_viewmanager.appendTo(this.dialog.$element);
this.dialog.open();
} else {
this.dialog_stop();
this.content_stop();
- this.inner_viewmanager = new openerp.base.ViewManagerAction(this, action);
+ this.inner_viewmanager = new openerp.web.ViewManagerAction(this, action);
this.inner_viewmanager.appendTo(this.$element);
this.url_update(action);
}
/* new window code
- this.rpc("/base/session/save_session_action", { the_action : action}, function(key) {
+ this.rpc("/web/session/save_session_action", { the_action : action}, function(key) {
var url = window.location.protocol + "//" + window.location.host + window.location.pathname + "?" + jQuery.param({ s_action : "" + key });
window.open(url,'_blank');
});
@@ -112,30 +113,39 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
},
ir_actions_server: function (action, on_closed) {
var self = this;
- this.rpc('/base/action/run', {
+ this.rpc('/web/action/run', {
action_id: action.id,
- context: {active_id: 66, active_ids: [66], active_model: 'ir.ui.menu'}
+ context: action.context || {}
}).then(function (action) {
self.do_action(action, on_closed)
});
},
ir_actions_client: function (action) {
this.content_stop();
- var ClientWidget = openerp.base.client_actions.get_object(action.tag);
+ var ClientWidget = openerp.web.client_actions.get_object(action.tag);
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
},
ir_actions_report_xml: function(action) {
- this.rpc('/base/report/get_report', {
- action: action,
- context: {}
- }).then(function(result) {
- debugger;
+ $.blockUI();
+ this.session.get_file({
+ url: '/web/report',
+ data: {action: JSON.stringify(action)},
+ complete: $.unblockUI
});
}
});
-openerp.base.ViewManager = openerp.base.Widget.extend({
+openerp.web.ViewManager = openerp.web.Widget.extend(/** @lends openerp.web.ViewManager# */{
identifier_prefix: "viewmanager",
+ template: "ViewManager",
+ /**
+ * @constructs openerp.web.ViewManager
+ * @extends openerp.web.Widget
+ *
+ * @param parent
+ * @param dataset
+ * @param views
+ */
init: function(parent, dataset, views) {
this._super(parent);
this.model = dataset.model;
@@ -145,10 +155,10 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;});
this.views = {};
this.flags = this.flags || {};
- this.registry = openerp.base.views;
+ this.registry = openerp.web.views;
},
render: function() {
- return QWeb.render("ViewManager", {"prefix": this.element_id, views: this.views_src})
+ return QWeb.render(this.template, {"prefix": this.element_id, views: this.views_src})
},
/**
* @returns {jQuery.Deferred} initial view loading promise
@@ -247,7 +257,7 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
},
/**
* Event launched when a controller has been inited.
- *
+ *
* @param {String} view_type type of view
* @param {String} view the inited controller
*/
@@ -256,7 +266,7 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
/**
* Sets up the current viewmanager's search view.
*
- * @param view_id the view to use or false for a default one
+ * @param {Number|false} view_id the view to use or false for a default one
* @returns {jQuery.Deferred} search view startup deferred
*/
setup_search_view: function(view_id, search_defaults) {
@@ -264,10 +274,10 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
if (this.searchview) {
this.searchview.stop();
}
- this.searchview = new openerp.base.SearchView(this, this.element_id + "_search", this.dataset, view_id, search_defaults);
- if (this.flags.search_view === false) {
- this.searchview.hide();
- }
+ this.searchview = new openerp.web.SearchView(
+ this, this.element_id + "_search", this.dataset,
+ view_id, search_defaults);
+
this.searchview.on_search.add(function(domains, contexts, groupbys) {
var controller = self.views[self.active_view].controller;
controller.do_search.call(controller, domains, contexts, groupbys);
@@ -287,50 +297,65 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
}
});
-openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
+openerp.web.ViewManagerAction = openerp.web.ViewManager.extend(/** @lends oepnerp.web.ViewManagerAction# */{
+ template:"ViewManagerAction",
+ /**
+ * @constructs openerp.web.ViewManagerAction
+ * @extends openerp.web.ViewManager
+ *
+ * @param {openerp.web.ActionManager} parent parent object/widget
+ * @param {Object} action descriptor for the action this viewmanager needs to manage its views.
+ */
init: function(parent, action) {
+ // dataset initialization will take the session from ``this``, so if we
+ // do not have it yet (and we don't, because we've not called our own
+ // ``_super()``) rpc requests will blow up.
this.session = parent.session;
this.action = action;
- var dataset;
- if (!action.res_id) {
- dataset = new openerp.base.DataSetSearch(this, action.res_model, action.context, action.domain);
- } else {
- this.action.flags.search_view = false;
- dataset = new openerp.base.DataSetStatic(this, action.res_model, action.context, [action.res_id]);
+ var dataset = new openerp.web.DataSetSearch(this, action.res_model, action.context, action.domain);
+ if (action.res_id) {
+ dataset.ids.push(action.res_id);
dataset.index = 0;
}
this._super(parent, dataset, action.views);
- this.action = action;
this.flags = this.action.flags || {};
if (action.res_model == 'board.board' && action.views.length == 1 && action.views) {
- // Not elegant but allows to avoid flickering of SearchView#do_hide
+ // Not elegant but allows to avoid form chrome (pager, save/new
+ // buttons, sidebar, ...) displaying
this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false;
}
},
+ /**
+ * Initializes the ViewManagerAction: sets up the searchview (if the
+ * searchview is enabled in the manager's action flags), calls into the
+ * parent to initialize the primary view and (if the VMA has a searchview)
+ * launches an initial search after both views are done rendering.
+ */
start: function() {
- var inital_view_loaded = this._super();
-
- var search_defaults = {};
- _.each(this.action.context, function (value, key) {
- var match = /^search_default_(.*)$/.exec(key);
- if (match) {
- search_defaults[match[1]] = value;
- }
- });
-
+ var searchview_loaded;
if (this.flags.search_view !== false) {
+ var search_defaults = {};
+ _.each(this.action.context, function (value, key) {
+ var match = /^search_default_(.*)$/.exec(key);
+ if (match) {
+ search_defaults[match[1]] = value;
+ }
+ });
// init search view
- var searchview_id = this.action.search_view_id && this.action.search_view_id[0];
+ var searchview_id = this.action['search_view_id'] && this.action['search_view_id'][0];
- var searchview_loaded = this.setup_search_view(
+ searchview_loaded = this.setup_search_view(
searchview_id || false, search_defaults);
-
+ }
+
+ var main_view_loaded = this._super();
+
+ var manager_ready = $.when(searchview_loaded, main_view_loaded);
+ if (searchview_loaded && this.action['auto_search']) {
// schedule auto_search
- if (searchview_loaded != null && this.action['auto_search']) {
- $.when(searchview_loaded, inital_view_loaded)
- .then(this.searchview.do_search);
- }
+ manager_ready.then(this.searchview.do_search);
}
+ return manager_ready;
},
on_mode_switch: function (view_type) {
return $.when(
@@ -342,7 +367,7 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
var grandparent = this.widget_parent && this.widget_parent.widget_parent;
// display shortcuts if on the first view for the action
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
- if (!(grandparent instanceof openerp.base.WebClient) ||
+ if (!(grandparent instanceof openerp.web.WebClient) ||
!(view.view_type === this.views_src[0].view_type
&& view.view_id === this.views_src[0].view_id)) {
$shortcut_toggle.hide();
@@ -377,7 +402,7 @@ openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
}
});
-openerp.base.Sidebar = openerp.base.Widget.extend({
+openerp.web.Sidebar = openerp.web.Widget.extend({
init: function(parent, element_id) {
this._super(parent, element_id);
this.items = {};
@@ -443,7 +468,11 @@ openerp.base.Sidebar = openerp.base.Widget.extend({
if (item.action) {
var ids = self.widget_parent.get_selected_ids();
if (ids.length == 0) {
- //TODO niv: maybe show a warning?
+ //TODO: make prettier warning?
+ $("<div />").text(_t("You must choose at least one record.")).dialog({
+ title: _t("Warning"),
+ modal: true
+ });
return false;
}
var additional_context = {
@@ -451,7 +480,7 @@ openerp.base.Sidebar = openerp.base.Widget.extend({
active_ids: ids,
active_model: self.widget_parent.dataset.model
};
- self.rpc("/base/action/load", {
+ self.rpc("/web/action/load", {
action_id: item.action.id,
context: additional_context
}, function(result) {
@@ -480,7 +509,7 @@ openerp.base.Sidebar = openerp.base.Widget.extend({
}
});
-openerp.base.TranslateDialog = openerp.base.Dialog.extend({
+openerp.web.TranslateDialog = openerp.web.Dialog.extend({
dialog_title: _t("Translations"),
init: function(view) {
// TODO fme: should add the language to fields_view_get because between the fields view get
@@ -500,7 +529,7 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
this.translatable_fields_keys = _.map(this.view.translatable_fields || [], function(i) { return i.name });
this.languages = null;
this.languages_loaded = $.Deferred();
- (new openerp.base.DataSetSearch(this, 'res.lang', this.view.dataset.get_context(),
+ (new openerp.web.DataSetSearch(this, 'res.lang', this.view.dataset.get_context(),
[['translatable', '=', '1']])).read_slice(['code', 'name'], { sort: 'id' }, this.on_languages_loaded);
},
start: function() {
@@ -536,7 +565,7 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(values[0][f] || '').attr('data-value', values[0][f] || '');
});
deff.resolve();
- }
+ };
if (lg.code === self.view_language) {
var values = {};
_.each(self.translatable_fields_keys, function(field) {
@@ -544,7 +573,7 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
});
callback([values]);
} else {
- self.rpc('/base/dataset/get', {
+ self.rpc('/web/dataset/get', {
model: self.view.dataset.model,
ids: [self.view.datarecord.id],
fields: self.translatable_fields_keys,
@@ -612,7 +641,11 @@ openerp.base.TranslateDialog = openerp.base.Dialog.extend({
}
});
-openerp.base.View = openerp.base.Widget.extend({
+/**
+ * @class
+ * @extends openerp.web.Widget
+ */
+openerp.web.View = openerp.web.Widget.extend(/** @lends openerp.web.View# */{
set_default_options: function(options) {
this.options = options || {};
_.defaults(this.options, {
@@ -625,7 +658,7 @@ openerp.base.View = openerp.base.Widget.extend({
},
open_translate_dialog: function(field) {
if (!this.translate_dialog) {
- this.translate_dialog = new openerp.base.TranslateDialog(this).start();
+ this.translate_dialog = new openerp.web.TranslateDialog(this).start();
}
this.translate_dialog.open(field);
},
@@ -637,7 +670,7 @@ openerp.base.View = openerp.base.Widget.extend({
* @param {String} [action_data.special=null] special action handlers (currently: only ``'cancel'``)
* @param {String} [action_data.type='workflow'] the action type, if present, one of ``'object'``, ``'action'`` or ``'workflow'``
* @param {Object} [action_data.context=null] additional action context, to add to the current context
- * @param {openerp.base.DataSet} dataset a dataset object used to communicate with the server
+ * @param {openerp.web.DataSet} dataset a dataset object used to communicate with the server
* @param {Object} [record_id] the identifier of the object on which the action is to be applied
* @param {Function} on_closed callback to execute when dialog is closed or when the action does not generate any result (no new action)
*/
@@ -652,29 +685,30 @@ openerp.base.View = openerp.base.Widget.extend({
active_ids: [record_id || false],
active_model: dataset.model
});
+ action.context = new openerp.web.CompoundContext(dataset.get_context(), action.context);
self.do_action(action, on_closed);
} else if (on_closed) {
on_closed(action);
}
};
- var context = new openerp.base.CompoundContext(dataset.get_context(), action_data.context || {});
+ var context = new openerp.web.CompoundContext(dataset.get_context(), action_data.context || {});
if (action_data.special) {
handler({result: {"type":"ir.actions.act_window_close"}});
} else if (action_data.type=="object") {
return dataset.call_button(action_data.name, [[record_id], context], handler);
} else if (action_data.type=="action") {
- return this.rpc('/base/action/load', { action_id: parseInt(action_data.name, 10), context: context }, handler);
+ return this.rpc('/web/action/load', { action_id: parseInt(action_data.name, 10), context: context }, handler);
} else {
return dataset.exec_workflow(record_id, action_data.name, handler);
- }
+ }
},
/**
* Directly set a view to use instead of calling fields_view_get. This method must
* be called before start(). When an embedded view is set, underlying implementations
- * of openerp.base.View must use the provided view instead of any other one.
- *
+ * of openerp.web.View must use the provided view instead of any other one.
+ *
* @param embedded_view A view.
*/
set_embedded_view: function(embedded_view) {
@@ -728,15 +762,15 @@ openerp.base.View = openerp.base.Widget.extend({
}
},
on_sidebar_edit_workflow: function() {
- this.log('Todo');
+ console.log('Todo');
},
on_sidebar_customize_object: function() {
- this.log('Todo');
+ console.log('Todo');
},
on_sidebar_import: function() {
},
on_sidebar_export: function() {
- var export_view = new openerp.base.DataExport(this, this.dataset);
+ var export_view = new openerp.web.DataExport(this, this.dataset);
export_view.start();
},
on_sidebar_translate: function() {
@@ -749,12 +783,16 @@ openerp.base.View = openerp.base.Widget.extend({
/**
* Registry for all the main views
*/
-openerp.base.views = new openerp.base.Registry();
+openerp.web.views = new openerp.web.Registry();
-openerp.base.json_node_to_xml = function(node, single_quote, indent) {
+openerp.web.json_node_to_xml = function(node, single_quote, indent) {
// For debugging purpose, this function will convert a json node back to xml
// Maybe usefull for xml view editor
- if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) {
+
+ if (typeof(node) === 'string') {
+ return node;
+ }
+ else if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) {
throw("Node a json node");
}
indent = indent || 0;
@@ -772,11 +810,11 @@ openerp.base.json_node_to_xml = function(node, single_quote, indent) {
}
r += ' ' + attr + '="' + vattr + '"';
}
- if (node.children.length) {
+ if (node.children && node.children.length) {
r += '>\n';
var childs = [];
for (var i = 0, ii = node.children.length; i < ii; i++) {
- childs.push(openerp.base.json_node_to_xml(node.children[i], single_quote, indent + 1));
+ childs.push(openerp.web.json_node_to_xml(node.children[i], single_quote, indent + 1));
}
r += childs.join('\n');
r += '\n' + sindent + '</' + node.tag + '>';
diff --git a/addons/base/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 48b6473feec..e55d56f5912 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -40,7 +40,7 @@
<tr>
<td valign="top" id="oe_secondary_menu" class="secondary_menu">
</td>
- <td valign="top">
+ <td valign="top" class="oe-application-container">
<div id="oe_app" class="oe-application">
</div>
</td>
@@ -146,7 +146,7 @@
</t>
<t t-name="BackupDB">
<form name="backup_db_form" class="oe_forms" method="POST" target="backup-target"
- action="/base/database/backup">
+ action="/web/database/backup">
<input type="hidden" name="token"/>
<table width="100%">
<tr>
@@ -240,7 +240,7 @@
<form class="oe_forms">
<fieldset>
<legend style="">
- <img src="/base/static/src/img/stock_person.png" alt="" />
+ <img src="/web/static/src/img/stock_person.png" alt="" />
</legend>
<div class="oe_box2">
<table align="center" cellspacing="2px" cellpadding="0">
@@ -295,7 +295,7 @@
<tbody>
<tr>
<td>
- <img src="/base/static/src/img/product.png"/>
+ <img src="/web/static/src/img/product.png"/>
</td>
<td>
<strong>Full featured</strong><br />
@@ -304,7 +304,7 @@
</tr>
<tr>
<td>
- <img src="/base/static/src/img/accessories-archiver.png"/>
+ <img src="/web/static/src/img/accessories-archiver.png"/>
</td>
<td>
<strong>Open Source</strong><br />
@@ -313,7 +313,7 @@
</tr>
<tr>
<td>
- <img src="/base/static/src/img/partner.png" />
+ <img src="/web/static/src/img/partner.png" />
</td>
<td>
<strong>User Friendly</strong><br />
@@ -334,26 +334,30 @@
</t>
<t t-name="Header-content">
<h1 class="header_title">
- <span class="database"><t t-esc="widget.session.db"/></span> - <t t-esc="widget.session.login"/> <br/>
- <small class="username">rpc_session_id: <t t-esc="widget.session.session_id"/></small>
+ <t t-esc="user.company_id[1]"/> (<t t-esc="widget.session.db"/>)<br/>
+ <small class="username"><t t-esc="user.name"/></small>
</h1>
<div class="header_corner">
<ul class="block">
<li>
- <a href="#home" title="Home" class="home"><img src="/base/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
+ <a t-att-href="'/' + widget.qs" title="Home" class="home"><img src="/web/static/src/img/header-home.png" width="16" height="16" border="0"/></a>
</li>
+ <!--
<li>
- <a href="#requests" title="Requests" class="requests"><img src="/base/static/src/img/header-requests.png" width="16" height="16" border="0"/><small>1</small></a>
+ <a href="#requests" title="Requests" class="requests"><img src="/web/static/src/img/header-requests.png" width="16" height="16" border="0"/><small>1</small></a>
</li>
+ -->
<li class="preferences">
- <a href="#preferences" title="Preferences" class="preferences"><img src="/base/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
+ <a href="#preferences" title="Preferences" class="preferences"><img src="/web/static/src/img/header-preferences.png" width="16" height="16" border="0"/></a>
</li>
<li>
- <a href="#about" title="About" class="about"><img src="/base/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
+ <a href="#about" title="About" class="about"><img src="/web/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
</li>
+ <!--
<li>
- <a href="http://doc.openerp.com/v6.0/book?version=$version" title="Help" target="_blank" class="help"><img src="/base/static/src/img/header-help.png" width="16" height="16" border="0"/></a>
+ <a href="http://doc.openerp.com/v6.0/book?version=$version" title="Help" target="_blank" class="help"><img src="/web/static/src/img/header-help.png" width="16" height="16" border="0"/></a>
</li>
+ -->
</ul>
<div class="block">
<a href="#logout" class="logout">LOGOUT</a>
@@ -416,8 +420,6 @@
<table class="view-manager-main-table">
<tr>
<td class="view-manager-main-content">
- <a class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
- href="javascript: void(0)"> </a>
<div class="oe_vm_switch">
<t t-if="views.length != 1" t-foreach="views" t-as="view">
<button type="button" t-att-data-view-type="view.view_type">
@@ -438,6 +440,14 @@
</tr>
</table>
</t>
+
+<t t-extend="ViewManager" t-name="ViewManagerAction">
+ <t t-jquery=".view-manager-main-content" t-operation="prepend">
+ <a class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
+ href="javascript: void(0)"> </a>
+ </t>
+</t>
+
<t t-name="Sidebar">
<a class="toggle-sidebar"></a>
<div class="sidebar-content">
@@ -562,7 +572,7 @@
</table>
</th>
</tr>
- <tr t-if="options.header">
+ <tr t-if="options.header" class="oe-listview-header-columns">
<t t-foreach="columns" t-as="column">
<th t-if="column.meta">
<t t-esc="column.string"/>
@@ -660,13 +670,13 @@
<div class="oe-sidebar-attachments-toolbar">
<div class="oe-binary-file-set" style="float: right">
<form class="oe-binary-form" t-attf-target="#{element_id}_iframe"
- method="post" enctype="multipart/form-data" action="/base/binary/upload_attachment">
+ method="post" enctype="multipart/form-data" action="/web/binary/upload_attachment">
<input type="hidden" name="session_id" t-att-value="session.session_id"/>
<input type="hidden" name="callback" t-attf-value="#{element_id}_iframe"/>
<input type="hidden" name="model" t-att-value="view.dataset.model"/>
<input type="hidden" name="id" t-att-value="view.datarecord.id"/>
<button class="button" type="button">
- <img src="/base/static/src/img/throbber.gif" width="16" height="16" style="display: none"/>
+ <img src="/web/static/src/img/throbber.gif" width="16" height="16" style="display: none"/>
<span>Add</span>
</button>
<input type="file" class="oe-binary-file" name="ufile" title="Add attachment"
@@ -678,14 +688,14 @@
<br style="clear: both"/>
<ul class="oe-sidebar-attachments-items">
<li t-foreach="attachments" t-as="attachment">
- <t t-if="attachment.type == 'binary'" t-set="attachment.url" t-value="'/base/binary/saveas?session_id='
+ <t t-if="attachment.type == 'binary'" t-set="attachment.url" t-value="'/web/binary/saveas?session_id='
+ session.session_id + '&amp;model=ir.attachment&amp;id=' + attachment.id
+ '&amp;field=datas&amp;fieldname=name&amp;t=' + (new Date().getTime())"/>
<a class="oe-sidebar-attachments-link" t-att-href="attachment.url" target="_blank">
<t t-esc="attachment.name"/>
</a>
<a href="#" class="oe-sidebar-attachment-delete" t-att-data-id="attachment.id" t-attf-title="Delete the attachment #{attachment.name}">
- <img src="/base/static/src/img/attachments-close.png" width="15" height="15" border="0"/>
+ <img src="/web/static/src/img/attachments-close.png" width="15" height="15" border="0"/>
</a>
</li>
</ul>
@@ -752,7 +762,7 @@
t-att-class="'field_' + widget.type"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
/>
- <img class="oe_field_translate" t-if="widget.field.translate" src="/base/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
+ <img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
</t>
<t t-name="FieldEmail">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
@@ -762,7 +772,7 @@
</td>
<td width="16">
<button type="button" class="button" title="Send an e-mail with your default e-mail client">
- <img src="/base/static/src/img/icons/terp-mail-message-new.png"/>
+ <img src="/web/static/src/img/icons/terp-mail-message-new.png"/>
</button>
</td>
</tr>
@@ -776,7 +786,7 @@
</td>
<td width="16">
<button type="button" class="button" title="Open this resource">
- <img src="/base/static/src/img/icons/gtk-ok.png"/>
+ <img src="/web/static/src/img/icons/gtk-ok.png"/>
</button>
</td>
</tr>
@@ -789,7 +799,7 @@
t-att-class="'field_' + widget.type"
t-attf-style="width: #{widget.field.translate ? '99' : '100'}%"
></textarea>
- <img class="oe_field_translate" t-if="widget.field.translate" src="/base/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
+ <img class="oe_field_translate" t-if="widget.field.translate" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>
</t>
<t t-name="FieldDate">
<input type="text" size="1" style="width: 100%"
@@ -804,10 +814,8 @@
t-att-id="widget.element_id + '_field'"
t-att-class="'field_' + widget.type"
style="width: 100%">
- <t t-foreach="widget.field_index" t-as="options">
- <option t-att-value="options.ikey">
- <t t-esc="options.label"/>
- </option>
+ <t t-foreach="widget.values" t-as="option">
+ <option><t t-esc="option[1]"/></option>
</t>
</select>
</t>
@@ -815,9 +823,9 @@
<div t-att-id="widget.element_id" class="oe-m2o">
<input t-att-id="widget.element_id + '_input'" type="text" size="1" style="width: 100%;"/>
<span class="oe-m2o-drop-down-button" t-att-id="widget.element_id + '_drop_down'">
- <img src="/base/static/src/img/down-arrow.png" /></span>
+ <img src="/web/static/src/img/down-arrow.png" /></span>
<span class="oe-m2o-cm-button" t-att-id="widget.name + '_open'">
- <img src="/base/static/src/img/icons/gtk-index.png"/></span>
+ <img src="/web/static/src/img/icons/gtk-index.png"/></span>
<div t-att-id="widget.cm_id" class="contextMenu" style="display:none">
</div>
</div>
@@ -870,7 +878,7 @@
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center">
- <img src="/base/static/src/img/placeholder.png" class="oe-binary-image"
+ <img src="/web/static/src/img/placeholder.png" class="oe-binary-image"
t-att-border="widget.readonly ? 0 : 1"
t-att-id="widget.element_id + '_field'"
t-att-name="widget.name"
@@ -888,11 +896,11 @@
<td>
<div class="oe-binary-file-set" style="width: 40px; height:22px;">
<form class="oe-binary-form" t-att-target="widget.iframe"
- method="post" enctype="multipart/form-data" action="/base/binary/upload">
+ method="post" enctype="multipart/form-data" action="/web/binary/upload">
<input type="hidden" name="session_id" value=""/>
<input type="hidden" name="callback" t-att-value="widget.iframe"/>
<button class="button" type="button" title="Set Image">
- <img src="/base/static/src/img/icons/STOCK_DIRECTORY.png"/>
+ <img src="/web/static/src/img/icons/STOCK_DIRECTORY.png"/>
</button>
<input type="file" class="oe-binary-file" name="ufile"/>
</form>
@@ -900,14 +908,14 @@
</td>
<td>
<button class="button oe-binary-file-clear" type="button" title="Clear">
- <img src="/base/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
+ <img src="/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
</button>
</td>
</tr>
</table>
</div>
<div class="oe-binary-progress" style="display: none">
- <img src="/base/static/src/img/throbber.gif" width="16" height="16"/>
+ <img src="/web/static/src/img/throbber.gif" width="16" height="16"/>
<b>Uploading ...</b>
</div>
<iframe t-att-id="widget.iframe" t-att-name="widget.iframe" style="display: none"> </iframe>
@@ -931,11 +939,11 @@
<td>
<div class="oe-binary-file-set" style="width: 80px; height:22px;">
<form class="oe-binary-form" t-att-target="widget.iframe"
- method="post" enctype="multipart/form-data" action="/base/binary/upload">
+ method="post" enctype="multipart/form-data" action="/web/binary/upload">
<input type="hidden" name="session_id" value=""/>
<input type="hidden" name="callback" t-att-value="widget.iframe"/>
<button class="button" type="button" title="Set Image">
- <img src="/base/static/src/img/icons/STOCK_DIRECTORY.png"/>
+ <img src="/web/static/src/img/icons/STOCK_DIRECTORY.png"/>
<span>Select</span>
</button>
<input type="file" class="oe-binary-file" name="ufile"/>
@@ -944,13 +952,13 @@
</td>
<td>
<button class="button oe-binary-file-save" type="button" title="Save As">
- <img src="/base/static/src/img/icons/gtk-save.png"/>
+ <img src="/web/static/src/img/icons/gtk-save.png"/>
<span>Save As</span>
</button>
</td>
<td>
<button class="button oe-binary-file-clear" type="button" title="Clear">
- <img src="/base/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
+ <img src="/web/static/src/img/icons/STOCK_MISSING_IMAGE.png"/>
<span>Clear</span>
</button>
</td>
@@ -958,7 +966,7 @@
</table>
</td>
<td class="oe-binary-progress" style="display: none" nowrap="true">
- <img src="/base/static/src/img/throbber.gif" width="16" height="16"/>
+ <img src="/web/static/src/img/throbber.gif" width="16" height="16"/>
<b>Uploading ...</b>
<iframe t-att-id="widget.iframe" t-att-name="widget.iframe" style="display: none"> </iframe>
</td>
@@ -970,7 +978,7 @@
t-att-id="widget.element_id + '_button'"
t-att-title="widget.help"
style="width: 100%" class="button">
- <img t-if="widget.node.attrs.icon" t-att-src="'/base/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
+ <img t-if="widget.node.attrs.icon" t-att-src="'/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
<span t-if="widget.string"><t t-esc="widget.string"/></span>
</button>
</t>
@@ -1020,7 +1028,7 @@
t-att-title="attrs.help"
t-att-class="classes.join(' ')"
t-att-autofocus="attrs.default_focus === '1' ? 'autofocus' : undefined">
- <img t-if="attrs.icon" t-att-src="'/base/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
+ <img t-if="attrs.icon" t-att-src="'/web/static/src/img/icons/' + attrs.icon + '.png'" width="16" height="16"/>
<br t-if="attrs.icon and attrs.string"/>
<t t-esc="attrs.string"/>
</button>
@@ -1118,7 +1126,8 @@
<div t-att-id="element_id">
<select class="searchview_extended_prop_field">
<t t-foreach="attrs.fields" t-as="field">
- <option t-att="{'selected': field === attrs.selected ? 'selected' : null}"
+ <option t-if="typeof field.store === 'undefined' || field.store || field.fnct_search"
+ t-att="{'selected': field === attrs.selected ? 'selected' : null}"
t-att-value="field.name">
<t t-esc="field.string"/>
</option>
@@ -1157,7 +1166,7 @@
<t t-name="DialogWarning">
<table cellspacing="0" cellpadding="0" border="0" class="oe-dialog-warning">
<tr>
- <td><img src="/base/static/src/img/warning.png" class="oe-dialog-icon"/></td>
+ <td><img src="/web/static/src/img/warning.png" class="oe-dialog-icon"/></td>
<td>
<p>
<t t-js="d">
@@ -1238,119 +1247,87 @@
<t t-name="ExportView">
<a id="exportview" href="javascript: void(0)" style="text-decoration: none;color: #3D3D3D;">Export</a>
</t>
-<t t-name="ExportTreeView">
- <table class="view" style="background-color: #F3F3F3;">
- <tr>
- <td align="left">
- This wizard will export all data that matches the current search criteria to a CSV file.
- You can export all data or only the fields that can be reimported after modification.
- </td>
- </tr>
- <tr>
- <td>
- <table>
- <tr>
- <td class="label"><label>Export Type:</label></td>
- <td>
- <select id="import_compat" name="import_compat">
- <option value="1">Import Compatible Export</option>
- <option value="0">Export all Data</option>
- </select>
- </td>
- <td class="label"><label>Export Format</label></td>
- <td>
- <select id="export_format" name="export_format">
- <option value="csv">CSV</option>
- <option value="xls">Excel</option>
- </select>
- </td>
+<table t-name="ExportTreeView" class="oe-export"
+ style="background-color: #F3F3F3;">
+ <tr>
+ <td colspan="3">
+ This wizard will export all data that matches the current search criteria to a CSV file.
+ You can export all data or only the fields that can be reimported after modification.
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">
+ <label for="import_compat">Export Type:</label>
+ <select id="import_compat" name="import_compat">
+ <option value="yes">Import Compatible Export</option>
+ <option value="">Export all Data</option>
+ </select>
- </tr>
- </table>
- </td>
- </tr>
+ <label for="export_format">Export Formats</label>
+ <select id="export_format" name="export_format"></select>
+ </td>
+ </tr>
- <tr>
- <td>
- <table class="oe_export_fields_selector_export">
- <tr>
- <th class="oe_view_title" valign="bottom">Available fields</th>
- <th class="oe_view_title"></th>
- <th class="oe_view_title">Fields to export
- <a style="color: blue; text-decoration: none;" href="#" id="export_new_list">Save fields list</a>
- <div id="savenewlist"></div>
- <div id="ExistsExportList"></div>
- </th>
- </tr>
- <tr>
- <td class="oe_export_fields_selector_left">
- <div id="left_field_panel">
- </div>
- </td>
- <td>
- <table class="oe_export_fields_selector_center">
- <tr>
- <td align="center">
- <button id="add_field" class="oe_export_button_export">Add</button>
- </td>
- </tr>
- <tr>
- <td align="center">
- <button id="remove_field" class="oe_export_button_export">Remove</button>
- </td>
- </tr>
- <tr>
- <td align="center">
- <button id="remove_all_field" class="oe_export_button_export">Remove All</button>
- </td>
- </tr>
- </table>
- </td>
- <td class="oe_export_fields_selector_right">
- <select name="fields_list" id="fields_list" multiple="multiple"></select>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-</t>
+ <tr>
+ <th>Available fields</th>
+ <th/>
+ <th>
+ Fields to export
+ <a style="color: blue; text-decoration: none;" href="#" id="export_new_list">Save fields list</a>
+ <div id="savenewlist"></div>
+ <div id="ExistsExportList"></div>
+ </th>
+ </tr>
+ <tr style="height: 400px;">
+ <td class="oe_export_fields_selector_left">
+ <div id="left_field_panel">
+ </div>
+ </td>
+ <td class="oe_export_fields_selector_center">
+ <button id="add_field">Add</button>
+ <button id="remove_field">Remove</button>
+ <button id="remove_all_field">Remove All</button>
+ </td>
+ <td class="oe_export_fields_selector_right">
+ <select name="fields_list" id="fields_list"
+ multiple="multiple"></select>
+ </td>
+ </tr>
+</table>
-<t t-name="ExportTreeView-Secondary">
- <table id="field-tree-structure" class="oe_export_fields_selector_export" cellspacing="0" cellpadding="0">
- <tr><th class="oe_export_tree_header"> Name </th></tr>
- <t t-call="ExportTreeView-Secondary.children"/>
- </table>
-</t>
-<t t-name="ExportTreeView-Secondary.children">
- <t t-foreach="fields" t-as="field" >
- <tr t-att-id="'treerow-' + field.id" class="oe_export_row">
- <td>
- <table class="tree_grid" border="0">
- <tr class="oe_export_row">
- <t t-foreach="(field.id).split('/')" t-as="level" >
- <t t-if="(field.id).split('/')[0] != level">
- <td width="18">&amp;nbsp;</td>
- </t>
+<table t-name="ExportTreeView-Secondary"
+ id="field-tree-structure" class="oe_export_fields_selector_export"
+ cellspacing="0" cellpadding="0">
+ <tr><th class="oe_export_tree_header"> Name </th></tr>
+ <t t-call="ExportTreeView-Secondary.children"/>
+</table>
+<tr t-name="ExportTreeView-Secondary.children"
+ t-foreach="fields" t-as="field"
+ t-att-id="'treerow-' + field.id" class="oe_export_row">
+ <td>
+ <table class="tree_grid" border="0">
+ <tr class="oe_export_row">
+ <t t-foreach="(field.id).split('/')" t-as="level" >
+ <t t-if="(field.id).split('/')[0] != level">
+ <td width="18">&amp;nbsp;</td>
+ </t>
+ </t>
+ <td valign="top" align="left" style="cursor: pointer;" width="18">
+ <t t-if="field.children">
+ <t t-if="(field.id).split('/').length != 3">
+ <img t-att-id="'parentimg-' + field.id" src="/web/static/src/img/expand.gif" width="16" height="16" border="0"/>
</t>
- <td valign="top" align="left" style="cursor: pointer;" width="18">
- <t t-if="(field.children).length >= 1">
- <t t-if="(field.id).split('/').length != 3">
- <img t-att-id="'parentimg-' + field.id" src="/base/static/src/img/expand.gif" width="16" height="16" border="0"/>
- </t>
- </t>
- </td>
- <td id="tree-column" valign="middle" align="left" style="cursor: pointer;">
- <a t-att-id="'export-' + field.id" t-att-string="field.string" href="javascript: void(0);" style="text-decoration: none;">
- <t t-esc="field.string"/>
- </a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </t>
-</t>
+ </t>
+ </td>
+ <td id="tree-column" valign="middle" align="left" style="cursor: pointer;">
+ <a t-att-id="'export-' + field.id" t-att-string="field.string" href="javascript: void(0);" style="text-decoration: none;">
+ <t t-esc="field.string"/>
+ </a>
+ </td>
+ </tr>
+ </table>
+ </td>
+</tr>
<t t-name="ExportNewList">
<tr>
@@ -1361,18 +1338,15 @@
</t>
<t t-name="Exists.ExportList">
- <tr><th align="right"><label >Saved exports:</label></th></tr>
- <tr align="left">
- <td>
- <select id="saved_export_list" style="width: 100%;">
- <option></option>
- <t t-foreach="existing_exports" t-as="export">
- <option t-att-value="export.id"><t t-esc="export.name"/></option>
- </t>
- </select>
- </td>
- <td><button class="oe_export_button_export" id="delete_export_list">Delete</button></td>
- </tr>
+ <label for="saved_export_list">Saved exports:</label>
+
+ <select id="saved_export_list">
+ <option></option>
+ <t t-foreach="existing_exports" t-as="export">
+ <option t-att-value="export.id"><t t-esc="export.name"/></option>
+ </t>
+ </select>
+ <button class="oe_export_button_export" id="delete_export_list" type="button">Delete</button>
</t>
<t t-name="Change_Pwd">
<form name="change_password_form" class="oe_forms" method="POST">
@@ -1398,4 +1372,47 @@
</table>
</form>
</t>
+<t t-name="About-Page">
+ <div>
+ <h1>OpenERP Web</h1>
+ <h3 style="padding:0 5px 5px">Version <t t-esc="version_info.version"/></h3>
+ <p>
+ Copyright © 2011-TODAY OpenERP SA. All Rights Reserved.<br />
+ OpenERP is a trademark of the <a target="_blank" href="http://openerp.com/" style="text-decoration: underline;">OpenERP SA Company</a>.
+ </p>
+ <p>
+ Licenced under the terms of <a target="_blank" href="http://www.gnu.org/licenses/agpl.html" style="text-decoration: underline;">GNU Affero General Public License</a>
+ </p>
+ <br />
+ <h1>About OpenERP</h1>
+ <p>
+ <a target="_blank" href="http://openerp.com/" style="text-decoration: underline;">OpenERP</a> is a free enterprise-scale software system that is designed to boost
+ productivity and profit through data integration. It connects, improves and
+ manages business processes in areas such as sales, finance, supply chain,
+ project management, production, services, CRM, etc...
+ </p>
+ <p>
+ The system is platform-independent, and can be installed on Windows, Mac OS X,
+ and various Linux and other Unix-based distributions. Its architecture enables
+ new functionality to be rapidly created, modifications to be made to a
+ production system and migration to a new version to be straightforward.
+ </p>
+ <p>
+ Depending on your needs, OpenERP is available through a web or application client.
+ </p>
+ </div>
+</t>
+<t t-name="FieldStatus">
+ <div t-att-id="widget.element_id"></div>
+</t>
+<t t-name="FieldStatus.content">
+ <ul class="oe-arrow-list">
+ <t t-set="size" t-value="widget.to_show.length"/>
+ <t t-foreach="_.range(size)" t-as="i">
+ <li t-att-class="widget.to_show[i][0] === widget.selected_value ? 'oe-arrow-list-selected' : ''">
+ <span class="oe-arrow-list-before" t-if="i &gt; 0"></span><span><t t-esc="widget.to_show[i][1]"/></span><span class="oe-arrow-list-after" t-if="i &lt; size - 1"></span>
+ </li>
+ </t>
+ </ul>
+</t>
</templates>
diff --git a/addons/base/static/test/class.js b/addons/web/static/test/class.js
index 9ee6cedbcf1..ed977635a5f 100644
--- a/addons/base/static/test/class.js
+++ b/addons/web/static/test/class.js
@@ -1,13 +1,13 @@
$(document).ready(function () {
var openerp;
- module('base-class', {
+ module('web-class', {
setup: function () {
openerp = window.openerp.init();
- window.openerp.base.core(openerp);
+ window.openerp.web.core(openerp);
}
});
test('Basic class creation', function () {
- var C = openerp.base.Class.extend({
+ var C = openerp.web.Class.extend({
foo: function () {
return this.somevar;
}
@@ -19,12 +19,12 @@ $(document).ready(function () {
strictEqual(instance.foo(), 3);
});
test('Class initialization', function () {
- var C1 = openerp.base.Class.extend({
+ var C1 = openerp.web.Class.extend({
init: function () {
this.foo = 3;
}
});
- var C2 = openerp.base.Class.extend({
+ var C2 = openerp.web.Class.extend({
init: function (arg) {
this.foo = arg;
}
@@ -37,7 +37,7 @@ $(document).ready(function () {
strictEqual(i2.foo, 42);
});
test('Inheritance', function () {
- var C0 = openerp.base.Class.extend({
+ var C0 = openerp.web.Class.extend({
foo: function () {
return 1;
}
@@ -58,7 +58,7 @@ $(document).ready(function () {
strictEqual(new C2().foo(), 3);
});
test('In-place extension', function () {
- var C0 = openerp.base.Class.extend({
+ var C0 = openerp.web.Class.extend({
foo: function () {
return 3;
},
@@ -84,7 +84,7 @@ $(document).ready(function () {
strictEqual(new C0().qux(), 5);
});
test('In-place extension and inheritance', function () {
- var C0 = openerp.base.Class.extend({
+ var C0 = openerp.web.Class.extend({
foo: function () { return 1; },
bar: function () { return 1; }
});
@@ -102,7 +102,7 @@ $(document).ready(function () {
strictEqual(new C1().bar(), 2);
});
test('In-place extensions alter existing instances', function () {
- var C0 = openerp.base.Class.extend({
+ var C0 = openerp.web.Class.extend({
foo: function () { return 1; },
bar: function () { return 1; }
});
@@ -118,7 +118,7 @@ $(document).ready(function () {
strictEqual(instance.bar(), 3);
});
test('In-place extension of subclassed types', function () {
- var C0 = openerp.base.Class.extend({
+ var C0 = openerp.web.Class.extend({
foo: function () { return 1; },
bar: function () { return 1; }
});
diff --git a/addons/base/static/test/form.js b/addons/web/static/test/form.js
index 34930918ae0..8317c7bfcd2 100644
--- a/addons/base/static/test/form.js
+++ b/addons/web/static/test/form.js
@@ -3,13 +3,13 @@ $(document).ready(function () {
module("form.widget", {
setup: function () {
openerp = window.openerp.init(true);
- window.openerp.base.core(openerp);
- window.openerp.base.chrome(openerp);
+ window.openerp.web.core(openerp);
+ window.openerp.web.chrome(openerp);
// views loader stuff
- window.openerp.base.data(openerp);
- window.openerp.base.views(openerp);
- window.openerp.base.list(openerp);
- window.openerp.base.form(openerp);
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
+ window.openerp.web.list(openerp);
+ window.openerp.web.form(openerp);
}
});
test("compute_domain", function () {
@@ -19,15 +19,15 @@ $(document).ready(function () {
'select1': {value: 'day'},
'rrule_type': {value: 'monthly'}
};
- ok(openerp.base.form.compute_domain(
+ ok(openerp.web.form.compute_domain(
[['a', '=', 3]], fields));
- ok(openerp.base.form.compute_domain(
+ ok(openerp.web.form.compute_domain(
[['group_method','!=','count']], fields));
- ok(openerp.base.form.compute_domain(
+ ok(openerp.web.form.compute_domain(
[['select1','=','day'], ['rrule_type','=','monthly']], fields));
});
test("compute_domain or", function () {
- var base = {
+ var web = {
'section_id': {value: null},
'user_id': {value: null},
'member_ids': {value: null}
@@ -37,22 +37,22 @@ $(document).ready(function () {
'|', ['user_id','=',3],
['member_ids', 'in', [3]]];
- ok(openerp.base.form.compute_domain(domain, _.extend(
- {}, base, {'section_id': {value: 42}})));
- ok(openerp.base.form.compute_domain(domain, _.extend(
- {}, base, {'user_id': {value: 3}})));
+ ok(openerp.web.form.compute_domain(domain, _.extend(
+ {}, web, {'section_id': {value: 42}})));
+ ok(openerp.web.form.compute_domain(domain, _.extend(
+ {}, web, {'user_id': {value: 3}})));
- ok(openerp.base.form.compute_domain(domain, _.extend(
- {}, base, {'member_ids': {value: 3}})));
+ ok(openerp.web.form.compute_domain(domain, _.extend(
+ {}, web, {'member_ids': {value: 3}})));
});
test("compute_domain not", function () {
var fields = {
'a': {value: 5},
'group_method': {value: 'line'}
};
- ok(openerp.base.form.compute_domain(
+ ok(openerp.web.form.compute_domain(
['!', ['a', '=', 3]], fields));
- ok(openerp.base.form.compute_domain(
+ ok(openerp.web.form.compute_domain(
['!', ['group_method','=','count']], fields));
});
});
diff --git a/addons/web/static/test/formats.js b/addons/web/static/test/formats.js
new file mode 100644
index 00000000000..331725dd9a5
--- /dev/null
+++ b/addons/web/static/test/formats.js
@@ -0,0 +1,54 @@
+$(document).ready(function () {
+ var openerp;
+ module('web-formats', {
+ setup: function () {
+ openerp = window.openerp.init();
+ window.openerp.web.core(openerp);
+ window.openerp.web.dates(openerp);
+ window.openerp.web.formats(openerp);
+ }
+ });
+ test("format_datetime", function () {
+ var date = openerp.web.str_to_datetime("2009-05-04 12:34:23");
+ var str = openerp.web.format_value(date, {type:"datetime"});
+ equal(str, date.toString("M/d/yyyy h:mm:ss tt"));
+ });
+ test("format_date", function () {
+ var date = openerp.web.str_to_datetime("2009-05-04 12:34:23");
+ var str = openerp.web.format_value(date, {type:"date"});
+ equal(str, date.toString("M/d/yyyy"));
+ });
+ test("format_time", function () {
+ var date = openerp.web.str_to_datetime("2009-05-04 12:34:23");
+ var str = openerp.web.format_value(date, {type:"time"});
+ equal(str, date.toString("h:mm:ss tt"));
+ });
+ test("format_float", function () {
+ var fl = 12.1234;
+ var str = openerp.web.format_value(fl, {type:"float"});
+ equal(str, "12.12");
+ });
+ test("parse_datetime", function () {
+ var val = openerp.web.str_to_datetime("2009-05-04 12:34:23");
+ var res = openerp.web.parse_value(val.toString("M/d/yyyy h:mm:ss tt"), {type:"datetime"});
+ equal(val.toString("M/d/yyyy h:mm:ss tt"), res.toString("M/d/yyyy h:mm:ss tt"));
+ });
+ test("parse_date", function () {
+ var val = openerp.web.str_to_date("2009-05-04");
+ var res = openerp.web.parse_value(val.toString("M/d/yyyy"), {type:"date"});
+ equal(val.toString("M/d/yyyy"), res.toString("M/d/yyyy"));
+ });
+ test("parse_time", function () {
+ var val = openerp.web.str_to_time("12:34:23");
+ var res = openerp.web.parse_value(val.toString("h:mm:ss tt"), {type:"time"});
+ equal(val.toString("h:mm:ss tt"), res.toString("h:mm:ss tt"));
+ });
+ test("parse_float", function () {
+ var str = "134,112.1234";
+ var val = openerp.web.parse_value(str, {type:"float"});
+ equal(val, 134112.1234);
+ var str = "-134,112.1234";
+ var val = openerp.web.parse_value(str, {type:"float"});
+ equal(val, -134112.1234);
+ });
+}); \ No newline at end of file
diff --git a/addons/base/static/test/list-utils.js b/addons/web/static/test/list-utils.js
index 0b15b81f544..f71da82a560 100644
--- a/addons/base/static/test/list-utils.js
+++ b/addons/web/static/test/list-utils.js
@@ -11,29 +11,29 @@ $(document).ready(function () {
module('list-events', {
setup: function () {
openerp = window.openerp.init();
- window.openerp.base.list(openerp);
+ window.openerp.web.list(openerp);
}
});
test('Simple event triggering', function () {
- var e = create(openerp.base.list.Events), passed = false;
+ var e = create(openerp.web.list.Events), passed = false;
e.bind('foo', function () { passed = true; });
e.trigger('foo');
ok(passed);
});
test('Bind all', function () {
- var e = create(openerp.base.list.Events), event = null;
+ var e = create(openerp.web.list.Events), event = null;
e.bind(null, function (ev) { event = ev; });
e.trigger('foo');
strictEqual(event, 'foo');
});
test('Propagate trigger params', function () {
- var e = create(openerp.base.list.Events), p = false;
+ var e = create(openerp.web.list.Events), p = false;
e.bind(null, function (_, param) { p = param });
e.trigger('foo', true);
strictEqual(p, true)
});
test('Bind multiple callbacks', function () {
- var e = create(openerp.base.list.Events), count;
+ var e = create(openerp.web.list.Events), count;
e.bind('foo', function () { count++; })
.bind('bar', function () { count++; })
.bind(null, function () { count++; })
@@ -54,10 +54,10 @@ $(document).ready(function () {
strictEqual(count, 3);
});
test('Mixin events', function () {
- var cls = openerp.base.Class.extend({
+ var cls = openerp.web.Class.extend({
method: function () { this.trigger('e'); }
});
- cls.include(openerp.base.list.Events);
+ cls.include(openerp.web.list.Events);
var instance = new cls, triggered = false;
instance.bind('e', function () { triggered = true; });
@@ -66,7 +66,7 @@ $(document).ready(function () {
ok(triggered);
});
test('Unbind all handlers', function () {
- var e = create(openerp.base.list.Events), passed = 0;
+ var e = create(openerp.web.list.Events), passed = 0;
e.bind('foo', function () { passed++; });
e.trigger('foo');
strictEqual(passed, 1);
@@ -75,7 +75,7 @@ $(document).ready(function () {
strictEqual(passed, 1);
});
test('Unbind one handler', function () {
- var e = create(openerp.base.list.Events), p1 = 0, p2 = 0,
+ var e = create(openerp.web.list.Events), p1 = 0, p2 = 0,
h1 = function () { p1++; }, h2 = function () { p2++; };
e.bind('foo', h1);
e.bind('foo', h2);
@@ -91,11 +91,11 @@ $(document).ready(function () {
module('list-records', {
setup: function () {
openerp = window.openerp.init();
- window.openerp.base.list(openerp);
+ window.openerp.web.list(openerp);
}
});
test('Basic record initialization', function () {
- var r = new openerp.base.list.Record({qux: 3});
+ var r = new openerp.web.list.Record({qux: 3});
r.set('foo', 1);
r.set('bar', 2);
strictEqual(r.get('foo'), 1);
@@ -103,7 +103,7 @@ $(document).ready(function () {
strictEqual(r.get('qux'), 3);
});
test('Change all the things', function () {
- var r = new openerp.base.list.Record(), changed = false, field;
+ var r = new openerp.web.list.Record(), changed = false, field;
r.bind('change', function () { changed = true; });
r.bind(null, function (e) { field = field || e.split(':')[1]});
r.set('foo', 1);
@@ -112,7 +112,7 @@ $(document).ready(function () {
strictEqual(field, 'foo');
});
test('Change single field', function () {
- var r = new openerp.base.list.Record(), changed = 0;
+ var r = new openerp.web.list.Record(), changed = 0;
r.bind('change:foo', function () { changed++; });
r.set('foo', 1);
r.set('bar', 1);
@@ -124,11 +124,11 @@ $(document).ready(function () {
module('list-collections-degenerate', {
setup: function () {
openerp = window.openerp.init();
- window.openerp.base.list(openerp);
+ window.openerp.web.list(openerp);
}
});
test('Fetch from collection', function () {
- var c = new openerp.base.list.Collection();
+ var c = new openerp.web.list.Collection();
strictEqual(c.length, 0);
c.add({id: 1, value: 2});
c.add({id: 2, value: 3});
@@ -137,16 +137,16 @@ $(document).ready(function () {
strictEqual(c.length, 4);
var r = c.at(2), r2 = c.get(1);
- ok(r instanceof openerp.base.list.Record);
+ ok(r instanceof openerp.web.list.Record);
strictEqual(r.get('id'), 3);
strictEqual(r.get('value'), 5);
- ok(r2 instanceof openerp.base.list.Record);
+ ok(r2 instanceof openerp.web.list.Record);
strictEqual(r2.get('id'), 1);
strictEqual(r2.get('value'), 2);
});
test('Add at index', function () {
- var c = new openerp.base.list.Collection([
+ var c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -158,7 +158,7 @@ $(document).ready(function () {
strictEqual(c.at(3).get('value'), 20);
});
test('Remove record', function () {
- var c = new openerp.base.list.Collection([
+ var c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -171,7 +171,7 @@ $(document).ready(function () {
strictEqual(c.at(1).get('value'), 20);
});
test('Reset', function () {
- var event, obj, c = new openerp.base.list.Collection([
+ var event, obj, c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -193,7 +193,7 @@ $(document).ready(function () {
test('Events propagation', function () {
var values = [];
- var c = new openerp.base.list.Collection([
+ var c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -207,7 +207,7 @@ $(document).ready(function () {
deepEqual(values, [6, 11, 21]);
});
test('BTree', function () {
- var root = new openerp.base.list.Collection(),
+ var root = new openerp.web.list.Collection(),
c = root.proxy('admin'),
total = 0;
c.add({id: 1, name: "Administrator", login: 'admin'});
@@ -226,11 +226,11 @@ $(document).ready(function () {
module('list-hofs', {
setup: function () {
openerp = window.openerp.init();
- window.openerp.base.list(openerp);
+ window.openerp.web.list(openerp);
}
});
test('each, degenerate', function () {
- var c = new openerp.base.list.Collection([
+ var c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -243,7 +243,7 @@ $(document).ready(function () {
'degenerate collections should be iterated in record order');
});
test('each, deep', function () {
- var root = new openerp.base.list.Collection(),
+ var root = new openerp.web.list.Collection(),
ids = [];
root.proxy('foo').add([
{id: 1, value: 5},
@@ -263,7 +263,7 @@ $(document).ready(function () {
'tree collections should be deeply iterated');
});
test('map, degenerate', function () {
- var c = new openerp.base.list.Collection([
+ var c = new openerp.web.list.Collection([
{id: 1, value: 5},
{id: 2, value: 10},
{id: 3, value: 20}
@@ -276,7 +276,7 @@ $(document).ready(function () {
'degenerate collections should be iterated in record order');
});
test('map, deep', function () {
- var root = new openerp.base.list.Collection();
+ var root = new openerp.web.list.Collection();
root.proxy('foo').add([
{id: 1, value: 5},
{id: 2, value: 10},
diff --git a/addons/base/static/test/qunit-doc.js b/addons/web/static/test/qunit-doc.js
index 3667cc3eb40..3667cc3eb40 100644
--- a/addons/base/static/test/qunit-doc.js
+++ b/addons/web/static/test/qunit-doc.js
diff --git a/addons/web/static/test/registry.js b/addons/web/static/test/registry.js
new file mode 100644
index 00000000000..0a3e65e9b1c
--- /dev/null
+++ b/addons/web/static/test/registry.js
@@ -0,0 +1,33 @@
+$(document).ready(function () {
+ var openerp;
+ module('Registry', {
+ setup: function () {
+ openerp = window.openerp.init(true);
+ window.openerp.web.core(openerp);
+ openerp.web.Foo = {};
+ openerp.web.Bar = {};
+ }
+ });
+ test('key fetch', function () {
+ var reg = new openerp.web.Registry({
+ foo: 'openerp.web.Foo',
+ bar: 'openerp.web.Bar',
+ quux: 'openerp.web.Quux'
+ });
+
+ strictEqual(reg.get_object('foo'), openerp.web.Foo);
+ raises(function () { reg.get_object('qux'); },
+ openerp.web.KeyNotFound,
+ "Unknown keys should raise KeyNotFound");
+ raises(function () { reg.get_object('quux'); },
+ openerp.web.ObjectNotFound,
+ "Incorrect file paths should raise ObjectNotFound");
+ });
+ test('key set', function () {
+ var reg = new openerp.web.Registry();
+
+ reg.add('foo', 'openerp.web.Foo')
+ .add('bar', 'openerp.web.Bar');
+ strictEqual(reg.get_object('bar'), openerp.web.Bar);
+ });
+});
diff --git a/addons/web/static/test/test.html b/addons/web/static/test/test.html
new file mode 100644
index 00000000000..38237a0600a
--- /dev/null
+++ b/addons/web/static/test/test.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html style="height: 100%">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title>OpenERP</title>
+ <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
+
+ <link rel="stylesheet" href="/web/static/lib/qunit/qunit-2011-23-22.css">
+ <script src="/web/static/lib/qunit/qunit-2011-23-22.js" type="text/javascript"></script>
+
+ <script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
+ <script src="/web/static/lib/underscore/underscore.string.js" type="text/javascript"></script>
+
+ <!-- jquery -->
+ <script src="/web/static/lib/jquery/jquery-1.6.2.js"></script>
+ <script src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
+
+ <script src="/web/static/lib/datejs/globalization/en-US.js"></script>
+ <script src="/web/static/lib/datejs/core.js"></script>
+ <script src="/web/static/lib/datejs/parser.js"></script>
+ <script src="/web/static/lib/datejs/sugarpak.js"></script>
+ <script src="/web/static/lib/datejs/extras.js"></script>
+
+ <script src="/web/static/lib/qweb/qweb.js"></script>
+
+ <script src="/web/static/src/js/boot.js"></script>
+ <script src="/web/static/src/js/core.js"></script>
+ <script src="/web/static/src/js/dates.js"></script>
+ <script src="/web/static/src/js/formats.js"></script>
+ <script src="/web/static/src/js/chrome.js"></script>
+ <script src="/web/static/src/js/data.js"></script>
+ <script src="/web/static/src/js/views.js"></script>
+ <script src="/web/static/src/js/search.js"></script>
+ <script src="/web/static/src/js/form.js"></script>
+ <script src="/web/static/src/js/list.js"></script>
+ <script type="text/javascript">
+ QWeb.add_template('/web/static/src/xml/web.xml');
+ </script>
+</head>
+ <body id="oe" class="openerp">
+ <h1 id="qunit-header">OpenERP web Test Suite</h1>
+ <h2 id="qunit-banner"></h2>
+ <div id="qunit-testrunner-toolbar"></div>
+ <h2 id="qunit-userAgent"></h2>
+ <ol id="qunit-tests"></ol>
+ <div id="qunit-fixture"></div>
+ </body>
+ <script type="text/javascript" src="/web/static/test/class.js"></script>
+ <script type="text/javascript" src="/web/static/test/registry.js"></script>
+ <script type="text/javascript" src="/web/static/test/form.js"></script>
+ <script type="text/javascript" src="/web/static/test/list-utils.js"></script>
+ <script type="text/javascript" src="/web/static/test/formats.js"></script>
+</html>
diff --git a/addons/base/test/__init__.py b/addons/web/test/__init__.py
index 40a96afc6ff..40a96afc6ff 100644
--- a/addons/base/test/__init__.py
+++ b/addons/web/test/__init__.py
diff --git a/addons/base/test/test_dataset.py b/addons/web/test/test_dataset.py
index 702c63b0899..898ca5a582c 100644
--- a/addons/base/test/test_dataset.py
+++ b/addons/web/test/test_dataset.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
import mock
import unittest2
-import base.controllers.main
+import web.controllers.main
class TestDataSetController(unittest2.TestCase):
def setUp(self):
- self.dataset = base.controllers.main.DataSet()
+ self.dataset = web.controllers.main.DataSet()
self.request = mock.Mock()
self.read = self.request.session.model().read
self.search = self.request.session.model().search
diff --git a/addons/base/test/test_menu.py b/addons/web/test/test_menu.py
index 5b4fddd05e1..d763fd7dcb1 100644
--- a/addons/base/test/test_menu.py
+++ b/addons/web/test/test_menu.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import mock
import unittest2
-import base.controllers.main
+import web.controllers.main
import openerpweb.openerpweb
class Placeholder(object):
@@ -11,7 +11,7 @@ class Placeholder(object):
class LoadTest(unittest2.TestCase):
def setUp(self):
- self.menu = base.controllers.main.Menu()
+ self.menu = web.controllers.main.Menu()
self.menus_mock = mock.Mock()
self.request = Placeholder(
session=openerpweb.openerpweb.OpenERPSession(
@@ -100,7 +100,7 @@ class LoadTest(unittest2.TestCase):
class ActionMungerTest(unittest2.TestCase):
def setUp(self):
- self.menu = base.controllers.main.Menu()
+ self.menu = web.controllers.main.Menu()
def test_actual_treeview(self):
action = {
"views": [[False, "tree"], [False, "form"],
@@ -111,7 +111,7 @@ class ActionMungerTest(unittest2.TestCase):
}
changed = action.copy()
del action['view_type']
- base.controllers.main.fix_view_modes(changed)
+ web.controllers.main.fix_view_modes(changed)
self.assertEqual(changed, action)
@@ -123,7 +123,7 @@ class ActionMungerTest(unittest2.TestCase):
"view_id": False,
"view_mode": "tree,form,calendar"
}
- base.controllers.main.fix_view_modes(action)
+ web.controllers.main.fix_view_modes(action)
self.assertEqual(action, {
"views": [[False, "list"], [False, "form"],
@@ -141,7 +141,7 @@ class ActionMungerTest(unittest2.TestCase):
"view_id": False,
"view_mode": "tree,form,calendar"
}
- base.controllers.main.fix_view_modes(action)
+ web.controllers.main.fix_view_modes(action)
self.assertEqual(action, {
"views": [[False, "list"], [False, "form"],
diff --git a/addons/base/test/test_view.py b/addons/web/test/test_view.py
index 0070ea11cf4..677ed42eb2b 100644
--- a/addons/base/test/test_view.py
+++ b/addons/web/test/test_view.py
@@ -5,7 +5,7 @@ import mock
import unittest2
import simplejson
-import base.controllers.main
+import web.controllers.main
import openerpweb.nonliterals
import openerpweb.openerpweb
@@ -17,7 +17,7 @@ def field_attrs(fields_view_get, fieldname):
#noinspection PyCompatibility
class DomainsAndContextsTest(unittest2.TestCase):
def setUp(self):
- self.view = base.controllers.main.View()
+ self.view = web.controllers.main.View()
def test_convert_literal_domain(self):
e = xml.etree.ElementTree.Element(
@@ -107,10 +107,10 @@ class DomainsAndContextsTest(unittest2.TestCase):
class AttrsNormalizationTest(unittest2.TestCase):
def setUp(self):
- self.view = base.controllers.main.View()
+ self.view = web.controllers.main.View()
def test_identity(self):
- base_view = """
+ web_view = """
<form string="Title">
<group>
<field name="some_field"/>
@@ -120,8 +120,8 @@ class AttrsNormalizationTest(unittest2.TestCase):
</form>
"""
- pristine = xml.etree.ElementTree.fromstring(base_view)
- transformed = self.view.transform_view(base_view, None)
+ pristine = xml.etree.ElementTree.fromstring(web_view)
+ transformed = self.view.transform_view(web_view, None)
self.assertEqual(
xml.etree.ElementTree.tostring(transformed),
@@ -166,7 +166,7 @@ class AttrsNormalizationTest(unittest2.TestCase):
<field name="type_id" invisible="context.get('set_visible',False)"/>
</tree>
'''}
- parsed_view = base.controllers.main.View().fields_view_get(
+ parsed_view = web.controllers.main.View().fields_view_get(
req, 'project.task', 42, 'tree')
self.assertTrue(field_attrs(parsed_view, 'sequence')['invisible'])
@@ -180,7 +180,7 @@ class AttrsNormalizationTest(unittest2.TestCase):
class ListViewTest(unittest2.TestCase):
def setUp(self):
- self.view = base.controllers.main.ListView()
+ self.view = web.controllers.main.ListView()
self.request = mock.Mock()
self.request.context = {'set_editable': True}
def test_no_editable_editable_context(self):
diff --git a/addons/base_hello/__init__.py b/addons/web_calendar/__init__.py
index 013e4b7ec4e..013e4b7ec4e 100644
--- a/addons/base_hello/__init__.py
+++ b/addons/web_calendar/__init__.py
diff --git a/addons/base_calendar/__openerp__.py b/addons/web_calendar/__openerp__.py
index b8f6a954082..ba18ef0490e 100644
--- a/addons/base_calendar/__openerp__.py
+++ b/addons/web_calendar/__openerp__.py
@@ -1,7 +1,7 @@
{
- "name": "Base calendar",
+ "name": "web calendar",
"version": "2.0",
- "depends": ['base'],
+ "depends": ['web'],
"js": [
'static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js',
'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js',
diff --git a/addons/base_calendar/controllers/__init__.py b/addons/web_calendar/controllers/__init__.py
index 039d9715fab..039d9715fab 100644
--- a/addons/base_calendar/controllers/__init__.py
+++ b/addons/web_calendar/controllers/__init__.py
diff --git a/addons/base_calendar/controllers/main.py b/addons/web_calendar/controllers/main.py
index 0211b3e4632..0211b3e4632 100644
--- a/addons/base_calendar/controllers/main.py
+++ b/addons/web_calendar/controllers/main.py
diff --git a/addons/base_calendar/po/base_calendar.pot b/addons/web_calendar/po/base_calendar.pot
index a4133788361..a4133788361 100644
--- a/addons/base_calendar/po/base_calendar.pot
+++ b/addons/web_calendar/po/base_calendar.pot
diff --git a/addons/web_calendar/po/web_calendar.pot b/addons/web_calendar/po/web_calendar.pot
new file mode 100644
index 00000000000..822614f03bf
--- /dev/null
+++ b/addons/web_calendar/po/web_calendar.pot
@@ -0,0 +1,23 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: addons/web_calendar/static/src/xml/web_calendar.xml:0
+msgid "&nbsp;"
+msgstr ""
+
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php
index aab70e3c6ea..aab70e3c6ea 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/base_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php
index 65e6bfe8564..65e6bfe8564 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/combo_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js
index f0d03f7a880..f0d03f7a880 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/connector.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php
index 313fac10585..313fac10585 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/crosslink_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php
index 551a3ce7cb2..551a3ce7cb2 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/dataprocessor.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php
index 7ef239c0488..7ef239c0488 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_common.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php
index 4cad2217878..4cad2217878 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mssql.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php
index a33ca71bbe4..a33ca71bbe4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_mysqli.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php
index 46c3e88bebe..46c3e88bebe 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_oracle.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php
index 8fb6cf4578b..8fb6cf4578b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_pdo.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php
index 08f1b1aaa79..08f1b1aaa79 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/db_postgre.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php
index 5167528739f..5167528739f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/grid_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php
index 82a1f4601e0..82a1f4601e0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/scheduler_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php
index c5b92e6ab2b..c5b92e6ab2b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tools.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php
index 21886548d50..21886548d50 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/tree_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php
index b410cb46527..b410cb46527 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/treegrid_connector.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php
index 014a326b051..014a326b051 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/connector/update.php
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css
index 6259fe59eba..6259fe59eba 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js
index 2c78468e81e..2c78468e81e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js
index 6b2e961051c..6b2e961051c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_debug.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css
index 64cf1bc40c5..64cf1bc40c5 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_glossy.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css
index 04fd2dd62b1..04fd2dd62b1 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js
index 9ec9bb0dbfa..9ec9bb0dbfa 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler_mobile.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js
index 6499338d09b..6499338d09b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_active_links.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js
index c0eb363b8d5..c0eb363b8d5 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_agenda_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js
index d7aab4fddbe..d7aab4fddbe 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_collision.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js
index ef80ea8e8d0..ef80ea8e8d0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_cookie.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js
index 38ba960c470..38ba960c470 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_editors.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js
index 06a1187a723..06a1187a723 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_expand.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js
index d882becfd64..d882becfd64 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_html_templates.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js
index 609a374040f..609a374040f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_key_nav.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js
index baf0be0041e..baf0be0041e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_limit.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js
index 57735c07a0e..57735c07a0e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_map_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js
index 5bf564980f9..5bf564980f9 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js
index 432bad25af0..432bad25af0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multiselect.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js
index 797ce06da4a..797ce06da4a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_multisource.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js
index fc429dd5e2d..fc429dd5e2d 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_offline.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js
index b4ae32b1b60..b4ae32b1b60 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_outerdrag.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js
index d8c34cffda4..d8c34cffda4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_pdf.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js
index 066e5e5a57b..066e5e5a57b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_readonly.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js
index b57b847683a..b57b847683a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_recurring.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js
index fd3b34913bb..fd3b34913bb 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_serialize.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js
index 00205d8394a..00205d8394a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_timeline.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js
index 2458d37e841..2458d37e841 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_tooltip.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css
index 212423da5d1..212423da5d1 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js
index 70b4abeda7c..70b4abeda7c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_touch.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js
index c131cb1eb13..c131cb1eb13 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_treetimeline.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js
index d6191895c97..d6191895c97 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_units.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js
index bb342e484e0..bb342e484e0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_url.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js
index 60042f50080..60042f50080 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_week_agenda.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js
index e17296b6f81..e17296b6f81 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_year_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif
index dd6595e5d9e..dd6595e5d9e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/but_repeat.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png
index 5036c9c2efb..5036c9c2efb 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif
index 67257083540..67257083540 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif
index 61f7dc2e5ac..61f7dc2e5ac 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_big.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif
index 3e4b179761e..3e4b179761e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/clock_small.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif
index 64da9483ea6..64da9483ea6 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/colapce-expand-icon.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif
index 9732e2da748..9732e2da748 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png
index 3bba608beeb..3bba608beeb 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png
index 510dfd0b17f..510dfd0b17f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg_now.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png
index 31d6626cdd4..31d6626cdd4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif
index f5e71df6aa4..f5e71df6aa4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png
index f874fa321f7..f874fa321f7 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png
index 88e22e1682b..88e22e1682b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/blue_tab_wide.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif
index dd6595e5d9e..dd6595e5d9e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/but_repeat.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif
index 0c60904e75c..0c60904e75c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/buttons.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif
index 67257083540..67257083540 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/calendar.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif
index 61f7dc2e5ac..61f7dc2e5ac 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_big.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif
index 3e4b179761e..3e4b179761e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/clock_small.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif
index 64da9483ea6..64da9483ea6 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/colapce-expand-icon.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png
index 24957208fdc..24957208fdc 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/controlls5.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png
index f0ffbdabc10..f0ffbdabc10 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png
index 9f371b4df71..9f371b4df71 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/databg_now.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png
index a3bae3e0186..a3bae3e0186 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/event-bg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png
index 31d6626cdd4..31d6626cdd4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/icon.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png
index 22d630927f3..22d630927f3 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-separator.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png
index 287a23bbdcf..287a23bbdcf 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/left-time-bg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png
index f0314fa6099..f0314fa6099 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/lightbox.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif
index f5e71df6aa4..f5e71df6aa4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/loading.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png
index 15681b311e0..15681b311e0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/move.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png
index f43a46357b2..f43a46357b2 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/multi-days-bg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png
index 8f9a4f6da02..8f9a4f6da02 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/second-top-days-bg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png
index 094b805f609..094b805f609 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-days-bg.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif
index 18b4bfa95b0..18b4bfa95b0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/top-separator.gif
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png
index 7ee92852294..7ee92852294 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png
index 6e5ffb852f0..6e5ffb852f0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_glossy/white_tab_wide.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png
index 54880090081..54880090081 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/add.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png
index 651215a15ae..651215a15ae 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_left.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png
index 901b5b7fb79..901b5b7fb79 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/arrow_right.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png
index 477749447a7..477749447a7 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png
index d25da73bb78..d25da73bb78 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/event_focus.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png
index 05da890fe1c..05da890fe1c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs_mobile/noevents.png
Binary files differ
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt
index 67cb13ff468..67cb13ff468 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/readme.txt
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/license.txt b/addons/web_calendar/static/lib/dhtmlxScheduler/license.txt
index 4a7d08c91e4..4a7d08c91e4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/license.txt
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/license.txt
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt b/addons/web_calendar/static/lib/dhtmlxScheduler/readme.txt
index ccda9adb09a..ccda9adb09a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/readme.txt
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/readme.txt
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/base.js
index 45a6dc0c820..45a6dc0c820 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/base.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/base.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css
index 3a3217e940a..3a3217e940a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/clear.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/clear.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js
index 460b6771c00..460b6771c00 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/config.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/config.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js
index 72462172908..72462172908 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/connector.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/connector.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js
index 27741b6d147..27741b6d147 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dataprocessor_hook.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js
index 4717fe2858b..4717fe2858b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dayevents.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js
index ce3c3891f0f..ce3c3891f0f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxcommon.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js
index 4a4143f947f..4a4143f947f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js
index e26776e533a..e26776e533a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_debug.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js
index 19779666494..19779666494 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/dhtmlxdataprocessor_jsonp.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/event.js
index 18542ecbe3b..18542ecbe3b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/event.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/event.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css
index de19bca63ed..de19bca63ed 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js
index 46bc624c1ea..46bc624c1ea 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_active_links.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js
index 08d06e0e644..08d06e0e644 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_agenda_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js
index e1e5d0fb52f..e1e5d0fb52f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_collision.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js
index 71f1d5e6794..71f1d5e6794 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_cookie.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js
index e76eff631f4..e76eff631f4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_editors.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js
index 5e916128cf9..5e916128cf9 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_expand.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js
index a5123677c38..a5123677c38 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_html_templates.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js
index 242f735a41f..242f735a41f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_key_nav.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js
index 322f1668838..322f1668838 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_layer.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js
index ad790cf3ea9..ad790cf3ea9 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_limit.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js
index e2e17d14e03..e2e17d14e03 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_map_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js
index 07ea857c13f..07ea857c13f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_matrix.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js
index a6a02b96445..a6a02b96445 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_minical.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js
index 6b86b7524d2..6b86b7524d2 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_monthheight.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js
index 2890d0180a6..2890d0180a6 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multiselect.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js
index 2205f0553a0..2205f0553a0 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_multisource.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js
index f9e5f946476..f9e5f946476 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_offline.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js
index 406b1a02442..406b1a02442 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_outerdrag.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js
index 86439ab7e3a..86439ab7e3a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_pdf.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js
index 9bd1df9d859..9bd1df9d859 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_readonly.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js
index 9d19f520861..9d19f520861 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_serialize.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js
index 512cafebd5f..512cafebd5f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_tooltip.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js
index d92a4be8428..d92a4be8428 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_treetimeline.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js
index 01d030ec83b..01d030ec83b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_url.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js
index 9aa8b46d4cc..9aa8b46d4cc 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_week_agenda.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js
index 7f85903674d..7f85903674d 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_wp.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js
index f89bec4a7b1..f89bec4a7b1 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ext/ext_year_view.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css
index 51c4e99d668..51c4e99d668 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/glossy.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/glossy.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js
index 60dbfef8626..60dbfef8626 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/ical.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/ical.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css
index a888f4d0c79..a888f4d0c79 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/layout.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/layout.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css
index afb83295be3..afb83295be3 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js
index 7749ff6708c..7749ff6708c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/lightbox.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js
index 6d1579862ff..6d1579862ff 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/load.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/load.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale.js
index dc9298713c3..dc9298713c3 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js
index 396479bbf40..396479bbf40 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ar.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js
index 7d997fe3081..7d997fe3081 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ca.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js
index 3d3fd8fbede..3d3fd8fbede 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cn.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js
index 388c1af7fa2..388c1af7fa2 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_cs.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js
index 868ee19f6b4..868ee19f6b4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_da.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js
index 99ee29552a6..99ee29552a6 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_de.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js
index 86829d63808..86829d63808 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_el.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js
index 4f9826d546b..4f9826d546b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_es.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js
index 3ea32dbe9ea..3ea32dbe9ea 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fi.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js
index 34639313e5e..34639313e5e 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_fr.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js
index bc3dd9cd794..bc3dd9cd794 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_he.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js
index 0c37a28fb9f..0c37a28fb9f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_hu.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js
index 8f75fd0f617..8f75fd0f617 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_id.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js
index 2e1188ab4cc..2e1188ab4cc 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_it.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js
index 34274f7080f..34274f7080f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_jp.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js
index c431cf83f61..c431cf83f61 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nb.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js
index 045144c7509..045144c7509 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_nl.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js
index 03981ba5b01..03981ba5b01 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_no.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js
index 649bdcf2160..649bdcf2160 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pl.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js
index 1bf5da01b1c..1bf5da01b1c 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_pt.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js
index 21c08b0319b..21c08b0319b 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cn.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js
index 310f5c508fb..310f5c508fb 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_cs.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js
index 1d3e272a936..1d3e272a936 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_da.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js
index 71929e988ea..71929e988ea 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_de.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js
index d3d18ab4358..d3d18ab4358 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_el.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js
index 99bb3fdbfa5..99bb3fdbfa5 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_es.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js
index 02184e9b601..02184e9b601 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fi.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js
index d11418acba3..d11418acba3 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_fr.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js
index a40b63939d3..a40b63939d3 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_it.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js
index 65078dbc0b7..65078dbc0b7 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nb.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js
index 314e1b083ad..314e1b083ad 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_nl.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js
index f3f27bf4eb1..f3f27bf4eb1 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pl.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js
index c15c10cbea4..c15c10cbea4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_pt.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js
index 0bff7bde13a..0bff7bde13a 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ru.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js
index bb16adafb12..bb16adafb12 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_sv.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js
index fbe032f3e32..fbe032f3e32 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_ua.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js
index f199ae683e4..f199ae683e4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ru.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js
index 1225b6ece32..1225b6ece32 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_si.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js
index bcb120831e9..bcb120831e9 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_sv.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js
index 5548a6f0dfc..5548a6f0dfc 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_tr.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js
index 4009969d298..4009969d298 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/locale_ua.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css
index 8f543f20fee..8f543f20fee 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js
index 4455ef939be..4455ef939be 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/mobile.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/mobile.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/note.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/note.css
index 83118ff5ab4..83118ff5ab4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/note.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/note.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/property.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js
index 96f11ec64a5..96f11ec64a5 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/property.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/property.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.css b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.css
index 6e4d4f98395..6e4d4f98395 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.css
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.css
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.js
index e360d7d1d43..e360d7d1d43 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/recurring.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/recurring.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html
index 078f4415777..078f4415777 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html
index c47f485b80f..c47f485b80f 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_cn.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html
index bb70c5aac79..bb70c5aac79 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_de.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html
index eddddee99aa..eddddee99aa 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_el.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html
index 94549432bc8..94549432bc8 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_es.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html
index 281dbe7afc4..281dbe7afc4 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_fr.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html
index 1d92cb4d420..1d92cb4d420 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_it.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html
index d9e563191f6..d9e563191f6 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_nl.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html
index becab2809c7..becab2809c7 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/repeat_template_ru.html
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js
index 80018266f24..80018266f24 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/sources/scheduler.js
diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/whatsnew.txt b/addons/web_calendar/static/lib/dhtmlxScheduler/whatsnew.txt
index 66d304363ea..66d304363ea 100644
--- a/addons/base_calendar/static/lib/dhtmlxScheduler/whatsnew.txt
+++ b/addons/web_calendar/static/lib/dhtmlxScheduler/whatsnew.txt
diff --git a/addons/base_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js
index 808c1ba31ab..7b9fcc3ed33 100644
--- a/addons/base_calendar/static/src/js/calendar.js
+++ b/addons/web_calendar/static/src/js/calendar.js
@@ -1,11 +1,12 @@
/*---------------------------------------------------------
- * OpenERP base_calendar
+ * OpenERP web_calendar
*---------------------------------------------------------*/
-openerp.base_calendar = function(openerp) {
-QWeb.add_template('/base_calendar/static/src/xml/base_calendar.xml');
-openerp.base.views.add('calendar', 'openerp.base_calendar.CalendarView');
-openerp.base_calendar.CalendarView = openerp.base.View.extend({
+openerp.web_calendar = function(openerp) {
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_calendar/static/src/xml/web_calendar.xml');
+openerp.web.views.add('calendar', 'openerp.web_calendar.CalendarView');
+openerp.web_calendar.CalendarView = openerp.web.View.extend({
// Dhtmlx scheduler ?
init: function(parent, element_id, dataset, view_id, options) {
this._super(parent, element_id);
@@ -19,7 +20,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.creating_event_id = null;
this.dataset_events = [];
if (this.options.action_views_ids.form) {
- this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset);
+ this.form_dialog = new openerp.web_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset);
this.form_dialog.start();
}
this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400',
@@ -29,18 +30,18 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.color_map = {};
},
start: function() {
- this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded);
+ this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': true}, this.on_loaded);
},
stop: function() {
scheduler.clearAll();
},
on_loaded: function(data) {
+ this.fields_view = data;
this.calendar_fields = {};
this.ids = this.dataset.ids;
this.color_values = [];
this.info_fields = [];
- this.fields_view = data.fields_view;
this.name = this.fields_view.name || this.fields_view.arch.attrs.string;
this.view_id = this.fields_view.view_id;
@@ -75,11 +76,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.$element.html(QWeb.render("CalendarView", {"fields_view": this.fields_view}));
if (this.options.sidebar && this.options.sidebar_id) {
- this.sidebar = new openerp.base.Sidebar(this, this.options.sidebar_id);
+ this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
this.sidebar.start();
- this.sidebar.navigator = new openerp.base_calendar.SidebarNavigator(this.sidebar, this.sidebar.add_section('navigator', "Navigator"), this);
- this.sidebar.responsible = new openerp.base_calendar.SidebarResponsible(this.sidebar, this.sidebar.add_section('responsible', "Responsible"), this);
- this.sidebar.add_toolbar(data.fields_view.toolbar);
+ this.sidebar.navigator = new openerp.web_calendar.SidebarNavigator(this.sidebar, this.sidebar.add_section('navigator', "Navigator"), this);
+ this.sidebar.responsible = new openerp.web_calendar.SidebarResponsible(this.sidebar, this.sidebar.add_section('responsible', "Responsible"), this);
+ this.sidebar.add_toolbar(this.fields_view.toolbar);
this.set_common_sidebar_sections(this.sidebar);
this.sidebar.do_unfold();
this.sidebar.do_fold.add_last(this.refresh_scheduler);
@@ -170,7 +171,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
value: filter_value,
label: (typeof filter === 'object') ? filter[1] : filter,
color: this.get_color(filter_value)
- }
+ };
if (!sidebar_items[filter_value]) {
sidebar_items[filter_value] = filter_item;
}
@@ -180,10 +181,10 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
}
if (this.fields[this.date_start]['type'] == 'date') {
- evt[this.date_start] = openerp.base.str_to_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss');
+ evt[this.date_start] = openerp.web.str_to_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss');
}
if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') {
- evt[this.date_stop] = openerp.base.str_to_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss');
+ evt[this.date_stop] = openerp.web.str_to_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss');
}
res_events.push(this.convert_event(evt));
}
@@ -195,8 +196,8 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
}
},
convert_event: function(evt) {
- var date_start = openerp.base.str_to_datetime(evt[this.date_start]),
- date_stop = this.date_stop ? openerp.base.str_to_datetime(evt[this.date_stop]) : null,
+ var date_start = openerp.web.str_to_datetime(evt[this.date_start]),
+ date_stop = this.date_stop ? openerp.web.str_to_datetime(evt[this.date_stop]) : null,
date_delay = evt[this.date_delay] || null,
res_text = '',
res_description = [];
@@ -224,7 +225,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
'text': res_text,
'id': evt.id,
'title': res_description.join()
- }
+ };
if (evt.color) {
r.color = evt.color;
}
@@ -280,9 +281,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
var data = {
name: event_obj.text
};
- data[this.date_start] = openerp.base.datetime_to_str(event_obj.start_date);
+ data[this.date_start] = openerp.web.datetime_to_str(event_obj.start_date);
if (this.date_stop) {
- data[this.date_stop] = openerp.base.datetime_to_str(event_obj.end_date);
+ data[this.date_stop] = openerp.web.datetime_to_str(event_obj.end_date);
}
if (this.date_delay) {
var diff_seconds = Math.round((event_obj.end_date.getTime() - event_obj.start_date.getTime()) / 1000);
@@ -294,7 +295,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
var self = this;
scheduler.clearAll();
$.when(this.has_been_loaded).then(function() {
- self.rpc('/base/session/eval_domain_and_context', {
+ self.rpc('/web/session/eval_domain_and_context', {
domains: domains,
contexts: contexts,
group_by_seq: groupbys
@@ -334,7 +335,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
}
});
-openerp.base_calendar.CalendarFormDialog = openerp.base.Dialog.extend({
+openerp.web_calendar.CalendarFormDialog = openerp.web.Dialog.extend({
init: function(view, options, view_id, dataset) {
this._super(view, options);
this.dataset = dataset;
@@ -343,7 +344,7 @@ openerp.base_calendar.CalendarFormDialog = openerp.base.Dialog.extend({
},
start: function() {
this._super();
- this.form = new openerp.base.FormView(this, this.element_id, this.dataset, this.view_id, {
+ this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, {
sidebar: false,
pager: false
});
@@ -368,7 +369,7 @@ openerp.base_calendar.CalendarFormDialog = openerp.base.Dialog.extend({
}
});
-openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({
+openerp.web_calendar.SidebarResponsible = openerp.web.Widget.extend({
init: function(parent, element_id, view) {
this._super(parent, element_id);
this.view = view;
@@ -394,7 +395,7 @@ openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({
}
});
-openerp.base_calendar.SidebarNavigator = openerp.base.Widget.extend({
+openerp.web_calendar.SidebarNavigator = openerp.web.Widget.extend({
init: function(parent, element_id, view) {
this._super(parent, element_id);
this.view = view;
diff --git a/addons/base_calendar/static/src/xml/base_calendar.xml b/addons/web_calendar/static/src/xml/web_calendar.xml
index c9e5f628b94..c9e5f628b94 100644
--- a/addons/base_calendar/static/src/xml/base_calendar.xml
+++ b/addons/web_calendar/static/src/xml/web_calendar.xml
diff --git a/addons/web_chat/__openerp__.py b/addons/web_chat/__openerp__.py
index 6bd08f81e6a..c5e2fa7fc13 100644
--- a/addons/web_chat/__openerp__.py
+++ b/addons/web_chat/__openerp__.py
@@ -1,7 +1,7 @@
{
"name": "Web Chat",
"version": "2.0",
- "depends": ['base'],
+ "depends": ['web'],
"js": [
'static/lib/AjaxIM/js/jquery.jsonp-1.1.0.js',
'static/lib/AjaxIM/js/jquery.jstore-all-min.js',
diff --git a/addons/web_chat/controllers/main.py b/addons/web_chat/controllers/main.py
index e445eb4be6d..e9a026759b1 100644
--- a/addons/web_chat/controllers/main.py
+++ b/addons/web_chat/controllers/main.py
@@ -2,7 +2,10 @@
import time
import simplejson
-import base.common as openerpweb
+import web.common as openerpweb
+import logging
+
+_logger = logging.getLogger(__name__)
#----------------------------------------------------------
# OpenERP Web ajaxim Controllers
@@ -195,7 +198,7 @@ class PollServer(openerpweb.Controller):
"""
mq = req.applicationsession.setdefault("web_chat", PollServerMessageQueue())
- print "======== chat status ========",kw
+ _logger.debug("======== chat status ======== %s", kw)
# mq.write()
return {"action": ""}
diff --git a/addons/web_chat/po/web_chat.pot b/addons/web_chat/po/web_chat.pot
index b1700659a8f..d7f6df2d73d 100644
--- a/addons/web_chat/po/web_chat.pot
+++ b/addons/web_chat/po/web_chat.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-08-17 13:28+0200\n"
+"POT-Creation-Date: 2011-09-06 12:03+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/addons/base_dashboard/__init__.py b/addons/web_dashboard/__init__.py
index 80b891a3d7a..80b891a3d7a 100644
--- a/addons/base_dashboard/__init__.py
+++ b/addons/web_dashboard/__init__.py
diff --git a/addons/base_dashboard/__openerp__.py b/addons/web_dashboard/__openerp__.py
index e6248c2c515..e4bad9c1eaf 100644
--- a/addons/base_dashboard/__openerp__.py
+++ b/addons/web_dashboard/__openerp__.py
@@ -1,7 +1,7 @@
{
- "name": "Base Dashboard",
+ "name": "web Dashboard",
"version": "2.0",
- "depends": ['base'],
+ "depends": ['web'],
"js": [
'static/src/js/dashboard.js'
],
diff --git a/addons/base_dashboard/controllers.py b/addons/web_dashboard/controllers.py
index 2ebfefab1e8..80235492c0f 100644
--- a/addons/base_dashboard/controllers.py
+++ b/addons/web_dashboard/controllers.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-import base.common as openerpweb
+import web.common as openerpweb
WIDGET_CONTENT_PATTERN = """<!DOCTYPE html>
<html>
@@ -19,7 +19,7 @@ WIDGET_CONTENT_PATTERN = """<!DOCTYPE html>
</html>
"""
class Widgets(openerpweb.Controller):
- _cp_path = '/base_dashboard/widgets'
+ _cp_path = '/web_dashboard/widgets'
@openerpweb.httprequest
def content(self, request, widget_id):
diff --git a/addons/base_dashboard/po/base_dashboard.pot b/addons/web_dashboard/po/base_dashboard.pot
index 0a243063b4e..0a243063b4e 100644
--- a/addons/base_dashboard/po/base_dashboard.pot
+++ b/addons/web_dashboard/po/base_dashboard.pot
diff --git a/addons/web_dashboard/po/web_dashboard.pot b/addons/web_dashboard/po/web_dashboard.pot
new file mode 100644
index 00000000000..3ebe95737bc
--- /dev/null
+++ b/addons/web_dashboard/po/web_dashboard.pot
@@ -0,0 +1,47 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr ""
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr ""
+
diff --git a/addons/base_dashboard/static/src/css/dashboard.css b/addons/web_dashboard/static/src/css/dashboard.css
index f317cb45e8e..f317cb45e8e 100644
--- a/addons/base_dashboard/static/src/css/dashboard.css
+++ b/addons/web_dashboard/static/src/css/dashboard.css
diff --git a/addons/base_dashboard/static/src/img/layout_1-1-1.png b/addons/web_dashboard/static/src/img/layout_1-1-1.png
index 5eda2823c46..5eda2823c46 100644
--- a/addons/base_dashboard/static/src/img/layout_1-1-1.png
+++ b/addons/web_dashboard/static/src/img/layout_1-1-1.png
Binary files differ
diff --git a/addons/base_dashboard/static/src/img/layout_1-1.png b/addons/web_dashboard/static/src/img/layout_1-1.png
index e72aa3a0533..e72aa3a0533 100644
--- a/addons/base_dashboard/static/src/img/layout_1-1.png
+++ b/addons/web_dashboard/static/src/img/layout_1-1.png
Binary files differ
diff --git a/addons/base_dashboard/static/src/img/layout_1-2.png b/addons/web_dashboard/static/src/img/layout_1-2.png
index 4b14d7aeaad..4b14d7aeaad 100644
--- a/addons/base_dashboard/static/src/img/layout_1-2.png
+++ b/addons/web_dashboard/static/src/img/layout_1-2.png
Binary files differ
diff --git a/addons/base_dashboard/static/src/img/layout_1.png b/addons/web_dashboard/static/src/img/layout_1.png
index 69a0e30854c..69a0e30854c 100644
--- a/addons/base_dashboard/static/src/img/layout_1.png
+++ b/addons/web_dashboard/static/src/img/layout_1.png
Binary files differ
diff --git a/addons/base_dashboard/static/src/img/layout_2-1.png b/addons/web_dashboard/static/src/img/layout_2-1.png
index ed866add47c..ed866add47c 100644
--- a/addons/base_dashboard/static/src/img/layout_2-1.png
+++ b/addons/web_dashboard/static/src/img/layout_2-1.png
Binary files differ
diff --git a/addons/base_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js
index f83d841d19a..9fe904319f9 100644
--- a/addons/base_dashboard/static/src/js/dashboard.js
+++ b/addons/web_dashboard/static/src/js/dashboard.js
@@ -1,8 +1,8 @@
-openerp.base_dashboard = function(openerp) {
+openerp.web_dashboard = function(openerp) {
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_dashboard/static/src/xml/web_dashboard.xml');
-QWeb.add_template('/base_dashboard/static/src/xml/base_dashboard.xml');
-
-openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
+openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
init: function(view, node) {
this._super(view, node);
this.template = 'DashBoard';
@@ -36,7 +36,7 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
delete(action.attrs.height);
delete(action.attrs.colspan);
self.actions_attrs[action.attrs.name] = action.attrs;
- self.rpc('/base/action/load', {
+ self.rpc('/web/action/load', {
action_id: parseInt(action.attrs.name, 10)
}, self.on_load_action);
});
@@ -48,20 +48,20 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
});
},
on_undo: function() {
- this.rpc('/base/view/undo_custom', {
+ this.rpc('/web/view/undo_custom', {
view_id: this.view.fields_view.view_id
}, this.do_reload);
},
on_reset: function() {
- this.rpc('/base/view/undo_custom', {
+ this.rpc('/web/view/undo_custom', {
view_id: this.view.fields_view.view_id,
reset: true
}, this.do_reload);
},
on_add_widget: function() {
var self = this;
- var action_manager = new openerp.base.ActionManager(this);
- var dialog = new openerp.base.Dialog(this, {
+ var action_manager = new openerp.web.ActionManager(this);
+ var dialog = new openerp.web.Dialog(this, {
title : 'Actions',
width: 800,
height: 600,
@@ -97,16 +97,16 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
qdict = { view : this.view };
// TODO: should load multiple actions at once
_.each(actions, function(aid) {
- self.rpc('/base/action/load', {
+ self.rpc('/web/action/load', {
action_id: aid
}, function(result) {
self.actions_attrs[aid] = {
name: aid,
string: _.trim(result.result.name)
- }
+ };
qdict.action = {
attrs : self.actions_attrs[aid]
- }
+ };
self.$element.find('.oe-dashboard-column:first').prepend(QWeb.render('DashBoard.action', qdict));
self.do_save_dashboard();
self.on_load_action(result)
@@ -209,7 +209,7 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
board.columns.push(actions);
});
var arch = QWeb.render('DashBoard.xml', board);
- this.rpc('/base/view/add_custom', {
+ this.rpc('/web/view/add_custom', {
view_id: this.view.fields_view.view_id,
arch: arch
}, function() {
@@ -225,7 +225,7 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
action_buttons : false,
pager: false
};
- var am = new openerp.base.ActionManager(this);
+ var am = new openerp.web.ActionManager(this);
this.action_managers.push(am);
am.appendTo($("#"+this.view.element_id + '_action_' + action.id));
am.do_action(action);
@@ -250,10 +250,10 @@ openerp.base.form.DashBoard = openerp.base.form.Widget.extend({
this.view.start();
}
});
-openerp.base.form.DashBoardLegacy = openerp.base.form.DashBoard.extend({
+openerp.web.form.DashBoardLegacy = openerp.web.form.DashBoard.extend({
render: function() {
if (this.node.tag == 'hpaned') {
- this.node.attrs.style = '1-1';
+ this.node.attrs.style = '2-1';
} else if (this.node.tag == 'vpaned') {
this.node.attrs.style = '1';
}
@@ -274,21 +274,22 @@ openerp.base.form.DashBoardLegacy = openerp.base.form.DashBoard.extend({
}
});
-openerp.base.form.widgets.add('hpaned', 'openerp.base.form.DashBoardLegacy');
-openerp.base.form.widgets.add('vpaned', 'openerp.base.form.DashBoardLegacy');
-openerp.base.form.widgets.add('board', 'openerp.base.form.DashBoard');
+openerp.web.form.widgets.add('hpaned', 'openerp.web.form.DashBoardLegacy');
+openerp.web.form.widgets.add('vpaned', 'openerp.web.form.DashBoardLegacy');
+openerp.web.form.widgets.add('board', 'openerp.web.form.DashBoard');
-openerp.base.client_actions.add(
- 'board.config.overview', 'openerp.base_dashboard.ConfigOverview'
+openerp.web.client_actions.add(
+ 'board.config.overview', 'openerp.web_dashboard.ConfigOverview'
);
-if (!openerp.base_dashboard) {
- openerp.base_dashboard = {};
+if (!openerp.web_dashboard) {
+ /** @namespace */
+ openerp.web_dashboard = {};
}
-openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({
+openerp.web_dashboard.ConfigOverview = openerp.web.View.extend({
template: 'ConfigOverview',
init: function (parent, element_id) {
this._super(parent, element_id);
- this.dataset = new openerp.base.DataSetSearch(
+ this.dataset = new openerp.web.DataSetSearch(
this, 'ir.actions.todo');
this.dataset.domain = [['type', '=', 'manual']];
},
@@ -332,7 +333,7 @@ openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({
});
})
.delegate('li:not(.oe-done)', 'click', function () {
- self.execute_action({
+ self.widget_parent.widget_parent.widget_parent.execute_action({
type: 'object',
name: 'action_launch'
}, self.dataset,
@@ -345,13 +346,13 @@ openerp.base_dashboard.ConfigOverview = openerp.base.View.extend({
}
});
-openerp.base.client_actions.add(
- 'board.home.applications', 'openerp.base_dashboard.ApplicationTiles');
-openerp.base_dashboard.ApplicationTiles = openerp.base.View.extend({
+openerp.web.client_actions.add(
+ 'board.home.applications', 'openerp.web_dashboard.ApplicationTiles');
+openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({
template: 'ApplicationTiles',
start: function () {
var self = this;
- return new openerp.base.DataSetSearch(
+ return new openerp.web.DataSetSearch(
this, 'ir.ui.menu', null, [['parent_id', '=', false]])
.read_slice( ['name', 'web_icon_data', 'web_icon_hover_data'], {}, function (applications) {
// Create a matrix of 3*x applications
@@ -371,16 +372,17 @@ openerp.base_dashboard.ApplicationTiles = openerp.base.View.extend({
});
}
});
-openerp.base.client_actions.add(
- 'board.home.widgets', 'openerp.base_dashboard.Widget');
-openerp.base_dashboard.Widget = openerp.base.View.extend(/** @lends openerp.base_dashboard.Widgets# */{
+openerp.web.client_actions.add(
+ 'board.home.widgets', 'openerp.web_dashboard.Widget');
+openerp.web_dashboard.Widget = openerp.web.View.extend(/** @lends openerp.web_dashboard.Widgets# */{
template: 'HomeWidget',
/**
* Initializes a "HomeWidget" client widget: handles the display of a given
* res.widget objects in an OpenERP view (mainly a dashboard).
*
- * @constructs
- * @extends openerp.base.View
+ * @constructs openerp.web_dashboard.Widget
+ * @extends openerp.web.View
+ *
* @param {Object} parent
* @param {Object} options
* @param {Number} options.widget_id
@@ -390,13 +392,13 @@ openerp.base_dashboard.Widget = openerp.base.View.extend(/** @lends openerp.base
this.widget_id = options.widget_id;
},
start: function () {
- return new openerp.base.DataSet(this, 'res.widget').read_ids(
+ return new openerp.web.DataSet(this, 'res.widget').read_ids(
[this.widget_id], ['title'], this.on_widget_loaded);
},
on_widget_loaded: function (widgets) {
var widget = widgets[0];
var url = _.sprintf(
- '/base_dashboard/widgets/content?session_id=%s&widget_id=%d',
+ '/web_dashboard/widgets/content?session_id=%s&widget_id=%d',
this.session.session_id, widget.id);
this.$element.html(QWeb.render('HomeWidget.content', {
widget: widget,
diff --git a/addons/base_dashboard/static/src/xml/base_dashboard.xml b/addons/web_dashboard/static/src/xml/web_dashboard.xml
index b60e466964b..e03e21b6487 100644
--- a/addons/base_dashboard/static/src/xml/base_dashboard.xml
+++ b/addons/web_dashboard/static/src/xml/web_dashboard.xml
@@ -2,19 +2,19 @@
<t t-name="DashBoard">
<div class="oe-dashboard-links">
<button type="button" class="button oe-dashboard-link-reset" t-att-style="view.fields_view.custom_view_id ? null : 'display: none'">
- <img src="/base/static/src/img/icons/STOCK_GOTO_FIRST.png" width="16" height="16"/>
+ <img src="/web/static/src/img/icons/STOCK_GOTO_FIRST.png" width="16" height="16"/>
<span>Reset</span>
</button>
<button type="button" class="button oe-dashboard-link-undo" t-att-style="view.fields_view.custom_view_id ? null : 'display: none'">
- <img src="/base/static/src/img/icons/gtk-undo.png" width="16" height="16"/>
+ <img src="/web/static/src/img/icons/gtk-undo.png" width="16" height="16"/>
<span>Undo</span>
</button>
<button type="button" class="button oe-dashboard-link-add_widget">
- <img src="/base/static/src/img/icons/STOCK_ADD.png" width="16" height="16"/>
+ <img src="/web/static/src/img/icons/STOCK_ADD.png" width="16" height="16"/>
<span>Add Widget</span>
</button>
<button type="button" class="button oe-dashboard-link-change_layout">
- <img src="/base/static/src/img/icons/gtk-edit.png" width="16" height="16"/>
+ <img src="/web/static/src/img/icons/gtk-edit.png" width="16" height="16"/>
<span>Change layout</span>
</button>
</div>
@@ -32,7 +32,7 @@
<div t-att-data-id="action.attrs.name" class="oe-dashboard-action">
<h2 class="oe-dashboard-action-header oe_view_title">
<t t-esc="action.attrs.string"/>
- <!--<a href="#" class="oe-dashboard-action-rename"><img src="/base/static/src/img/icons/gtk-edit.png" width="16" height="16"/></a>-->
+ <!--<a href="#" class="oe-dashboard-action-rename"><img src="/web/static/src/img/icons/gtk-edit.png" width="16" height="16"/></a>-->
<input class="oe-dashboard-action-input" type="text" name="title" value="" style="display: none"/>
<span class='ui-icon ui-icon-closethick'></span>
<span class='ui-icon ui-icon-minusthick oe-dashboard-fold' t-if="!action.attrs.fold"></span>
@@ -48,9 +48,9 @@
</p>
<ul>
<li t-foreach="'1 1-1 1-1-1 1-2 2-1'.split(' ')" t-as="layout" t-att-data-layout="layout">
- <img t-attf-src="/base_dashboard/static/src/img/layout_#{layout}.png"/>
+ <img t-attf-src="/web_dashboard/static/src/img/layout_#{layout}.png"/>
<img t-if="layout == current_layout"
- src="/base/static/src/img/icons/gtk-apply.png" width="16" height="16" class="oe-selected-layout"/>
+ src="/web/static/src/img/icons/gtk-apply.png" width="16" height="16" class="oe-selected-layout"/>
</li>
</ul>
</div>
diff --git a/addons/base/controllers/__init__.py b/addons/web_default_home/__init__.py
index e69de29bb2d..e69de29bb2d 100644
--- a/addons/base/controllers/__init__.py
+++ b/addons/web_default_home/__init__.py
diff --git a/addons/base_default_home/__openerp__.py b/addons/web_default_home/__openerp__.py
index 097ff0e19c0..2093e6236f0 100644
--- a/addons/base_default_home/__openerp__.py
+++ b/addons/web_default_home/__openerp__.py
@@ -1,7 +1,7 @@
{
"name" : "OpenERP Web installer home",
"version" : "2.0",
- "depends" : ['base'],
+ "depends" : ['web'],
'active': True,
'js': ['static/src/js/home.js'],
'css': ['static/src/css/home.css']
diff --git a/addons/base_default_home/po/base_default_home.pot b/addons/web_default_home/po/base_default_home.pot
index efd2cc81004..efd2cc81004 100644
--- a/addons/base_default_home/po/base_default_home.pot
+++ b/addons/web_default_home/po/base_default_home.pot
diff --git a/addons/web_default_home/po/web_default_home.pot b/addons/web_default_home/po/web_default_home.pot
new file mode 100644
index 00000000000..2b533ee15e6
--- /dev/null
+++ b/addons/web_default_home/po/web_default_home.pot
@@ -0,0 +1,39 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr ""
+
diff --git a/addons/base_default_home/static/src/css/home.css b/addons/web_default_home/static/src/css/home.css
index bbf47f29cc4..bbf47f29cc4 100644
--- a/addons/base_default_home/static/src/css/home.css
+++ b/addons/web_default_home/static/src/css/home.css
diff --git a/addons/base_default_home/static/src/img/account_voucher.png b/addons/web_default_home/static/src/img/account_voucher.png
index afad1331e2e..afad1331e2e 100644
--- a/addons/base_default_home/static/src/img/account_voucher.png
+++ b/addons/web_default_home/static/src/img/account_voucher.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/crm.png b/addons/web_default_home/static/src/img/crm.png
index 893bb23ab98..893bb23ab98 100644
--- a/addons/base_default_home/static/src/img/crm.png
+++ b/addons/web_default_home/static/src/img/crm.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/hr.png b/addons/web_default_home/static/src/img/hr.png
index 742f3e53e67..742f3e53e67 100644
--- a/addons/base_default_home/static/src/img/hr.png
+++ b/addons/web_default_home/static/src/img/hr.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/knowledge.png b/addons/web_default_home/static/src/img/knowledge.png
index 78864367df1..78864367df1 100644
--- a/addons/base_default_home/static/src/img/knowledge.png
+++ b/addons/web_default_home/static/src/img/knowledge.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/marketing.png b/addons/web_default_home/static/src/img/marketing.png
index cfe890f31be..cfe890f31be 100644
--- a/addons/base_default_home/static/src/img/marketing.png
+++ b/addons/web_default_home/static/src/img/marketing.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/mrp.png b/addons/web_default_home/static/src/img/mrp.png
index 600104af507..600104af507 100644
--- a/addons/base_default_home/static/src/img/mrp.png
+++ b/addons/web_default_home/static/src/img/mrp.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/point_of_sale.png b/addons/web_default_home/static/src/img/point_of_sale.png
index 9054576f2d5..9054576f2d5 100644
--- a/addons/base_default_home/static/src/img/point_of_sale.png
+++ b/addons/web_default_home/static/src/img/point_of_sale.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/profile_tools.png b/addons/web_default_home/static/src/img/profile_tools.png
index d6ba0866777..d6ba0866777 100644
--- a/addons/base_default_home/static/src/img/profile_tools.png
+++ b/addons/web_default_home/static/src/img/profile_tools.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/project.png b/addons/web_default_home/static/src/img/project.png
index 20ba49f07c8..20ba49f07c8 100644
--- a/addons/base_default_home/static/src/img/project.png
+++ b/addons/web_default_home/static/src/img/project.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/purchase.png b/addons/web_default_home/static/src/img/purchase.png
index 094705cecc3..094705cecc3 100644
--- a/addons/base_default_home/static/src/img/purchase.png
+++ b/addons/web_default_home/static/src/img/purchase.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/sale.png b/addons/web_default_home/static/src/img/sale.png
index 072570bae38..072570bae38 100644
--- a/addons/base_default_home/static/src/img/sale.png
+++ b/addons/web_default_home/static/src/img/sale.png
Binary files differ
diff --git a/addons/base_default_home/static/src/img/stock.png b/addons/web_default_home/static/src/img/stock.png
index a70ccfe18d5..a70ccfe18d5 100644
--- a/addons/base_default_home/static/src/img/stock.png
+++ b/addons/web_default_home/static/src/img/stock.png
Binary files differ
diff --git a/addons/base_default_home/static/src/js/home.js b/addons/web_default_home/static/src/js/home.js
index 57b5fab71f3..ed8561bc44d 100644
--- a/addons/base_default_home/static/src/js/home.js
+++ b/addons/web_default_home/static/src/js/home.js
@@ -1,7 +1,8 @@
-openerp.base_default_home = function (openerp) {
- QWeb.add_template('/base_default_home/static/src/xml/base_default_home.xml');
+openerp.web_default_home = function (openerp) {
+ var QWeb = openerp.web.qweb;
+ QWeb.add_template('/web_default_home/static/src/xml/web_default_home.xml');
- openerp.base_default_home = {
+ openerp.web_default_home = {
applications: [
[
{
@@ -49,7 +50,7 @@ openerp.base_default_home = function (openerp) {
]
};
- openerp.base.WebClient.include({
+ openerp.web.WebClient.include({
default_home: function () {
var self = this,
// resig class can't handle _super in async contexts, by the
@@ -57,7 +58,7 @@ openerp.base_default_home = function (openerp) {
// reset to a baseline value of this.prototype (or something
// like that)
old_home = this._super;
- var Installer = new openerp.base.DataSet(
+ var Installer = new openerp.web.DataSet(
this, 'base.setup.installer');
Installer.call('already_installed', [], function (installed_modules) {
if (!_(installed_modules).isEmpty()) {
@@ -74,9 +75,9 @@ openerp.base_default_home = function (openerp) {
}
});
- openerp.base.client_actions.add(
- 'home.default', 'openerp.base_default_home.DefaultHome');
- openerp.base_default_home.DefaultHome = openerp.base.View.extend({
+ openerp.web.client_actions.add(
+ 'home.default', 'openerp.web_default_home.DefaultHome');
+ openerp.web_default_home.DefaultHome = openerp.web.View.extend({
template: 'StaticHome',
start: function () {
var r = this._super(), self = this;
@@ -89,15 +90,15 @@ openerp.base_default_home = function (openerp) {
return this._super({
url: window.location.protocol + '//' + window.location.host + window.location.pathname,
session: this.session,
- rows: openerp.base_default_home.applications
+ rows: openerp.web_default_home.applications
})
},
install_module: function (module_name) {
- var Modules = new openerp.base.DataSetSearch(
+ var Modules = new openerp.web.DataSetSearch(
this, 'ir.module.module', null, [['name', '=', module_name], ['state', '=', 'uninstalled']]);
- var Upgrade = new openerp.base.DataSet(this, 'base.module.upgrade');
+ var Upgrade = new openerp.web.DataSet(this, 'base.module.upgrade');
- $.blockUI({message:'<img src="/base/static/src/img/throbber2.gif">'});
+ $.blockUI({message:'<img src="/web/static/src/img/throbber2.gif">'});
Modules.read_slice(['id'], {}, function (records) {
if (!(records.length === 1)) { return; }
Modules.call('state_update',
diff --git a/addons/base_default_home/static/src/xml/base_default_home.xml b/addons/web_default_home/static/src/xml/web_default_home.xml
index 9ed7415afb6..5ee11387db9 100644
--- a/addons/base_default_home/static/src/xml/base_default_home.xml
+++ b/addons/web_default_home/static/src/xml/web_default_home.xml
@@ -14,7 +14,7 @@
<tr>
<td>
<div class="oe-static-home-tile-logo">
- <img t-att-src="'/base_default_home/static/src/img/' + application.module + '.png'"/>
+ <img t-att-src="'/web_default_home/static/src/img/' + application.module + '.png'"/>
</div>
</td>
<td>
diff --git a/addons/base_diagram/__init__.py b/addons/web_diagram/__init__.py
index 355939a4922..355939a4922 100644
--- a/addons/base_diagram/__init__.py
+++ b/addons/web_diagram/__init__.py
diff --git a/addons/web_diagram/__openerp__.py b/addons/web_diagram/__openerp__.py
new file mode 100644
index 00000000000..c1851af362b
--- /dev/null
+++ b/addons/web_diagram/__openerp__.py
@@ -0,0 +1,16 @@
+{
+ "name" : "OpenERP Web Diagram",
+ "version" : "2.0",
+ "depends" : ["base"],
+ "js": [
+ 'static/lib/js/raphael-min.js',
+ 'static/lib/js/dracula_graffle.js',
+ 'static/lib/js/dracula_graph.js',
+ 'static/lib/js/dracula_algorithms.js',
+ 'static/src/js/diagram.js'
+ ],
+ 'css' : [
+ "static/src/css/base_diagram.css",
+ ],
+ 'active': True,
+}
diff --git a/addons/base_diagram/controllers/__init__.py b/addons/web_diagram/controllers/__init__.py
index 039d9715fab..039d9715fab 100644
--- a/addons/base_diagram/controllers/__init__.py
+++ b/addons/web_diagram/controllers/__init__.py
diff --git a/addons/base_diagram/controllers/main.py b/addons/web_diagram/controllers/main.py
index 8e258810eca..c443b048ea6 100644
--- a/addons/base_diagram/controllers/main.py
+++ b/addons/web_diagram/controllers/main.py
@@ -1,62 +1,52 @@
-import base.common as openerpweb
-from base.controllers.main import View
+import web.common as openerpweb
+from web.controllers.main import View
class DiagramView(View):
- _cp_path = "/base_diagram/diagram"
+ _cp_path = "/web_diagram/diagram"
@openerpweb.jsonrequest
def load(self, req, model, view_id):
- print req
- print dir(req)
fields_view = self.fields_view_get(req, model, view_id, 'diagram')
return {'fields_view': fields_view}
-
+
@openerpweb.jsonrequest
- def get_diagram_info(self, req, **kw):
- id = kw['id']
- model = kw['model']
- node = kw['node']
- connector = kw['connector']
- src_node = kw['src_node']
- des_node = kw['des_node']
-
+ def get_diagram_info(self, req, id, model, node, connector, src_node, des_node, **kw):
+
visible_node_fields = kw.get('visible_node_fields',[])
invisible_node_fields = kw.get('invisible_node_fields',[])
node_fields_string = kw.get('node_fields_string',[])
connector_fields = kw.get('connector_fields',[])
connector_fields_string = kw.get('connector_fields_string',[])
-
+
bgcolors = {}
shapes = {}
bgcolor = kw.get('bgcolor','')
shape = kw.get('shape','')
-
+
if bgcolor:
for color_spec in bgcolor.split(';'):
if color_spec:
colour, color_state = color_spec.split(':')
bgcolors[colour] = color_state
-
+
if shape:
for shape_spec in shape.split(';'):
if shape_spec:
shape_colour, shape_color_state = shape_spec.split(':')
shapes[shape_colour] = shape_color_state
-
+
ir_view = req.session.model('ir.ui.view')
- graphs = ir_view.graph_get(id, model, node, connector, src_node, des_node, False,
+ graphs = ir_view.graph_get(int(id), model, node, connector, src_node, des_node, False,
(140, 180), req.session.context)
-
nodes = graphs['nodes']
transitions = graphs['transitions']
isolate_nodes = {}
-
- for node in graphs['blank_nodes']:
- isolate_nodes[node['id']] = node
+ for blnk_node in graphs['blank_nodes']:
+ isolate_nodes[blnk_node['id']] = blnk_node
else:
y = map(lambda t: t['y'],filter(lambda x: x['y'] if x['x']==20 else None, nodes.values()))
y_max = (y and max(y)) or 120
-
+
connectors = {}
list_tr = []
@@ -69,29 +59,29 @@ class DiagramView(View):
})
connector_tr = req.session.model(connector)
connector_ids = connector_tr.search([('id', 'in', list_tr)], 0, 0, 0, req.session.context)
-
+
data_connectors =connector_tr.read(connector_ids, connector_fields, req.session.context)
-
-
+
+
for tr in data_connectors:
t = connectors.get(str(tr['id']))
t.update({
'source': tr[src_node][1],
'destination': tr[des_node][1],
- 'options': {}
+ 'options': {},
+ 'signal': tr['signal']
})
for i, fld in enumerate(connector_fields):
t['options'][connector_fields_string[i]] = tr[fld]
-
+
fields = req.session.model('ir.model.fields')
field_ids = fields.search([('model', '=', model), ('relation', '=', node)], 0, 0, 0, req.session.context)
field_data = fields.read(field_ids, ['relation_field'], req.session.context)
-
node_act = req.session.model(node)
search_acts = node_act.search([(field_data[0]['relation_field'], '=', id)], 0, 0, 0, req.session.context)
data_acts = node_act.read(search_acts, invisible_node_fields + visible_node_fields, req.session.context)
-
+
for act in data_acts:
n = nodes.get(str(act['id']))
if not n:
@@ -116,7 +106,7 @@ class DiagramView(View):
for i, fld in enumerate(visible_node_fields):
n['options'][node_fields_string[i]] = act[fld]
-
+
#to relate m2o field of transition to corresponding o2m in activity
in_transition_field_id = fields.search([('relation', '=', connector), ('relation_field', '=', des_node), ('model', '=', node)], 0, 0, 0, req.session.context)
in_transition_field = fields.read(in_transition_field_id[0], ['name'], req.session.context)['name']
@@ -124,4 +114,5 @@ class DiagramView(View):
out_transition_field_id = fields.search([('relation', '=', connector), ('relation_field', '=', src_node), ('model', '=', node)], 0, 0, 0, req.session.context)
out_transition_field = fields.read(out_transition_field_id[0], ['name'], req.session.context)['name']
- return dict(nodes=nodes, conn=connectors, in_transition_field=in_transition_field, out_transition_field=out_transition_field)
+ id_model = req.session.model(model).read([id],['name'], req.session.context)[0]['name']
+ return dict(nodes=nodes, conn=connectors, id_model = id_model)
diff --git a/addons/base_diagram/po/base_diagram.pot b/addons/web_diagram/po/base_diagram.pot
index b1700659a8f..b1700659a8f 100644
--- a/addons/base_diagram/po/base_diagram.pot
+++ b/addons/web_diagram/po/base_diagram.pot
diff --git a/addons/web_diagram/po/web_diagram.pot b/addons/web_diagram/po/web_diagram.pot
new file mode 100644
index 00000000000..3fb8462aff3
--- /dev/null
+++ b/addons/web_diagram/po/web_diagram.pot
@@ -0,0 +1,55 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr ""
+
diff --git a/addons/base_diagram/static/lib/js/Curry-1.0.1.js b/addons/web_diagram/static/lib/js/Curry-1.0.1.js
index f5aa0f993a6..f5aa0f993a6 100644
--- a/addons/base_diagram/static/lib/js/Curry-1.0.1.js
+++ b/addons/web_diagram/static/lib/js/Curry-1.0.1.js
diff --git a/addons/base_diagram/static/lib/js/dracula_algorithms.js b/addons/web_diagram/static/lib/js/dracula_algorithms.js
index 0fbb0857fc8..0fbb0857fc8 100644
--- a/addons/base_diagram/static/lib/js/dracula_algorithms.js
+++ b/addons/web_diagram/static/lib/js/dracula_algorithms.js
diff --git a/addons/base_diagram/static/lib/js/dracula_graffle.js b/addons/web_diagram/static/lib/js/dracula_graffle.js
index 9d4fd2099e8..9d4fd2099e8 100644
--- a/addons/base_diagram/static/lib/js/dracula_graffle.js
+++ b/addons/web_diagram/static/lib/js/dracula_graffle.js
diff --git a/addons/base_diagram/static/lib/js/dracula_graph.coffee b/addons/web_diagram/static/lib/js/dracula_graph.coffee
index bb91945098d..bb91945098d 100644
--- a/addons/base_diagram/static/lib/js/dracula_graph.coffee
+++ b/addons/web_diagram/static/lib/js/dracula_graph.coffee
diff --git a/addons/base_diagram/static/lib/js/dracula_graph.js b/addons/web_diagram/static/lib/js/dracula_graph.js
index f7069c5d2e5..df9945882a7 100644
--- a/addons/base_diagram/static/lib/js/dracula_graph.js
+++ b/addons/web_diagram/static/lib/js/dracula_graph.js
@@ -58,7 +58,7 @@ var Graph = function() {
this.edgeFactory = new EdgeFactory();
};
Graph.prototype = {
- /*
+ /*
* add a node
* @id the node's ID (string or number)
* @content (optional, dictionary) can contain any information that is
@@ -83,7 +83,7 @@ Graph.prototype = {
// NOTE: Even directed edges are added to both nodes.
t.edges.push(edge);
},
-
+
/* TODO to be implemented
* Preserve a copy of the graph state (nodes, positions, ...)
* @comment a comment describing the state
@@ -154,19 +154,21 @@ Graph.Renderer.Raphael = function(element, graph, width, height) {
return;
}
}
-
+
/*
* Dragging
*/
this.isDrag = false;
this.dragger = function (e) {
- this.dx = e.clientX;
- this.dy = e.clientY;
- selfRef.isDrag = this;
- this.set && this.set.animate({"fill-opacity": .1}, 200) && this.set.toFront();
- e.preventDefault && e.preventDefault();
+ if(e.detail < 2) {
+ this.dx = e.clientX;
+ this.dy = e.clientY;
+ selfRef.isDrag = this;
+ this.set && this.set.animate({"fill-opacity": .1}, 200) && this.set.toFront();
+ e.preventDefault && e.preventDefault();
+ }
};
-
+
var d = document.getElementById(element);
d.onmousemove = function (e) {
e = e || window.event;
@@ -234,7 +236,7 @@ Graph.Renderer.Raphael.prototype = {
var shape;
- /* if a node renderer function is provided by the user, then use it
+ /* if a node renderer function is provided by the user, then use it
or the default render function instead */
if(!node.render) {
node.render = function(r, node) {
@@ -305,7 +307,7 @@ Graph.Layout.Spring.prototype = {
}
this.layoutCalcBounds();
},
-
+
layoutPrepare: function() {
for (i in this.graph.nodes) {
var node = this.graph.nodes[i];
@@ -314,16 +316,16 @@ Graph.Layout.Spring.prototype = {
node.layoutForceX = 0;
node.layoutForceY = 0;
}
-
+
},
-
+
layoutCalcBounds: function() {
var minx = Infinity, maxx = -Infinity, miny = Infinity, maxy = -Infinity;
for (i in this.graph.nodes) {
var x = this.graph.nodes[i].layoutPosX;
var y = this.graph.nodes[i].layoutPosY;
-
+
if(x > maxx) maxx = x;
if(x < minx) minx = x;
if(y > maxy) maxy = y;
@@ -335,7 +337,7 @@ Graph.Layout.Spring.prototype = {
this.graph.layoutMinY = miny;
this.graph.layoutMaxY = maxy;
},
-
+
layoutIteration: function() {
// Forces on nodes due to node-node repulsions
@@ -345,17 +347,17 @@ Graph.Layout.Spring.prototype = {
for (var d in prev) {
var node2 = this.graph.nodes[prev[d]];
this.layoutRepulsive(node1, node2);
-
+
}
prev.push(c);
}
-
+
// Forces on nodes due to edge attractions
for (var i = 0; i < this.graph.edges.length; i++) {
var edge = this.graph.edges[i];
- this.layoutAttractive(edge);
+ this.layoutAttractive(edge);
}
-
+
// Move by the given force
for (i in this.graph.nodes) {
var node = this.graph.nodes[i];
@@ -367,7 +369,7 @@ Graph.Layout.Spring.prototype = {
if(xmove < -max) xmove = -max;
if(ymove > max) ymove = max;
if(ymove < -max) ymove = -max;
-
+
node.layoutPosX += xmove;
node.layoutPosY += ymove;
node.layoutForceX = 0;
@@ -397,7 +399,7 @@ Graph.Layout.Spring.prototype = {
layoutAttractive: function(edge) {
var node1 = edge.source;
var node2 = edge.target;
-
+
var dx = node2.layoutPosX - node1.layoutPosX;
var dy = node2.layoutPosY - node1.layoutPosY;
var d2 = dx * dx + dy * dy;
@@ -414,7 +416,7 @@ Graph.Layout.Spring.prototype = {
var attractiveForce = (d2 - this.k * this.k) / this.k;
if(edge.attraction == undefined) edge.attraction = 1;
attractiveForce *= Math.log(edge.attraction) * 0.5 + 1;
-
+
node2.layoutForceX -= attractiveForce * dx / d;
node2.layoutForceY -= attractiveForce * dy / d;
node1.layoutForceX += attractiveForce * dx / d;
@@ -432,7 +434,7 @@ Graph.Layout.Ordered.prototype = {
this.layoutPrepare();
this.layoutCalcBounds();
},
-
+
layoutPrepare: function(order) {
for (i in this.graph.nodes) {
var node = this.graph.nodes[i];
@@ -447,14 +449,14 @@ Graph.Layout.Ordered.prototype = {
counter++;
}
},
-
+
layoutCalcBounds: function() {
var minx = Infinity, maxx = -Infinity, miny = Infinity, maxy = -Infinity;
for (i in this.graph.nodes) {
var x = this.graph.nodes[i].layoutPosX;
var y = this.graph.nodes[i].layoutPosY;
-
+
if(x > maxx) maxx = x;
if(x < minx) minx = x;
if(y > maxy) maxy = y;
@@ -470,7 +472,7 @@ Graph.Layout.Ordered.prototype = {
};
/*
- * usefull JavaScript extensions,
+ * usefull JavaScript extensions,
*/
function log(a) {console.log&&console.log(a);}
@@ -491,14 +493,14 @@ Raphael.el.tooltip = function (tp) {
this.tp.o = {x: 0, y: 0};
this.tp.hide();
this.hover(
- function(event){
- this.mousemove(function(event){
- this.tp.translate(event.clientX -
+ function(event){
+ this.mousemove(function(event){
+ this.tp.translate(event.clientX -
this.tp.o.x,event.clientY - this.tp.o.y);
this.tp.o = {x: event.clientX, y: event.clientY};
});
this.tp.show().toFront();
- },
+ },
function(event){
this.tp.hide();
this.unmousemove();
diff --git a/addons/base_diagram/static/lib/js/raphael-min.js b/addons/web_diagram/static/lib/js/raphael-min.js
index 8718b5bc749..8718b5bc749 100644
--- a/addons/base_diagram/static/lib/js/raphael-min.js
+++ b/addons/web_diagram/static/lib/js/raphael-min.js
diff --git a/addons/base_diagram/static/lib/js/seedrandom.js b/addons/web_diagram/static/lib/js/seedrandom.js
index ce8ce8b578e..ce8ce8b578e 100644
--- a/addons/base_diagram/static/lib/js/seedrandom.js
+++ b/addons/web_diagram/static/lib/js/seedrandom.js
diff --git a/addons/web_diagram/static/src/css/base_diagram.css b/addons/web_diagram/static/src/css/base_diagram.css
new file mode 100644
index 00000000000..9ba2f6b0c83
--- /dev/null
+++ b/addons/web_diagram/static/src/css/base_diagram.css
@@ -0,0 +1,18 @@
+.openerp .diagram {
+ border: 1px solid #999;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+}
+
+.openerp .show_grid {
+ background: url("/web_diagram/static/src/img/grid.jpg") repeat;
+}
+
+.openerp .oe_diagram_pager {
+ text-align: right;
+ white-space: nowrap;
+}
+
+.openerp .oe_diagram_buttons {
+ float: left;
+}
diff --git a/addons/web_diagram/static/src/img/grid.jpg b/addons/web_diagram/static/src/img/grid.jpg
new file mode 100644
index 00000000000..5254207b964
--- /dev/null
+++ b/addons/web_diagram/static/src/img/grid.jpg
Binary files differ
diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js
new file mode 100644
index 00000000000..6ddaf26df98
--- /dev/null
+++ b/addons/web_diagram/static/src/js/diagram.js
@@ -0,0 +1,296 @@
+/*---------------------------------------------------------
+ * OpenERP diagram library
+ *---------------------------------------------------------*/
+
+openerp.web_diagram = function (openerp) {
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_diagram/static/src/xml/base_diagram.xml');
+openerp.web.views.add('diagram', 'openerp.web.DiagramView');
+openerp.web.DiagramView = openerp.web.View.extend({
+ searchable: false,
+ init: function(parent, element_id, dataset, view_id, options) {
+ this._super(parent, element_id);
+ this.set_default_options(options);
+ this.view_manager = parent;
+ this.dataset = dataset;
+ this.model = this.dataset.model;
+ this.view_id = view_id;
+ this.domain = this.dataset._domain || [];
+ this.context = {};
+ this.ids = this.dataset.ids;
+ },
+ start: function() {
+ return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
+ },
+
+ toTitleCase: function(str) {
+ return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
+ },
+
+ on_loaded: function(result) {
+
+ var self = this;
+ if(this.ids && this.ids.length) {
+ this.id = this.ids[self.dataset.index || 0];
+ }
+
+ this.fields_view = result.fields_view,
+ this.view_id = this.fields_view.view_id,
+ this.fields = this.fields_view.fields,
+ this.nodes = this.fields_view.arch.children[0],
+ this.connectors = this.fields_view.arch.children[1],
+ this.node = this.nodes.attrs.object,
+ this.connector = this.connectors.attrs.object;
+
+ this.$element.html(QWeb.render("DiagramView", this));
+
+ this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() {
+ var action = $(this).data('pager-action');
+ self.on_pager_action(action);
+ });
+
+ this.do_update_pager();
+
+ // New Node,Edge
+ this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node);});
+ this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector);});
+
+ this.$element.find('#toggle_grid').click(function() {
+ self.$element.find('.diagram').toggleClass('show_grid');
+ });
+
+ if(this.id) {
+ self.get_diagram_info();
+ }
+
+ },
+
+ get_diagram_info: function() {
+ var self = this;
+ var params = {
+ 'id': this.id,
+ 'model': this.model,
+ 'node': this.node,
+ 'connector': this.connector,
+ 'bgcolor': this.nodes.attrs.bgcolor,
+ 'shape': this.nodes.attrs.shape,
+ 'src_node': this.connectors.attrs.source,
+ 'des_node': this.connectors.attrs.destination,
+ 'visible_nodes': [],
+ 'invisible_nodes': [],
+ 'node_fields': [],
+ 'connectors': [],
+ 'connectors_fields': []
+ };
+
+ _.each(this.nodes.children, function(child) {
+ if(child.attrs.invisible == '1')
+ params['invisible_nodes'].push(child.attrs.name);
+ else {
+ params['visible_nodes'].push(child.attrs.name);
+ params['node_fields'].push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name));
+ }
+ });
+
+ _.each(this.connectors.children, function(conn) {
+ params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name));
+ params['connectors'].push(conn.attrs.name);
+ });
+
+ this.rpc(
+ '/web_diagram/diagram/get_diagram_info',params,
+ function(result) {
+ self.draw_diagram(result);
+ }
+ );
+ },
+
+ on_diagram_loaded: function(record) {
+ var id_record = record['id'];
+ if(id_record) {
+ this.id = id_record;
+ this.get_diagram_info();
+ }
+ },
+
+ draw_diagram: function(result) {
+ var diagram = new Graph();
+
+ this.active_model = result['id_model'];
+
+ var res_nodes = result['nodes'];
+ var res_connectors = result['conn'];
+
+ //Custom logic
+ var self = this;
+ var renderer = function(r, n) {
+ var node;
+ var set;
+ var shape = n.node.shape;
+ if(shape == 'rectangle')
+ shape = 'rect';
+ node = r[shape](n.node.x, n.node.y).attr({
+ "fill": n.node.color
+ }).dblclick(function() {
+ self.add_edit_node(n.node.id, self.node);
+ });
+ set = r.set()
+ .push(node)
+ .push(
+ r.text(n.node.x, n.node.y, (n.label || n.id))
+ .attr({"cursor":"pointer"})
+ .dblclick(function() {
+ self.add_edit_node(n.node.id, self.node);
+ })
+ );
+ node.attr({cursor: "pointer"});
+
+ if(shape == "ellipse")
+ node.attr({rx: "40", ry: "20"});
+ else if(shape == 'rect') {
+ node.attr({width: "60", height: "44"});
+ node.next.attr({"text-anchor": "middle", x: n.node.x + 20, y: n.node.y + 20});
+ }
+ return set;
+ };
+
+ _.each(res_nodes, function(res_node) {
+ diagram.addNode(res_node['name'],{node: res_node,render: renderer});
+ });
+
+ // Id for Path(Edges)
+ var edge_ids = [];
+
+ _.each(res_connectors, function(connector, index) {
+ edge_ids.push(index);
+ diagram.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']});
+ });
+
+
+ if ($('div#dia-canvas').children().length > 0) {
+ $('div#dia-canvas').children().remove();
+ }
+
+ var layouter = new Graph.Layout.Ordered(diagram);
+ var render_diagram = new Graph.Renderer.Raphael('dia-canvas', diagram, $('div#dia-canvas').width(), $('div#dia-canvas').height());
+
+ _.each(diagram.edges, function(edge, index) {
+ if(edge.connection) {
+ edge.connection.fg.attr({cursor: "pointer"}).dblclick(function() {
+ self.add_edit_node(edge_ids[index], self.connector);
+ });
+ }
+ });
+ },
+
+ add_edit_node: function(id, model) {
+ var self = this;
+
+ if(!model)
+ model = self.node;
+ if(id)
+ id = parseInt(id, 10);
+ var action_manager = new openerp.web.ActionManager(this);
+ var dialog = new openerp.web.Dialog(this, {
+ width: 800,
+ height: 600,
+ buttons : {
+ Cancel : function() {
+ $(this).dialog('destroy');
+ },
+ Save : function() {
+ var form_view = action_manager.inner_viewmanager.views.form.controller;
+
+ form_view.do_save(function() {
+ self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded);
+ });
+ $(this).dialog('destroy');
+ }
+ }
+ }).start().open();
+ action_manager.appendTo(dialog.$element);
+ action_manager.do_action({
+ res_model : model,
+ res_id: id,
+ views : [[false, 'form']],
+ type : 'ir.actions.act_window',
+ auto_search : false,
+ flags : {
+ search_view: false,
+ sidebar : false,
+ views_switcher : false,
+ action_buttons : false,
+ pager: false
+ }
+ });
+
+ var form_controller = action_manager.inner_viewmanager.views.form.controller;
+
+ var form_fields;
+
+ if(model == self.node) {
+ form_fields = ['wkf_id'];
+ } else {
+ form_fields = ['act_from', 'act_to'];
+ }
+
+ if(model == self.node || id) {
+ $.each(form_fields, function(index, fld) {
+ form_controller.on_record_loaded.add_first(function() {
+ form_controller.fields[fld].modifiers.readonly = true;
+ form_controller.fields[fld].$input.attr('disabled', true);
+ form_controller.fields[fld].$drop_down.unbind();
+ form_controller.fields[fld].$menu_btn.unbind();
+ });
+ });
+ }
+ if(!id && (model == self.node)) {
+ $.each(form_fields, function(index, fld) {
+ form_controller.on_record_loaded.add_last(function() {
+ form_controller.fields[fld].set_value([self.id,self.active_model]);
+ form_controller.fields[fld].dirty = true;
+ });
+ });
+ }
+ },
+
+ on_pager_action: function(action) {
+ switch (action) {
+ case 'first':
+ this.dataset.index = 0;
+ break;
+ case 'previous':
+ this.dataset.previous();
+ break;
+ case 'next':
+ this.dataset.next();
+ break;
+ case 'last':
+ this.dataset.index = this.dataset.ids.length - 1;
+ break;
+ }
+ this.dataset.read_index(_.keys(this.fields_view.fields), this.on_diagram_loaded);
+ this.do_update_pager();
+ },
+
+ do_update_pager: function(hide_index) {
+ var $pager = this.$element.find('div.oe_diagram_pager');
+ var index = hide_index ? '-' : this.dataset.index + 1;
+ if(!this.dataset.count) {
+ this.dataset.count = this.dataset.ids.length;
+ }
+ $pager.find('span.oe_pager_index').html(index);
+ $pager.find('span.oe_pager_count').html(this.dataset.count);
+ },
+
+ do_show: function () {
+ this.$element.show();
+ },
+
+ do_hide: function () {
+ this.$element.hide();
+ }
+});
+};
+
+// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
diff --git a/addons/web_diagram/static/src/xml/base_diagram.xml b/addons/web_diagram/static/src/xml/base_diagram.xml
new file mode 100644
index 00000000000..f57505d81ac
--- /dev/null
+++ b/addons/web_diagram/static/src/xml/base_diagram.xml
@@ -0,0 +1,22 @@
+<template>
+ <t t-name="DiagramView">
+ <div class="oe_diagram_header" t-att-id="element_id + '_header'">
+ <h2 class="oe_view_title"><t t-esc="fields_view.arch.attrs.string"/></h2>
+ <div class="oe_diagram_buttons">
+ <button type="button" id="new_node" class="oe_diagram_button_new">New Node</button>
+ <button type="button" id="new_edge" class="oe_diagram_button_new">New Edge</button>
+ <label>Show Grid:</label><input type="checkbox" id="toggle_grid" checked="checked"/>
+ </div>
+ <div class="oe_diagram_pager">
+ <button type="button" data-pager-action="first">First</button>
+ <button type="button" data-pager-action="previous">&lt;&lt;</button>
+
+ <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span>
+
+ <button type="button" data-pager-action="next">&gt;&gt;</button>
+ <button type="button" data-pager-action="last">Last</button>
+ </div>
+ </div>
+ <div id="dia-canvas" class="diagram show_grid" style="overflow: auto;"></div>
+ </t>
+</template> \ No newline at end of file
diff --git a/addons/base_graph/__init__.py b/addons/web_gantt/__init__.py
index 53e20f29429..013e4b7ec4e 100644
--- a/addons/base_graph/__init__.py
+++ b/addons/web_gantt/__init__.py
@@ -1,2 +1 @@
#!/usr/bin/python
-import controllers \ No newline at end of file
diff --git a/addons/base_gantt/__openerp__.py b/addons/web_gantt/__openerp__.py
index c23f352a4f7..6d857e5dc48 100644
--- a/addons/base_gantt/__openerp__.py
+++ b/addons/web_gantt/__openerp__.py
@@ -1,7 +1,7 @@
{
- "name": "Base Gantt",
+ "name": "web Gantt",
"version": "2.0",
- "depends": ['base'],
+ "depends": ['web'],
"js": [
'static/lib/dhtmlxGantt/sources/dhtmlxcommon.js',
'static/lib/dhtmlxGantt/sources/dhtmlxgantt.js',
diff --git a/addons/base_gantt/controllers/__init__.py b/addons/web_gantt/controllers/__init__.py
index 039d9715fab..039d9715fab 100644
--- a/addons/base_gantt/controllers/__init__.py
+++ b/addons/web_gantt/controllers/__init__.py
diff --git a/addons/base_gantt/controllers/main.py b/addons/web_gantt/controllers/main.py
index 56fb2b7e79f..56fb2b7e79f 100644
--- a/addons/base_gantt/controllers/main.py
+++ b/addons/web_gantt/controllers/main.py
diff --git a/addons/base_gantt/po/base_gantt.pot b/addons/web_gantt/po/base_gantt.pot
index b1700659a8f..b1700659a8f 100644
--- a/addons/base_gantt/po/base_gantt.pot
+++ b/addons/web_gantt/po/base_gantt.pot
diff --git a/addons/web_gantt/po/web_gantt.pot b/addons/web_gantt/po/web_gantt.pot
new file mode 100644
index 00000000000..945fa401fd2
--- /dev/null
+++ b/addons/web_gantt/po/web_gantt.pot
@@ -0,0 +1,19 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/License_GPL.html b/addons/web_gantt/static/lib/dhtmlxGantt/License_GPL.html
index afe2ef33f0b..afe2ef33f0b 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/License_GPL.html
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/License_GPL.html
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js
index ab3fe54405b..ab3fe54405b 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxcommon.js
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css
index 2923173eebc..2923173eebc 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.css
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js
index 454e20e7838..454e20e7838 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/dhtmlxgantt.js
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif
index 3bd086371b2..3bd086371b2 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/arr.gif
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png
index 9d495780d13..9d495780d13 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png
index 68376a9c70d..68376a9c70d 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg_week.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png
index 02f41eaf5d8..02f41eaf5d8 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_bg.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png
index aa35f7dcf5f..aa35f7dcf5f 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/menu_selection.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png
index 556058d6b22..556058d6b22 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/menu/window_tr.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif
index 470c6736e72..470c6736e72 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png
index 1d08f670c44..1d08f670c44 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/parentnode_filled.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif
index ff22238004d..ff22238004d 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png
index 69205da45a8..69205da45a8 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_bg.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png
index 8be117b1ad2..8be117b1ad2 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/progress_filled.png
Binary files differ
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/index.html b/addons/web_gantt/static/lib/dhtmlxGantt/index.html
index 5196d426ca6..5196d426ca6 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/index.html
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/index.html
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/readme.txt b/addons/web_gantt/static/lib/dhtmlxGantt/readme.txt
index fc2627d9fb7..fc2627d9fb7 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/readme.txt
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/readme.txt
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js
index bc7de14346d..bc7de14346d 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxcommon.js
diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js
index 0d838fdd510..0d838fdd510 100644
--- a/addons/base_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js
+++ b/addons/web_gantt/static/lib/dhtmlxGantt/sources/dhtmlxgantt.js
diff --git a/addons/base_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js
index ad44382397b..5bf04ff46c7 100644
--- a/addons/base_gantt/static/src/js/gantt.js
+++ b/addons/web_gantt/static/src/js/gantt.js
@@ -1,14 +1,15 @@
/*---------------------------------------------------------
- * OpenERP base_gantt
+ * OpenERP web_gantt
*---------------------------------------------------------*/
-openerp.base_gantt = function (openerp) {
-QWeb.add_template('/base_gantt/static/src/xml/base_gantt.xml');
-openerp.base.views.add('gantt', 'openerp.base_gantt.GanttView');
-openerp.base_gantt.GanttView = openerp.base.View.extend({
+openerp.web_gantt = function (openerp) {
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_gantt/static/src/xml/web_gantt.xml');
+openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView');
+openerp.web_gantt.GanttView = openerp.web.View.extend({
init: function(parent, element_id, dataset, view_id) {
this._super(parent, element_id);
- this.view_manager = parent || new openerp.base.NullViewManager();
+ this.view_manager = parent || new openerp.web.NullViewManager();
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
@@ -31,14 +32,13 @@ init: function(parent, element_id, dataset, view_id) {
},
start: function() {
- this.rpc("/base_gantt/ganttview/load",
- {"model": this.model, "view_id": this.view_id}, this.on_loaded);
+ this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "gantt"}, this.on_loaded);
},
on_loaded: function(data) {
var self = this;
- this.fields_view = data.fields_view;
+ this.fields_view = data;
this.name = this.fields_view.arch.attrs.string;
this.view_id = this.fields_view.view_id;
@@ -67,7 +67,7 @@ init: function(parent, element_id, dataset, view_id) {
create_gantt: function() {
ganttChartControl = new GanttChart(this.day_length);
- ganttChartControl.setImagePath("/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/");
+ ganttChartControl.setImagePath("/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/");
ganttChartControl.setEditable(true);
ganttChartControl.showTreePanel(true);
ganttChartControl.showContextMenu(true);
@@ -94,7 +94,7 @@ init: function(parent, element_id, dataset, view_id) {
COLOR_PALETTE = ['#ccccff', '#cc99ff', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400',
'#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f',
'#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00',
- '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900']
+ '#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900'];
if (result.length != 0){
var show_event = [];
@@ -141,7 +141,7 @@ init: function(parent, element_id, dataset, view_id) {
var color = res[this.color_field][0] || res[this.color_field];
if (color_box[color] == undefined){
color_box[color] = COLOR_PALETTE[k];
- k = k + 1;
+ k += 1;
}
if (this.date_stop != undefined){
@@ -156,8 +156,8 @@ init: function(parent, element_id, dataset, view_id) {
else{
var duration = res[this.date_delay];
}
- if (duration == false)
- duration = 0
+ if (!duration)
+ duration = 0;
if (self.grp.length){
for (var j in self.grp){
@@ -169,7 +169,7 @@ init: function(parent, element_id, dataset, view_id) {
grp_key = res[self.grp[j]['group_by']];
}
- if (grp_key == false){
+ if (!grp_key){
grp_key = "Undefined";
}
@@ -233,7 +233,7 @@ init: function(parent, element_id, dataset, view_id) {
evt_date = all_events[evt_id]['evt'][2];
evt_duration = all_events[evt_id]['evt'][3];
- evt_str_date = this.convert_date_str(evt_date);
+ var evt_str_date = this.convert_date_str(evt_date);
evt_end_date = this.end_date(evt_str_date, evt_duration);
while (all_events[evt_id]['parent'] != "") {
@@ -396,14 +396,14 @@ init: function(parent, element_id, dataset, view_id) {
"type":"ir.actions.act_window",
"view_type":"form",
"view_mode":"form"
- }
+ };
action.flags = {
search_view: false,
sidebar : false,
views_switcher : false,
pager: false
- }
+ };
var element_id = _.uniqueId("act_window_dialog");
var dialog = jQuery('<div>', {
'id': element_id
@@ -425,7 +425,7 @@ init: function(parent, element_id, dataset, view_id) {
}
}
});
- var action_manager = new openerp.base.ActionManager(this, element_id);
+ var action_manager = new openerp.web.ActionManager(this, element_id);
action_manager.start();
action_manager.do_action(action);
@@ -474,24 +474,24 @@ init: function(parent, element_id, dataset, view_id) {
convert_str_date: function (str){
if (str.length == 19){
this.format = "yyyy-MM-dd HH:mm:ss";
- return openerp.base.str_to_datetime(str);
+ return openerp.web.str_to_datetime(str);
} else if (str.length == 10){
this.format = "yyyy-MM-dd";
- return openerp.base.str_to_date(str);
+ return openerp.web.str_to_date(str);
} else if (str.length == 8){
this.format = "HH:mm:ss";
- return openerp.base.str_to_time(str);
+ return openerp.web.str_to_time(str);
}
throw "Unrecognized date/time format";
},
convert_date_str: function(full_date) {
if (this.format == "yyyy-MM-dd HH:mm:ss"){
- return openerp.base.datetime_to_str(full_date);
+ return openerp.web.datetime_to_str(full_date);
} else if (this.format == "yyyy-MM-dd"){
- return openerp.base.date_to_str(full_date);
+ return openerp.web.date_to_str(full_date);
} else if (this.format == "HH:mm:ss"){
- return openerp.base.time_to_str(full_date);
+ return openerp.web.time_to_str(full_date);
}
throw "Unrecognized date/time format";
},
@@ -508,7 +508,7 @@ init: function(parent, element_id, dataset, view_id) {
do_search: function (domains, contexts, groupbys) {
var self = this;
this.grp = groupbys;
- return this.rpc('/base/session/eval_domain_and_context', {
+ return this.rpc('/web/session/eval_domain_and_context', {
domains: domains,
contexts: contexts,
group_by_seq: groupbys
diff --git a/addons/base_gantt/static/src/xml/base_gantt.xml b/addons/web_gantt/static/src/xml/web_gantt.xml
index d064d6e9ef2..d064d6e9ef2 100644
--- a/addons/base_gantt/static/src/xml/base_gantt.xml
+++ b/addons/web_gantt/static/src/xml/web_gantt.xml
diff --git a/addons/base_gantt/__init__.py b/addons/web_graph/__init__.py
index 53e20f29429..53e20f29429 100644
--- a/addons/base_gantt/__init__.py
+++ b/addons/web_graph/__init__.py
diff --git a/addons/base_graph/__openerp__.py b/addons/web_graph/__openerp__.py
index c393953b9fd..4a1c4a6576f 100644
--- a/addons/base_graph/__openerp__.py
+++ b/addons/web_graph/__openerp__.py
@@ -1,7 +1,7 @@
{
- "name": "Base Graph",
+ "name": "web Graph",
"version": "2.0",
- "depends": ['base'],
+ "depends": ['web'],
"js": [
"static/lib/dhtmlxGraph/codebase/dhtmlxchart.js",
"static/src/js/graph.js"],
diff --git a/addons/base_graph/controllers/__init__.py b/addons/web_graph/controllers/__init__.py
index 039d9715fab..039d9715fab 100644
--- a/addons/base_graph/controllers/__init__.py
+++ b/addons/web_graph/controllers/__init__.py
diff --git a/addons/base_graph/controllers/main.py b/addons/web_graph/controllers/main.py
index f326faf3854..cda868c0809 100644
--- a/addons/base_graph/controllers/main.py
+++ b/addons/web_graph/controllers/main.py
@@ -1,8 +1,8 @@
-from base.controllers.main import View
-import base.common as openerpweb
+from web.controllers.main import View
+import web.common as openerpweb
class GraphView(View):
- _cp_path = "/base_graph/graphview"
+ _cp_path = "/web_graph/graphview"
@openerpweb.jsonrequest
def load(self, req, model, view_id):
diff --git a/addons/base_graph/po/base_graph.pot b/addons/web_graph/po/base_graph.pot
index b1700659a8f..b1700659a8f 100644
--- a/addons/base_graph/po/base_graph.pot
+++ b/addons/web_graph/po/base_graph.pot
diff --git a/addons/web_graph/po/web_graph.pot b/addons/web_graph/po/web_graph.pot
new file mode 100644
index 00000000000..945fa401fd2
--- /dev/null
+++ b/addons/web_graph/po/web_graph.pot
@@ -0,0 +1,19 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/License_GPL.html b/addons/web_graph/static/lib/dhtmlxGraph/License_GPL.html
index afe2ef33f0b..afe2ef33f0b 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/License_GPL.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/License_GPL.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css
index dfe553c99a5..dfe553c99a5 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.css
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js
index ebc2279accf..ebc2279accf 100755
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart.js
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css
index c30fbda2da3..c30fbda2da3 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.css
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js
index af9b4437b31..af9b4437b31 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/dhtmlxchart_debug.js
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS
index 90decb3077e..90decb3077e 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/AUTHORS
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING
index d6456956733..d6456956733 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/COPYING
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README
index eb7c42f40be..eb7c42f40be 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/README
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js
index 3fe46d3336f..3fe46d3336f 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js
+++ b/addons/web_graph/static/lib/dhtmlxGraph/codebase/thirdparty/excanvas/excanvas.js
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip b/addons/web_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip
index 4baf4a63cef..4baf4a63cef 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip
+++ b/addons/web_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip
Binary files differ
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/readme.txt b/addons/web_graph/static/lib/dhtmlxGraph/readme.txt
index 046235b626b..046235b626b 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/readme.txt
+++ b/addons/web_graph/static/lib/dhtmlxGraph/readme.txt
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html
index e720ba8ee3e..e720ba8ee3e 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/01_load_xml.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html
index e2ce20ae764..e2ce20ae764 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/02_load_json.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html
index 64c39cfaef1..64c39cfaef1 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/03_load_csv.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html
index 023cb0a503a..023cb0a503a 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/04_load_jsarray.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html
index 0600c05741d..0600c05741d 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/01_initialization/05_series.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html
index 39b2f5e3865..39b2f5e3865 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/01_default.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html
index 8157a8f82b2..8157a8f82b2 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/02_custom.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html
index e88c37b3283..e88c37b3283 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/03_custom_logic.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html
index 973d9cdc008..973d9cdc008 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/02_color/04_gradient.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html
index 401dbdae24f..401dbdae24f 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/01_basic.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html
index 75746062b29..75746062b29 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/03_group/02_scales.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html
index 63c82ecf42c..63c82ecf42c 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/01_init.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html
index 7ba118f19e2..7ba118f19e2 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/02_text.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html
index 957f7ed7954..957f7ed7954 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/03_3d_chart.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html
index 2d5c45c0151..2d5c45c0151 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/04_pie_chart/04_legend.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html
index 626a1e216fe..626a1e216fe 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/01_init.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html
index 39dfe7eb41f..39dfe7eb41f 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/02_style.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html
index 161cbf7ee53..161cbf7ee53 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/03_scale.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html
index 4f266ee8983..4f266ee8983 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/04_spline.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html
index 532cd385519..532cd385519 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/05_line_chart/05_series.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html
index e31ae20dd39..e31ae20dd39 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/01_init.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html
index ee378b194f1..ee378b194f1 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/02_text.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html
index edc1f6ca45d..edc1f6ca45d 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/03_scales.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html
index 0877a95de16..0877a95de16 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/04_styles.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html
index d165d0bd488..d165d0bd488 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/05_stacked_chart.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html
index 3c5fb695692..3c5fb695692 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/06_series.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html
index 6c8046c5855..6c8046c5855 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/07_horizonal_bars.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html
index fe4d8509376..fe4d8509376 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/06_bar_chart/08_horizonal_stacked_bars.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html
index 5195e7476e1..5195e7476e1 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/01_init.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html
index e3d65bd6d55..e3d65bd6d55 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/02_scale.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html
index c071386c348..c071386c348 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_series.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html
index 55fccb93e84..55fccb93e84 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/07_area_chart/03_stacked_area.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html
index 7a3b45f8cee..7a3b45f8cee 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/01_add.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html
index 495d42bf795..495d42bf795 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/02_events.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html
index cb8b254fe10..cb8b254fe10 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/03_sorting.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html
index 230aa820800..230aa820800 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/08_dynamic/04_filtering.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html
index 698da15d9fd..698da15d9fd 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/01_dhtmlxgrid.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html
index d911e209922..d911e209922 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/02_dhtmlxgrid_group.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html
index 822e621d9ca..822e621d9ca 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/09_integration/03_windows.html
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/config.php b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/config.php
index 3695ac3905a..3695ac3905a 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/config.php
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/config.php
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/data.php b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/data.php
index ac8f5116a9d..ac8f5116a9d 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/data.php
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/data.php
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/sales.xml b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/sales.xml
index 03c153cb1e5..03c153cb1e5 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/sales.xml
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/sales.xml
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/stat.xml b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/stat.xml
index 824ff6f6829..824ff6f6829 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/common/stat.xml
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/common/stat.xml
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/samples/readme.txt b/addons/web_graph/static/lib/dhtmlxGraph/samples/readme.txt
index c1f4b60567c..c1f4b60567c 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/samples/readme.txt
+++ b/addons/web_graph/static/lib/dhtmlxGraph/samples/readme.txt
diff --git a/addons/base_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js b/addons/web_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js
index c0c4838a0c0..c0c4838a0c0 100644
--- a/addons/base_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js
+++ b/addons/web_graph/static/lib/dhtmlxGraph/sources/dhtmlxchart.js
diff --git a/addons/base_graph/static/src/js/graph.js b/addons/web_graph/static/src/js/graph.js
index e76d38b33bc..f35e6ab112c 100644
--- a/addons/base_graph/static/src/js/graph.js
+++ b/addons/web_graph/static/src/js/graph.js
@@ -1,8 +1,8 @@
/*---------------------------------------------------------
- * OpenERP base_graph
+ * OpenERP web_graph
*---------------------------------------------------------*/
-openerp.base_graph = function (openerp) {
+openerp.web_graph = function (openerp) {
var COLOR_PALETTE = [
'#cc99ff', '#ccccff', '#48D1CC', '#CFD784', '#8B7B8B', '#75507b',
'#b0008c', '#ff0000', '#ff8e00', '#9000ff', '#0078ff', '#00ff00',
@@ -12,9 +12,10 @@ var COLOR_PALETTE = [
'#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f', '#f57900',
'#cc0000', '#d400a8'];
-QWeb.add_template('/base_graph/static/src/xml/base_graph.xml');
-openerp.base.views.add('graph', 'openerp.base_graph.GraphView');
-openerp.base_graph.GraphView = openerp.base.View.extend({
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_graph/static/src/xml/web_graph.xml');
+openerp.web.views.add('graph', 'openerp.web_graph.GraphView');
+openerp.web_graph.GraphView = openerp.web.View.extend({
init: function(parent, element_id, dataset, view_id) {
this._super(parent, element_id);
@@ -32,7 +33,7 @@ openerp.base_graph.GraphView = openerp.base.View.extend({
this.$element.hide();
},
start: function() {
- return this.rpc("/base_graph/graphview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
+ return this.rpc("/web_graph/graphview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
},
on_loaded: function(data) {
this.all_fields = data.all_fields;
@@ -455,7 +456,7 @@ openerp.base_graph.GraphView = openerp.base.View.extend({
do_search: function(domains, contexts, groupbys) {
var self = this;
- this.rpc('/base/session/eval_domain_and_context', {
+ this.rpc('/web/session/eval_domain_and_context', {
domains: domains,
contexts: contexts,
group_by_seq: groupbys
diff --git a/addons/base_graph/static/src/xml/base_graph.xml b/addons/web_graph/static/src/xml/web_graph.xml
index 4320b9f156e..4320b9f156e 100644
--- a/addons/base_graph/static/src/xml/base_graph.xml
+++ b/addons/web_graph/static/src/xml/web_graph.xml
diff --git a/addons/web_hello/__init__.py b/addons/web_hello/__init__.py
new file mode 100644
index 00000000000..013e4b7ec4e
--- /dev/null
+++ b/addons/web_hello/__init__.py
@@ -0,0 +1 @@
+#!/usr/bin/python
diff --git a/addons/base_hello/__openerp__.py b/addons/web_hello/__openerp__.py
index 7a80645f3b8..7a80645f3b8 100644
--- a/addons/base_hello/__openerp__.py
+++ b/addons/web_hello/__openerp__.py
diff --git a/addons/base_hello/po/base_hello.pot b/addons/web_hello/po/base_hello.pot
index b1700659a8f..b1700659a8f 100644
--- a/addons/base_hello/po/base_hello.pot
+++ b/addons/web_hello/po/base_hello.pot
diff --git a/addons/web_hello/po/web_hello.pot b/addons/web_hello/po/web_hello.pot
new file mode 100644
index 00000000000..d7f6df2d73d
--- /dev/null
+++ b/addons/web_hello/po/web_hello.pot
@@ -0,0 +1,19 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
diff --git a/addons/base_hello/static/openerp/base_hello.js b/addons/web_hello/static/openerp/base_hello.js
index 5d6a02d355b..99c97006eac 100644
--- a/addons/base_hello/static/openerp/base_hello.js
+++ b/addons/web_hello/static/openerp/base_hello.js
@@ -2,9 +2,9 @@
* OpenERP base_hello (Example module)
*---------------------------------------------------------*/
-openerp.base_hello = function(openerp) {
+openerp.web_hello = function(openerp) {
-openerp.base.SearchView = openerp.base.SearchView.extend({
+openerp.web.SearchView = openerp.web.SearchView.extend({
init:function() {
this._super.apply(this,arguments);
this.on_search.add(function(){console.log('hello');});
diff --git a/addons/base_default_home/__init__.py b/addons/web_kanban/__init__.py
index e69de29bb2d..e69de29bb2d 100644
--- a/addons/base_default_home/__init__.py
+++ b/addons/web_kanban/__init__.py
diff --git a/addons/web_kanban/__openerp__.py b/addons/web_kanban/__openerp__.py
new file mode 100644
index 00000000000..30a6421cca1
--- /dev/null
+++ b/addons/web_kanban/__openerp__.py
@@ -0,0 +1,12 @@
+{
+ "name" : "Base Kanban",
+ "version" : "2.0",
+ "depends" : ["web"],
+ "js": [
+ "static/src/js/kanban.js"
+ ],
+ "css": [
+ "static/src/css/kanban.css"
+ ],
+ 'active': True
+}
diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css
new file mode 100644
index 00000000000..afac6cdef47
--- /dev/null
+++ b/addons/web_kanban/static/src/css/kanban.css
@@ -0,0 +1,203 @@
+.openerp .oe_kanban_view .oe_column {
+ float: left;
+ width: 100%;
+}
+
+.openerp .oe_kanban_view .ui-sortable-placeholder {
+ border: 1px dotted black;
+ visibility: visible !important;
+ height: 60px !important;
+}
+
+.openerp .oe_kanban_view .oe_column_heading {
+ color: #000000;
+ font-size: 1.5em;
+ font-weight: bold;
+}
+.openerp .oe_kanban_action_button {
+ height: 22px;
+ margin: 0;
+}
+.openerp .oe_kanban_action_a {
+ text-decoration: none;
+}
+
+.openerp .oe_kanban_box {
+ background: #FFF;
+ border: 2px solid #CCC;
+ border-radius: 4px;
+ margin-bottom: 5px;
+}
+.openerp .oe_kanban_box_header {
+ background: #EEE;
+ border-bottom: 1px solid #CCC;
+}
+.openerp .oe_kanban_title1 {
+ font-size: 130%;
+ font-weight: bold;
+ padding: 0 4px 0 4px;
+}
+.openerp .oe_kanban_title2 {
+ font-size: 120%;
+ font-weight: bold;
+ padding: 0 4px 0 4px;
+}
+.openerp .oe_kanban_title3 {
+ font-size: 110%;
+ font-weight: normal;
+ padding: 0 4px 0 4px;
+}
+.openerp .oe_kanban_small {
+ font-size: 80%;
+ font-weight: normal;
+}
+.openerp .oe_kanban_table {
+ width: 100%;
+ border: none;
+ border-collapse: collapse;
+ margin: 0;
+ padding: 0;
+}
+.openerp .oe_kanban_gravatar {
+ display: block;
+ border-radius: 2px;
+}
+.openerp .oe_kanban_box_content {
+ padding: 4px;
+}
+.openerp .oe_kanban_buttons_set {
+ border-top: 1px dotted;
+ white-space: nowrap;
+ padding-top: 2px;
+ position: relative;
+}
+.openerp .oe_kanban_buttons_set a {
+ padding: 2px;
+}
+.oe_kanban_color_picker {
+ position: absolute;
+ top: -10px;
+ border: 1px solid black;
+ -moz-box-shadow: 2px 2px 5px #666;
+ -webkit-box-shadow: 2px 2px 5px #666;
+ box-shadow: 2px 2px 5px #666;
+}
+.oe_kanban_color_picker a {
+ display: block;
+ width: 30px;
+ height: 30px;
+ border: 1px solid black;
+}
+.oe_kanban_color_picker a:hover {
+ border-color: white;
+}
+.openerp .oe_kanban_left {
+ float: left;
+}
+.openerp .oe_kanban_right {
+ float: right;
+}
+.openerp .oe_kanban_clear {
+ clear: both;
+}
+.openerp .oe_kanban_box_show_onclick {
+ display: none;
+}
+.openerp .oe_kanban_draghandle {
+ cursor: move;
+}
+
+/* Custom colors are also present in kanban.js */
+/* Custom color#1 */
+.openerp .oe_kanban_color_1 .oe_kanban_color_bglight {
+ background: #FFC7C7;
+}
+.openerp .oe_kanban_color_1 .oe_kanban_color_bgdark {
+ background: #FF8F8F;
+}
+.openerp .oe_kanban_color_1 .oe_kanban_color_border {
+ border-color: #D97979;
+}
+
+/* Custom color#2 */
+.openerp .oe_kanban_color_2 .oe_kanban_color_bglight {
+ background: #FFF1C7;
+}
+.openerp .oe_kanban_color_2 .oe_kanban_color_bgdark {
+ background: #FFE38F;
+}
+.openerp .oe_kanban_color_2 .oe_kanban_color_border {
+ border-color: #D9C179;
+}
+
+/* Custom color#3 */
+.openerp .oe_kanban_color_3 .oe_kanban_color_bglight {
+ background: #E3FFC7;
+}
+.openerp .oe_kanban_color_3 .oe_kanban_color_bgdark {
+ background: #C7FF8F;
+}
+.openerp .oe_kanban_color_3 .oe_kanban_color_border {
+ border-color: #A9D979;
+}
+
+/* Custom color#4 */
+.openerp .oe_kanban_color_4 .oe_kanban_color_bglight {
+ background: #C7FFD5;
+}
+.openerp .oe_kanban_color_4 .oe_kanban_color_bgdark {
+ background: #8FFFAB;
+}
+.openerp .oe_kanban_color_4 .oe_kanban_color_border {
+ border-color: #79D991;
+}
+
+/* Custom color#5 */
+.openerp .oe_kanban_color_5 .oe_kanban_color_bglight {
+ background: #C7FFFF;
+}
+.openerp .oe_kanban_color_5 .oe_kanban_color_bgdark {
+ background: #8FFFFF;
+}
+.openerp .oe_kanban_color_5 .oe_kanban_color_border {
+ border-color: #79D9D9;
+}
+
+/* Custom color#6 */
+.openerp .oe_kanban_color_6 .oe_kanban_color_bglight {
+ background: #C7D5FF;
+}
+.openerp .oe_kanban_color_6 .oe_kanban_color_bgdark {
+ background: #8FABFF;
+}
+.openerp .oe_kanban_color_6 .oe_kanban_color_border {
+ border-color: #8FABFF;
+}
+
+/* Custom color#7 */
+.openerp .oe_kanban_color_7 .oe_kanban_color_bglight {
+ background: #E3C7FF;
+}
+.openerp .oe_kanban_color_7 .oe_kanban_color_bgdark {
+ background: #C78FFF;
+}
+.openerp .oe_kanban_color_7 .oe_kanban_color_border {
+ border-color: #A979D9;
+}
+
+/* Custom color#8 */
+.openerp .oe_kanban_color_8 .oe_kanban_color_bglight {
+ background: #FFC7F1;
+}
+.openerp .oe_kanban_color_8 .oe_kanban_color_bgdark {
+ background: #FF8FE3;
+}
+.openerp .oe_kanban_color_8 .oe_kanban_color_border {
+ border-color: #D979C1;
+}
+
+/* Alert color */
+.openerp .oe_kanban_color_alert .oe_kanban_color_border {
+ border-color: #c00 !important;
+}
+
diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js
new file mode 100644
index 00000000000..dfaf7769df5
--- /dev/null
+++ b/addons/web_kanban/static/src/js/kanban.js
@@ -0,0 +1,448 @@
+openerp.web_kanban = function (openerp) {
+
+var QWeb = openerp.web.qweb;
+QWeb.add_template('/web_kanban/static/src/xml/web_kanban.xml');
+openerp.web.views.add('kanban', 'openerp.web_kanban.KanbanView');
+openerp.web_kanban.KanbanView = openerp.web.View.extend({
+ init: function (parent, element_id, dataset, view_id, options) {
+ this._super(parent, element_id);
+ this.set_default_options(options);
+ this.dataset = dataset;
+ this.model = dataset.model;
+ this.domain = dataset.domain;
+ this.context = dataset.context;
+ this.view_id = view_id;
+ this.fields_view = {};
+ this.group_by = [];
+ this.source_index = {};
+ this.all_display_data = false;
+ this.groups = [];
+ this.qweb = new QWeb2.Engine();
+ if (this.options.action_views_ids.form) {
+ this.form_dialog = new openerp.web.FormDialog(this, {}, this.options.action_views_ids.form, dataset).start();
+ this.form_dialog.on_form_dialog_saved.add_last(this.on_record_saved);
+ }
+ },
+ start: function() {
+ return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "kanban"}, this.on_loaded);
+ },
+ on_loaded: function(data) {
+ var self = this;
+ this.fields_view = data;
+ this.add_qweb_template();
+ if (this.qweb.has_template('kanban-box')) {
+ this.do_actual_search();
+ }
+ },
+ add_qweb_template: function() {
+ for (var i=0, ii=this.fields_view.arch.children.length; i < ii; i++) {
+ var child = this.fields_view.arch.children[i];
+ if (child.tag === "templates") {
+ this.transform_qweb_template(child);
+ this.qweb.add_template(openerp.web.json_node_to_xml(child));
+ break;
+ }
+ }
+ },
+ kanban_color: function(variable) {
+ var number_of_color_schemes = 8,
+ index = 0;
+ switch (typeof(variable)) {
+ case 'string':
+ for (var i=0, ii=variable.length; i<ii; i++) {
+ index += variable.charCodeAt(i);
+ }
+ break;
+ case 'number':
+ index = Math.round(variable);
+ break;
+ default:
+ return '';
+ }
+ return 'oe_kanban_color_' + ((index % number_of_color_schemes) || number_of_color_schemes);
+ },
+ kanban_gravatar: function(email, size) {
+ size = size || 22;
+ var email_md5 = '2eb60ad22dadcf4dc456b28390a80268';
+ return 'http://www.gravatar.com/avatar/' + email_md5 + '.png?s=' + size;
+ },
+ transform_qweb_template: function(node) {
+ var qweb_prefix = QWeb.prefix;
+ switch (node.tag) {
+ case 'field':
+ node.tag = 't';
+ node.attrs['t-esc'] = 'record.' + node.attrs['name'] + '.value';
+ break
+ case 'button':
+ case 'a':
+ var type = node.attrs.type || '';
+ if (_.indexOf('action,object,edit,delete,color'.split(','), type) !== -1) {
+ _.each(node.attrs, function(v, k) {
+ if (_.indexOf('icon,type,name,string,context,states'.split(','), k) != -1) {
+ node.attrs['data-' + k] = v;
+ delete(node.attrs[k]);
+ }
+ });
+ if (node.attrs['data-states']) {
+ var states = _.map(node.attrs['data-states'].split(','), function(state) {
+ return "record.state.value == '" + _.trim(state) + "'";
+ });
+ node.attrs['t-if'] = states.join(' or ');
+ }
+ if (node.attrs['data-string']) {
+ node.attrs.title = node.attrs['data-string'];
+ }
+ if (node.attrs['data-icon']) {
+ node.children = [{
+ tag: 'img',
+ attrs: {
+ src: '/web/static/src/img/icons/' + node.attrs['data-icon'] + '.png',
+ width: '16',
+ height: '16'
+ }
+ }];
+ }
+ if (node.tag == 'a') {
+ node.attrs.href = '#';
+ } else {
+ node.attrs.type = 'button';
+ }
+ node.attrs['class'] = (node.attrs['class'] || '') + ' oe_kanban_action oe_kanban_action_' + node.tag;
+ }
+ break;
+ }
+ if (node.children) {
+ for (var i = 0, ii = node.children.length; i < ii; i++) {
+ this.transform_qweb_template(node.children[i]);
+ }
+ }
+ },
+ on_show_data: function(data) {
+ var self = this;
+ this.$element.html(QWeb.render("KanbanView", {"data": data}));
+ this.on_reload_kanban();
+ var drag_handel = false;
+ if (this.$element.find(".oe_kanban_draghandle").length > 0) {
+ drag_handel = ".oe_kanban_draghandle";
+ }
+ this.$element.find(".oe_column").sortable({
+ connectWith: ".oe_column",
+ handle : drag_handel,
+ start: function(event, ui) {
+ self.source_index['index'] = ui.item.index();
+ self.source_index['column'] = ui.item.parent().attr('id');
+ },
+ stop: self.on_receive_record,
+ });
+ this.$element.find(".oe_column").disableSelection()
+ this.$element.find('button.oe_kanban_button_new').click(this.do_add_record);
+ },
+ on_button_click: function (button_attrs, record_id) {
+ var self = this;
+ if (this.groups.length) {
+ _.each(this.groups, function (group) {
+ group.list([],
+ function (groups) {},
+ function (dataset) {
+ dataset.read_slice([], {}, function(records) {
+ var index = parseInt(_.indexOf(dataset.ids, record_id));
+ if(index >= 0) {
+ self.on_confirm_click(dataset, button_attrs, index, record_id);
+ }
+ });
+ }
+ );
+ });
+ } else {
+ var index = parseInt(_.indexOf(self.dataset.ids, record_id));
+ if (index >= 0) {
+ _.extend(self.dataset, {domain: self.domain, context: self.context});
+ self.on_confirm_click(self.dataset, button_attrs, index, record_id);
+ }
+ }
+ },
+ on_confirm_click: function (dataset, button_attrs, index, record_id) {
+ this.on_execute_button_click(dataset, button_attrs, record_id);
+ },
+ do_add_record: function() {
+ this.dataset.index = null;
+ this.do_switch_view('form');
+ },
+ do_edit_record: function(record_id) {
+ if (this.form_dialog) {
+ this.form_dialog.load_id(record_id);
+ this.form_dialog.open();
+ } else {
+ this.notification.warn("Kanban", "No form view defined for this object");
+ }
+ },
+ on_record_saved: function(r) {
+ var id = this.form_dialog.form.datarecord.id;
+ // TODO fme: reload record instead of all. need refactoring
+ this.do_actual_search();
+ },
+ do_change_color: function(record_id, $e) {
+ var self = this,
+ id = record_id,
+ colors = '#FFC7C7,#FFF1C7,#E3FFC7,#C7FFD5,#C7FFFF,#C7D5FF,#E3C7FF,#FFC7F1'.split(','),
+ $cpicker = $(QWeb.render('KanbanColorPicker', { colors : colors, columns: 2 }));
+ $e.after($cpicker);
+ $cpicker.mouseenter(function() {
+ clearTimeout($cpicker.data('timeoutId'));
+ }).mouseleave(function(evt) {
+ var timeoutId = setTimeout(function() { $cpicker.remove() }, 500);
+ $cpicker.data('timeoutId', timeoutId);
+ });
+ $cpicker.find('a').click(function() {
+ var data = {};
+ data[$e.data('name')] = $(this).data('color');
+ self.dataset.write(id, data, {}, function() {
+ // TODO fme: reload record instead of all. need refactoring
+ self.do_actual_search();
+ });
+ $cpicker.remove();
+ });
+ },
+ do_delete: function (id) {
+ var self = this;
+ return $.when(this.dataset.unlink([id])).then(function () {
+ self.drop_records(id);
+ });
+ },
+ drop_records: function (id) {
+ var self = this;
+ _.each(self.all_display_data, function(data, index) {
+ _.each(data.records, function(record, index_row) {
+ if (parseInt(record.id) == id) {
+ self.all_display_data[index]['records'].splice(index_row, 1);
+ self.all_display_data[index]['ids'].splice(index_row, 1);
+ return false;
+ }
+ });
+ });
+ self.$element.find("#main_" + id).remove();
+ },
+ on_execute_button_click: function (dataset, button_attrs, record_id) {
+ var self = this;
+ this.execute_action(
+ button_attrs, dataset,
+ record_id, function () {
+ var count = 1;
+ _.each(self.all_display_data, function(data, index) {
+ self.dataset.read_ids( data.ids, [], function(records){
+ self.all_display_data[index].records = records;
+ if(self.all_display_data.length == count) {
+ self.do_actual_search();
+ }
+ count++;
+ });
+ });
+ }
+ );
+ },
+ on_receive_record: function (event, ui) {
+ var self = this;
+ var from = ui.item.index();
+ var search_action = false;
+ var to = ui.item.prev().index() || 0;
+ if (!ui.item.attr("id")) {
+ return false;
+ }
+ // TODO fme: check what was this sequence
+ if (self.fields_view.fields.sequence && (self.source_index.index >= 0 && self.source_index.index != from) ||
+ (self.source_index.column && self.source_index.column != ui.item.parent().attr('id'))) {
+ var child_record = ui.item.parent().children();
+ var data, sequence = 1, index = to;
+ child_record.splice(0, to);
+ var flag = false;
+ if (to >= 0 && child_record) {
+ var record_id = parseInt($(child_record).attr("id").split("_")[1]);
+ if (record_id) {
+ _.each(self.all_display_data, function(data, index) {
+ _.each(data.records, function(record, index_row) {
+ if(record_id == record.id && record.sequence) {
+ sequence = record.sequence;
+ flag = true;
+ return false;
+ }
+ });
+ if(flag) {return false;}
+ });
+ }
+ }
+ _.each(child_record, function (child) {
+ var child_id = parseInt($(child).attr("id").split("_")[1]);
+ if (child_id) {
+ flag = false;
+ _.each(self.all_display_data, function(data, index) {
+ _.each(data.records, function(record, index_row) {
+ if(parseInt(record.id) == child_id) {
+ self.all_display_data[index]['records'][index_row]['sequence'] = sequence;
+ flag = true;
+ return false;
+ }
+ });
+ if (flag) {return false;}
+ });
+ self.dataset.write(child_id, {sequence: sequence});
+ sequence++;
+ search_action = true;
+ }
+ });
+ }
+ if (self.group_by.length > 0 && self.source_index.column && self.source_index.column != ui.item.parent().attr('id')) {
+ var value = ui.item.closest("td").attr("id");
+ if (value) {
+ var data_val = {};
+ var wirte_id = parseInt(ui.item.attr("id").split("_")[1]);
+ value = value.split("_")[1];
+ if (value == 'false') {
+ value = false;
+ }
+ var update_record = false;
+ _.each(self.all_display_data, function(data, index) {
+ _.each(data.records, function(record, index_row) {
+ if(parseInt(record.id) == wirte_id) {
+ self.all_display_data[index]['records'][index_row][self.group_by[0]] = value;
+ update_record = self.all_display_data[index]['records'].splice(index_row,1)
+ return false;
+ }
+ });
+ if (update_record) {return false;}
+ });
+ _.each(self.all_display_data, function(data, index) {
+ if (data.value == value || (data.value == 'false' && value == false)) {
+ self.all_display_data[index]['records'].push(update_record[0]);
+ }
+ });
+ data_val[self.group_by[0]] = value;
+ self.dataset.write(wirte_id, data_val);
+ search_action = true;
+ }
+ }
+ if (search_action) {
+ self.on_reload_kanban();
+ }
+ this.source_index = {};
+ },
+ on_reload_kanban: function (){
+ var self = this;
+ _.each(self.all_display_data, function(data, index) {
+ if (data.records.length > 0){
+ _.each(data.records, function(record) {
+ self.$element.find("#main_" + record.id).children().remove();
+ self.$element.find("#main_" + record.id).append(self.qweb.render('kanban-box', {
+ record: self.do_transform_record(record),
+ kanban_color: self.kanban_color,
+ kanban_gravatar: self.kanban_gravatar
+ }));
+ });
+ } else {
+ self.$element.find("#column_" + data.value).remove();
+ self.all_display_data.splice(index, 1);
+ }
+ });
+ this.$element.find('.oe_kanban_action').click(this.on_action_clicked);
+ this.$element.find('.oe_kanban_box_show_onclick_trigger').click(function() {
+ $(this).parent('.oe_kanban_box').find('.oe_kanban_box_show_onclick').toggle();
+ });
+ },
+ on_action_clicked: function(evt) {
+ var $action = $(evt.currentTarget),
+ record_id = parseInt($action.closest(".oe_kanban_record").attr("id").split('_')[1]),
+ type = $action.data('type');
+ if (type == 'delete') {
+ this.do_delete(record_id);
+ } else if (type == 'edit') {
+ this.do_edit_record(record_id);
+ } else if (type == 'color') {
+ this.do_change_color(record_id, $action);
+ } else {
+ var button_attrs = $action.data();
+ this.on_button_click(button_attrs, record_id);
+ }
+ },
+ do_transform_record: function(record) {
+ var self = this,
+ new_record = {};
+ _.each(record, function(value, name) {
+ var r = _.clone(self.fields_view.fields[name]);
+ r.raw_value = value;
+ r.value = openerp.web.format_value(value, r);
+ new_record[name] = r;
+ });
+ return new_record;
+ },
+ do_search: function (domains, contexts, group_by) {
+ var self = this;
+ this.rpc('/web/session/eval_domain_and_context', {
+ domains: domains,
+ contexts: contexts,
+ group_by_seq: group_by
+ }, function (results) {
+ self.domain = results.domain;
+ self.context = results.context;
+ self.group_by = results.group_by;
+ self.do_actual_search();
+ });
+ },
+ do_actual_search : function () {
+ var self = this,
+ group_by = self.group_by;
+ if (!group_by.length && this.fields_view.arch.attrs.default_group_by) {
+ group_by = [this.fields_view.arch.attrs.default_group_by];
+ }
+ self.datagroup = new openerp.web.DataGroup(self, self.model, self.domain, self.context, group_by);
+ self.dataset.context = self.context;
+ self.dataset.domain = self.domain;
+ self.datagroup.list([],
+ function (groups) {
+ self.groups = groups;
+ self.do_render_group(groups);
+ },
+ function (dataset) {
+ self.domain = dataset.domain;
+ self.context = dataset.context;
+ self.groups = [];
+ self.dataset.read_slice([], {}, function(records) {
+ self.all_display_data = [{'records': records, 'value':false, 'header' : false, 'ids': self.dataset.ids}];
+ self.$element.find(".oe_kanban_view").remove();
+ self.on_show_data(self.all_display_data);
+ });
+ }
+ );
+ },
+ do_render_group : function (datagroups) {
+ this.all_display_data = [];
+ var self = this;
+ _.each(datagroups, function (group) {
+ self.dataset.context = group.context;
+ self.dataset.domain = group.domain;
+ var group_name = group.value;
+ var group_value = group.value;
+ if (!group.value) {
+ group_name = "Undefined";
+ group_value = 'false';
+ } else if (group.value instanceof Array) {
+ group_name = group.value[1];
+ group_value = group.value[0];
+ }
+ self.dataset.read_slice([], {}, function(records) {
+ self.all_display_data.push({"value" : group_value, "records": records, 'header':group_name, 'ids': self.dataset.ids});
+ if (datagroups.length == self.all_display_data.length) {
+ self.$element.find(".oe_kanban_view").remove();
+ self.on_show_data(self.all_display_data);
+ }
+ });
+ });
+ },
+ do_show: function () {
+ this.$element.show();
+ },
+ do_hide: function () {
+ this.$element.hide();
+ }
+});
+};
+
+// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
diff --git a/addons/web_kanban/static/src/xml/web_kanban.xml b/addons/web_kanban/static/src/xml/web_kanban.xml
new file mode 100644
index 00000000000..aa7bc73190d
--- /dev/null
+++ b/addons/web_kanban/static/src/xml/web_kanban.xml
@@ -0,0 +1,37 @@
+<template>
+<t t-name="KanbanView">
+ <table style="width:100%;" class="oe_kanban_view">
+ <tr>
+ <td>
+ <div class="oe_form_header">
+ <button type="button" class="oe_kanban_button_new">New</button>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td t-foreach="data" t-as="columns" class="oe_table_column oe_column_heading" t-att-id="'column_' + columns.value">
+ <t t-if="columns.value" t-esc="columns.header"/>
+ </td>
+ </tr>
+ <tr>
+ <td t-foreach="data" t-as="columns" class="oe_table_column" t-att-id="'column_' + columns.value" t-attf-style="width: #{Math.round(99 / data.length)}%">
+ <div class="oe_column" t-att-id="'column_' + columns.value">
+ <div t-foreach="columns.records" t-as="record" class="oe_kanban_record" t-att-id="'main_' + record.id"/>
+ </div>
+ </td>
+ </tr>
+ </table>
+</t>
+<t t-name="KanbanColorPicker">
+ <table cellspacing="0" cellpadding="0" border="0" class="oe_kanban_color_picker">
+ <tr>
+ <t t-foreach="colors" t-as="color">
+ <td t-att-bgcolor="color">
+ <a href="#" t-att-data-color="color_index + 1"/>
+ </td>
+ <t t-if="((color_index + 1) % Math.round(colors.length / columns)) == 0">&lt;/tr&gt;&lt;tr&gt;</t>
+ </t>
+ </tr>
+ </table>
+</t>
+</template>
diff --git a/addons/web_mobile/__init__.py b/addons/web_mobile/__init__.py
index ee5959455ad..e69de29bb2d 100644
--- a/addons/web_mobile/__init__.py
+++ b/addons/web_mobile/__init__.py
@@ -1 +0,0 @@
-import controllers
diff --git a/addons/web_mobile/controllers/__init__.py b/addons/web_mobile/controllers/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/addons/web_mobile/controllers/__init__.py
+++ /dev/null
diff --git a/addons/web_mobile/po/web_mobile.pot b/addons/web_mobile/po/web_mobile.pot
index b8582b3f12f..37b557def1d 100644
--- a/addons/web_mobile/po/web_mobile.pot
+++ b/addons/web_mobile/po/web_mobile.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2011-08-17 13:28+0200\n"
+"POT-Creation-Date: 2011-09-06 12:03+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,18 +22,10 @@ msgid "OpenERP"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Home"
-msgstr ""
-
-#: addons/web_mobile/static/src/xml/web_mobile.xml:0
msgid "Database:"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid "Choose Database..."
-msgstr ""
-
-#: addons/web_mobile/static/src/xml/web_mobile.xml:0
msgid "Login:"
msgstr ""
@@ -46,7 +38,11 @@ msgid "Login"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
-msgid ":"
+msgid "Bad username or password"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Home"
msgstr ""
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
@@ -69,3 +65,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ""
+
diff --git a/addons/web_mobile/static/src/js/chrome_mobile.js b/addons/web_mobile/static/src/js/chrome_mobile.js
index 551856e01fb..2b9d8600fef 100644
--- a/addons/web_mobile/static/src/js/chrome_mobile.js
+++ b/addons/web_mobile/static/src/js/chrome_mobile.js
@@ -5,22 +5,21 @@
openerp.web_mobile.chrome_mobile = function(openerp) {
openerp.web_mobile.mobilewebclient = function(element_id) {
- // TODO Helper to start mobile webclient rename it openerp.base.webclient
+ // TODO Helper to start mobile webclient rename it openerp.web.webclient
var client = new openerp.web_mobile.MobileWebClient(element_id);
client.start();
return client;
};
-openerp.web_mobile.MobileWebClient = openerp.base.Widget.extend({
+openerp.web_mobile.MobileWebClient = openerp.web.Widget.extend({
init: function(element_id) {
- var self = this;
this._super(null, element_id);
QWeb.add_template("xml/web_mobile.xml");
var params = {};
this.$element.html(QWeb.render("WebClient", {}));
- this.session = new openerp.base.Session("oe_errors");
- this.crashmanager = new openerp.base.CrashManager(this);
- this.login = new openerp.web_mobile.Login(this, "oe_app");
+ this.session = new openerp.web.Session("oe_errors");
+ this.crashmanager = new openerp.web.CrashManager(this);
+ this.login = new openerp.web_mobile.Login(this, "oe_login");
// this.session.on_session_invalid.add(this.login.do_ask_login);
},
start: function() {
@@ -29,14 +28,11 @@ openerp.web_mobile.MobileWebClient = openerp.base.Widget.extend({
}
});
-openerp.web_mobile.Login = openerp.base.Widget.extend({
- init: function(session, element_id) {
- this._super(session, element_id);
- },
+openerp.web_mobile.Login = openerp.web.Widget.extend({
start: function() {
var self = this;
jQuery("#oe_header").children().remove();
- this.rpc("/base/database/get_list", {}, function(result) {
+ this.rpc("/web/database/get_list", {}, function(result) {
var selection = new openerp.web_mobile.Selection();
self.db_list = result.db_list;
self.$element.html(QWeb.render("Login", self));
@@ -53,6 +49,7 @@ openerp.web_mobile.Login = openerp.base.Widget.extend({
var db = $e.find("div select[name=database]").val();
var login = $e.find("div input[name=login]").val();
var password = $e.find("div input[name=password]").val();
+
//$e.hide();
// Should hide then call callback
this.session.session_login(db, login, password, function() {
@@ -74,8 +71,9 @@ openerp.web_mobile.Login = openerp.base.Widget.extend({
.removeClass("login_invalid")
.addClass("login_valid");
//.hide();
- this.homepage = new openerp.web_mobile.HomePage(this, "oe_app");
- this.homepage.start();
+
+ this.menu = new openerp.web_mobile.Menu(this, "oe_menu", "oe_secondary_menu");
+ this.menu.start();
},
do_ask_login: function(continuation) {
this.on_login_invalid();
@@ -87,66 +85,60 @@ openerp.web_mobile.Login = openerp.base.Widget.extend({
}
});
-openerp.web_mobile.HomePage = openerp.base.Widget.extend({
+openerp.web_mobile.Header = openerp.web.Widget.extend({
init: function(session, element_id) {
this._super(session, element_id);
},
start: function() {
- this.$element.html(QWeb.render("HomePage", {}));
- this.header = new openerp.web_mobile.Header(this, "oe_header");
- this.shortcuts = new openerp.web_mobile.Shortcuts(this, "oe_shortcuts");
- this.menu = new openerp.web_mobile.Menu(this, "oe_menu", "oe_secondary_menu");
- this.options = new openerp.web_mobile.Options(this, "oe_options");
- this.header.start();
- this.shortcuts.start();
- this.menu.start();
- this.options.start();
- jQuery("#oe_header").find("h1").html('Home');
- this.$element.find("a").click(this.on_clicked);
+ var self = this;
+ self.$element.html(QWeb.render("Header", this));
}
});
-openerp.web_mobile.Header = openerp.base.Widget.extend({
+openerp.web_mobile.Footer = openerp.web.Widget.extend({
init: function(session, element_id) {
this._super(session, element_id);
},
start: function() {
var self = this;
- self.$element.html(QWeb.render("Header", this));
- self.$element.find("a").click(this.on_clicked);
- },
- on_clicked: function(ev) {
- $opt = $(ev.currentTarget);
- current_id = $opt.attr('id');
- if (current_id == 'home') {
- this.homepage = new openerp.web_mobile.HomePage(this, "oe_app");
- this.homepage.start();
- }
+ self.$element.html(QWeb.render("Footer", this));
}
});
-openerp.web_mobile.Shortcuts = openerp.base.Widget.extend({
+openerp.web_mobile.Shortcuts = openerp.web.Widget.extend({
init: function(session, element_id) {
this._super(session, element_id);
},
start: function() {
var self = this;
- this.rpc('/base/session/sc_list',{} ,function(res){
+ this.rpc('/web/session/sc_list',{} ,function(res){
self.$element.html(QWeb.render("Shortcuts", {'sc' : res}))
- self.$element.find("a").click(self.on_clicked);
- })
+ self.$element.find('#content').find("a").click(self.on_clicked);
+ self.$element.find("#footer").find('#preference').click(function(){
+ if(!$('#oe_options').html().length){
+ this.options = new openerp.web_mobile.Options(self, "oe_options");
+ this.options.start();
+ }
+ else{
+ self.$element.find("#footer").find('#preference').attr('href','#oe_options');
+ }
+ });
+ $.mobile.changePage($("#oe_shortcuts"), "slide", true, true);
+ });
},
on_clicked: function(ev) {
$shortcut = $(ev.currentTarget);
id = $shortcut.data('menu');
res_id = $shortcut.data('res');
- jQuery("#oe_header").find("h1").html($shortcut.data('name'));
- this.listview = new openerp.web_mobile.ListView(this, "oe_app", res_id);
+// this.header = new openerp.web_mobile.Header(this, "oe_header");
+ this.listview = new openerp.web_mobile.ListView(this, "oe_list", res_id);
+// this.header.start();
this.listview.start();
+ jQuery("#oe_header").find("h1").html($shortcut.data('name'));
}
});
-openerp.web_mobile.Menu = openerp.base.Widget.extend({
+openerp.web_mobile.Menu = openerp.web.Widget.extend({
init: function(session, element_id, secondary_menu_id) {
this._super(session, element_id);
this.secondary_menu_id = secondary_menu_id;
@@ -154,96 +146,141 @@ openerp.web_mobile.Menu = openerp.base.Widget.extend({
this.menu = false;
},
start: function() {
- this.rpc("/base/menu/load", {}, this.on_loaded);
+ this.rpc("/web/menu/load", {}, this.on_loaded);
},
on_loaded: function(data) {
+ var self = this;
this.data = data;
this.$element.html(QWeb.render("Menu", this.data));
- this.$element.add(this.$secondary_menu).find("a").click(this.on_menu_click);
+
+ this.$element.find("#footer").find('#shrotcuts').click(function(){
+ if(!$('#oe_shortcuts').html().length){
+ this.shortcuts = new openerp.web_mobile.Shortcuts(self, "oe_shortcuts");
+ this.shortcuts.start();
+ }
+ else{
+ self.$element.find("#footer").find('#shrotcuts').attr('href','#oe_shortcuts');
+ }
+ });
+ this.$element.find("#footer").find('#preference').click(function(){
+ if(!$('#oe_options').html().length){
+ this.options = new openerp.web_mobile.Options(self, "oe_options");
+ this.options.start();
+ }
+ else{
+ self.$element.find("#footer").find('#preference').attr('href','#oe_options');
+ }
+ });
+ this.$element.add(this.$secondary_menu).find("#content").find('a').click(this.on_menu_click);
+ $.mobile.changePage($("#oe_menu"), "slide", true, true);
},
on_menu_click: function(ev, id) {
- $menu = $(ev.currentTarget);
+ var $menu = $(ev.currentTarget);
id = $menu.data('menu');
for (var i = 0; i < this.data.data.children.length; i++) {
if (this.data.data.children[i].id == id) {
this.children = this.data.data.children[i];
}
}
- jQuery("#oe_header").find("h1").html($menu.data('name'));
this.$element
.removeClass("login_valid")
.addClass("secondary_menu");
//.hide();
- this.secondary = new openerp.web_mobile.Secondary(this, "oe_app", this.children);
- this.secondary.start();
+ if(!$('#oe_sec_menu').html().length){
+ this.secondary = new openerp.web_mobile.Secondary(this, "oe_sec_menu", this.children);
+ this.secondary.start();
+ }else{
+ this.$element.find("#content").find('a').attr('href','#oe_sec_menu');
+ }
+ /*if(!$('#oe_sec_menu').html().length){
+ this.secondary = new openerp.web_mobile.Secondary(this, "oe_sec_menu", this.children);
+ this.secondary.start();
+ }else{
+ // self.$element.find("#content").find('a').attr('href','#oe_sec_menu');
+ this.$element.add(this.$secondary_menu).find("#content").find('a').attr('href','#oe_sec_menu');
+ }*/
+
}
});
-
-openerp.web_mobile.Secondary = openerp.base.Widget.extend({
+openerp.web_mobile.Secondary = openerp.web.Widget.extend({
init: function(session, element_id, secondary_menu_id) {
this._super(session, element_id);
this.data = secondary_menu_id;
},
start: function(ev, id) {
+ var self = this;
+ // console.log(this.data,this.$element.html().length);
+
+ /* if(this.$element.html().length){
+ self.$element.find('[data-role="listview"]').remove();
+
+ _.each(self.data.children,function(i){
+ var newul = '<ul data-dividertheme="b" class="ui-listview ui-listview-inset ui-corner-all ui-shadow" data-theme="c" data-inset="true" data-role="listview"><li data-role="list-divider">'+
+ i.name+'</li></ul>'; // Create New List Item
+ self.$element.find('#content').append(newul);
+ //console.log('in for loop',i.children);
+ });
+ console.log('saaasasaaa',self.$element.find('#content'),self.data);
+ //self.$element.find('[data-role="listview"]').listview('refresh');
+ }else{*/
+
var v = { menu : this.data };
this.$element.html(QWeb.render("Menu.secondary", v));
- this.$element.add(this.$secondary_menu).find("a").click(this.on_menu_click);
+ this.$element.find("#header").find("h1").html(this.data.name);
+ this.$element.add(this.$secondary_menu).find('#content').find("a").click(this.on_menu_click);
+ this.$element.find("#footer").find('#shrotcuts').click(function(){
+ if(!$('#oe_shortcuts').html().length){
+ this.shortcuts = new openerp.web_mobile.Shortcuts(self, "oe_shortcuts");
+ this.shortcuts.start();
+ }
+ else{
+ self.$element.find("#footer").find('#shrotcuts').attr('href','#oe_shortcuts');
+ }
+ });
+ this.$element.find("#footer").find('#preference').click(function(){
+ if(!$('#oe_options').html().length){
+ this.options = new openerp.web_mobile.Options(self, "oe_options");
+ this.options.start();
+ }
+ else{
+ self.$element.find("#footer").find('#preference').attr('href','#oe_options');
+ }
+ });
+ $.mobile.changePage($("#oe_sec_menu"), "slide", true, true);
},
on_menu_click: function(ev, id) {
- $menu = $(ev.currentTarget);
+ var $menu = $(ev.currentTarget);
id = $menu.data('menu');
- for (var i = 0; i < this.data.children.length; i++) {
- if (this.data.children[i].id == id) {
- this.children = this.data.children[i];
- }
+ if (id) {
+ this.listview = new openerp.web_mobile.ListView(this, "oe_list", id);
+ this.listview.start();
}
jQuery("#oe_header").find("h1").html($menu.data('name'));
- var child_len = this.children.children.length;
- if (child_len > 0) {
- this.$element
- .removeClass("secondary_menu")
- .addClass("content_menu");
- //.hide();
- this.secondary = new openerp.web_mobile.Secondary(this, "oe_app", this.children);
- this.secondary.start();
- }
- else {
- if (id) {
- this.listview = new openerp.web_mobile.ListView(this, "oe_app", id);
- this.listview.start();
- }
- }
}
});
-openerp.web_mobile.Options = openerp.base.Widget.extend({
- init: function(session, element_id) {
- this._super(session, element_id);
- },
+openerp.web_mobile.Options = openerp.web.Widget.extend({
start: function() {
var self = this;
this.$element.html(QWeb.render("Options", this));
- self.$element.find("#logout").click(self.on_logout);
- },
- on_logout: function(ev) {
- this.session.logout();
-// this.login = new openerp.web_mobile.Login(this, "oe_app");
-// this.login.start();
+ this.$element.find("#footer").find('#shrotcuts').click(function(){
+ if(!$('#oe_shortcuts').html().length){
+ this.shortcuts = new openerp.web_mobile.Shortcuts(self, "oe_shortcuts");
+ this.shortcuts.start();
+ }
+ else{
+ self.$element.find("#footer").find('#shrotcuts').attr('href','#oe_shortcuts');
+ }
+ });
+ $.mobile.changePage($("#oe_options"), "slide", true, true);
}
});
-openerp.web_mobile.Selection = openerp.base.Widget.extend({
- init: function (){
- this._super();
- },
- start: function(){
- this._super();
- var self = this;
- },
+openerp.web_mobile.Selection = openerp.web.Widget.extend({
on_select_option: function(ev){
ev.preventDefault();
var $this = ev.currentTarget;
$($this).prev().find(".ui-btn-text").html($($this).find("option:selected").text());
}
});
-}
+};
diff --git a/addons/web_mobile/static/src/js/form_mobile.js b/addons/web_mobile/static/src/js/form_mobile.js
index 4a3e2167c02..3dc777a2bd6 100644
--- a/addons/web_mobile/static/src/js/form_mobile.js
+++ b/addons/web_mobile/static/src/js/form_mobile.js
@@ -4,7 +4,7 @@
openerp.web_mobile.form_mobile = function (openerp) {
-openerp.web_mobile.FormView = openerp.base.Widget.extend({
+openerp.web_mobile.FormView = openerp.web.Widget.extend({
init: function(session, element_id, list_id, action) {
this._super(session, element_id);
this.list_id = list_id;
@@ -18,19 +18,20 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
},
start: function() {
var self = this;
- id = this.list_id;
- model = this.action.res_model;
- view_id = this.action.views[1][0];
- this.dataset = new openerp.base.DataSetSearch(this, this.action.res_model, null, null);
+ var id = this.list_id;
+ var model = this.action.res_model;
+ var view_id = this.action.views[1][0];
+ this.dataset = new openerp.web.DataSetSearch(this, this.action.res_model, null, null);
+ var context = new openerp.web.CompoundContext(this.dataset.get_context());
this.dataset.read_slice([],{}, function (result) {
for (var i = 0; i < result.length; i++) {
if (result[i].id == id) {
var data = result[i];
}
}
- self.rpc("/base/formview/load", {"model": model, "view_id": view_id }, function (result) {
- var fields = result.fields_view.fields;
- var view_fields = result.fields_view.arch.children;
+ self.rpc("/web/view/load", {"model": model, "view_id": view_id, "view_type": "form", context: context}, function (result) {
+ var fields = result.fields;
+ var view_fields = result.arch.children;
var get_fields = self.get_fields(view_fields);
var selection = new openerp.web_mobile.Selection();
for (var j = 0; j < view_fields.length; j++) {
@@ -38,8 +39,9 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
var notebooks = view_fields[j];
}
}
- $("#oe_header").find("h1").html(result.fields_view.arch.attrs.string);
self.$element.html(QWeb.render("FormView", {'get_fields': get_fields, 'notebooks': notebooks || false, 'fields' : fields, 'values' : data }));
+
+ self.$element.find("#header").find('h1').html(self.action.name);
self.$element.find('select').change(function(ev){
selection.on_select_option(ev);
});
@@ -69,31 +71,50 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
if (!next.find('.detail').html().length) {
for (var i = 0; i < get_fields.length; i++) {
if (fields[get_fields[i].attrs.name].type == 'one2many'){
- var get_fields_test = self.get_fields(fields[get_fields[i].attrs.name].views.form.arch.children);
- var fields_test = fields[get_fields[i].attrs.name]['views'].form.fields;
- var notebook=fields[get_fields[i].attrs.name].views.form.arch;
+ if(fields[get_fields[i].attrs.name].views.form){
+ var get_fields_test = self.get_fields(fields[get_fields[i].attrs.name].views.form.arch.children);
+ var fields_test = fields[get_fields[i].attrs.name]['views'].form.fields;
+ var notebook=fields[get_fields[i].attrs.name].views.form.arch;
+ }
+ var relational = get_fields[i].attrs.name;
}
}
if(notebook){
- next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data,'til': notebook.attrs.string }));
+ next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields, 'values' : data,'til': notebook.attrs.string }));
}else{
- next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields_view.fields, 'values' : data }));
+ next.find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields,'fields' : result.fields, 'values' : data }));
}
}
- next.find('.detail').find('a').click(function(){
- if(next.find('.detail').find('a').next().find('.detail').html().length){
- if (next.find('.detail').find('a').next().hasClass(self.content_collapsed_class)) {
- self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
- }
- else if (next.find('.detail').find('a').next().hasClass(self.content_expanded_class)) {
- self.expanded(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
- }
- }
- if(!next.find('.detail').find('a').next().find('.detail').html().length){
- next.find('.detail').find('a').next().find('.detail').append(QWeb.render("FormView", {'get_fields': get_fields_test,'fields' : fields_test, 'values' : data }));
- self.collapsed(next.find('.detail').find('a').next(),next.find('.detail').find('a').find('span .ui-icon'));
+
+ //$.mobile.changePage($("#oe_form"), "slide", true, true);
+ /*next.find('.detail').find('li').click(function(){
+ if(data[relational]){
+ var dataset = new openerp.web.DataSetStatic(self, result.fields[relational].relation, result.fields[relational].context);
+ dataset.domain=[['id', 'in', data[relational]]];
+ dataset.name_search('', dataset.domain, 'in',false ,function(res){
+ for(var i=0;i<res.length;i++){
+ var splited_data = res[i][1].split(',');
+ res[i][1] = splited_data[0];
+ }
+ self.$element.html(QWeb.render("ListView", {'records' : res}));
+ self.$element.find("#searchid").focus();
+ self.$element.find("a#list-id").click(function(ev){
+ dataset = new openerp.web.DataSetSearch(self, dataset.model, null, null);
+ dataset.read_slice([],{}, function (result_relational) {
+ for (var i = 0; i < result_relational.length; i++) {
+ if (result_relational[i].id == $(ev.currentTarget).data('id')) {
+ var data_relational = result_relational[i];
+ }
+ }
+ self.$element.html(QWeb.render("FormView", {'get_fields': get_fields_test, 'notebooks': false, 'fields' : fields_test, 'values' : data_relational }));
+ self.$element.find('select').change(function(ev){
+ selection.on_select_option(ev);
+ });
+ });
+ });
+ });
}
- });
+ });*/
}
}
self.$element.find('select').change(function(ev){
@@ -101,6 +122,8 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
});
});
});
+ $.mobile.changePage($("#oe_form"), "slide", true, true);
+ //$("#oe_header").find("h1").html(result.arch.attrs.string);
});
},
get_fields: function(view_fields, fields) {
@@ -128,4 +151,4 @@ openerp.web_mobile.FormView = openerp.base.Widget.extend({
next.addClass(this.collapsed_class);
}
});
-} \ No newline at end of file
+};
diff --git a/addons/web_mobile/static/src/js/list_mobile.js b/addons/web_mobile/static/src/js/list_mobile.js
index b4ba5e08cc3..1d4e0d72ca2 100644
--- a/addons/web_mobile/static/src/js/list_mobile.js
+++ b/addons/web_mobile/static/src/js/list_mobile.js
@@ -4,70 +4,67 @@
openerp.web_mobile.list_mobile = function (openerp) {
-openerp.web_mobile.ListView = openerp.base.Widget.extend({
+openerp.web_mobile.ListView = openerp.web.Widget.extend({
init: function(session, element_id, list_id) {
this._super(session, element_id);
this.list_id = list_id;
},
start: function() {
- this.rpc('/base/menu/action', {'menu_id': this.list_id},
+ this.rpc('/web/menu/action', {'menu_id': this.list_id},
this.on_menu_action_loaded);
},
on_menu_action_loaded: function(data) {
var self = this;
if (data.action.length) {
this.action = data.action[0][2];
- this.on_search_data('');
+ this.on_search_data();
}
},
- on_search_data: function(request){
- if(request){
- if(request.term){
- var search_val = request.term;
- }else{
- if(request.which==27 || request.which==13 || request.which==9){
- var search_val = '';
- }else if(request.which==38 || request.which==40 || request.which==39 || request.which==37){
- return;
- }else if($("#searchid").val()==""){
- var search_val = '';
- }else{
- return;
- }
- }
- }
- else{
- var search_val = '';
- }
+ on_search_data: function(ev){
var self = this;
-
- var dataset = new openerp.base.DataSetStatic(this, this.action.res_model, this.action.context);
- dataset.domain=[['name','ilike',search_val]];
- dataset.name_search(search_val, dataset.domain, 'ilike',false ,function(result){
+ var dataset = new openerp.web.DataSetStatic(this, this.action.res_model, this.action.context);
+ dataset.name_search('', [], 'ilike',false ,function(result){
+ if(self.$element.html().length){
+ self.$element.find('[data-role="listview"]').find('li').remove();
+ for(var i=0;i<result.length;i++){
+ var newli = '<li><a id="list-id" data-id='+ result[i][0] +' href="#">' + result[i][1] + '</a></li>'; // Create New List Item
+ self.$element.find('[data-role="listview"]').append(newli);
+ }
+ self.$element.find('[data-role="listview"]').listview('refresh');
+ }else{
self.$element.html(QWeb.render("ListView", {'records' : result}));
- self.$element.find("#searchid").focus();
- if(request.term){
- self.$element.find("#searchid").val(request.term);
- }
- self.$element.find("#searchid").autocomplete({
- source: function(req) { self.on_search_data(req); },
- focus: function(e, ui) {
- e.preventDefault();
- },
- html: true,
- minLength: 0,
- delay: 0
+ self.$element.find("#header").find('h1').html(self.action.name);
+ self.$element.find("#footer").find('#shortcuts').click(function(){
+ if(!$('#oe_shortcuts').html().length){
+ this.shortcut = new openerp.web_mobile.Options(self, "oe_shortcuts");
+ this.options.start();
+ }
+ else{
+ self.$element.find("#footer").find('#shrotcuts').attr('href','#oe_shortcuts');
+ }
});
- self.$element.find("#searchid").keyup(self.on_search_data);
+ self.$element.find("#footer").find('#preference').click(function(){
+ if(!$('#oe_options').html().length){
+ this.options = new openerp.web_mobile.Options(self, "oe_options");
+ this.options.start();
+ }
+ else{
+ self.$element.find("#footer").find('#preference').attr('href','#oe_options');
+ }
+ });
+ }
self.$element.find("a#list-id").click(self.on_list_click);
+ $.mobile.changePage($("#oe_list"), "slide", true, true);
});
},
on_list_click: function(ev) {
- $record = $(ev.currentTarget);
+ var $record = $(ev.currentTarget);
var self = this;
id = $record.data('id');
- this.formview = new openerp.web_mobile.FormView(this, "oe_app", id, this.action);
+// this.header = new openerp.web_mobile.Header(this, "oe_header");
+ this.formview = new openerp.web_mobile.FormView(this, "oe_form", id, this.action);
+// this.header.start();
this.formview.start();
}
});
-} \ No newline at end of file
+};
diff --git a/addons/web_mobile/static/src/web_mobile.html b/addons/web_mobile/static/src/web_mobile.html
index 6efc28b6532..9a17ff49dbb 100755
--- a/addons/web_mobile/static/src/web_mobile.html
+++ b/addons/web_mobile/static/src/web_mobile.html
@@ -7,19 +7,19 @@
<link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery.mobile-1.0a4.1.css"/>
<link rel="stylesheet" href="/web_mobile/static/src/css/web_mobile.css"/>
- <script type="text/javascript" src="/base/static/lib/jquery/jquery-1.6.2.js"></script>
- <script type="text/javascript" src="/base/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="/base/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
- <script type="text/javascript" src="/base/static/lib/underscore/underscore.js"></script>
- <script type="text/javascript" src="/base/static/lib/underscore/underscore.string.js"></script>
+ <script type="text/javascript" src="/web/static/lib/jquery/jquery-1.6.2.js"></script>
+ <script type="text/javascript" src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
+ <script type="text/javascript" src="/web/static/lib/underscore/underscore.js"></script>
+ <script type="text/javascript" src="/web/static/lib/underscore/underscore.string.js"></script>
<script type="text/javascript" src="/web_mobile/static/lib/jquery_mobile/js/jquery.mobile-1.0a4.1.js"></script>
- <script type="text/javascript" src="/base/static/lib/qweb/qweb2.js"></script>
- <script type="text/javascript" src="/base/static/src/js/boot.js"></script>
- <script type="text/javascript" src="/base/static/src/js/core.js"></script>
- <script type="text/javascript" src="/base/static/src/js/chrome.js"></script>
- <script type="text/javascript" src="/base/static/src/js/data.js"></script>
- <script type="text/javascript" src="/base/static/src/js/formats.js"></script>
+ <script type="text/javascript" src="/web/static/lib/qweb/qweb2.js"></script>
+ <script type="text/javascript" src="/web/static/src/js/boot.js"></script>
+ <script type="text/javascript" src="/web/static/src/js/core.js"></script>
+ <script type="text/javascript" src="/web/static/src/js/chrome.js"></script>
+ <script type="text/javascript" src="/web/static/src/js/data.js"></script>
+ <script type="text/javascript" src="/web/static/src/js/formats.js"></script>
<script type="text/javascript" src="/web_mobile/static/src/js/web_mobile.js"></script>
<script type="text/javascript" src="/web_mobile/static/src/js/chrome_mobile.js"></script>
@@ -27,6 +27,7 @@
<script type="text/javascript" src="/web_mobile/static/src/js/form_mobile.js"></script>
<script type="text/javascript">
+ var QWeb;
$(function() {
QWeb = window.QWeb || new QWeb2.Engine();
var oe = openerp.init();
@@ -38,4 +39,4 @@
<body>
<div id="moe" class="openerp"></div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/addons/web_mobile/static/src/xml/web_mobile.xml b/addons/web_mobile/static/src/xml/web_mobile.xml
index a3af2e39b90..75d30af55b1 100644
--- a/addons/web_mobile/static/src/xml/web_mobile.xml
+++ b/addons/web_mobile/static/src/xml/web_mobile.xml
@@ -4,10 +4,14 @@
<templates id="template" xml:space="preserve">
<t t-name="WebClient">
- <div data-role="page">
- <div id="oe_header"></div>
- <div id="oe_app"></div>
- </div>
+ <div data-role="page" id="oe_login"></div>
+ <div data-role="page" id="oe_sec_menu"></div>
+ <div data-role="page" id="oe_sec_menu_new"></div>
+ <div data-role="page" id="oe_list"></div>
+ <div data-role="page" id="oe_form"></div>
+ <div data-role="page" id="oe_shortcuts"></div>
+ <div data-role="page" id="oe_menu"></div>
+ <div data-role="page" id="oe_options"></div>
</t>
<t t-name="Login">
@@ -38,131 +42,123 @@
</div>
</t>
-<t t-name="HomePage">
- <div role="main" class="ui-content" data-role="content">
- <div id="oe_shortcuts" class="shortcuts"></div>
- <div id="oe_menu" class="menu"></div>
- <div id="oe_options" class="options"></div>
+<t t-name="Header">
+ <div data-role="header" data-theme="b" data-position="fixed">
+ <h1>OpenERP</h1>
+ <a id="home" class="ui-btn-right" data-iconpos="notext" data-icon="home" href="#" title="Home" data-theme="b"></a>
</div>
</t>
-<t t-name="Header">
- <div role="banner" class="ui-bar-b ui-header" data-role="header" data-theme="b">
- <h1 aria-level="1" role="heading" tabindex="0" class="ui-title">OpenERP</h1>
- <a id="home" class="ui-btn-right jqm-home ui-btn ui-btn-icon-notext ui-btn-corner-all ui-shadow ui-btn-up-b" data-direction="reverse" data-iconpos="notext" data-icon="home" href="#" title="Home" data-theme="b">
- <span class="ui-btn-inner ui-btn-corner-all">
- <span class="ui-btn-text">Home</span>
- <span class="ui-icon ui-icon-home ui-icon-shadow"></span>
- </span>
- </a>
+<t t-name="Footer">
+ <div data-role="footer" data-theme="b" data-position="fixed">
+ <h1></h1>
</div>
</t>
<t t-name="Shortcuts">
- <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
- <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined">
- Shortcuts
- </li>
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="sc" t-as="opt">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a href="#" class="ui-link-inherit" t-att-data-menu="opt.id" t-att-data-name="opt.name" t-att-data-res="opt.res_id">
- <span><t t-esc="opt.name"/></span>
- </a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
- </li>
- </ul>
+ <div id="header" data-role="header" data-theme="b" data-position="fixed">
+ <h1>Favourite</h1>
+ <a id="application" class="ui-btn-right" data-iconpos="notext" data-icon="home" href="#oe_menu" title="Home" data-theme="b"></a>
+ </div>
+ <div id="content" data-role="content">
+ <ul data-role="listview" data-inset="true">
+ <li data-theme="c" t-foreach="sc" t-as="opt">
+ <a href="#" t-att-data-menu="opt.id" t-att-data-name="opt.name" t-att-data-res="opt.res_id">
+ <span><t t-esc="opt.name"/></span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ <div id="footer" data-role="footer" data-theme="b" data-position="fixed">
+ <a id="shrotcuts" href="#" title="Favourite" data-theme="b">Favourite</a>
+ <a id="preference" class="ui-btn-right" href="#" title="Preference" data-theme="b">Preference</a>
+ </div>
</t>
-
<t t-name="Menu">
- <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
- <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined">
- Menu
- </li>
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="data.children" t-as="menu">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a href="#" class="ui-link-inherit" t-att-data-menu="menu.id" t-att-data-name="menu.name">
- <span><t t-esc="menu.name"/></span>
- </a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
- </li>
- </ul>
+ <div data-role="header" data-theme="b" data-position="fixed">
+ <h1>Applications</h1>
+ </div>
+ <div id="content" data-role="content">
+ <ul data-role="listview" data-inset="true">
+ <li data-theme="c" t-foreach="data.children" t-as="menu">
+ <a href="#" t-att-data-menu="menu.id" t-att-data-name="menu.name">
+ <span><t t-esc="menu.name"/></span>
+ </a>
+ </li>
+ </ul>
+ </div>
+ <div id="footer" data-role="footer" data-theme="b" data-position="fixed">
+ <a id="shrotcuts" href="#" title="Favourite" data-theme="b">Favourite</a>
+ <a id="preference" href="#" title="Preference" data-theme="b">Preference</a>
+ </div>
</t>
<t t-name="Menu.secondary">
- <div role="main" class="ui-content" data-role="content">
- <ul data-role="listview" class="ui-listview">
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="menu.children" t-as="menu">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a href="#" class="ui-link-inherit" t-attf-id="menu_#{menu.id}" t-att-data-menu="menu.id" t-att-data-name="menu.name">
- <span><t t-esc="menu.name"/></span>
+ <div id="header" data-role="header" data-theme="b" data-position="fixed">
+ <h1></h1>
+ <a id="application" class="ui-btn-right" data-iconpos="notext" data-icon="home" href="#oe_menu" title="Home" data-theme="b"></a>
+ </div>
+ <div id="content" data-role="content">
+ <t t-foreach="menu.children" t-as="menu1" >
+ <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview">
+ <li data-role="list-divider">
+ <t t-esc="menu1.name"/>
+ </li>
+ <t t-if="menu1.children.length">
+ <li data-theme="c" t-foreach="menu1.children" t-as="childmenu" >
+ <a href="#" t-attf-id="menu_#{childmenu.id}" t-att-data-menu="childmenu.id" t-att-data-name="childmenu.name">
+ <t t-esc="childmenu.name" />
</a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
- </li>
- </ul>
+ </li>
+ </t>
+ </ul>
+ </t>
+ </div>
+ <div id="footer" data-role="footer" data-theme="b" data-position="fixed">
+ <a id="shrotcuts" href="#" title="Favourite" data-theme="b">Favourite</a>
+ <a id="preference" href="#" title="Preference" data-theme="b">Preference</a>
</div>
</t>
-
<t t-name="Options">
- <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
- <li data-role="list-divider" role="heading" class="ui-li ui-li-divider ui-btn ui-bar-b ui-corner-top ui-btn-up-undefined">
- Options
- </li>
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a id="logout" href="#" class="ui-link-inherit">
- Logout
- </a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
- </li>
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a id="pref" href="#" class="ui-link-inherit">
- Preferences
- </a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
- </li>
- </ul>
+ <div id="header" data-role="header" data-theme="b" data-position="fixed">
+ <h1>Options</h1>
+ <a id="application" class="ui-btn-right" data-iconpos="notext" data-icon="home" href="#oe_menu" title="Home" data-theme="b"></a>
+ </div>
+ <div data-role="content">
+ <ul data-dividertheme="b" data-theme="c" data-inset="true" data-role="listview">
+ <li data-theme="c">
+ <a id="logout" href="#oe_login">Logout</a>
+ </li>
+ </ul>
+ </div>
+ <div id="footer" data-role="footer" data-theme="b" data-position="fixed">
+ <a id="shrotcuts" href="#" title="Favourite" data-theme="b">Favourite</a>
+ <a id="preference" href="#" title="Preference" data-theme="b">Preference</a>
+ </div>
</t>
<t t-name="ListView">
- <div role="main" class="ui-content" data-role="content">
- <form class="ui-listview-filter ui-bar-c" role="search">
- <div id="search-data" class="ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield ui-body-c">
- <input id="searchid" placeholder="Filter items..." data-type="search" class="ui-input-text ui-body-null" autosearch="true" setTimeDefault="700"/>
- </div>
- </form>
- <ul role="listbox" data-role="listview" class="ui-listview">
- <li data-theme="c" class="ui-btn ui-btn-icon-right ui-li ui-btn-up-c" t-foreach="records" t-as="record">
- <div class="ui-btn-inner ui-li">
- <div class="ui-btn-text">
- <a id="list-id" t-att-data-id="record[0]" href="#" class="ui-link-inherit">
- <span><t t-esc="record[1]"/></span>
- </a>
- </div>
- <span class="ui-icon ui-icon-arrow-r"></span>
- </div>
+ <div id="header" data-role="header" data-theme="b" data-position="fixed">
+ <h1></h1>
+ <a id="application" class="ui-btn-right" data-iconpos="notext" data-icon="home" href="#oe_menu" title="Home" data-theme="b"></a>
+ </div>
+ <div id="content" data-role="content">
+ <ul data-role="listview" data-inset="true" data-theme="d" data-filter="true">
+ <li data-theme="c" t-foreach="records" t-as="record">
+ <a id="list-id" t-att-data-id="record[0]" href="#">
+ <t t-esc="record[1]"/>
+ </a>
</li>
</ul>
</div>
+ <div id="footer" data-role="footer" data-theme="b" data-position="fixed">
+ <a id="shrotcuts" href="#" title="Favourite" data-theme="b">Favourite</a>
+ <a id="preference" href="#" title="Preference" data-theme="b">Preference</a>
+ </div>
</t>
<t t-name="FormView">
- <div role="main" class="ui-content" data-role="content">
+ <div role="main" data-role="content">
<form>
<t t-foreach="get_fields" t-as="field">
<div data-role="fieldcontain">
@@ -242,7 +238,6 @@
</div>
</t>
<t t-if="fields[field.attrs.name].type == 'many2one'">
-
<div class="ui-select">
<div data-theme="c" class="ui-btn ui-btn-icon-right ui-btn-corner-all ui-shadow ui-btn-up-c">
<span class="ui-btn-inner ui-btn-corner-all">
@@ -270,12 +265,46 @@
</div>
</t>
<t t-if="fields[field.attrs.name].type == 'one2many'">
- <div class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible">
+ <ul role="listbox" data-role="listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
+ <li tabindex="0" data-theme="d" role="option" class="ui-btn ui-btn-icon-right ui-li ui-corner-top ui-corner-bottom ui-btn-up-d">
+ <div class="ui-btn-inner">
+ <div class="ui-btn-text">
+ <a href="#" class="ui-link-inherit">
+ <span><t t-esc="til"/></span>
+ </a>
+ </div>
+ <span class="ui-icon ui-icon-arrow-r"></span>
+ </div>
+ </li>
+ </ul>
+ <!-- <div class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible">
<h1 class="ui-collapsible-heading">
<a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-shadow ui-corner-all ui-btn-up-c" href="#" data-theme="c" t-id="page.attrs.string">
<span class="ui-btn-inner ui-corner-all">
<span class="ui-btn-text">
<t t-esc="til"></t>
+ <span class="ui-collapsible-heading-status"></span>
+ </span>
+ </span>
+ </a>
+ <span class="ui-icon ui-icon-arrow-r"></span>
+ <div class="ui-collapsible-content ui-collapsible-content-collapsed" aria-hidden="true">
+ <div class="detail"></div>
+ </div>
+ </h1>
+ </div>-->
+ </t>
+ </div>
+ </t>
+ <t t-if="notebooks">
+ <t t-foreach="notebooks.children" t-as="page">
+ <t t-if="page.attrs.invisible">
+ <div style="display:none;" class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible">
+ <h1 class="ui-collapsible-heading">
+ <a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-shadow ui-corner-all ui-btn-up-c" href="#" data-theme="c" t-id="page.attrs.string">
+ <span class="ui-btn-inner ui-corner-all">
+ <span class="ui-btn-text">
+ <t t-esc="page.attrs.string"></t>
<!-- <span class="ui-collapsible-heading-status"></span> -->
</span>
<span data-theme="d" class="ui-btn ui-btn-icon-left ui-btn-corner-all ui-shadow ui-btn-up-d">
@@ -291,11 +320,8 @@
</div>
</h1>
</div>
- </t>
- </div>
- </t>
- <t t-if="notebooks">
- <t t-foreach="notebooks.children" t-as="page">
+ </t>
+ <t t-if="!page.attrs.invisible">
<div class="info ui-collapsible-contain" data-collapsed="true" data-role="collapsible">
<h1 class="ui-collapsible-heading">
<a class="ui-collapsible-heading-toggle ui-btn ui-btn-icon-left ui-shadow ui-corner-all ui-btn-up-c" href="#" data-theme="c" t-id="page.attrs.string">
@@ -317,10 +343,10 @@
</div>
</h1>
</div>
+ </t>
</t>
</t>
</form>
</div>
</t>
-
</templates>
diff --git a/addons/web_rpc/__openerp__.py b/addons/web_rpc/__openerp__.py
index c1c744da43b..f0cc1dbdaa8 100644
--- a/addons/web_rpc/__openerp__.py
+++ b/addons/web_rpc/__openerp__.py
@@ -1,20 +1,20 @@
{
- "name" : "OpenERP Web base",
+ "name" : "OpenERP Web web",
"version" : "2.0",
"depends" : [],
'active': False,
'js' : [
- "../base/static/lib/datejs/date-en-US.js",
- "../base/static/lib/jquery/jquery-1.6.2.js",
- "../base/static/lib/json/json2.js",
- "../base/static/lib/qweb/qweb2.js",
- "../base/static/lib/underscore/underscore.js",
- "../base/static/lib/underscore/underscore.string.js",
- "../base/static/src/js/boot.js",
- "../base/static/src/js/core.js",
- "../base/static/src/js/formats.js",
- "../base/static/src/js/chrome.js",
- "../base/static/src/js/data.js",
+ "../web/static/lib/datejs/date-en-US.js",
+ "../web/static/lib/jquery/jquery-1.6.2.js",
+ "../web/static/lib/json/json2.js",
+ "../web/static/lib/qweb/qweb2.js",
+ "../web/static/lib/underscore/underscore.js",
+ "../web/static/lib/underscore/underscore.string.js",
+ "../web/static/src/js/boot.js",
+ "../web/static/src/js/core.js",
+ "../web/static/src/js/formats.js",
+ "../web/static/src/js/chrome.js",
+ "../web/static/src/js/data.js",
],
'css' : [
],
diff --git a/addons/web_rpc/po/web_rpc.pot b/addons/web_rpc/po/web_rpc.pot
new file mode 100644
index 00000000000..d7f6df2d73d
--- /dev/null
+++ b/addons/web_rpc/po/web_rpc.pot
@@ -0,0 +1,19 @@
+# Translations template for PROJECT.
+# Copyright (C) 2011 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2011-09-06 12:03+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+