diff options
| author | Vidhin Mehta (OpenERP) <vme@tinyerp.com> | 2011-09-14 11:07:46 +0530 |
|---|---|---|
| committer | Vidhin Mehta (OpenERP) <vme@tinyerp.com> | 2011-09-14 11:07:46 +0530 |
| commit | b6076c3cc3ca5141349b99821268b8fd5e148b77 (patch) | |
| tree | bb875d3ef5127cf5b8c35de6475de14e5477dbbd /addons | |
| parent | 243e1bdb0079ea9f214696ead8228d464ecb2cfc (diff) | |
| parent | c7c2b5846d3775780bbaa9a84a93ad755bdb8756 (diff) | |
[Merge] upto revno 1024.
bzr revid: vme@tinyerp.com-20110914053746-ri6d5s341mm6tc7n
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/base/__init__.py | 6 | ||||
| -rw-r--r-- | addons/base/static/src/js/data_export.js | 402 | ||||
| -rw-r--r-- | addons/base/static/test/formats.js | 54 | ||||
| -rw-r--r-- | addons/base/static/test/registry.js | 33 | ||||
| -rw-r--r-- | addons/base/static/test/test.html | 53 | ||||
| -rw-r--r-- | addons/base_calendar/__init__.py | 2 | ||||
| -rw-r--r-- | addons/base_diagram/__openerp__.py | 6 | ||||
| -rw-r--r-- | addons/base_diagram/static/src/js/diagram.js | 183 | ||||
| -rw-r--r-- | addons/web/__init__.py | 32 | ||||
| -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.py | 10 | ||||
| -rw-r--r-- | addons/web/controllers/__init__.py | 1 | ||||
| -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.pot | 574 | ||||
| -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) | bin | 244 -> 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) | bin | 1698 -> 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) | bin | 180 -> 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) | bin | 178 -> 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) | bin | 120 -> 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) | bin | 105 -> 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) | bin | 111 -> 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) | bin | 110 -> 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) | bin | 119 -> 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) | bin | 101 -> 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) | bin | 4369 -> 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) | bin | 4369 -> 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) | bin | 4369 -> 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) | bin | 4369 -> 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) | bin | 4369 -> 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-x | addons/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) | bin | 822 -> 822 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/add-shortcut.png (renamed from addons/base/static/src/img/add-shortcut.png) | bin | 395 -> 395 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/attachments-close.png (renamed from addons/base/static/src/img/attachments-close.png) | bin | 486 -> 486 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/collapse.gif (renamed from addons/base/static/src/img/collapse.gif) | bin | 80 -> 80 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/db.png (renamed from addons/base/static/src/img/db.png) | bin | 2042 -> 2042 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/down-arrow.png (renamed from addons/base/static/src/img/down-arrow.png) | bin | 263 -> 263 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/expand.gif (renamed from addons/base/static/src/img/expand.gif) | bin | 81 -> 81 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/favicon.ico (renamed from addons/base/static/src/img/favicon.ico) | bin | 1150 -> 1150 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-about.png (renamed from addons/base/static/src/img/header-about.png) | bin | 442 -> 442 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-background.png (renamed from addons/base/static/src/img/header-background.png) | bin | 149 -> 149 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-help.png (renamed from addons/base/static/src/img/header-help.png) | bin | 454 -> 454 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-home.png (renamed from addons/base/static/src/img/header-home.png) | bin | 452 -> 452 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-preferences.png (renamed from addons/base/static/src/img/header-preferences.png) | bin | 420 -> 420 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header-requests.png (renamed from addons/base/static/src/img/header-requests.png) | bin | 353 -> 353 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/header.gif (renamed from addons/base/static/src/img/header.gif) | bin | 182 -> 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) | bin | 523 -> 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) | bin | 212 -> 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) | bin | 709 -> 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) | bin | 604 -> 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) | bin | 407 -> 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) | bin | 711 -> 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) | bin | 682 -> 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) | bin | 274 -> 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) | bin | 470 -> 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) | bin | 558 -> 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) | bin | 500 -> 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) | bin | 339 -> 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) | bin | 626 -> 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) | bin | 531 -> 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) | bin | 590 -> 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) | bin | 559 -> 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) | bin | 687 -> 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) | bin | 491 -> 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) | bin | 428 -> 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) | bin | 392 -> 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) | bin | 566 -> 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) | bin | 585 -> 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) | bin | 501 -> 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) | bin | 350 -> 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) | bin | 318 -> 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) | bin | 289 -> 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) | bin | 465 -> 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) | bin | 580 -> 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) | bin | 565 -> 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) | bin | 450 -> 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) | bin | 574 -> 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) | bin | 573 -> 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) | bin | 575 -> 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) | bin | 580 -> 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) | bin | 570 -> 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) | bin | 572 -> 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) | bin | 575 -> 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) | bin | 596 -> 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) | bin | 354 -> 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) | bin | 789 -> 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) | bin | 477 -> 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) | bin | 276 -> 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) | bin | 590 -> 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) | bin | 738 -> 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) | bin | 529 -> 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) | bin | 591 -> 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) | bin | 251 -> 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) | bin | 243 -> 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) | bin | 240 -> 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) | bin | 254 -> 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) | bin | 448 -> 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) | bin | 704 -> 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) | bin | 693 -> 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) | bin | 466 -> 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) | bin | 556 -> 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) | bin | 686 -> 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) | bin | 594 -> 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) | bin | 704 -> 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) | bin | 421 -> 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) | bin | 330 -> 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) | bin | 324 -> 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) | bin | 405 -> 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) | bin | 751 -> 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) | bin | 795 -> 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) | bin | 418 -> 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) | bin | 473 -> 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) | bin | 339 -> 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) | bin | 411 -> 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) | bin | 616 -> 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) | bin | 313 -> 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) | bin | 394 -> 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) | bin | 430 -> 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) | bin | 753 -> 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) | bin | 176 -> 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) | bin | 413 -> 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) | bin | 599 -> 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) | bin | 560 -> 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) | bin | 656 -> 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) | bin | 598 -> 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) | bin | 371 -> 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) | bin | 370 -> 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) | bin | 485 -> 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) | bin | 678 -> 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) | bin | 459 -> 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) | bin | 875 -> 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) | bin | 539 -> 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) | bin | 459 -> 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) | bin | 295 -> 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) | bin | 830 -> 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) | bin | 469 -> 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) | bin | 466 -> 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) | bin | 446 -> 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) | bin | 463 -> 463 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/color-picker.png | bin | 0 -> 767 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-about.png | bin | 0 -> 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) | bin | 212 -> 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) | bin | 709 -> 709 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-bold.png | bin | 0 -> 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) | bin | 407 -> 407 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-cdrom.png | bin | 0 -> 711 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-clear.png | bin | 0 -> 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) | bin | 274 -> 274 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-color-picker.png | bin | 0 -> 470 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-connect.png | bin | 0 -> 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) | bin | 500 -> 500 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-copy.png | bin | 0 -> 339 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-cut.png | bin | 0 -> 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) | bin | 531 -> 531 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dialog-authentication.png | bin | 0 -> 590 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dialog-error.png | bin | 0 -> 559 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dialog-info.png | bin | 0 -> 687 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dialog-question.png | bin | 0 -> 491 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dialog-warning.png | bin | 0 -> 428 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-directory-remote.png | bin | 0 -> 455 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-directory.png | bin | 0 -> 392 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-disconnect.png | bin | 0 -> 566 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-dnd-multiple.png | bin | 0 -> 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) | bin | 585 -> 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) | bin | 350 -> 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) | bin | 318 -> 318 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-file.png | bin | 0 -> 289 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-find-and-replace.png | bin | 0 -> 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) | bin | 465 -> 465 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-floppy.png | bin | 0 -> 565 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-fullscreen.png | bin | 0 -> 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) | bin | 570 -> 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) | bin | 572 -> 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) | bin | 575 -> 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) | bin | 596 -> 596 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-goto-bottom.png | bin | 0 -> 574 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-goto-first.png | bin | 0 -> 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) | bin | 575 -> 575 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-goto-top.png | bin | 0 -> 580 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-harddisk.png | bin | 0 -> 354 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-help.png | bin | 0 -> 789 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-home.png | bin | 0 -> 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) | bin | 276 -> 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) | bin | 590 -> 590 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-info.png | bin | 0 -> 738 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-italic.png | bin | 0 -> 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) | bin | 591 -> 591 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-justify-center.png | bin | 0 -> 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) | bin | 243 -> 243 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-justify-left.png | bin | 0 -> 240 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-justify-right.png | bin | 0 -> 254 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-leave-fullscreen.png | bin | 0 -> 448 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-forward.png | bin | 0 -> 704 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-next.png | bin | 0 -> 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) | bin | 466 -> 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) | bin | 556 -> 556 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-previous.png | bin | 0 -> 686 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-record.png | bin | 0 -> 594 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-rewind.png | bin | 0 -> 704 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-media-stop.png | bin | 0 -> 421 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-missing-image.png | bin | 0 -> 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) | bin | 324 -> 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) | bin | 405 -> 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) | bin | 751 -> 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) | bin | 795 -> 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) | bin | 418 -> 418 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-paste-v.png | bin | 0 -> 689 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-paste.png | bin | 0 -> 473 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-preferences.png | bin | 0 -> 339 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-print-preview.png | bin | 0 -> 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) | bin | 411 -> 411 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-properties.png | bin | 0 -> 313 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-quit.png | bin | 0 -> 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) | bin | 430 -> 430 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-refresh.png | bin | 0 -> 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) | bin | 176 -> 176 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-revert-to-saved.png | bin | 0 -> 413 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-save-as.png | bin | 0 -> 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) | bin | 599 -> 599 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-select-color.png | bin | 0 -> 656 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-select-font.png | bin | 0 -> 598 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-sort-ascending.png | bin | 0 -> 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) | bin | 370 -> 370 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-spell-check.png | bin | 0 -> 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) | bin | 678 -> 678 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-strikethrough.png | bin | 0 -> 459 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-undelete.png | bin | 0 -> 875 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-underline.png | bin | 0 -> 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) | bin | 459 -> 459 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-unindent.png | bin | 0 -> 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) | bin | 830 -> 830 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-zoom-100.png | bin | 0 -> 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) | bin | 466 -> 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) | bin | 446 -> 446 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/gtk-zoom-out.png | bin | 0 -> 463 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/index1.jpeg (renamed from addons/base/static/src/img/icons/index1.jpeg) | bin | 473 -> 473 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/index2.jpeg (renamed from addons/base/static/src/img/icons/index2.jpeg) | bin | 471 -> 471 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/lead-stage-lost.png | bin | 0 -> 692 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/lead-stage-pending.png | bin | 0 -> 882 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/lead-stage-won.png | bin | 0 -> 918 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/star-off.png | bin | 0 -> 614 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/star-on.png | bin | 0 -> 636 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/stock.png | bin | 0 -> 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) | bin | 454 -> 454 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/stock_gantt.png | bin | 0 -> 293 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/stock_graph.png | bin | 0 -> 606 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/stock_log.png | bin | 0 -> 748 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/stock_person.png (renamed from addons/base/static/src/img/stock_person.png) | bin | 1074 -> 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) | bin | 519 -> 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) | bin | 838 -> 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) | bin | 838 -> 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) | bin | 822 -> 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) | bin | 784 -> 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) | bin | 1015 -> 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) | bin | 908 -> 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) | bin | 492 -> 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) | bin | 739 -> 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) | bin | 832 -> 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) | bin | 877 -> 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) | bin | 305 -> 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) | bin | 738 -> 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) | bin | 270 -> 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) | bin | 220 -> 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) | bin | 703 -> 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) | bin | 788 -> 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) | bin | 438 -> 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) | bin | 453 -> 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) | bin | 411 -> 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) | bin | 538 -> 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) | bin | 432 -> 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) | bin | 451 -> 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) | bin | 488 -> 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) | bin | 378 -> 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) | bin | 517 -> 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) | bin | 501 -> 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) | bin | 442 -> 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) | bin | 514 -> 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) | bin | 784 -> 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) | bin | 759 -> 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) | bin | 762 -> 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) | bin | 859 -> 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) | bin | 851 -> 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) | bin | 544 -> 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) | bin | 554 -> 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) | bin | 622 -> 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) | bin | 699 -> 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) | bin | 384 -> 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) | bin | 588 -> 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) | bin | 427 -> 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) | bin | 382 -> 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) | bin | 696 -> 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) | bin | 637 -> 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) | bin | 988 -> 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) | bin | 808 -> 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) | bin | 880 -> 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) | bin | 905 -> 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) | bin | 735 -> 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) | bin | 791 -> 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) | bin | 930 -> 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) | bin | 708 -> 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) | bin | 993 -> 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) | bin | 885 -> 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) | bin | 559 -> 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) | bin | 831 -> 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) | bin | 699 -> 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) | bin | 742 -> 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) | bin | 967 -> 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) | bin | 358 -> 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) | bin | 173 -> 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) | bin | 267 -> 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) | bin | 201 -> 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) | bin | 382 -> 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) | bin | 425 -> 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) | bin | 914 -> 914 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/icons/terp-translate.png | bin | 0 -> 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) | bin | 238 -> 238 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/logo.png (renamed from addons/base/static/src/img/logo.png) | bin | 3551 -> 3551 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/partner.png (renamed from addons/base/static/src/img/partner.png) | bin | 905 -> 905 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/placeholder.png (renamed from addons/base/static/src/img/placeholder.png) | bin | 1362 -> 1362 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/product.png (renamed from addons/base/static/src/img/product.png) | bin | 708 -> 708 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/remove-shortcut.png (renamed from addons/base/static/src/img/remove-shortcut.png) | bin | 559 -> 559 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/stock_person.png | bin | 0 -> 1074 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/throbber.gif (renamed from addons/base/static/src/img/throbber.gif) | bin | 673 -> 673 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/throbber2.gif (renamed from addons/base/static/src/img/throbber2.gif) | bin | 7195 -> 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) | bin | 412 -> 412 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/ui/field_calendar.png | bin | 0 -> 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) | bin | 229 -> 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) | bin | 259 -> 259 bytes | |||
| -rw-r--r-- | addons/web/static/src/img/warning.png (renamed from addons/base/static/src/img/warning.png) | bin | 1342 -> 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.js | 391 | ||||
| -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.js | 54 | ||||
| -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.js | 33 | ||||
| -rw-r--r-- | addons/web/static/test/test.html | 53 | ||||
| -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.pot | 23 | ||||
| -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) | bin | 1149 -> 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) | bin | 281 -> 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) | bin | 622 -> 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) | bin | 1321 -> 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) | bin | 388 -> 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) | bin | 452 -> 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) | bin | 2496 -> 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) | bin | 152 -> 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) | bin | 152 -> 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) | bin | 230 -> 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) | bin | 3951 -> 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) | bin | 247 -> 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) | bin | 252 -> 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) | bin | 1149 -> 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) | bin | 616 -> 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) | bin | 622 -> 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) | bin | 1321 -> 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) | bin | 388 -> 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) | bin | 452 -> 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) | bin | 2835 -> 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) | bin | 89 -> 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) | bin | 89 -> 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) | bin | 148 -> 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) | bin | 230 -> 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) | bin | 230 -> 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) | bin | 124 -> 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) | bin | 207 -> 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) | bin | 3951 -> 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) | bin | 145 -> 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) | bin | 350 -> 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) | bin | 138 -> 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) | bin | 177 -> 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) | bin | 259 -> 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) | bin | 290 -> 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) | bin | 300 -> 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) | bin | 1404 -> 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) | bin | 1955 -> 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) | bin | 1975 -> 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) | bin | 1096 -> 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) | bin | 1062 -> 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) | bin | 1687 -> 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__.py | 2 | ||||
| -rw-r--r-- | addons/web_chat/controllers/main.py | 7 | ||||
| -rw-r--r-- | addons/web_chat/po/web_chat.pot | 2 | ||||
| -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.pot | 47 | ||||
| -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) | bin | 306 -> 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) | bin | 313 -> 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) | bin | 313 -> 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) | bin | 292 -> 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) | bin | 304 -> 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.pot | 39 | ||||
| -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) | bin | 9306 -> 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) | bin | 7323 -> 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) | bin | 8676 -> 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) | bin | 7157 -> 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) | bin | 3247 -> 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) | bin | 5663 -> 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) | bin | 7600 -> 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) | bin | 8466 -> 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) | bin | 4172 -> 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) | bin | 5863 -> 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) | bin | 8685 -> 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) | bin | 5505 -> 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__.py | 16 | ||||
| -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.pot | 55 | ||||
| -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.css | 18 | ||||
| -rw-r--r-- | addons/web_diagram/static/src/img/grid.jpg | bin | 0 -> 4530 bytes | |||
| -rw-r--r-- | addons/web_diagram/static/src/js/diagram.js | 296 | ||||
| -rw-r--r-- | addons/web_diagram/static/src/xml/base_diagram.xml | 22 | ||||
| -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.pot | 19 | ||||
| -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) | bin | 162 -> 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) | bin | 151 -> 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) | bin | 275 -> 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) | bin | 159 -> 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) | bin | 600 -> 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) | bin | 2247 -> 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) | bin | 121 -> 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) | bin | 186 -> 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) | bin | 124 -> 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) | bin | 186 -> 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) | bin | 186 -> 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.pot | 19 | ||||
| -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-x | addons/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) | bin | 22694 -> 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__.py | 1 | ||||
| -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.pot | 19 | ||||
| -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__.py | 12 | ||||
| -rw-r--r-- | addons/web_kanban/static/src/css/kanban.css | 203 | ||||
| -rw-r--r-- | addons/web_kanban/static/src/js/kanban.js | 448 | ||||
| -rw-r--r-- | addons/web_kanban/static/src/xml/web_kanban.xml | 37 | ||||
| -rw-r--r-- | addons/web_mobile/__init__.py | 1 | ||||
| -rw-r--r-- | addons/web_mobile/controllers/__init__.py | 0 | ||||
| -rw-r--r-- | addons/web_mobile/po/web_mobile.pot | 20 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/chrome_mobile.js | 219 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/form_mobile.js | 79 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/js/list_mobile.js | 81 | ||||
| -rwxr-xr-x | addons/web_mobile/static/src/web_mobile.html | 25 | ||||
| -rw-r--r-- | addons/web_mobile/static/src/xml/web_mobile.xml | 250 | ||||
| -rw-r--r-- | addons/web_rpc/__openerp__.py | 24 | ||||
| -rw-r--r-- | addons/web_rpc/po/web_rpc.pot | 19 |
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 " " +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 Binary files differindex 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 diff --git a/addons/base/static/lib/jquery.superfish/images/shadow.png b/addons/web/static/lib/jquery.superfish/images/shadow.png Binary files differindex c04d21b76ec..c04d21b76ec 100644 --- a/addons/base/static/lib/jquery.superfish/images/shadow.png +++ b/addons/web/static/lib/jquery.superfish/images/shadow.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 8bcbe4566bc..8bcbe4566bc 100644 --- a/addons/base/static/src/img/accessories-archiver.png +++ b/addons/web/static/src/img/accessories-archiver.png diff --git a/addons/base/static/src/img/add-shortcut.png b/addons/web/static/src/img/add-shortcut.png Binary files differindex bcc0a09eb45..bcc0a09eb45 100644 --- a/addons/base/static/src/img/add-shortcut.png +++ b/addons/web/static/src/img/add-shortcut.png diff --git a/addons/base/static/src/img/attachments-close.png b/addons/web/static/src/img/attachments-close.png Binary files differindex 14d645534b8..14d645534b8 100644 --- a/addons/base/static/src/img/attachments-close.png +++ b/addons/web/static/src/img/attachments-close.png diff --git a/addons/base/static/src/img/collapse.gif b/addons/web/static/src/img/collapse.gif Binary files differindex 759e72ebcfe..759e72ebcfe 100644 --- a/addons/base/static/src/img/collapse.gif +++ b/addons/web/static/src/img/collapse.gif diff --git a/addons/base/static/src/img/db.png b/addons/web/static/src/img/db.png Binary files differindex 83e42df26b3..83e42df26b3 100644 --- a/addons/base/static/src/img/db.png +++ b/addons/web/static/src/img/db.png diff --git a/addons/base/static/src/img/down-arrow.png b/addons/web/static/src/img/down-arrow.png Binary files differindex b1288e52682..b1288e52682 100644 --- a/addons/base/static/src/img/down-arrow.png +++ b/addons/web/static/src/img/down-arrow.png diff --git a/addons/base/static/src/img/expand.gif b/addons/web/static/src/img/expand.gif Binary files differindex ca98d0b5f2b..ca98d0b5f2b 100644 --- a/addons/base/static/src/img/expand.gif +++ b/addons/web/static/src/img/expand.gif diff --git a/addons/base/static/src/img/favicon.ico b/addons/web/static/src/img/favicon.ico Binary files differindex a323cc21c00..a323cc21c00 100644 --- a/addons/base/static/src/img/favicon.ico +++ b/addons/web/static/src/img/favicon.ico diff --git a/addons/base/static/src/img/header-about.png b/addons/web/static/src/img/header-about.png Binary files differindex b53e9a86ebe..b53e9a86ebe 100644 --- a/addons/base/static/src/img/header-about.png +++ b/addons/web/static/src/img/header-about.png diff --git a/addons/base/static/src/img/header-background.png b/addons/web/static/src/img/header-background.png Binary files differindex 774b3954124..774b3954124 100644 --- a/addons/base/static/src/img/header-background.png +++ b/addons/web/static/src/img/header-background.png diff --git a/addons/base/static/src/img/header-help.png b/addons/web/static/src/img/header-help.png Binary files differindex 19e9906fdef..19e9906fdef 100644 --- a/addons/base/static/src/img/header-help.png +++ b/addons/web/static/src/img/header-help.png diff --git a/addons/base/static/src/img/header-home.png b/addons/web/static/src/img/header-home.png Binary files differindex fd96742d15a..fd96742d15a 100644 --- a/addons/base/static/src/img/header-home.png +++ b/addons/web/static/src/img/header-home.png diff --git a/addons/base/static/src/img/header-preferences.png b/addons/web/static/src/img/header-preferences.png Binary files differindex 6c978b49f55..6c978b49f55 100644 --- a/addons/base/static/src/img/header-preferences.png +++ b/addons/web/static/src/img/header-preferences.png diff --git a/addons/base/static/src/img/header-requests.png b/addons/web/static/src/img/header-requests.png Binary files differindex 6577e7e6448..6577e7e6448 100644 --- a/addons/base/static/src/img/header-requests.png +++ b/addons/web/static/src/img/header-requests.png diff --git a/addons/base/static/src/img/header.gif b/addons/web/static/src/img/header.gif Binary files differindex f40bd9c0f6a..f40bd9c0f6a 100644 --- a/addons/base/static/src/img/header.gif +++ b/addons/web/static/src/img/header.gif diff --git a/addons/base/static/src/img/icons/STOCK_ABOUT.png b/addons/web/static/src/img/icons/STOCK_ABOUT.png Binary files differindex 1b430a35758..1b430a35758 100644 --- a/addons/base/static/src/img/icons/STOCK_ABOUT.png +++ b/addons/web/static/src/img/icons/STOCK_ABOUT.png diff --git a/addons/base/static/src/img/icons/STOCK_ADD.png b/addons/web/static/src/img/icons/STOCK_ADD.png Binary files differindex 70612c181c6..70612c181c6 100644 --- a/addons/base/static/src/img/icons/STOCK_ADD.png +++ b/addons/web/static/src/img/icons/STOCK_ADD.png diff --git a/addons/base/static/src/img/icons/STOCK_APPLY.png b/addons/web/static/src/img/icons/STOCK_APPLY.png Binary files differindex 116f2e433bb..116f2e433bb 100644 --- a/addons/base/static/src/img/icons/STOCK_APPLY.png +++ b/addons/web/static/src/img/icons/STOCK_APPLY.png diff --git a/addons/base/static/src/img/icons/STOCK_BOLD.png b/addons/web/static/src/img/icons/STOCK_BOLD.png Binary files differindex 408f25aa20b..408f25aa20b 100644 --- a/addons/base/static/src/img/icons/STOCK_BOLD.png +++ b/addons/web/static/src/img/icons/STOCK_BOLD.png diff --git a/addons/base/static/src/img/icons/STOCK_CANCEL.png b/addons/web/static/src/img/icons/STOCK_CANCEL.png Binary files differindex 8cf6273281b..8cf6273281b 100644 --- a/addons/base/static/src/img/icons/STOCK_CANCEL.png +++ b/addons/web/static/src/img/icons/STOCK_CANCEL.png diff --git a/addons/base/static/src/img/icons/STOCK_CDROM.png b/addons/web/static/src/img/icons/STOCK_CDROM.png Binary files differindex 27e8edd8a0b..27e8edd8a0b 100644 --- a/addons/base/static/src/img/icons/STOCK_CDROM.png +++ b/addons/web/static/src/img/icons/STOCK_CDROM.png diff --git a/addons/base/static/src/img/icons/STOCK_CLEAR.png b/addons/web/static/src/img/icons/STOCK_CLEAR.png Binary files differindex b2874fb84fa..b2874fb84fa 100644 --- a/addons/base/static/src/img/icons/STOCK_CLEAR.png +++ b/addons/web/static/src/img/icons/STOCK_CLEAR.png diff --git a/addons/base/static/src/img/icons/STOCK_CLOSE.png b/addons/web/static/src/img/icons/STOCK_CLOSE.png Binary files differindex 4966974e178..4966974e178 100644 --- a/addons/base/static/src/img/icons/STOCK_CLOSE.png +++ b/addons/web/static/src/img/icons/STOCK_CLOSE.png diff --git a/addons/base/static/src/img/icons/STOCK_COLOR_PICKER.png b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_CONNECT.png b/addons/web/static/src/img/icons/STOCK_CONNECT.png Binary files differindex c820b54abcc..c820b54abcc 100644 --- a/addons/base/static/src/img/icons/STOCK_CONNECT.png +++ b/addons/web/static/src/img/icons/STOCK_CONNECT.png diff --git a/addons/base/static/src/img/icons/STOCK_CONVERT.png b/addons/web/static/src/img/icons/STOCK_CONVERT.png Binary files differindex 6288b964cc0..6288b964cc0 100644 --- a/addons/base/static/src/img/icons/STOCK_CONVERT.png +++ b/addons/web/static/src/img/icons/STOCK_CONVERT.png diff --git a/addons/base/static/src/img/icons/STOCK_COPY.png b/addons/web/static/src/img/icons/STOCK_COPY.png Binary files differindex 3d68da606d2..3d68da606d2 100644 --- a/addons/base/static/src/img/icons/STOCK_COPY.png +++ b/addons/web/static/src/img/icons/STOCK_COPY.png diff --git a/addons/base/static/src/img/icons/STOCK_CUT.png b/addons/web/static/src/img/icons/STOCK_CUT.png Binary files differindex 96681d26968..96681d26968 100644 --- a/addons/base/static/src/img/icons/STOCK_CUT.png +++ b/addons/web/static/src/img/icons/STOCK_CUT.png diff --git a/addons/base/static/src/img/icons/STOCK_DELETE.png b/addons/web/static/src/img/icons/STOCK_DELETE.png Binary files differindex 879d6fd1cbe..879d6fd1cbe 100644 --- a/addons/base/static/src/img/icons/STOCK_DELETE.png +++ b/addons/web/static/src/img/icons/STOCK_DELETE.png diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png b/addons/web/static/src/img/icons/STOCK_DIALOG_AUTHENTICATION.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_ERROR.png b/addons/web/static/src/img/icons/STOCK_DIALOG_ERROR.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_INFO.png b/addons/web/static/src/img/icons/STOCK_DIALOG_INFO.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_QUESTION.png b/addons/web/static/src/img/icons/STOCK_DIALOG_QUESTION.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_DIALOG_WARNING.png b/addons/web/static/src/img/icons/STOCK_DIALOG_WARNING.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_DIRECTORY.png b/addons/web/static/src/img/icons/STOCK_DIRECTORY.png Binary files differindex 8e41b7878a9..8e41b7878a9 100644 --- a/addons/base/static/src/img/icons/STOCK_DIRECTORY.png +++ b/addons/web/static/src/img/icons/STOCK_DIRECTORY.png diff --git a/addons/base/static/src/img/icons/STOCK_DISCONNECT.png b/addons/web/static/src/img/icons/STOCK_DISCONNECT.png Binary files differindex fd188701fc2..fd188701fc2 100644 --- a/addons/base/static/src/img/icons/STOCK_DISCONNECT.png +++ b/addons/web/static/src/img/icons/STOCK_DISCONNECT.png diff --git a/addons/base/static/src/img/icons/STOCK_DND.png b/addons/web/static/src/img/icons/STOCK_DND.png Binary files differindex bf3b8068397..bf3b8068397 100644 --- a/addons/base/static/src/img/icons/STOCK_DND.png +++ b/addons/web/static/src/img/icons/STOCK_DND.png diff --git a/addons/base/static/src/img/icons/STOCK_DND_MULTIPLE.png b/addons/web/static/src/img/icons/STOCK_DND_MULTIPLE.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_EDIT.png b/addons/web/static/src/img/icons/STOCK_EDIT.png Binary files differindex 53b7d0855ed..53b7d0855ed 100644 --- a/addons/base/static/src/img/icons/STOCK_EDIT.png +++ b/addons/web/static/src/img/icons/STOCK_EDIT.png diff --git a/addons/base/static/src/img/icons/STOCK_EXECUTE.png b/addons/web/static/src/img/icons/STOCK_EXECUTE.png Binary files differindex eddc0f86b25..eddc0f86b25 100644 --- a/addons/base/static/src/img/icons/STOCK_EXECUTE.png +++ b/addons/web/static/src/img/icons/STOCK_EXECUTE.png diff --git a/addons/base/static/src/img/icons/STOCK_FILE.png b/addons/web/static/src/img/icons/STOCK_FILE.png Binary files differindex fa157156bcc..fa157156bcc 100644 --- a/addons/base/static/src/img/icons/STOCK_FILE.png +++ b/addons/web/static/src/img/icons/STOCK_FILE.png diff --git a/addons/base/static/src/img/icons/STOCK_FIND.png b/addons/web/static/src/img/icons/STOCK_FIND.png Binary files differindex 7a23b0125b5..7a23b0125b5 100644 --- a/addons/base/static/src/img/icons/STOCK_FIND.png +++ b/addons/web/static/src/img/icons/STOCK_FIND.png 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_FLOPPY.png b/addons/web/static/src/img/icons/STOCK_FLOPPY.png Binary files differindex 7d8209cfb6f..7d8209cfb6f 100644 --- a/addons/base/static/src/img/icons/STOCK_FLOPPY.png +++ b/addons/web/static/src/img/icons/STOCK_FLOPPY.png diff --git a/addons/base/static/src/img/icons/STOCK_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_FULLSCREEN.png Binary files differindex 8ddc31e7481..8ddc31e7481 100644 --- a/addons/base/static/src/img/icons/STOCK_FULLSCREEN.png +++ b/addons/web/static/src/img/icons/STOCK_FULLSCREEN.png diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_BOTTOM.png b/addons/web/static/src/img/icons/STOCK_GOTO_BOTTOM.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_FIRST.png b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_LAST.png b/addons/web/static/src/img/icons/STOCK_GOTO_LAST.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GOTO_TOP.png b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GO_BACK.png b/addons/web/static/src/img/icons/STOCK_GO_BACK.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GO_DOWN.png b/addons/web/static/src/img/icons/STOCK_GO_DOWN.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GO_FORWARD.png b/addons/web/static/src/img/icons/STOCK_GO_FORWARD.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_GO_UP.png b/addons/web/static/src/img/icons/STOCK_GO_UP.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_HARDDISK.png b/addons/web/static/src/img/icons/STOCK_HARDDISK.png Binary files differindex 73e5ef0a82e..73e5ef0a82e 100644 --- a/addons/base/static/src/img/icons/STOCK_HARDDISK.png +++ b/addons/web/static/src/img/icons/STOCK_HARDDISK.png diff --git a/addons/base/static/src/img/icons/STOCK_HELP.png b/addons/web/static/src/img/icons/STOCK_HELP.png Binary files differindex f8e17009dd6..f8e17009dd6 100644 --- a/addons/base/static/src/img/icons/STOCK_HELP.png +++ b/addons/web/static/src/img/icons/STOCK_HELP.png diff --git a/addons/base/static/src/img/icons/STOCK_HOME.png b/addons/web/static/src/img/icons/STOCK_HOME.png Binary files differindex 9d3d50d0fcb..9d3d50d0fcb 100644 --- a/addons/base/static/src/img/icons/STOCK_HOME.png +++ b/addons/web/static/src/img/icons/STOCK_HOME.png diff --git a/addons/base/static/src/img/icons/STOCK_INDENT.png b/addons/web/static/src/img/icons/STOCK_INDENT.png Binary files differindex 19f2669447d..19f2669447d 100644 --- a/addons/base/static/src/img/icons/STOCK_INDENT.png +++ b/addons/web/static/src/img/icons/STOCK_INDENT.png diff --git a/addons/base/static/src/img/icons/STOCK_INDEX.png b/addons/web/static/src/img/icons/STOCK_INDEX.png Binary files differindex 0b63cc25fa8..0b63cc25fa8 100644 --- a/addons/base/static/src/img/icons/STOCK_INDEX.png +++ b/addons/web/static/src/img/icons/STOCK_INDEX.png diff --git a/addons/base/static/src/img/icons/STOCK_INFO.png b/addons/web/static/src/img/icons/STOCK_INFO.png Binary files differindex 272019f5c99..272019f5c99 100644 --- a/addons/base/static/src/img/icons/STOCK_INFO.png +++ b/addons/web/static/src/img/icons/STOCK_INFO.png diff --git a/addons/base/static/src/img/icons/STOCK_ITALIC.png b/addons/web/static/src/img/icons/STOCK_ITALIC.png Binary files differindex 26c57226a31..26c57226a31 100644 --- a/addons/base/static/src/img/icons/STOCK_ITALIC.png +++ b/addons/web/static/src/img/icons/STOCK_ITALIC.png diff --git a/addons/base/static/src/img/icons/STOCK_JUMP_TO.png b/addons/web/static/src/img/icons/STOCK_JUMP_TO.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_CENTER.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_CENTER.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_FILL.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_FILL.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_LEFT.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_LEFT.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png b/addons/web/static/src/img/icons/STOCK_JUSTIFY_RIGHT.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_FORWARD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_NEXT.png b/addons/web/static/src/img/icons/STOCK_MEDIA_NEXT.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PAUSE.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PLAY.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PREVIOUS.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_RECORD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_RECORD.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_REWIND.png b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MEDIA_STOP.png b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_MISSING_IMAGE.png b/addons/web/static/src/img/icons/STOCK_MISSING_IMAGE.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_NETWORK.png b/addons/web/static/src/img/icons/STOCK_NETWORK.png Binary files differindex df94a515fec..df94a515fec 100644 --- a/addons/base/static/src/img/icons/STOCK_NETWORK.png +++ b/addons/web/static/src/img/icons/STOCK_NETWORK.png diff --git a/addons/base/static/src/img/icons/STOCK_NEW.png b/addons/web/static/src/img/icons/STOCK_NEW.png Binary files differindex 04a290fac7d..04a290fac7d 100644 --- a/addons/base/static/src/img/icons/STOCK_NEW.png +++ b/addons/web/static/src/img/icons/STOCK_NEW.png diff --git a/addons/base/static/src/img/icons/STOCK_NO.png b/addons/web/static/src/img/icons/STOCK_NO.png Binary files differindex 047ddcd9289..047ddcd9289 100644 --- a/addons/base/static/src/img/icons/STOCK_NO.png +++ b/addons/web/static/src/img/icons/STOCK_NO.png diff --git a/addons/base/static/src/img/icons/STOCK_OK.png b/addons/web/static/src/img/icons/STOCK_OK.png Binary files differindex 7755b8769f0..7755b8769f0 100644 --- a/addons/base/static/src/img/icons/STOCK_OK.png +++ b/addons/web/static/src/img/icons/STOCK_OK.png diff --git a/addons/base/static/src/img/icons/STOCK_OPEN.png b/addons/web/static/src/img/icons/STOCK_OPEN.png Binary files differindex 9cdd8c66770..9cdd8c66770 100644 --- a/addons/base/static/src/img/icons/STOCK_OPEN.png +++ b/addons/web/static/src/img/icons/STOCK_OPEN.png diff --git a/addons/base/static/src/img/icons/STOCK_PASTE.png b/addons/web/static/src/img/icons/STOCK_PASTE.png Binary files differindex 840f26c8b38..840f26c8b38 100644 --- a/addons/base/static/src/img/icons/STOCK_PASTE.png +++ b/addons/web/static/src/img/icons/STOCK_PASTE.png diff --git a/addons/base/static/src/img/icons/STOCK_PREFERENCES.png b/addons/web/static/src/img/icons/STOCK_PREFERENCES.png Binary files differindex 9ba17a0ab20..9ba17a0ab20 100644 --- a/addons/base/static/src/img/icons/STOCK_PREFERENCES.png +++ b/addons/web/static/src/img/icons/STOCK_PREFERENCES.png diff --git a/addons/base/static/src/img/icons/STOCK_PRINT.png b/addons/web/static/src/img/icons/STOCK_PRINT.png Binary files differindex be0ed4efb44..be0ed4efb44 100644 --- a/addons/base/static/src/img/icons/STOCK_PRINT.png +++ b/addons/web/static/src/img/icons/STOCK_PRINT.png diff --git a/addons/base/static/src/img/icons/STOCK_PRINT_PREVIEW.png b/addons/web/static/src/img/icons/STOCK_PRINT_PREVIEW.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_PROPERTIES.png b/addons/web/static/src/img/icons/STOCK_PROPERTIES.png Binary files differindex 894415ec1ce..894415ec1ce 100644 --- a/addons/base/static/src/img/icons/STOCK_PROPERTIES.png +++ b/addons/web/static/src/img/icons/STOCK_PROPERTIES.png diff --git a/addons/base/static/src/img/icons/STOCK_QUIT.png b/addons/web/static/src/img/icons/STOCK_QUIT.png Binary files differindex 50b5144660b..50b5144660b 100644 --- a/addons/base/static/src/img/icons/STOCK_QUIT.png +++ b/addons/web/static/src/img/icons/STOCK_QUIT.png diff --git a/addons/base/static/src/img/icons/STOCK_REDO.png b/addons/web/static/src/img/icons/STOCK_REDO.png Binary files differindex 54055b3966d..54055b3966d 100644 --- a/addons/base/static/src/img/icons/STOCK_REDO.png +++ b/addons/web/static/src/img/icons/STOCK_REDO.png diff --git a/addons/base/static/src/img/icons/STOCK_REFRESH.png b/addons/web/static/src/img/icons/STOCK_REFRESH.png Binary files differindex 7474728b4c0..7474728b4c0 100644 --- a/addons/base/static/src/img/icons/STOCK_REFRESH.png +++ b/addons/web/static/src/img/icons/STOCK_REFRESH.png diff --git a/addons/base/static/src/img/icons/STOCK_REMOVE.png b/addons/web/static/src/img/icons/STOCK_REMOVE.png Binary files differindex c2b6e915f77..c2b6e915f77 100644 --- a/addons/base/static/src/img/icons/STOCK_REMOVE.png +++ b/addons/web/static/src/img/icons/STOCK_REMOVE.png 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SAVE.png b/addons/web/static/src/img/icons/STOCK_SAVE.png Binary files differindex c61836548a7..c61836548a7 100644 --- a/addons/base/static/src/img/icons/STOCK_SAVE.png +++ b/addons/web/static/src/img/icons/STOCK_SAVE.png diff --git a/addons/base/static/src/img/icons/STOCK_SAVE_AS.png b/addons/web/static/src/img/icons/STOCK_SAVE_AS.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SELECT_COLOR.png b/addons/web/static/src/img/icons/STOCK_SELECT_COLOR.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SELECT_FONT.png b/addons/web/static/src/img/icons/STOCK_SELECT_FONT.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SORT_ASCENDING.png b/addons/web/static/src/img/icons/STOCK_SORT_ASCENDING.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SORT_DESCENDING.png b/addons/web/static/src/img/icons/STOCK_SORT_DESCENDING.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_SPELL_CHECK.png b/addons/web/static/src/img/icons/STOCK_SPELL_CHECK.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_STOP.png b/addons/web/static/src/img/icons/STOCK_STOP.png Binary files differindex 2ee93ed6415..2ee93ed6415 100644 --- a/addons/base/static/src/img/icons/STOCK_STOP.png +++ b/addons/web/static/src/img/icons/STOCK_STOP.png diff --git a/addons/base/static/src/img/icons/STOCK_STRIKETHROUGH.png b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png Binary files differindex 1c11f214622..1c11f214622 100644 --- a/addons/base/static/src/img/icons/STOCK_STRIKETHROUGH.png +++ b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png diff --git a/addons/base/static/src/img/icons/STOCK_UNDELETE.png b/addons/web/static/src/img/icons/STOCK_UNDELETE.png Binary files differindex c44b940c03b..c44b940c03b 100644 --- a/addons/base/static/src/img/icons/STOCK_UNDELETE.png +++ b/addons/web/static/src/img/icons/STOCK_UNDELETE.png diff --git a/addons/base/static/src/img/icons/STOCK_UNDERLINE.png b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png Binary files differindex 7dbb5d7e60a..7dbb5d7e60a 100644 --- a/addons/base/static/src/img/icons/STOCK_UNDERLINE.png +++ b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png diff --git a/addons/base/static/src/img/icons/STOCK_UNDO.png b/addons/web/static/src/img/icons/STOCK_UNDO.png Binary files differindex 7a50de0c61e..7a50de0c61e 100644 --- a/addons/base/static/src/img/icons/STOCK_UNDO.png +++ b/addons/web/static/src/img/icons/STOCK_UNDO.png diff --git a/addons/base/static/src/img/icons/STOCK_UNINDENT.png b/addons/web/static/src/img/icons/STOCK_UNINDENT.png Binary files differindex 8ace914c1bd..8ace914c1bd 100644 --- a/addons/base/static/src/img/icons/STOCK_UNINDENT.png +++ b/addons/web/static/src/img/icons/STOCK_UNINDENT.png diff --git a/addons/base/static/src/img/icons/STOCK_YES.png b/addons/web/static/src/img/icons/STOCK_YES.png Binary files differindex 01fb373c251..01fb373c251 100644 --- a/addons/base/static/src/img/icons/STOCK_YES.png +++ b/addons/web/static/src/img/icons/STOCK_YES.png diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_100.png b/addons/web/static/src/img/icons/STOCK_ZOOM_100.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_FIT.png b/addons/web/static/src/img/icons/STOCK_ZOOM_FIT.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_IN.png b/addons/web/static/src/img/icons/STOCK_ZOOM_IN.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/STOCK_ZOOM_OUT.png b/addons/web/static/src/img/icons/STOCK_ZOOM_OUT.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/color-picker.png b/addons/web/static/src/img/icons/color-picker.png Binary files differnew file mode 100644 index 00000000000..765294c6bdd --- /dev/null +++ b/addons/web/static/src/img/icons/color-picker.png diff --git a/addons/web/static/src/img/icons/gtk-about.png b/addons/web/static/src/img/icons/gtk-about.png Binary files differnew file mode 100644 index 00000000000..1b430a35758 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-about.png diff --git a/addons/base/static/src/img/icons/gtk-add.png b/addons/web/static/src/img/icons/gtk-add.png Binary files differindex 70612c181c6..70612c181c6 100644 --- a/addons/base/static/src/img/icons/gtk-add.png +++ b/addons/web/static/src/img/icons/gtk-add.png diff --git a/addons/base/static/src/img/icons/gtk-apply.png b/addons/web/static/src/img/icons/gtk-apply.png Binary files differindex 116f2e433bb..116f2e433bb 100644 --- a/addons/base/static/src/img/icons/gtk-apply.png +++ b/addons/web/static/src/img/icons/gtk-apply.png diff --git a/addons/web/static/src/img/icons/gtk-bold.png b/addons/web/static/src/img/icons/gtk-bold.png Binary files differnew file mode 100644 index 00000000000..408f25aa20b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-bold.png diff --git a/addons/base/static/src/img/icons/gtk-cancel.png b/addons/web/static/src/img/icons/gtk-cancel.png Binary files differindex 8cf6273281b..8cf6273281b 100644 --- a/addons/base/static/src/img/icons/gtk-cancel.png +++ b/addons/web/static/src/img/icons/gtk-cancel.png diff --git a/addons/web/static/src/img/icons/gtk-cdrom.png b/addons/web/static/src/img/icons/gtk-cdrom.png Binary files differnew file mode 100644 index 00000000000..27e8edd8a0b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-cdrom.png diff --git a/addons/web/static/src/img/icons/gtk-clear.png b/addons/web/static/src/img/icons/gtk-clear.png Binary files differnew file mode 100644 index 00000000000..b2874fb84fa --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-clear.png diff --git a/addons/base/static/src/img/icons/gtk-close.png b/addons/web/static/src/img/icons/gtk-close.png Binary files differindex 4966974e178..4966974e178 100644 --- a/addons/base/static/src/img/icons/gtk-close.png +++ b/addons/web/static/src/img/icons/gtk-close.png diff --git a/addons/web/static/src/img/icons/gtk-color-picker.png b/addons/web/static/src/img/icons/gtk-color-picker.png Binary files differnew file mode 100644 index 00000000000..232d54f8f3b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-color-picker.png diff --git a/addons/web/static/src/img/icons/gtk-connect.png b/addons/web/static/src/img/icons/gtk-connect.png Binary files differnew file mode 100644 index 00000000000..c820b54abcc --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-connect.png diff --git a/addons/base/static/src/img/icons/gtk-convert.png b/addons/web/static/src/img/icons/gtk-convert.png Binary files differindex 6288b964cc0..6288b964cc0 100644 --- a/addons/base/static/src/img/icons/gtk-convert.png +++ b/addons/web/static/src/img/icons/gtk-convert.png diff --git a/addons/web/static/src/img/icons/gtk-copy.png b/addons/web/static/src/img/icons/gtk-copy.png Binary files differnew file mode 100644 index 00000000000..3d68da606d2 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-copy.png diff --git a/addons/web/static/src/img/icons/gtk-cut.png b/addons/web/static/src/img/icons/gtk-cut.png Binary files differnew file mode 100644 index 00000000000..96681d26968 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-cut.png diff --git a/addons/base/static/src/img/icons/gtk-delete.png b/addons/web/static/src/img/icons/gtk-delete.png Binary files differindex 879d6fd1cbe..879d6fd1cbe 100644 --- a/addons/base/static/src/img/icons/gtk-delete.png +++ b/addons/web/static/src/img/icons/gtk-delete.png diff --git a/addons/web/static/src/img/icons/gtk-dialog-authentication.png b/addons/web/static/src/img/icons/gtk-dialog-authentication.png Binary files differnew file mode 100644 index 00000000000..eb411112f83 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dialog-authentication.png diff --git a/addons/web/static/src/img/icons/gtk-dialog-error.png b/addons/web/static/src/img/icons/gtk-dialog-error.png Binary files differnew file mode 100644 index 00000000000..e97bc43504b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dialog-error.png diff --git a/addons/web/static/src/img/icons/gtk-dialog-info.png b/addons/web/static/src/img/icons/gtk-dialog-info.png Binary files differnew file mode 100644 index 00000000000..ed46c3ecdb3 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dialog-info.png diff --git a/addons/web/static/src/img/icons/gtk-dialog-question.png b/addons/web/static/src/img/icons/gtk-dialog-question.png Binary files differnew file mode 100644 index 00000000000..ef68f43f43f --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dialog-question.png diff --git a/addons/web/static/src/img/icons/gtk-dialog-warning.png b/addons/web/static/src/img/icons/gtk-dialog-warning.png Binary files differnew file mode 100644 index 00000000000..65a4d2c7220 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dialog-warning.png diff --git a/addons/web/static/src/img/icons/gtk-directory-remote.png b/addons/web/static/src/img/icons/gtk-directory-remote.png Binary files differnew file mode 100644 index 00000000000..34e737d7c07 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-directory-remote.png diff --git a/addons/web/static/src/img/icons/gtk-directory.png b/addons/web/static/src/img/icons/gtk-directory.png Binary files differnew file mode 100644 index 00000000000..8e41b7878a9 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-directory.png diff --git a/addons/web/static/src/img/icons/gtk-disconnect.png b/addons/web/static/src/img/icons/gtk-disconnect.png Binary files differnew file mode 100644 index 00000000000..fd188701fc2 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-disconnect.png diff --git a/addons/web/static/src/img/icons/gtk-dnd-multiple.png b/addons/web/static/src/img/icons/gtk-dnd-multiple.png Binary files differnew file mode 100644 index 00000000000..aa4c65ad5b1 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-dnd-multiple.png diff --git a/addons/base/static/src/img/icons/gtk-dnd.png b/addons/web/static/src/img/icons/gtk-dnd.png Binary files differindex bf3b8068397..bf3b8068397 100644 --- a/addons/base/static/src/img/icons/gtk-dnd.png +++ b/addons/web/static/src/img/icons/gtk-dnd.png diff --git a/addons/base/static/src/img/icons/gtk-edit.png b/addons/web/static/src/img/icons/gtk-edit.png Binary files differindex 53b7d0855ed..53b7d0855ed 100644 --- a/addons/base/static/src/img/icons/gtk-edit.png +++ b/addons/web/static/src/img/icons/gtk-edit.png diff --git a/addons/base/static/src/img/icons/gtk-execute.png b/addons/web/static/src/img/icons/gtk-execute.png Binary files differindex eddc0f86b25..eddc0f86b25 100644 --- a/addons/base/static/src/img/icons/gtk-execute.png +++ b/addons/web/static/src/img/icons/gtk-execute.png diff --git a/addons/web/static/src/img/icons/gtk-file.png b/addons/web/static/src/img/icons/gtk-file.png Binary files differnew file mode 100644 index 00000000000..fa157156bcc --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-file.png 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 Binary files differnew file mode 100644 index 00000000000..b8d8eeec1b2 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-find-and-replace.png diff --git a/addons/base/static/src/img/icons/gtk-find.png b/addons/web/static/src/img/icons/gtk-find.png Binary files differindex 7a23b0125b5..7a23b0125b5 100644 --- a/addons/base/static/src/img/icons/gtk-find.png +++ b/addons/web/static/src/img/icons/gtk-find.png diff --git a/addons/web/static/src/img/icons/gtk-floppy.png b/addons/web/static/src/img/icons/gtk-floppy.png Binary files differnew file mode 100644 index 00000000000..7d8209cfb6f --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-floppy.png diff --git a/addons/web/static/src/img/icons/gtk-fullscreen.png b/addons/web/static/src/img/icons/gtk-fullscreen.png Binary files differnew file mode 100644 index 00000000000..8ddc31e7481 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-fullscreen.png diff --git a/addons/base/static/src/img/icons/gtk-go-back.png b/addons/web/static/src/img/icons/gtk-go-back.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/gtk-go-down.png b/addons/web/static/src/img/icons/gtk-go-down.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/gtk-go-forward.png b/addons/web/static/src/img/icons/gtk-go-forward.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/gtk-go-up.png b/addons/web/static/src/img/icons/gtk-go-up.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-goto-bottom.png b/addons/web/static/src/img/icons/gtk-goto-bottom.png Binary files differnew file mode 100644 index 00000000000..be52840dee1 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-goto-bottom.png diff --git a/addons/web/static/src/img/icons/gtk-goto-first.png b/addons/web/static/src/img/icons/gtk-goto-first.png Binary files differnew file mode 100644 index 00000000000..3d00e36d696 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-goto-first.png diff --git a/addons/base/static/src/img/icons/gtk-goto-last.png b/addons/web/static/src/img/icons/gtk-goto-last.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-goto-top.png b/addons/web/static/src/img/icons/gtk-goto-top.png Binary files differnew file mode 100644 index 00000000000..227a91e5157 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-goto-top.png diff --git a/addons/web/static/src/img/icons/gtk-harddisk.png b/addons/web/static/src/img/icons/gtk-harddisk.png Binary files differnew file mode 100644 index 00000000000..73e5ef0a82e --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-harddisk.png diff --git a/addons/web/static/src/img/icons/gtk-help.png b/addons/web/static/src/img/icons/gtk-help.png Binary files differnew file mode 100644 index 00000000000..f8e17009dd6 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-help.png diff --git a/addons/web/static/src/img/icons/gtk-home.png b/addons/web/static/src/img/icons/gtk-home.png Binary files differnew file mode 100644 index 00000000000..9d3d50d0fcb --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-home.png diff --git a/addons/base/static/src/img/icons/gtk-indent.png b/addons/web/static/src/img/icons/gtk-indent.png Binary files differindex 19f2669447d..19f2669447d 100644 --- a/addons/base/static/src/img/icons/gtk-indent.png +++ b/addons/web/static/src/img/icons/gtk-indent.png diff --git a/addons/base/static/src/img/icons/gtk-index.png b/addons/web/static/src/img/icons/gtk-index.png Binary files differindex 0b63cc25fa8..0b63cc25fa8 100644 --- a/addons/base/static/src/img/icons/gtk-index.png +++ b/addons/web/static/src/img/icons/gtk-index.png diff --git a/addons/web/static/src/img/icons/gtk-info.png b/addons/web/static/src/img/icons/gtk-info.png Binary files differnew file mode 100644 index 00000000000..272019f5c99 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-info.png diff --git a/addons/web/static/src/img/icons/gtk-italic.png b/addons/web/static/src/img/icons/gtk-italic.png Binary files differnew file mode 100644 index 00000000000..26c57226a31 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-italic.png diff --git a/addons/base/static/src/img/icons/gtk-jump-to.png b/addons/web/static/src/img/icons/gtk-jump-to.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-justify-center.png b/addons/web/static/src/img/icons/gtk-justify-center.png Binary files differnew file mode 100644 index 00000000000..d5f514298eb --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-justify-center.png diff --git a/addons/base/static/src/img/icons/gtk-justify-fill.png b/addons/web/static/src/img/icons/gtk-justify-fill.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-justify-left.png b/addons/web/static/src/img/icons/gtk-justify-left.png Binary files differnew file mode 100644 index 00000000000..ecb76b117eb --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-justify-left.png diff --git a/addons/web/static/src/img/icons/gtk-justify-right.png b/addons/web/static/src/img/icons/gtk-justify-right.png Binary files differnew file mode 100644 index 00000000000..3cd4d161420 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-justify-right.png diff --git a/addons/web/static/src/img/icons/gtk-leave-fullscreen.png b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png Binary files differnew file mode 100644 index 00000000000..15bc8ab7d7b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png diff --git a/addons/web/static/src/img/icons/gtk-media-forward.png b/addons/web/static/src/img/icons/gtk-media-forward.png Binary files differnew file mode 100644 index 00000000000..e5e198fbb79 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-forward.png diff --git a/addons/web/static/src/img/icons/gtk-media-next.png b/addons/web/static/src/img/icons/gtk-media-next.png Binary files differnew file mode 100644 index 00000000000..e0aa2431cf0 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-next.png diff --git a/addons/base/static/src/img/icons/gtk-media-pause.png b/addons/web/static/src/img/icons/gtk-media-pause.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/gtk-media-play.png b/addons/web/static/src/img/icons/gtk-media-play.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-media-previous.png b/addons/web/static/src/img/icons/gtk-media-previous.png Binary files differnew file mode 100644 index 00000000000..756899e0bc1 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-previous.png diff --git a/addons/web/static/src/img/icons/gtk-media-record.png b/addons/web/static/src/img/icons/gtk-media-record.png Binary files differnew file mode 100644 index 00000000000..904974c81e5 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-record.png diff --git a/addons/web/static/src/img/icons/gtk-media-rewind.png b/addons/web/static/src/img/icons/gtk-media-rewind.png Binary files differnew file mode 100644 index 00000000000..9c22d9e2778 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-rewind.png diff --git a/addons/web/static/src/img/icons/gtk-media-stop.png b/addons/web/static/src/img/icons/gtk-media-stop.png Binary files differnew file mode 100644 index 00000000000..128cc2313ec --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-media-stop.png diff --git a/addons/web/static/src/img/icons/gtk-missing-image.png b/addons/web/static/src/img/icons/gtk-missing-image.png Binary files differnew file mode 100644 index 00000000000..cc69ed33e4b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-missing-image.png diff --git a/addons/base/static/src/img/icons/gtk-network.png b/addons/web/static/src/img/icons/gtk-network.png Binary files differindex df94a515fec..df94a515fec 100644 --- a/addons/base/static/src/img/icons/gtk-network.png +++ b/addons/web/static/src/img/icons/gtk-network.png diff --git a/addons/base/static/src/img/icons/gtk-new.png b/addons/web/static/src/img/icons/gtk-new.png Binary files differindex 04a290fac7d..04a290fac7d 100644 --- a/addons/base/static/src/img/icons/gtk-new.png +++ b/addons/web/static/src/img/icons/gtk-new.png diff --git a/addons/base/static/src/img/icons/gtk-no.png b/addons/web/static/src/img/icons/gtk-no.png Binary files differindex 047ddcd9289..047ddcd9289 100644 --- a/addons/base/static/src/img/icons/gtk-no.png +++ b/addons/web/static/src/img/icons/gtk-no.png diff --git a/addons/base/static/src/img/icons/gtk-ok.png b/addons/web/static/src/img/icons/gtk-ok.png Binary files differindex 7755b8769f0..7755b8769f0 100644 --- a/addons/base/static/src/img/icons/gtk-ok.png +++ b/addons/web/static/src/img/icons/gtk-ok.png diff --git a/addons/base/static/src/img/icons/gtk-open.png b/addons/web/static/src/img/icons/gtk-open.png Binary files differindex 9cdd8c66770..9cdd8c66770 100644 --- a/addons/base/static/src/img/icons/gtk-open.png +++ b/addons/web/static/src/img/icons/gtk-open.png diff --git a/addons/web/static/src/img/icons/gtk-paste-v.png b/addons/web/static/src/img/icons/gtk-paste-v.png Binary files differnew file mode 100644 index 00000000000..76ec896f70e --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-paste-v.png diff --git a/addons/web/static/src/img/icons/gtk-paste.png b/addons/web/static/src/img/icons/gtk-paste.png Binary files differnew file mode 100644 index 00000000000..840f26c8b38 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-paste.png diff --git a/addons/web/static/src/img/icons/gtk-preferences.png b/addons/web/static/src/img/icons/gtk-preferences.png Binary files differnew file mode 100644 index 00000000000..9ba17a0ab20 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-preferences.png diff --git a/addons/web/static/src/img/icons/gtk-print-preview.png b/addons/web/static/src/img/icons/gtk-print-preview.png Binary files differnew file mode 100644 index 00000000000..ab15fcbd307 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-print-preview.png diff --git a/addons/base/static/src/img/icons/gtk-print.png b/addons/web/static/src/img/icons/gtk-print.png Binary files differindex be0ed4efb44..be0ed4efb44 100644 --- a/addons/base/static/src/img/icons/gtk-print.png +++ b/addons/web/static/src/img/icons/gtk-print.png diff --git a/addons/web/static/src/img/icons/gtk-properties.png b/addons/web/static/src/img/icons/gtk-properties.png Binary files differnew file mode 100644 index 00000000000..894415ec1ce --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-properties.png diff --git a/addons/web/static/src/img/icons/gtk-quit.png b/addons/web/static/src/img/icons/gtk-quit.png Binary files differnew file mode 100644 index 00000000000..50b5144660b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-quit.png diff --git a/addons/base/static/src/img/icons/gtk-redo.png b/addons/web/static/src/img/icons/gtk-redo.png Binary files differindex 54055b3966d..54055b3966d 100644 --- a/addons/base/static/src/img/icons/gtk-redo.png +++ b/addons/web/static/src/img/icons/gtk-redo.png diff --git a/addons/web/static/src/img/icons/gtk-refresh.png b/addons/web/static/src/img/icons/gtk-refresh.png Binary files differnew file mode 100644 index 00000000000..7474728b4c0 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-refresh.png diff --git a/addons/base/static/src/img/icons/gtk-remove.png b/addons/web/static/src/img/icons/gtk-remove.png Binary files differindex c2b6e915f77..c2b6e915f77 100644 --- a/addons/base/static/src/img/icons/gtk-remove.png +++ b/addons/web/static/src/img/icons/gtk-remove.png 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 Binary files differnew file mode 100644 index 00000000000..eaf54584edf --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-revert-to-saved.png diff --git a/addons/web/static/src/img/icons/gtk-save-as.png b/addons/web/static/src/img/icons/gtk-save-as.png Binary files differnew file mode 100644 index 00000000000..1831e4e0a4b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-save-as.png diff --git a/addons/base/static/src/img/icons/gtk-save.png b/addons/web/static/src/img/icons/gtk-save.png Binary files differindex c61836548a7..c61836548a7 100644 --- a/addons/base/static/src/img/icons/gtk-save.png +++ b/addons/web/static/src/img/icons/gtk-save.png diff --git a/addons/web/static/src/img/icons/gtk-select-color.png b/addons/web/static/src/img/icons/gtk-select-color.png Binary files differnew file mode 100644 index 00000000000..12b015df107 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-select-color.png diff --git a/addons/web/static/src/img/icons/gtk-select-font.png b/addons/web/static/src/img/icons/gtk-select-font.png Binary files differnew file mode 100644 index 00000000000..66e606313a5 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-select-font.png diff --git a/addons/web/static/src/img/icons/gtk-sort-ascending.png b/addons/web/static/src/img/icons/gtk-sort-ascending.png Binary files differnew file mode 100644 index 00000000000..a648fa0d359 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-sort-ascending.png diff --git a/addons/base/static/src/img/icons/gtk-sort-descending.png b/addons/web/static/src/img/icons/gtk-sort-descending.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-spell-check.png b/addons/web/static/src/img/icons/gtk-spell-check.png Binary files differnew file mode 100644 index 00000000000..698f7c24a43 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-spell-check.png diff --git a/addons/base/static/src/img/icons/gtk-stop.png b/addons/web/static/src/img/icons/gtk-stop.png Binary files differindex 2ee93ed6415..2ee93ed6415 100644 --- a/addons/base/static/src/img/icons/gtk-stop.png +++ b/addons/web/static/src/img/icons/gtk-stop.png diff --git a/addons/web/static/src/img/icons/gtk-strikethrough.png b/addons/web/static/src/img/icons/gtk-strikethrough.png Binary files differnew file mode 100644 index 00000000000..1c11f214622 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-strikethrough.png diff --git a/addons/web/static/src/img/icons/gtk-undelete.png b/addons/web/static/src/img/icons/gtk-undelete.png Binary files differnew file mode 100644 index 00000000000..c44b940c03b --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-undelete.png diff --git a/addons/web/static/src/img/icons/gtk-underline.png b/addons/web/static/src/img/icons/gtk-underline.png Binary files differnew file mode 100644 index 00000000000..7dbb5d7e60a --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-underline.png diff --git a/addons/base/static/src/img/icons/gtk-undo.png b/addons/web/static/src/img/icons/gtk-undo.png Binary files differindex 7a50de0c61e..7a50de0c61e 100644 --- a/addons/base/static/src/img/icons/gtk-undo.png +++ b/addons/web/static/src/img/icons/gtk-undo.png diff --git a/addons/web/static/src/img/icons/gtk-unindent.png b/addons/web/static/src/img/icons/gtk-unindent.png Binary files differnew file mode 100644 index 00000000000..8ace914c1bd --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-unindent.png diff --git a/addons/base/static/src/img/icons/gtk-yes.png b/addons/web/static/src/img/icons/gtk-yes.png Binary files differindex 01fb373c251..01fb373c251 100644 --- a/addons/base/static/src/img/icons/gtk-yes.png +++ b/addons/web/static/src/img/icons/gtk-yes.png diff --git a/addons/web/static/src/img/icons/gtk-zoom-100.png b/addons/web/static/src/img/icons/gtk-zoom-100.png Binary files differnew file mode 100644 index 00000000000..5193406b787 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-zoom-100.png diff --git a/addons/base/static/src/img/icons/gtk-zoom-fit.png b/addons/web/static/src/img/icons/gtk-zoom-fit.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/gtk-zoom-in.png b/addons/web/static/src/img/icons/gtk-zoom-in.png Binary files differindex 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 diff --git a/addons/web/static/src/img/icons/gtk-zoom-out.png b/addons/web/static/src/img/icons/gtk-zoom-out.png Binary files differnew file mode 100644 index 00000000000..0da5ee7ec13 --- /dev/null +++ b/addons/web/static/src/img/icons/gtk-zoom-out.png diff --git a/addons/base/static/src/img/icons/index1.jpeg b/addons/web/static/src/img/icons/index1.jpeg Binary files differindex f43c68d79ec..f43c68d79ec 100644 --- a/addons/base/static/src/img/icons/index1.jpeg +++ b/addons/web/static/src/img/icons/index1.jpeg diff --git a/addons/base/static/src/img/icons/index2.jpeg b/addons/web/static/src/img/icons/index2.jpeg Binary files differindex ec9d1eb6d3c..ec9d1eb6d3c 100644 --- a/addons/base/static/src/img/icons/index2.jpeg +++ b/addons/web/static/src/img/icons/index2.jpeg diff --git a/addons/web/static/src/img/icons/lead-stage-lost.png b/addons/web/static/src/img/icons/lead-stage-lost.png Binary files differnew file mode 100644 index 00000000000..e1f98a26b59 --- /dev/null +++ b/addons/web/static/src/img/icons/lead-stage-lost.png diff --git a/addons/web/static/src/img/icons/lead-stage-pending.png b/addons/web/static/src/img/icons/lead-stage-pending.png Binary files differnew file mode 100644 index 00000000000..9e9544ee178 --- /dev/null +++ b/addons/web/static/src/img/icons/lead-stage-pending.png diff --git a/addons/web/static/src/img/icons/lead-stage-won.png b/addons/web/static/src/img/icons/lead-stage-won.png Binary files differnew file mode 100644 index 00000000000..02effd5f14c --- /dev/null +++ b/addons/web/static/src/img/icons/lead-stage-won.png diff --git a/addons/web/static/src/img/icons/star-off.png b/addons/web/static/src/img/icons/star-off.png Binary files differnew file mode 100644 index 00000000000..7cd0afd4f03 --- /dev/null +++ b/addons/web/static/src/img/icons/star-off.png diff --git a/addons/web/static/src/img/icons/star-on.png b/addons/web/static/src/img/icons/star-on.png Binary files differnew file mode 100644 index 00000000000..4f2295e1395 --- /dev/null +++ b/addons/web/static/src/img/icons/star-on.png diff --git a/addons/web/static/src/img/icons/stock.png b/addons/web/static/src/img/icons/stock.png Binary files differnew file mode 100644 index 00000000000..ca38181db90 --- /dev/null +++ b/addons/web/static/src/img/icons/stock.png diff --git a/addons/base/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/icons/stock_calendar.png Binary files differindex 99a1f3f9ef1..99a1f3f9ef1 100644 --- a/addons/base/static/src/img/ui/field_calendar.png +++ b/addons/web/static/src/img/icons/stock_calendar.png diff --git a/addons/web/static/src/img/icons/stock_gantt.png b/addons/web/static/src/img/icons/stock_gantt.png Binary files differnew file mode 100644 index 00000000000..585761b9220 --- /dev/null +++ b/addons/web/static/src/img/icons/stock_gantt.png diff --git a/addons/web/static/src/img/icons/stock_graph.png b/addons/web/static/src/img/icons/stock_graph.png Binary files differnew file mode 100644 index 00000000000..4d8310621ea --- /dev/null +++ b/addons/web/static/src/img/icons/stock_graph.png diff --git a/addons/web/static/src/img/icons/stock_log.png b/addons/web/static/src/img/icons/stock_log.png Binary files differnew file mode 100644 index 00000000000..32af4dd6901 --- /dev/null +++ b/addons/web/static/src/img/icons/stock_log.png diff --git a/addons/base/static/src/img/stock_person.png b/addons/web/static/src/img/icons/stock_person.png Binary files differindex 202cf0ee6c5..202cf0ee6c5 100644 --- a/addons/base/static/src/img/stock_person.png +++ b/addons/web/static/src/img/icons/stock_person.png diff --git a/addons/base/static/src/img/icons/terp-translate.png b/addons/web/static/src/img/icons/stock_translate.png Binary files differindex 5ab41d49343..5ab41d49343 100644 --- a/addons/base/static/src/img/icons/terp-translate.png +++ b/addons/web/static/src/img/icons/stock_translate.png diff --git a/addons/base/static/src/img/icons/terp-accessories-archiver+.png b/addons/web/static/src/img/icons/terp-accessories-archiver+.png Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-accessories-archiver.png b/addons/web/static/src/img/icons/terp-accessories-archiver.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-account.png b/addons/web/static/src/img/icons/terp-account.png Binary files differindex 30dea82a105..30dea82a105 100644 --- a/addons/base/static/src/img/icons/terp-account.png +++ b/addons/web/static/src/img/icons/terp-account.png diff --git a/addons/base/static/src/img/icons/terp-administration.png b/addons/web/static/src/img/icons/terp-administration.png Binary files differindex ab129b2e4b3..ab129b2e4b3 100644 --- a/addons/base/static/src/img/icons/terp-administration.png +++ b/addons/web/static/src/img/icons/terp-administration.png diff --git a/addons/base/static/src/img/icons/terp-calendar.png b/addons/web/static/src/img/icons/terp-calendar.png Binary files differindex 37206565792..37206565792 100644 --- a/addons/base/static/src/img/icons/terp-calendar.png +++ b/addons/web/static/src/img/icons/terp-calendar.png diff --git a/addons/base/static/src/img/icons/terp-call-start.png b/addons/web/static/src/img/icons/terp-call-start.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-camera_test.png b/addons/web/static/src/img/icons/terp-camera_test.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-check.png b/addons/web/static/src/img/icons/terp-check.png Binary files differindex 003b09fdeb9..003b09fdeb9 100644 --- a/addons/base/static/src/img/icons/terp-check.png +++ b/addons/web/static/src/img/icons/terp-check.png diff --git a/addons/base/static/src/img/icons/terp-crm.png b/addons/web/static/src/img/icons/terp-crm.png Binary files differindex fdac61ca92d..fdac61ca92d 100644 --- a/addons/base/static/src/img/icons/terp-crm.png +++ b/addons/web/static/src/img/icons/terp-crm.png diff --git a/addons/base/static/src/img/icons/terp-dialog-close.png b/addons/web/static/src/img/icons/terp-dialog-close.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-document-new.png b/addons/web/static/src/img/icons/terp-document-new.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-dolar.png b/addons/web/static/src/img/icons/terp-dolar.png Binary files differindex bca7021c82f..bca7021c82f 100644 --- a/addons/base/static/src/img/icons/terp-dolar.png +++ b/addons/web/static/src/img/icons/terp-dolar.png diff --git a/addons/base/static/src/img/icons/terp-dolar_ok!.png b/addons/web/static/src/img/icons/terp-dolar_ok!.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-emblem-important.png b/addons/web/static/src/img/icons/terp-emblem-important.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-face-plain.png b/addons/web/static/src/img/icons/terp-face-plain.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-folder-blue.png b/addons/web/static/src/img/icons/terp-folder-blue.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-folder-green.png b/addons/web/static/src/img/icons/terp-folder-green.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-folder-orange.png b/addons/web/static/src/img/icons/terp-folder-orange.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-folder-violet.png b/addons/web/static/src/img/icons/terp-folder-violet.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-folder-yellow.png b/addons/web/static/src/img/icons/terp-folder-yellow.png Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-go-home.png b/addons/web/static/src/img/icons/terp-go-home.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-go-month.png b/addons/web/static/src/img/icons/terp-go-month.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-go-today.png b/addons/web/static/src/img/icons/terp-go-today.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-go-week.png b/addons/web/static/src/img/icons/terp-go-week.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-go-year.png b/addons/web/static/src/img/icons/terp-go-year.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-graph.png b/addons/web/static/src/img/icons/terp-graph.png Binary files differindex 30dea82a105..30dea82a105 100644 --- a/addons/base/static/src/img/icons/terp-graph.png +++ b/addons/web/static/src/img/icons/terp-graph.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-gtk-stop.png b/addons/web/static/src/img/icons/terp-gtk-stop.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-hr.png b/addons/web/static/src/img/icons/terp-hr.png Binary files differindex ba0241e6362..ba0241e6362 100644 --- a/addons/base/static/src/img/icons/terp-hr.png +++ b/addons/web/static/src/img/icons/terp-hr.png diff --git a/addons/base/static/src/img/icons/terp-idea.png b/addons/web/static/src/img/icons/terp-idea.png Binary files differindex fd5e2a25f14..fd5e2a25f14 100644 --- a/addons/base/static/src/img/icons/terp-idea.png +++ b/addons/web/static/src/img/icons/terp-idea.png diff --git a/addons/base/static/src/img/icons/terp-locked.png b/addons/web/static/src/img/icons/terp-locked.png Binary files differindex cd2b4c2c9c2..cd2b4c2c9c2 100644 --- a/addons/base/static/src/img/icons/terp-locked.png +++ b/addons/web/static/src/img/icons/terp-locked.png diff --git a/addons/base/static/src/img/icons/terp-mail-.png b/addons/web/static/src/img/icons/terp-mail-.png Binary files differindex cbc85e4c000..cbc85e4c000 100644 --- a/addons/base/static/src/img/icons/terp-mail-.png +++ b/addons/web/static/src/img/icons/terp-mail-.png diff --git a/addons/base/static/src/img/icons/terp-mail-forward.png b/addons/web/static/src/img/icons/terp-mail-forward.png Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-mail-replied.png b/addons/web/static/src/img/icons/terp-mail-replied.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-mail_delete.png b/addons/web/static/src/img/icons/terp-mail_delete.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-marketing.png b/addons/web/static/src/img/icons/terp-marketing.png Binary files differindex 1b04b599734..1b04b599734 100644 --- a/addons/base/static/src/img/icons/terp-marketing.png +++ b/addons/web/static/src/img/icons/terp-marketing.png diff --git a/addons/base/static/src/img/icons/terp-mrp.png b/addons/web/static/src/img/icons/terp-mrp.png Binary files differindex c2b4ea31ec3..c2b4ea31ec3 100644 --- a/addons/base/static/src/img/icons/terp-mrp.png +++ b/addons/web/static/src/img/icons/terp-mrp.png diff --git a/addons/base/static/src/img/icons/terp-partner.png b/addons/web/static/src/img/icons/terp-partner.png Binary files differindex aab206a1d42..aab206a1d42 100644 --- a/addons/base/static/src/img/icons/terp-partner.png +++ b/addons/web/static/src/img/icons/terp-partner.png diff --git a/addons/base/static/src/img/icons/terp-personal+.png b/addons/web/static/src/img/icons/terp-personal+.png Binary files differindex 8afa4d7041d..8afa4d7041d 100644 --- a/addons/base/static/src/img/icons/terp-personal+.png +++ b/addons/web/static/src/img/icons/terp-personal+.png diff --git a/addons/base/static/src/img/icons/terp-personal-.png b/addons/web/static/src/img/icons/terp-personal-.png Binary files differindex a2554df3615..a2554df3615 100644 --- a/addons/base/static/src/img/icons/terp-personal-.png +++ b/addons/web/static/src/img/icons/terp-personal-.png diff --git a/addons/base/static/src/img/icons/terp-personal.png b/addons/web/static/src/img/icons/terp-personal.png Binary files differindex 0890c4d0e51..0890c4d0e51 100644 --- a/addons/base/static/src/img/icons/terp-personal.png +++ b/addons/web/static/src/img/icons/terp-personal.png diff --git a/addons/base/static/src/img/icons/terp-product.png b/addons/web/static/src/img/icons/terp-product.png Binary files differindex 99f58d95a8b..99f58d95a8b 100644 --- a/addons/base/static/src/img/icons/terp-product.png +++ b/addons/web/static/src/img/icons/terp-product.png diff --git a/addons/base/static/src/img/icons/terp-project.png b/addons/web/static/src/img/icons/terp-project.png Binary files differindex cd95ae84e43..cd95ae84e43 100644 --- a/addons/base/static/src/img/icons/terp-project.png +++ b/addons/web/static/src/img/icons/terp-project.png diff --git a/addons/base/static/src/img/icons/terp-purchase.png b/addons/web/static/src/img/icons/terp-purchase.png Binary files differindex 1e801f57485..1e801f57485 100644 --- a/addons/base/static/src/img/icons/terp-purchase.png +++ b/addons/web/static/src/img/icons/terp-purchase.png diff --git a/addons/base/static/src/img/icons/terp-rating-rated.png b/addons/web/static/src/img/icons/terp-rating-rated.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-report.png b/addons/web/static/src/img/icons/terp-report.png Binary files differindex ada36a2de24..ada36a2de24 100644 --- a/addons/base/static/src/img/icons/terp-report.png +++ b/addons/web/static/src/img/icons/terp-report.png diff --git a/addons/base/static/src/img/icons/terp-sale.png b/addons/web/static/src/img/icons/terp-sale.png Binary files differindex ba0241e6362..ba0241e6362 100644 --- a/addons/base/static/src/img/icons/terp-sale.png +++ b/addons/web/static/src/img/icons/terp-sale.png diff --git a/addons/base/static/src/img/icons/terp-stage.png b/addons/web/static/src/img/icons/terp-stage.png Binary files differindex 591c1594f78..591c1594f78 100644 --- a/addons/base/static/src/img/icons/terp-stage.png +++ b/addons/web/static/src/img/icons/terp-stage.png diff --git a/addons/base/static/src/img/icons/terp-stock.png b/addons/web/static/src/img/icons/terp-stock.png Binary files differindex 0365dfdb8e1..0365dfdb8e1 100644 --- a/addons/base/static/src/img/icons/terp-stock.png +++ b/addons/web/static/src/img/icons/terp-stock.png 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-stock_zoom.png b/addons/web/static/src/img/icons/terp-stock_zoom.png Binary files differindex 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 diff --git a/addons/base/static/src/img/icons/terp-tools.png b/addons/web/static/src/img/icons/terp-tools.png Binary files differindex 379f7617427..379f7617427 100644 --- a/addons/base/static/src/img/icons/terp-tools.png +++ b/addons/web/static/src/img/icons/terp-tools.png diff --git a/addons/web/static/src/img/icons/terp-translate.png b/addons/web/static/src/img/icons/terp-translate.png Binary files differnew file mode 100644 index 00000000000..5ab41d49343 --- /dev/null +++ b/addons/web/static/src/img/icons/terp-translate.png diff --git a/addons/base/static/src/img/iconset-d-drop.gif b/addons/web/static/src/img/iconset-d-drop.gif Binary files differindex 4907a927619..4907a927619 100644 --- a/addons/base/static/src/img/iconset-d-drop.gif +++ b/addons/web/static/src/img/iconset-d-drop.gif diff --git a/addons/base/static/src/img/logo.png b/addons/web/static/src/img/logo.png Binary files differindex 8f1c5c6085f..8f1c5c6085f 100644 --- a/addons/base/static/src/img/logo.png +++ b/addons/web/static/src/img/logo.png diff --git a/addons/base/static/src/img/partner.png b/addons/web/static/src/img/partner.png Binary files differindex aab206a1d42..aab206a1d42 100644 --- a/addons/base/static/src/img/partner.png +++ b/addons/web/static/src/img/partner.png diff --git a/addons/base/static/src/img/placeholder.png b/addons/web/static/src/img/placeholder.png Binary files differindex 25af75ee815..25af75ee815 100644 --- a/addons/base/static/src/img/placeholder.png +++ b/addons/web/static/src/img/placeholder.png diff --git a/addons/base/static/src/img/product.png b/addons/web/static/src/img/product.png Binary files differindex 99f58d95a8b..99f58d95a8b 100644 --- a/addons/base/static/src/img/product.png +++ b/addons/web/static/src/img/product.png diff --git a/addons/base/static/src/img/remove-shortcut.png b/addons/web/static/src/img/remove-shortcut.png Binary files differindex 9bff03fe584..9bff03fe584 100644 --- a/addons/base/static/src/img/remove-shortcut.png +++ b/addons/web/static/src/img/remove-shortcut.png diff --git a/addons/web/static/src/img/stock_person.png b/addons/web/static/src/img/stock_person.png Binary files differnew file mode 100644 index 00000000000..202cf0ee6c5 --- /dev/null +++ b/addons/web/static/src/img/stock_person.png diff --git a/addons/base/static/src/img/throbber.gif b/addons/web/static/src/img/throbber.gif Binary files differindex ded8d36d486..ded8d36d486 100644 --- a/addons/base/static/src/img/throbber.gif +++ b/addons/web/static/src/img/throbber.gif diff --git a/addons/base/static/src/img/throbber2.gif b/addons/web/static/src/img/throbber2.gif Binary files differindex 5d2057ae0e7..5d2057ae0e7 100644 --- a/addons/base/static/src/img/throbber2.gif +++ b/addons/web/static/src/img/throbber2.gif diff --git a/addons/base/static/src/img/toggle-a-bg.png b/addons/web/static/src/img/toggle-a-bg.png Binary files differindex b9837ab233e..b9837ab233e 100644 --- a/addons/base/static/src/img/toggle-a-bg.png +++ b/addons/web/static/src/img/toggle-a-bg.png diff --git a/addons/web/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/ui/field_calendar.png Binary files differnew file mode 100644 index 00000000000..99a1f3f9ef1 --- /dev/null +++ b/addons/web/static/src/img/ui/field_calendar.png diff --git a/addons/base/static/src/img/ui/group-expanded.png b/addons/web/static/src/img/ui/group-expanded.png Binary files differindex 3f16536e123..3f16536e123 100644 --- a/addons/base/static/src/img/ui/group-expanded.png +++ b/addons/web/static/src/img/ui/group-expanded.png diff --git a/addons/base/static/src/img/ui/group-folded.png b/addons/web/static/src/img/ui/group-folded.png Binary files differindex 2909b0c268f..2909b0c268f 100644 --- a/addons/base/static/src/img/ui/group-folded.png +++ b/addons/web/static/src/img/ui/group-folded.png diff --git a/addons/base/static/src/img/warning.png b/addons/web/static/src/img/warning.png Binary files differindex cbfb25a89cd..cbfb25a89cd 100644 --- a/addons/base/static/src/img/warning.png +++ b/addons/web/static/src/img/warning.png 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 + '&model=ir.attachment&id=' + attachment.id + '&field=datas&fieldname=name&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">&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">&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 > 0"></span><span><t t-esc="widget.to_show[i][1]"/></span><span class="oe-arrow-list-after" t-if="i < 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 " " +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 Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/buttons.png Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/calendar.gif Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/controls.gif Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/databg.png Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/icon.png Binary files differindex 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 diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif b/addons/web_calendar/static/lib/dhtmlxScheduler/codebase/imgs/loading.gif Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_dashboard/static/src/img/layout_1-1.png b/addons/web_dashboard/static/src/img/layout_1-1.png Binary files differindex 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 diff --git a/addons/base_dashboard/static/src/img/layout_1-2.png b/addons/web_dashboard/static/src/img/layout_1-2.png Binary files differindex 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 diff --git a/addons/base_dashboard/static/src/img/layout_1.png b/addons/web_dashboard/static/src/img/layout_1.png Binary files differindex 69a0e30854c..69a0e30854c 100644 --- a/addons/base_dashboard/static/src/img/layout_1.png +++ b/addons/web_dashboard/static/src/img/layout_1.png diff --git a/addons/base_dashboard/static/src/img/layout_2-1.png b/addons/web_dashboard/static/src/img/layout_2-1.png Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_default_home/static/src/img/crm.png b/addons/web_default_home/static/src/img/crm.png Binary files differindex 893bb23ab98..893bb23ab98 100644 --- a/addons/base_default_home/static/src/img/crm.png +++ b/addons/web_default_home/static/src/img/crm.png diff --git a/addons/base_default_home/static/src/img/hr.png b/addons/web_default_home/static/src/img/hr.png Binary files differindex 742f3e53e67..742f3e53e67 100644 --- a/addons/base_default_home/static/src/img/hr.png +++ b/addons/web_default_home/static/src/img/hr.png diff --git a/addons/base_default_home/static/src/img/knowledge.png b/addons/web_default_home/static/src/img/knowledge.png Binary files differindex 78864367df1..78864367df1 100644 --- a/addons/base_default_home/static/src/img/knowledge.png +++ b/addons/web_default_home/static/src/img/knowledge.png diff --git a/addons/base_default_home/static/src/img/marketing.png b/addons/web_default_home/static/src/img/marketing.png Binary files differindex cfe890f31be..cfe890f31be 100644 --- a/addons/base_default_home/static/src/img/marketing.png +++ b/addons/web_default_home/static/src/img/marketing.png diff --git a/addons/base_default_home/static/src/img/mrp.png b/addons/web_default_home/static/src/img/mrp.png Binary files differindex 600104af507..600104af507 100644 --- a/addons/base_default_home/static/src/img/mrp.png +++ b/addons/web_default_home/static/src/img/mrp.png 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 Binary files differindex 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 diff --git a/addons/base_default_home/static/src/img/profile_tools.png b/addons/web_default_home/static/src/img/profile_tools.png Binary files differindex 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 diff --git a/addons/base_default_home/static/src/img/project.png b/addons/web_default_home/static/src/img/project.png Binary files differindex 20ba49f07c8..20ba49f07c8 100644 --- a/addons/base_default_home/static/src/img/project.png +++ b/addons/web_default_home/static/src/img/project.png diff --git a/addons/base_default_home/static/src/img/purchase.png b/addons/web_default_home/static/src/img/purchase.png Binary files differindex 094705cecc3..094705cecc3 100644 --- a/addons/base_default_home/static/src/img/purchase.png +++ b/addons/web_default_home/static/src/img/purchase.png diff --git a/addons/base_default_home/static/src/img/sale.png b/addons/web_default_home/static/src/img/sale.png Binary files differindex 072570bae38..072570bae38 100644 --- a/addons/base_default_home/static/src/img/sale.png +++ b/addons/web_default_home/static/src/img/sale.png diff --git a/addons/base_default_home/static/src/img/stock.png b/addons/web_default_home/static/src/img/stock.png Binary files differindex a70ccfe18d5..a70ccfe18d5 100644 --- a/addons/base_default_home/static/src/img/stock.png +++ b/addons/web_default_home/static/src/img/stock.png 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 Binary files differnew file mode 100644 index 00000000000..5254207b964 --- /dev/null +++ b/addons/web_diagram/static/src/img/grid.jpg 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"><<</button> + + <span class="oe_pager_index">0</span> / <span class="oe_pager_count">0</span> + + <button type="button" data-pager-action="next">>></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 Binary files differindex 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 diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/bg.png Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/minus.gif Binary files differindex 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 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 Binary files differindex 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 diff --git a/addons/base_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif b/addons/web_gantt/static/lib/dhtmlxGantt/codebase/imgs/plus.gif Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 4baf4a63cef..4baf4a63cef 100644 --- a/addons/base_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip +++ b/addons/web_graph/static/lib/dhtmlxGraph/dhtmlxchart_full.zip 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"></tr><tr></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" + |
