summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2013-06-13 19:39:00 +0200
committerChristophe Simonis <chs@openerp.com>2013-06-13 19:39:00 +0200
commita61e7cb0c80ae773cab9753bd8a4e7e888bbf415 (patch)
tree019a235869a5e087055700895d4584c80e2f9afb /addons/web
parent5ed0ac2614b9430e61dae472d657a21c037d6ee9 (diff)
parent180e6e41d81e28df43b41e3cb6131225d4169a28 (diff)
[MERGE] forward port of branch saas-1 up to revid 4887 chs@openerp.com-20130612153934-qyp6pb3bc4za4taf
bzr revid: chs@openerp.com-20130613172414-dln3g4j0ykcwaa02 bzr revid: chs@openerp.com-20130613173900-xl7rh321nnw2b04b
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/controllers/main.py48
-rw-r--r--addons/web/doc/_static/openerp.pngbin3981 -> 3479 bytes
-rw-r--r--addons/web/http.py10
-rw-r--r--addons/web/session.py1
-rw-r--r--addons/web/static/lib/cleditor/jquery.cleditor.js5
-rw-r--r--addons/web/static/lib/datejs/date.js4
-rw-r--r--[-rwxr-xr-x]addons/web/static/lib/jquery.placeholder/jquery.placeholder.js0
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 87 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.pngbin120 -> 115 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.pngbin105 -> 95 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.pngbin111 -> 107 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.pngbin110 -> 106 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.pngbin107 -> 97 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin101 -> 86 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.pngbin123 -> 119 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.pngbin8884 -> 3920 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 87 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.pngbin178 -> 87 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.pngbin144 -> 130 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.pngbin105 -> 95 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.pngbin111 -> 107 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.pngbin110 -> 106 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.pngbin119 -> 118 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin101 -> 86 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.pngbin5355 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.pngbin4369 -> 3702 bytes
-rw-r--r--addons/web/static/lib/py.js/.hg_archival.txt4
-rw-r--r--addons/web/static/lib/py.js/lib/py.js142
-rw-r--r--addons/web/static/src/css/base.css30
-rw-r--r--addons/web/static/src/css/base.sass28
-rw-r--r--[-rwxr-xr-x]addons/web/static/src/font/entypo-webfont.svg0
-rw-r--r--[-rwxr-xr-x]addons/web/static/src/font/mnmliconsv21-webfont.svg0
-rw-r--r--addons/web/static/src/img/accessories-archiver.pngbin822 -> 782 bytes
-rw-r--r--addons/web/static/src/img/add-shortcut.pngbin395 -> 337 bytes
-rw-r--r--addons/web/static/src/img/attachments-close.pngbin486 -> 419 bytes
-rw-r--r--addons/web/static/src/img/db.pngbin2042 -> 1789 bytes
-rw-r--r--addons/web/static/src/img/down-arrow.pngbin263 -> 125 bytes
-rw-r--r--addons/web/static/src/img/form_sheetbg.pngbin97 -> 83 bytes
-rw-r--r--addons/web/static/src/img/form_steps.pngbin361 -> 251 bytes
-rw-r--r--addons/web/static/src/img/graph_background.pngbin3920 -> 3362 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ADD.pngbin212 -> 203 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_APPLY.pngbin709 -> 689 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_CLOSE.pngbin274 -> 239 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_COLOR_PICKER.pngbin470 -> 462 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.pngbin698 -> 621 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_DND.pngbin585 -> 576 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_FLOPPY.pngbin565 -> 514 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_FIRST.pngbin573 -> 571 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GOTO_TOP.pngbin580 -> 574 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_BACK.pngbin570 -> 563 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_GO_UP.pngbin596 -> 591 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_ITALIC.pngbin529 -> 515 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.pngbin448 -> 443 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.pngbin704 -> 696 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.pngbin466 -> 419 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.pngbin556 -> 536 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.pngbin704 -> 693 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_MEDIA_STOP.pngbin421 -> 371 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_NO.pngbin751 -> 713 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_OK.pngbin795 -> 754 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_QUIT.pngbin394 -> 386 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REDO.pngbin430 -> 414 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_REMOVE.pngbin176 -> 167 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.pngbin459 -> 449 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNDERLINE.pngbin539 -> 528 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_UNDO.pngbin459 -> 456 bytes
-rw-r--r--addons/web/static/src/img/icons/STOCK_YES.pngbin830 -> 758 bytes
-rw-r--r--addons/web/static/src/img/icons/color-picker.pngbin767 -> 699 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-add.pngbin212 -> 203 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-apply.pngbin709 -> 689 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-close.pngbin274 -> 239 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-color-picker.pngbin470 -> 462 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-dnd.pngbin585 -> 576 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-floppy.pngbin565 -> 514 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-back.pngbin570 -> 563 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-go-up.pngbin596 -> 591 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-first.pngbin573 -> 571 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-goto-top.pngbin580 -> 574 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-italic.pngbin529 -> 515 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-leave-fullscreen.pngbin448 -> 443 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-forward.pngbin704 -> 696 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-pause.pngbin466 -> 419 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-play.pngbin556 -> 536 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-rewind.pngbin704 -> 693 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-media-stop.pngbin421 -> 371 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-no.pngbin751 -> 713 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-ok.pngbin795 -> 754 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-quit.pngbin394 -> 386 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-redo.pngbin430 -> 414 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-remove.pngbin176 -> 167 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-strikethrough.pngbin459 -> 449 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-underline.pngbin539 -> 528 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-undo.pngbin459 -> 456 bytes
-rw-r--r--addons/web/static/src/img/icons/gtk-yes.pngbin830 -> 758 bytes
-rw-r--r--addons/web/static/src/img/icons/kanban-apply.pngbin918 -> 772 bytes
-rw-r--r--addons/web/static/src/img/icons/kanban-pause.pngbin882 -> 736 bytes
-rw-r--r--addons/web/static/src/img/icons/kanban-stop.pngbin692 -> 595 bytes
-rw-r--r--addons/web/static/src/img/icons/save-document.pngbin1189 -> 777 bytes
-rw-r--r--addons/web/static/src/img/icons/star-off.pngbin614 -> 410 bytes
-rw-r--r--addons/web/static/src/img/icons/star-on.pngbin636 -> 487 bytes
-rw-r--r--addons/web/static/src/img/icons/stock.pngbin953 -> 914 bytes
-rw-r--r--addons/web/static/src/img/icons/stock_calendar.pngbin454 -> 436 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver+.pngbin838 -> 799 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver-minus.pngbin838 -> 799 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-accessories-archiver.pngbin822 -> 782 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-account.pngbin784 -> 715 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-administration.pngbin1015 -> 915 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-calendar.pngbin908 -> 869 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-call-start.pngbin492 -> 491 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-camera_test.pngbin739 -> 630 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-crm.pngbin877 -> 838 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dialog-close.pngbin305 -> 270 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-document-new.pngbin738 -> 698 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dolar.pngbin270 -> 221 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-dolar_ok!.pngbin220 -> 206 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-emblem-important.pngbin703 -> 693 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-blue.pngbin438 -> 403 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-green.pngbin453 -> 418 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-orange.pngbin411 -> 383 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-violet.pngbin538 -> 485 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-folder-yellow.pngbin432 -> 412 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-go-year.pngbin514 -> 513 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-graph.pngbin784 -> 715 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-go-back-ltr.pngbin759 -> 713 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-go-back-rtl.pngbin762 -> 723 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.pngbin859 -> 815 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.pngbin851 -> 806 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-media-pause.pngbin544 -> 503 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-gtk-select-all.pngbin554 -> 540 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-hr.pngbin699 -> 660 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail-forward.pngbin382 -> 361 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mail_delete.pngbin988 -> 978 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-marketing.pngbin808 -> 763 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-mrp.pngbin880 -> 833 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-partner.pngbin905 -> 862 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-personal.pngbin930 -> 892 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-product.pngbin708 -> 669 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-project.pngbin993 -> 927 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-purchase.pngbin885 -> 844 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-report.pngbin831 -> 785 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-sale.pngbin699 -> 660 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock.pngbin967 -> 928 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_align_left_24.pngbin358 -> 323 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_effects-object-colorize.pngbin173 -> 160 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_format-scientific.pngbin201 -> 155 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_symbol-selection.pngbin382 -> 373 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-stock_zoom.pngbin425 -> 378 bytes
-rw-r--r--addons/web/static/src/img/icons/terp-tools.pngbin914 -> 875 bytes
-rw-r--r--addons/web/static/src/img/iconset-a-help.pngbin498 -> 428 bytes
-rw-r--r--addons/web/static/src/img/iconset-b-remove.pngbin189 -> 123 bytes
-rw-r--r--addons/web/static/src/img/logo.pngbin3551 -> 2887 bytes
-rw-r--r--addons/web/static/src/img/logo2.pngbin3600 -> 3497 bytes
-rw-r--r--addons/web/static/src/img/nologo.pngbin3977 -> 1818 bytes
-rw-r--r--addons/web/static/src/img/pager_first.pngbin1570 -> 267 bytes
-rw-r--r--addons/web/static/src/img/pager_last.pngbin1564 -> 263 bytes
-rw-r--r--addons/web/static/src/img/pager_next.pngbin3273 -> 169 bytes
-rw-r--r--addons/web/static/src/img/pager_previous.pngbin3276 -> 174 bytes
-rw-r--r--addons/web/static/src/img/partner.pngbin905 -> 862 bytes
-rw-r--r--addons/web/static/src/img/placeholder.pngbin1362 -> 1192 bytes
-rw-r--r--addons/web/static/src/img/product.pngbin708 -> 669 bytes
-rw-r--r--addons/web/static/src/img/toggle-a-bg.pngbin412 -> 411 bytes
-rw-r--r--addons/web/static/src/img/ui/field_calendar.pngbin454 -> 436 bytes
-rw-r--r--addons/web/static/src/img/ui/group-expanded.pngbin229 -> 153 bytes
-rw-r--r--addons/web/static/src/img/ui/group-folded.pngbin259 -> 198 bytes
-rw-r--r--addons/web/static/src/img/user_menu_avatar.pngbin846 -> 453 bytes
-rw-r--r--addons/web/static/src/img/view_empty_arrow.pngbin2531 -> 1838 bytes
-rw-r--r--addons/web/static/src/img/warning.pngbin1342 -> 1298 bytes
-rw-r--r--addons/web/static/src/js/chrome.js23
-rw-r--r--addons/web/static/src/js/coresetup.js8
-rw-r--r--addons/web/static/src/js/data.js73
-rw-r--r--addons/web/static/src/js/data_export.js88
-rw-r--r--addons/web/static/src/js/search.js64
-rw-r--r--addons/web/static/src/js/view_form.js11
-rw-r--r--addons/web/static/src/js/view_list.js25
-rw-r--r--addons/web/static/src/js/view_list_editable.js1
-rw-r--r--addons/web/static/src/js/views.js4
-rw-r--r--addons/web/static/src/xml/base.xml6
185 files changed, 389 insertions, 186 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8683ef177bc..1bcdb7f54a9 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -32,6 +32,7 @@ except ImportError:
import openerp
import openerp.modules.registry
from openerp.tools.translate import _
+from openerp.tools import config
from .. import http
openerpweb = http
@@ -86,9 +87,9 @@ def rjsmin(script):
).strip()
return result
-def db_list():
+def db_list(force=False):
proxy = req.session.proxy("db")
- dbs = proxy.list()
+ dbs = proxy.list(force)
h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
d = h.split('.')[0]
r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
@@ -104,25 +105,21 @@ def db_monodb_redirect():
if db_url:
return (db_url, False)
- try:
- dbs = db_list()
- except Exception:
- # ignore access denied
- dbs = []
+ dbs = db_list(True)
# 2 use the database from the cookie if it's listable and still listed
cookie_db = req.httprequest.cookies.get('last_used_database')
if cookie_db in dbs:
db = cookie_db
- # 3 use the first db
- if dbs and not db:
+ # 3 use the first db if user can list databases
+ if dbs and not db and (config['list_db'] or len(dbs) == 1):
db = dbs[0]
# redirect to the chosen db if multiple are available
if db and len(dbs) > 1:
query = dict(urlparse.parse_qsl(req.httprequest.query_string, keep_blank_values=True))
- query.update({ 'db': db })
+ query.update({'db': db})
redirect = req.httprequest.path + '?' + urllib.urlencode(query)
return (db, redirect)
@@ -283,8 +280,9 @@ def concat_files(file_list, reader=None, intersperse=""):
if reader is None:
def reader(f):
- with open(f, 'rb') as fp:
- return fp.read()
+ import codecs
+ with codecs.open(f, 'rb', "utf-8-sig") as fp:
+ return fp.read().encode("utf-8")
files_content = []
for fname in file_list:
@@ -766,7 +764,14 @@ class Database(openerpweb.Controller):
@openerpweb.jsonrequest
def get_list(self):
- return db_list()
+ # TODO change js to avoid calling this method if in monodb mode
+ try:
+ return db_list()
+ except openerp.exceptions.AccessDenied:
+ monodb = db_monodb(req)
+ if monodb:
+ return [monodb]
+ raise
@openerpweb.jsonrequest
def create(self, fields):
@@ -781,20 +786,11 @@ class Database(openerpweb.Controller):
@openerpweb.jsonrequest
def duplicate(self, fields):
params = dict(map(operator.itemgetter('name', 'value'), fields))
- return req.session.proxy("db").duplicate_database(
- params['super_admin_pwd'],
- params['db_original_name'],
- params['db_name'])
-
- @openerpweb.jsonrequest
- def duplicate(self, fields):
- params = dict(map(operator.itemgetter('name', 'value'), fields))
duplicate_attrs = (
params['super_admin_pwd'],
params['db_original_name'],
params['db_name'],
)
-
return req.session.proxy("db").duplicate_database(*duplicate_attrs)
@openerpweb.jsonrequest
@@ -802,9 +798,9 @@ class Database(openerpweb.Controller):
password, db = operator.itemgetter(
'drop_pwd', 'drop_db')(
dict(map(operator.itemgetter('name', 'value'), fields)))
-
+
try:
- return req.session.proxy("db").drop(password, db)
+ if req.session.proxy("db").drop(password, db):return True
except openerp.exceptions.AccessDenied:
return {'error': 'AccessDenied', 'title': 'Drop Database'}
except Exception:
@@ -1380,7 +1376,7 @@ class Binary(openerpweb.Controller):
else:
try:
# create an empty registry
- registry = openerp.modules.registry.Registry(dbname.lower())
+ registry = openerp.modules.registry.Registry(dbname)
with registry.cursor() as cr:
cr.execute("""SELECT c.logo_web
FROM res_users u
@@ -1490,6 +1486,8 @@ class Export(openerpweb.Controller):
if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()):
continue
+ if not field.get('exportable', True):
+ continue
id = prefix + (prefix and '/'or '') + field_name
name = parent_name + (parent_name and '/' or '') + field['string']
diff --git a/addons/web/doc/_static/openerp.png b/addons/web/doc/_static/openerp.png
index d6dbd9d83d1..caa1b21d8d7 100644
--- a/addons/web/doc/_static/openerp.png
+++ b/addons/web/doc/_static/openerp.png
Binary files differ
diff --git a/addons/web/http.py b/addons/web/http.py
index 2dc41c8cad9..5872e80685b 100644
--- a/addons/web/http.py
+++ b/addons/web/http.py
@@ -537,9 +537,13 @@ class DisableCacheMiddleware(object):
def session_path():
try:
- username = getpass.getuser()
- except Exception:
- username = "unknown"
+ import pwd
+ username = pwd.getpwuid(os.geteuid()).pw_name
+ except ImportError:
+ try:
+ username = getpass.getuser()
+ except Exception:
+ username = "unknown"
path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username)
try:
os.mkdir(path, 0700)
diff --git a/addons/web/session.py b/addons/web/session.py
index 13c3bc7cb94..65f5fdc2a62 100644
--- a/addons/web/session.py
+++ b/addons/web/session.py
@@ -1,4 +1,3 @@
-#!/usr/bin/python
import datetime
import babel
import dateutil.relativedelta
diff --git a/addons/web/static/lib/cleditor/jquery.cleditor.js b/addons/web/static/lib/cleditor/jquery.cleditor.js
index e3446991daf..3de9089443d 100644
--- a/addons/web/static/lib/cleditor/jquery.cleditor.js
+++ b/addons/web/static/lib/cleditor/jquery.cleditor.js
@@ -296,6 +296,11 @@
// Bind the window resize event when the width or height is auto or %
if (/auto|%/.test("" + options.width + options.height))
$(window).resize(function() {
+ //Forcefully blurred iframe contentWindow, chrome, IE, safari doesn't trigger blur on window resize and due to which text disappears
+ var contentWindow = editor.$frame[0].contentWindow;
+ if(!$.browser.mozilla && contentWindow){
+ $(contentWindow).trigger('blur');
+ }
// CHM Note MonkeyPatch: if the DOM is not remove, refresh the cleditor
if(editor.$main.parent().parent().size()) {
refresh(editor);
diff --git a/addons/web/static/lib/datejs/date.js b/addons/web/static/lib/datejs/date.js
index eda450113bb..96b96924da4 100644
--- a/addons/web/static/lib/datejs/date.js
+++ b/addons/web/static/lib/datejs/date.js
@@ -7,7 +7,7 @@
* date.js // English (United States)
* date-en-US.js // English (United States)
* date-de-DE.js // Deutsch (Deutschland)
- * date-es-MX.js // franēais (France)
+ * date-es-MX.js // franƧais (France)
*/
alert(
@@ -17,5 +17,5 @@ alert(
" date.js // English (United States)\n" +
" date-en-US.js // English (United States)\n" +
" date-de-DE.js // Deutsch (Deutschland)\n" +
- " date-es-MX.js // franēais (France)\n"
+ " date-es-MX.js // franƧais (France)\n"
); \ No newline at end of file
diff --git a/addons/web/static/lib/jquery.placeholder/jquery.placeholder.js b/addons/web/static/lib/jquery.placeholder/jquery.placeholder.js
index d8051fa269d..d8051fa269d 100755..100644
--- a/addons/web/static/lib/jquery.placeholder/jquery.placeholder.js
+++ b/addons/web/static/lib/jquery.placeholder/jquery.placeholder.js
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
index 5b5dab2ab7b..e425e6e46eb 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png
index ad3d6346e00..3b2914a2db9 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png
index 42ccba269b6..e7d01fac6a7 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png
index 5a46b47cb16..22641ccb51c 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
index 86c2baa655e..c0911d8cd44 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.png
index e65ca1297c7..d45b4160fa9 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_glass_75_ffffff_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
index 7c9fa6c6edc..3cd467e18ef 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
index 0e05810fffe..06a6708da17 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.png
index b273ff111d2..e913bce11f7 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.png
index 09d1cdc856c..34e38d1146e 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.png
index 59bd45b907c..1486b0cfc2e 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.png
index 6d02426c114..ae855c08a0e 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.png
index 2ab019b73ec..9e8939e38f8 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.png b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.png
index c9869351a73..68d801e2563 100644
--- a/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.png
+++ b/addons/web/static/lib/jquery.ui.bootstrap/css/custom-theme/images/ui-icons_f6cf3b_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
index 5b5dab2ab7b..e425e6e46eb 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
index ac8b229af95..72d4757363c 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
index b39a6fb27ff..e3fcd7c9898 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
index 42ccba269b6..e7d01fac6a7 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
index 5a46b47cb16..22641ccb51c 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
index 86c2baa655e..c0911d8cd44 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
index 4443fdc1a15..5fd6c50c715 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
index 7c9fa6c6edc..3cd467e18ef 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
index b273ff111d2..e913bce11f7 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
index 84defe6e8ab..34e38d1146e 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
index 59bd45b907c..1486b0cfc2e 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
index 6d02426c114..ae855c08a0e 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
index 2ab019b73ec..9e8939e38f8 100644
--- a/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
+++ b/addons/web/static/lib/jquery.ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/addons/web/static/lib/py.js/.hg_archival.txt b/addons/web/static/lib/py.js/.hg_archival.txt
index 1d47dff4445..94f4a9ad6e8 100644
--- a/addons/web/static/lib/py.js/.hg_archival.txt
+++ b/addons/web/static/lib/py.js/.hg_archival.txt
@@ -1,5 +1,5 @@
repo: 076b192d0d8ab2b92d1dbcfa3da055382f30eaea
-node: 142c22b230636674a0cee6bc29e6975f0f1600a5
+node: 7ee0bc7b4e9138f485cdc9ec791961d8ef452f17
branch: default
latesttag: 0.7
-latesttagdistance: 9
+latesttagdistance: 11
diff --git a/addons/web/static/lib/py.js/lib/py.js b/addons/web/static/lib/py.js/lib/py.js
index 8d6443b7753..2c738dc95d1 100644
--- a/addons/web/static/lib/py.js/lib/py.js
+++ b/addons/web/static/lib/py.js/lib/py.js
@@ -273,7 +273,7 @@ var py = {};
var Special = '[:;.,`@]';
var Funny = group(Operator, Bracket, Special);
- var ContStr = group("[uU]?'([^']*)'", '[uU]?"([^"]*)"');
+ var ContStr = group("([uU])?'([^']*)'", '([uU])?"([^"]*)"');
var PseudoToken = Whitespace + group(Number, Funny, ContStr, Name);
@@ -311,7 +311,8 @@ var py = {};
} else if (string_pattern.test(token)) {
var m = string_pattern.exec(token);
tokens.push(create(symbols['(string)'], {
- value: (m[2] !== undefined ? m[2] : m[3])
+ unicode: !!(m[2] || m[4]),
+ value: (m[3] !== undefined ? m[3] : m[5])
}));
} else if (token in symbols) {
var symbol;
@@ -393,13 +394,14 @@ var py = {};
switch(val.constructor) {
case Object:
- var out = py.PY_call(py.object);
- for(var k in val) {
- if (val.hasOwnProperty(k)) {
- out[k] = val[k];
+ // TODO: why py.object instead of py.dict?
+ var o = py.PY_call(py.object);
+ for (var prop in val) {
+ if (val.hasOwnProperty(prop)) {
+ o[prop] = val[prop];
}
}
- return out;
+ return o;
case Array:
return py.list.fromJSON(val);
}
@@ -521,7 +523,7 @@ var py = {};
}
};
py.PY_getAttr = function (o, attr_name) {
- return PY_ensurepy(o.__getattribute__(attr_name),attr_name);
+ return PY_ensurepy(o.__getattribute__(attr_name));
};
py.PY_str = function (o) {
var v = o.__str__();
@@ -762,14 +764,7 @@ var py = {};
// Conversion
toJSON: function () {
- var out = {};
- for(var k in this) {
- if (this.hasOwnProperty(k) && !/^__/.test(k)) {
- var val = this[k];
- out[k] = val.toJSON ? val.toJSON() : val;
- }
- }
- return out;
+ throw new Error(this.constructor.name + ' can not be converted to JSON');
}
});
var NoneType = py.type('NoneType', null, {
@@ -998,7 +993,7 @@ var py = {};
}
var t = py.PY_call(py.tuple);
for(var i=0; i<ar.length; ++i) {
- t._values.push(PY_ensurepy(ar[i],i));
+ t._values.push(PY_ensurepy(ar[i]));
}
return t;
}
@@ -1032,7 +1027,7 @@ var py = {};
if (!d.hasOwnProperty(k)) { continue; }
instance.__setitem__(
py.str.fromJSON(k),
- PY_ensurepy(d[k],k));
+ PY_ensurepy(d[k]));
}
return instance;
},
@@ -1108,6 +1103,114 @@ var py = {};
});
+ /**
+ * Implements the decoding of Python string literals (embedded in
+ * JS strings) into actual JS strings. This includes the decoding
+ * of escapes into their corresponding JS
+ * characters/codepoints/whatever.
+ *
+ * The ``unicode`` flags notes whether the literal should be
+ * decoded as a bytestring literal or a unicode literal, which
+ * pretty much only impacts decoding (or not) of unicode escapes
+ * at this point since bytestrings are not technically handled
+ * (everything is decoded to JS "unicode" strings)
+ *
+ * Eventurally, ``str`` could eventually use typed arrays, that'd
+ * be interesting...
+ */
+ var PY_decode_string_literal = function (str, unicode) {
+ var out = [], code;
+ // Directly maps a single escape code to an output
+ // character
+ var direct_map = {
+ '\\': '\\',
+ '"': '"',
+ "'": "'",
+ 'a': '\x07',
+ 'b': '\x08',
+ 'f': '\x0c',
+ 'n': '\n',
+ 'r': '\r',
+ 't': '\t',
+ 'v': '\v'
+ };
+
+ for (var i=0; i<str.length; ++i) {
+ if (str[i] !== '\\') {
+ out.push(str[i]);
+ continue;
+ }
+ var escape = str[i+1];
+ if (escape in direct_map) {
+ out.push(direct_map[escape]);
+ ++i;
+ continue;
+ }
+
+ switch (escape) {
+ // Ignored
+ case '\n': ++i; continue;
+ // Character named name in the Unicode database (Unicode only)
+ case 'N':
+ if (!unicode) { break; }
+ throw Error("SyntaxError: \\N{} escape not implemented");
+ case 'u':
+ if (!unicode) { break; }
+ var uni = str.slice(i+2, i+6);
+ if (!/[0-9a-f]{4}/i.test(uni)) {
+ throw new Error([
+ "SyntaxError: (unicode error) 'unicodeescape' codec",
+ " can't decode bytes in position ",
+ i, "-", i+4,
+ ": truncated \\uXXXX escape"
+ ].join(''));
+ }
+ code = parseInt(uni, 16);
+ out.push(String.fromCharCode(code));
+ // escape + 4 hex digits
+ i += 5;
+ continue;
+ case 'U':
+ if (!unicode) { break; }
+ // TODO: String.fromCodePoint
+ throw Error("SyntaxError: \\U escape not implemented");
+ case 'x':
+ // get 2 hex digits
+ var hex = str.slice(i+2, i+4);
+ if (!/[0-9a-f]{2}/i.test(hex)) {
+ if (!unicode) {
+ throw new Error('ValueError: invalid \\x escape');
+ }
+ throw new Error([
+ "SyntaxError: (unicode error) 'unicodeescape'",
+ " codec can't decode bytes in position ",
+ i, '-', i+2,
+ ": truncated \\xXX escape"
+ ].join(''))
+ }
+ code = parseInt(hex, 16);
+ out.push(String.fromCharCode(code));
+ // skip escape + 2 hex digits
+ i += 3;
+ continue;
+ default:
+ // Check if octal
+ if (!/[0-8]/.test(escape)) { break; }
+ var r = /[0-8]{1,3}/g;
+ r.lastIndex = i+1;
+ var m = r.exec(str);
+ var oct = m[0];
+ code = parseInt(oct, 8);
+ out.push(String.fromCharCode(code));
+ // skip matchlength
+ i += oct.length;
+ continue;
+ }
+ out.push('\\');
+ }
+
+ return out.join('');
+ };
// All binary operators with fallbacks, so they can be applied generically
var PY_operators = {
'==': ['eq', 'eq', function (a, b) { return a === b; }],
@@ -1217,7 +1320,8 @@ var py = {};
}
return PY_ensurepy(val, expr.value);
case '(string)':
- return py.str.fromJSON(expr.value);
+ return py.str.fromJSON(PY_decode_string_literal(
+ expr.value, expr.unicode));
case '(number)':
return py.float.fromJSON(expr.value);
case '(constant)':
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css
index 863b90a0f38..74e027d3a0b 100644
--- a/addons/web/static/src/css/base.css
+++ b/addons/web/static/src/css/base.css
@@ -579,6 +579,9 @@
.openerp .oe_tags .text-wrap textarea {
width: 100% !important;
}
+.openerp .oe_tags .text-core {
+ min-height: 22px;
+}
.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em {
font-style: italic;
text-decoration: none;
@@ -698,7 +701,6 @@
display: none;
position: absolute;
top: 26px;
- left: 0;
z-index: 3;
margin: 0;
padding: 0;
@@ -1695,14 +1697,14 @@
top: 0;
right: 18px;
width: 15px;
- height: 100%;
+ height: 24px;
background: url(../img/search_reset.gif) center center no-repeat;
}
.openerp .oe_searchview .oe_searchview_unfold_drawer {
position: absolute;
top: 0;
right: 0;
- height: 100%;
+ height: 24px;
padding: 0 7px 0 4px;
color: #cccccc;
cursor: pointer;
@@ -1751,7 +1753,7 @@
}
.openerp .oe_searchview .oe_searchview_facets {
min-height: 22px;
- margin-left: 15px;
+ margin: 0 35px 0 15px;
}
.openerp .oe_searchview .oe_searchview_facets * {
vertical-align: top;
@@ -1759,7 +1761,6 @@
line-height: 17px;
}
.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet {
- height: 18px;
margin: 1px 0;
font-size: 11px;
}
@@ -1838,6 +1839,7 @@
display: block;
}
.openerp .oe_searchview .oe_searchview_drawer {
+ cursor: default;
position: absolute;
z-index: 2;
margin-top: 4px;
@@ -1990,7 +1992,6 @@
padding: 0;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li {
- cursor: pointer;
position: relative;
list-style: none;
margin: 0;
@@ -2147,13 +2148,12 @@
.openerp .oe_form_readonly .oe_form .oe_form_field_date {
width: auto;
}
-.openerp .oe_form_readonly .oe_form_field_boolean .boolean{
+.openerp .oe_form_readonly .oe_form_field_boolean.boolean {
position: relative;
- top: -14px;
+ top: -20px;
width: 14px;
height: 14px;
- z-index:10000;
- /* IE needs a color in order for the layer to respond to mouse events */
+ z-index: 10000;
backgroundColor: "#fff";
opacity: 0;
}
@@ -2395,6 +2395,9 @@
.openerp .oe_form .oe_form_field_selection select {
width: 100%;
}
+.openerp .oe_form .oe_notebook_page .oe_form_field_text textarea {
+ min-height: 96px;
+}
.openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea {
width: 500px;
}
@@ -2509,6 +2512,10 @@
margin-bottom: 32px;
text-align: justify;
}
+.openerp .oe_form .oe_form_field_html .oe_input_icon {
+ float: right;
+ margin: 4px 7px;
+}
.openerp .oe_form_editable .oe_form .oe_form_field_integer input {
width: 6em;
}
@@ -2997,7 +3004,6 @@
position: relative;
}
.openerp .oe_list_content th.oe_sortable div:after {
- float: right;
margin-right: 6px;
content: "";
margin-top: 7px;
@@ -3007,6 +3013,7 @@
visibility: hidden;
}
.openerp .oe_list_content th.sortup div:after {
+ float: right;
visibility: visible;
filter: alpha(opacity=60);
opacity: 0.6;
@@ -3015,6 +3022,7 @@
min-width: 70px;
}
.openerp .oe_list_content th.sortdown div:after {
+ float: right;
border-bottom: none;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass
index 240dc912206..fc812729cd4 100644
--- a/addons/web/static/src/css/base.sass
+++ b/addons/web/static/src/css/base.sass
@@ -511,9 +511,11 @@ $sheet-padding: 16px
width: 100% !important
textarea
width: 100% !important
- .text-core .text-wrap .text-dropdown .text-list .text-suggestion em
- font-style: italic
- text-decoration: none
+ .text-core
+ min-height: 22px
+ .text-wrap .text-dropdown .text-list .text-suggestion em
+ font-style: italic
+ text-decoration: none
margin-bottom: 1px
// }}}
// Tooltips {{{
@@ -605,7 +607,6 @@ $sheet-padding: 16px
display: none
position: absolute
top: 26px
- left: 0
z-index: 3
margin: 0
padding: 0
@@ -1358,13 +1359,13 @@ $sheet-padding: 16px
top: 0
right: 18px
width: 15px
- height: 100%
+ height: 24px
background: url(../img/search_reset.gif) center center no-repeat
.oe_searchview_unfold_drawer
position: absolute
top: 0
right: 0
- height: 100%
+ height: 24px
padding: 0 7px 0 4px
color: #ccc
cursor: pointer
@@ -1397,13 +1398,12 @@ $sheet-padding: 16px
.oe_searchview_facets
min-height: 22px
- margin-left: 15px
+ margin: 0 35px 0 15px
*
vertical-align: top
display: inline-block
line-height: 17px
.oe_searchview_facet
- height: 18px
margin: 1px 0
font-size: 11px
&:focus
@@ -1425,7 +1425,7 @@ $sheet-padding: 16px
border-color: $tag-border-selected
@include box-shadow(0 0 3px 1px $tag-border-selected)
.oe_facet_values
- background: #f0f0fa
+ background: $tag-bg-light
@include radius(0 3px 3px 0)
.oe_facet_category, .oe_facet_value
height: 18px
@@ -1464,6 +1464,7 @@ $sheet-padding: 16px
display: block
.oe_searchview_drawer
+ cursor: default
position: absolute
z-index: 2
// detach drawer from field slightly
@@ -1581,7 +1582,6 @@ $sheet-padding: 16px
list-style: none
padding: 0
li
- cursor: pointer
position: relative
list-style: none
margin: 0
@@ -1904,6 +1904,8 @@ $sheet-padding: 16px
.oe_form_field_text textarea,
.oe_form_field_selection select
width: 100%
+ .oe_notebook_page .oe_form_field_text textarea
+ min-height: 96px
.oe_form_field_text.oe_inline, .oe_form_field_text.oe_inline > textarea
width: 500px
h1, h2, h3, h4, h5, h6
@@ -1989,6 +1991,9 @@ $sheet-padding: 16px
margin-top: 32px
margin-bottom: 32px
text-align: justify
+ .oe_form_field_html .oe_input_icon
+ float: right
+ margin: 4px 7px
.oe_form_editable
.oe_form
@@ -2372,7 +2377,6 @@ $sheet-padding: 16px
th.oe_sortable div
position: relative
th.oe_sortable div:after
- float: right
margin-right: 6px
content: ""
margin-top: 7px
@@ -2381,11 +2385,13 @@ $sheet-padding: 16px
border-color: #000 transparent
visibility: hidden
th.sortup div:after
+ float: right
visibility: visible
@include opacity(0.6)
.oe_list_header_many2many_tags
min-width: 70px
th.sortdown div:after
+ float: right
border-bottom: none
border-left: 4px solid transparent
border-right: 4px solid transparent
diff --git a/addons/web/static/src/font/entypo-webfont.svg b/addons/web/static/src/font/entypo-webfont.svg
index c24d92adb5f..c24d92adb5f 100755..100644
--- a/addons/web/static/src/font/entypo-webfont.svg
+++ b/addons/web/static/src/font/entypo-webfont.svg
diff --git a/addons/web/static/src/font/mnmliconsv21-webfont.svg b/addons/web/static/src/font/mnmliconsv21-webfont.svg
index 34b20ff992f..34b20ff992f 100755..100644
--- a/addons/web/static/src/font/mnmliconsv21-webfont.svg
+++ b/addons/web/static/src/font/mnmliconsv21-webfont.svg
diff --git a/addons/web/static/src/img/accessories-archiver.png b/addons/web/static/src/img/accessories-archiver.png
index 8bcbe4566bc..0d6c249c652 100644
--- a/addons/web/static/src/img/accessories-archiver.png
+++ b/addons/web/static/src/img/accessories-archiver.png
Binary files differ
diff --git a/addons/web/static/src/img/add-shortcut.png b/addons/web/static/src/img/add-shortcut.png
index bcc0a09eb45..07b8ed40207 100644
--- a/addons/web/static/src/img/add-shortcut.png
+++ b/addons/web/static/src/img/add-shortcut.png
Binary files differ
diff --git a/addons/web/static/src/img/attachments-close.png b/addons/web/static/src/img/attachments-close.png
index 14d645534b8..2633d7142fe 100644
--- a/addons/web/static/src/img/attachments-close.png
+++ b/addons/web/static/src/img/attachments-close.png
Binary files differ
diff --git a/addons/web/static/src/img/db.png b/addons/web/static/src/img/db.png
index 83e42df26b3..d573d1d395b 100644
--- a/addons/web/static/src/img/db.png
+++ b/addons/web/static/src/img/db.png
Binary files differ
diff --git a/addons/web/static/src/img/down-arrow.png b/addons/web/static/src/img/down-arrow.png
index b1288e52682..0f473e13e84 100644
--- a/addons/web/static/src/img/down-arrow.png
+++ b/addons/web/static/src/img/down-arrow.png
Binary files differ
diff --git a/addons/web/static/src/img/form_sheetbg.png b/addons/web/static/src/img/form_sheetbg.png
index d54b6302d5a..f7eec72b0d6 100644
--- a/addons/web/static/src/img/form_sheetbg.png
+++ b/addons/web/static/src/img/form_sheetbg.png
Binary files differ
diff --git a/addons/web/static/src/img/form_steps.png b/addons/web/static/src/img/form_steps.png
index 0485c5977aa..84b1a0a459d 100644
--- a/addons/web/static/src/img/form_steps.png
+++ b/addons/web/static/src/img/form_steps.png
Binary files differ
diff --git a/addons/web/static/src/img/graph_background.png b/addons/web/static/src/img/graph_background.png
index 530312b20bb..0c7abf0faef 100644
--- a/addons/web/static/src/img/graph_background.png
+++ b/addons/web/static/src/img/graph_background.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_ADD.png b/addons/web/static/src/img/icons/STOCK_ADD.png
index 70612c181c6..00a001da01d 100644
--- a/addons/web/static/src/img/icons/STOCK_ADD.png
+++ b/addons/web/static/src/img/icons/STOCK_ADD.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_APPLY.png b/addons/web/static/src/img/icons/STOCK_APPLY.png
index 116f2e433bb..4859a588742 100644
--- a/addons/web/static/src/img/icons/STOCK_APPLY.png
+++ b/addons/web/static/src/img/icons/STOCK_APPLY.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_CLOSE.png b/addons/web/static/src/img/icons/STOCK_CLOSE.png
index 4966974e178..9776fd0ecf4 100644
--- a/addons/web/static/src/img/icons/STOCK_CLOSE.png
+++ b/addons/web/static/src/img/icons/STOCK_CLOSE.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png
index 232d54f8f3b..3f813c47444 100644
--- a/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png
+++ b/addons/web/static/src/img/icons/STOCK_COLOR_PICKER.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png b/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png
index 07f90537f82..13985d17782 100644
--- a/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png
+++ b/addons/web/static/src/img/icons/STOCK_DIRECTORY_MENU.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_DND.png b/addons/web/static/src/img/icons/STOCK_DND.png
index bf3b8068397..5f026f625aa 100644
--- a/addons/web/static/src/img/icons/STOCK_DND.png
+++ b/addons/web/static/src/img/icons/STOCK_DND.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_FLOPPY.png b/addons/web/static/src/img/icons/STOCK_FLOPPY.png
index 7d8209cfb6f..427a762c141 100644
--- a/addons/web/static/src/img/icons/STOCK_FLOPPY.png
+++ b/addons/web/static/src/img/icons/STOCK_FLOPPY.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png
index 3d00e36d696..7b9c900ca3a 100644
--- a/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_FIRST.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png
index 227a91e5157..2812a0f4b90 100644
--- a/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png
+++ b/addons/web/static/src/img/icons/STOCK_GOTO_TOP.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_GO_BACK.png b/addons/web/static/src/img/icons/STOCK_GO_BACK.png
index 568117dc170..482ca6285f7 100644
--- a/addons/web/static/src/img/icons/STOCK_GO_BACK.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_BACK.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_GO_UP.png b/addons/web/static/src/img/icons/STOCK_GO_UP.png
index 84f96fdfca2..e2e15b0b3da 100644
--- a/addons/web/static/src/img/icons/STOCK_GO_UP.png
+++ b/addons/web/static/src/img/icons/STOCK_GO_UP.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_ITALIC.png b/addons/web/static/src/img/icons/STOCK_ITALIC.png
index 26c57226a31..c7900917cea 100644
--- a/addons/web/static/src/img/icons/STOCK_ITALIC.png
+++ b/addons/web/static/src/img/icons/STOCK_ITALIC.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
index 15bc8ab7d7b..027fef93845 100644
--- a/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
+++ b/addons/web/static/src/img/icons/STOCK_LEAVE_FULLSCREEN.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
index e5e198fbb79..8eecedc7d31 100644
--- a/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_FORWARD.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
index 6721994eb8d..f6194f3a83b 100644
--- a/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_PAUSE.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png
index b0832712c81..b316d2b3bcb 100644
--- a/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_PLAY.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png
index 9c22d9e2778..127d1035b13 100644
--- a/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_REWIND.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png
index 128cc2313ec..1ffe15c070f 100644
--- a/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png
+++ b/addons/web/static/src/img/icons/STOCK_MEDIA_STOP.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_NO.png b/addons/web/static/src/img/icons/STOCK_NO.png
index 047ddcd9289..77d48887cde 100644
--- a/addons/web/static/src/img/icons/STOCK_NO.png
+++ b/addons/web/static/src/img/icons/STOCK_NO.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_OK.png b/addons/web/static/src/img/icons/STOCK_OK.png
index 7755b8769f0..ad4451e3f11 100644
--- a/addons/web/static/src/img/icons/STOCK_OK.png
+++ b/addons/web/static/src/img/icons/STOCK_OK.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_QUIT.png b/addons/web/static/src/img/icons/STOCK_QUIT.png
index 50b5144660b..7556ae406fc 100644
--- a/addons/web/static/src/img/icons/STOCK_QUIT.png
+++ b/addons/web/static/src/img/icons/STOCK_QUIT.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_REDO.png b/addons/web/static/src/img/icons/STOCK_REDO.png
index 54055b3966d..da2138bb97b 100644
--- a/addons/web/static/src/img/icons/STOCK_REDO.png
+++ b/addons/web/static/src/img/icons/STOCK_REDO.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_REMOVE.png b/addons/web/static/src/img/icons/STOCK_REMOVE.png
index c2b6e915f77..fb95ab2361e 100644
--- a/addons/web/static/src/img/icons/STOCK_REMOVE.png
+++ b/addons/web/static/src/img/icons/STOCK_REMOVE.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png
index 1c11f214622..a773530cdcb 100644
--- a/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png
+++ b/addons/web/static/src/img/icons/STOCK_STRIKETHROUGH.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_UNDERLINE.png b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png
index 7dbb5d7e60a..92b8c9ff153 100644
--- a/addons/web/static/src/img/icons/STOCK_UNDERLINE.png
+++ b/addons/web/static/src/img/icons/STOCK_UNDERLINE.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_UNDO.png b/addons/web/static/src/img/icons/STOCK_UNDO.png
index 7a50de0c61e..26d284e9ac8 100644
--- a/addons/web/static/src/img/icons/STOCK_UNDO.png
+++ b/addons/web/static/src/img/icons/STOCK_UNDO.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/STOCK_YES.png b/addons/web/static/src/img/icons/STOCK_YES.png
index 01fb373c251..15e51054233 100644
--- a/addons/web/static/src/img/icons/STOCK_YES.png
+++ b/addons/web/static/src/img/icons/STOCK_YES.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/color-picker.png b/addons/web/static/src/img/icons/color-picker.png
index 765294c6bdd..d22c393631e 100644
--- a/addons/web/static/src/img/icons/color-picker.png
+++ b/addons/web/static/src/img/icons/color-picker.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-add.png b/addons/web/static/src/img/icons/gtk-add.png
index 70612c181c6..00a001da01d 100644
--- a/addons/web/static/src/img/icons/gtk-add.png
+++ b/addons/web/static/src/img/icons/gtk-add.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-apply.png b/addons/web/static/src/img/icons/gtk-apply.png
index 116f2e433bb..4859a588742 100644
--- a/addons/web/static/src/img/icons/gtk-apply.png
+++ b/addons/web/static/src/img/icons/gtk-apply.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-close.png b/addons/web/static/src/img/icons/gtk-close.png
index 4966974e178..9776fd0ecf4 100644
--- a/addons/web/static/src/img/icons/gtk-close.png
+++ b/addons/web/static/src/img/icons/gtk-close.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-color-picker.png b/addons/web/static/src/img/icons/gtk-color-picker.png
index 232d54f8f3b..3f813c47444 100644
--- a/addons/web/static/src/img/icons/gtk-color-picker.png
+++ b/addons/web/static/src/img/icons/gtk-color-picker.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-dnd.png b/addons/web/static/src/img/icons/gtk-dnd.png
index bf3b8068397..5f026f625aa 100644
--- a/addons/web/static/src/img/icons/gtk-dnd.png
+++ b/addons/web/static/src/img/icons/gtk-dnd.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-floppy.png b/addons/web/static/src/img/icons/gtk-floppy.png
index 7d8209cfb6f..427a762c141 100644
--- a/addons/web/static/src/img/icons/gtk-floppy.png
+++ b/addons/web/static/src/img/icons/gtk-floppy.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-go-back.png b/addons/web/static/src/img/icons/gtk-go-back.png
index 568117dc170..482ca6285f7 100644
--- a/addons/web/static/src/img/icons/gtk-go-back.png
+++ b/addons/web/static/src/img/icons/gtk-go-back.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-go-up.png b/addons/web/static/src/img/icons/gtk-go-up.png
index 84f96fdfca2..e2e15b0b3da 100644
--- a/addons/web/static/src/img/icons/gtk-go-up.png
+++ b/addons/web/static/src/img/icons/gtk-go-up.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-goto-first.png b/addons/web/static/src/img/icons/gtk-goto-first.png
index 3d00e36d696..7b9c900ca3a 100644
--- a/addons/web/static/src/img/icons/gtk-goto-first.png
+++ b/addons/web/static/src/img/icons/gtk-goto-first.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-goto-top.png b/addons/web/static/src/img/icons/gtk-goto-top.png
index 227a91e5157..2812a0f4b90 100644
--- a/addons/web/static/src/img/icons/gtk-goto-top.png
+++ b/addons/web/static/src/img/icons/gtk-goto-top.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-italic.png b/addons/web/static/src/img/icons/gtk-italic.png
index 26c57226a31..c7900917cea 100644
--- a/addons/web/static/src/img/icons/gtk-italic.png
+++ b/addons/web/static/src/img/icons/gtk-italic.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-leave-fullscreen.png b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png
index 15bc8ab7d7b..027fef93845 100644
--- a/addons/web/static/src/img/icons/gtk-leave-fullscreen.png
+++ b/addons/web/static/src/img/icons/gtk-leave-fullscreen.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-forward.png b/addons/web/static/src/img/icons/gtk-media-forward.png
index e5e198fbb79..8eecedc7d31 100644
--- a/addons/web/static/src/img/icons/gtk-media-forward.png
+++ b/addons/web/static/src/img/icons/gtk-media-forward.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-pause.png b/addons/web/static/src/img/icons/gtk-media-pause.png
index 6721994eb8d..f6194f3a83b 100644
--- a/addons/web/static/src/img/icons/gtk-media-pause.png
+++ b/addons/web/static/src/img/icons/gtk-media-pause.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-play.png b/addons/web/static/src/img/icons/gtk-media-play.png
index b0832712c81..b316d2b3bcb 100644
--- a/addons/web/static/src/img/icons/gtk-media-play.png
+++ b/addons/web/static/src/img/icons/gtk-media-play.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-rewind.png b/addons/web/static/src/img/icons/gtk-media-rewind.png
index 9c22d9e2778..127d1035b13 100644
--- a/addons/web/static/src/img/icons/gtk-media-rewind.png
+++ b/addons/web/static/src/img/icons/gtk-media-rewind.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-media-stop.png b/addons/web/static/src/img/icons/gtk-media-stop.png
index 128cc2313ec..1ffe15c070f 100644
--- a/addons/web/static/src/img/icons/gtk-media-stop.png
+++ b/addons/web/static/src/img/icons/gtk-media-stop.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-no.png b/addons/web/static/src/img/icons/gtk-no.png
index 047ddcd9289..77d48887cde 100644
--- a/addons/web/static/src/img/icons/gtk-no.png
+++ b/addons/web/static/src/img/icons/gtk-no.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-ok.png b/addons/web/static/src/img/icons/gtk-ok.png
index 7755b8769f0..ad4451e3f11 100644
--- a/addons/web/static/src/img/icons/gtk-ok.png
+++ b/addons/web/static/src/img/icons/gtk-ok.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-quit.png b/addons/web/static/src/img/icons/gtk-quit.png
index 50b5144660b..7556ae406fc 100644
--- a/addons/web/static/src/img/icons/gtk-quit.png
+++ b/addons/web/static/src/img/icons/gtk-quit.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-redo.png b/addons/web/static/src/img/icons/gtk-redo.png
index 54055b3966d..da2138bb97b 100644
--- a/addons/web/static/src/img/icons/gtk-redo.png
+++ b/addons/web/static/src/img/icons/gtk-redo.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-remove.png b/addons/web/static/src/img/icons/gtk-remove.png
index c2b6e915f77..fb95ab2361e 100644
--- a/addons/web/static/src/img/icons/gtk-remove.png
+++ b/addons/web/static/src/img/icons/gtk-remove.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-strikethrough.png b/addons/web/static/src/img/icons/gtk-strikethrough.png
index 1c11f214622..a773530cdcb 100644
--- a/addons/web/static/src/img/icons/gtk-strikethrough.png
+++ b/addons/web/static/src/img/icons/gtk-strikethrough.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-underline.png b/addons/web/static/src/img/icons/gtk-underline.png
index 7dbb5d7e60a..92b8c9ff153 100644
--- a/addons/web/static/src/img/icons/gtk-underline.png
+++ b/addons/web/static/src/img/icons/gtk-underline.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-undo.png b/addons/web/static/src/img/icons/gtk-undo.png
index 7a50de0c61e..26d284e9ac8 100644
--- a/addons/web/static/src/img/icons/gtk-undo.png
+++ b/addons/web/static/src/img/icons/gtk-undo.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/gtk-yes.png b/addons/web/static/src/img/icons/gtk-yes.png
index 01fb373c251..15e51054233 100644
--- a/addons/web/static/src/img/icons/gtk-yes.png
+++ b/addons/web/static/src/img/icons/gtk-yes.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/kanban-apply.png b/addons/web/static/src/img/icons/kanban-apply.png
index 02effd5f14c..e5fe4ee5f78 100644
--- a/addons/web/static/src/img/icons/kanban-apply.png
+++ b/addons/web/static/src/img/icons/kanban-apply.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/kanban-pause.png b/addons/web/static/src/img/icons/kanban-pause.png
index 9e9544ee178..ce2357ccfef 100644
--- a/addons/web/static/src/img/icons/kanban-pause.png
+++ b/addons/web/static/src/img/icons/kanban-pause.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/kanban-stop.png b/addons/web/static/src/img/icons/kanban-stop.png
index e1f98a26b59..da6839f2f8f 100644
--- a/addons/web/static/src/img/icons/kanban-stop.png
+++ b/addons/web/static/src/img/icons/kanban-stop.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/save-document.png b/addons/web/static/src/img/icons/save-document.png
index 8933ca0bed9..3e076aa91cb 100644
--- a/addons/web/static/src/img/icons/save-document.png
+++ b/addons/web/static/src/img/icons/save-document.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/star-off.png b/addons/web/static/src/img/icons/star-off.png
index 7cd0afd4f03..b999fb2e02f 100644
--- a/addons/web/static/src/img/icons/star-off.png
+++ b/addons/web/static/src/img/icons/star-off.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/star-on.png b/addons/web/static/src/img/icons/star-on.png
index 4f2295e1395..f6a9ec830d0 100644
--- a/addons/web/static/src/img/icons/star-on.png
+++ b/addons/web/static/src/img/icons/star-on.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock.png b/addons/web/static/src/img/icons/stock.png
index ca38181db90..762491f1e71 100644
--- a/addons/web/static/src/img/icons/stock.png
+++ b/addons/web/static/src/img/icons/stock.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/stock_calendar.png b/addons/web/static/src/img/icons/stock_calendar.png
index 99a1f3f9ef1..5fdccf561ba 100644
--- a/addons/web/static/src/img/icons/stock_calendar.png
+++ b/addons/web/static/src/img/icons/stock_calendar.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-accessories-archiver+.png b/addons/web/static/src/img/icons/terp-accessories-archiver+.png
index 14d6d02536e..899c6e54e83 100644
--- a/addons/web/static/src/img/icons/terp-accessories-archiver+.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver+.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png b/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png
index 024c8f692d8..173c6208133 100644
--- a/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver-minus.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-accessories-archiver.png b/addons/web/static/src/img/icons/terp-accessories-archiver.png
index 8bcbe4566bc..0d6c249c652 100644
--- a/addons/web/static/src/img/icons/terp-accessories-archiver.png
+++ b/addons/web/static/src/img/icons/terp-accessories-archiver.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-account.png b/addons/web/static/src/img/icons/terp-account.png
index 30dea82a105..01cc0c4e8b9 100644
--- a/addons/web/static/src/img/icons/terp-account.png
+++ b/addons/web/static/src/img/icons/terp-account.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-administration.png b/addons/web/static/src/img/icons/terp-administration.png
index ab129b2e4b3..8ff707ede02 100644
--- a/addons/web/static/src/img/icons/terp-administration.png
+++ b/addons/web/static/src/img/icons/terp-administration.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-calendar.png b/addons/web/static/src/img/icons/terp-calendar.png
index 37206565792..222e22c78d1 100644
--- a/addons/web/static/src/img/icons/terp-calendar.png
+++ b/addons/web/static/src/img/icons/terp-calendar.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-call-start.png b/addons/web/static/src/img/icons/terp-call-start.png
index 602a1cdd4b8..2128555419e 100644
--- a/addons/web/static/src/img/icons/terp-call-start.png
+++ b/addons/web/static/src/img/icons/terp-call-start.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-camera_test.png b/addons/web/static/src/img/icons/terp-camera_test.png
index e97e0416de3..7a127e7d350 100644
--- a/addons/web/static/src/img/icons/terp-camera_test.png
+++ b/addons/web/static/src/img/icons/terp-camera_test.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-crm.png b/addons/web/static/src/img/icons/terp-crm.png
index fdac61ca92d..3c86dd3b043 100644
--- a/addons/web/static/src/img/icons/terp-crm.png
+++ b/addons/web/static/src/img/icons/terp-crm.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-dialog-close.png b/addons/web/static/src/img/icons/terp-dialog-close.png
index 8f51ec05fd6..c65cb24871f 100644
--- a/addons/web/static/src/img/icons/terp-dialog-close.png
+++ b/addons/web/static/src/img/icons/terp-dialog-close.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-document-new.png b/addons/web/static/src/img/icons/terp-document-new.png
index 2815cbb403f..8ad4a78fe93 100644
--- a/addons/web/static/src/img/icons/terp-document-new.png
+++ b/addons/web/static/src/img/icons/terp-document-new.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-dolar.png b/addons/web/static/src/img/icons/terp-dolar.png
index bca7021c82f..03b37cfa0ed 100644
--- a/addons/web/static/src/img/icons/terp-dolar.png
+++ b/addons/web/static/src/img/icons/terp-dolar.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-dolar_ok!.png b/addons/web/static/src/img/icons/terp-dolar_ok!.png
index b1005aae7b9..e3cb9e17bcb 100644
--- a/addons/web/static/src/img/icons/terp-dolar_ok!.png
+++ b/addons/web/static/src/img/icons/terp-dolar_ok!.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-emblem-important.png b/addons/web/static/src/img/icons/terp-emblem-important.png
index a8321066abb..9b75ddb7c2e 100644
--- a/addons/web/static/src/img/icons/terp-emblem-important.png
+++ b/addons/web/static/src/img/icons/terp-emblem-important.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-folder-blue.png b/addons/web/static/src/img/icons/terp-folder-blue.png
index addc480d49a..1972448912b 100644
--- a/addons/web/static/src/img/icons/terp-folder-blue.png
+++ b/addons/web/static/src/img/icons/terp-folder-blue.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-folder-green.png b/addons/web/static/src/img/icons/terp-folder-green.png
index 206cd39603e..c1630414c78 100644
--- a/addons/web/static/src/img/icons/terp-folder-green.png
+++ b/addons/web/static/src/img/icons/terp-folder-green.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-folder-orange.png b/addons/web/static/src/img/icons/terp-folder-orange.png
index 726dbd7f00e..b401de6d04f 100644
--- a/addons/web/static/src/img/icons/terp-folder-orange.png
+++ b/addons/web/static/src/img/icons/terp-folder-orange.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-folder-violet.png b/addons/web/static/src/img/icons/terp-folder-violet.png
index c6f5cfb87ff..20e383a9967 100644
--- a/addons/web/static/src/img/icons/terp-folder-violet.png
+++ b/addons/web/static/src/img/icons/terp-folder-violet.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-folder-yellow.png b/addons/web/static/src/img/icons/terp-folder-yellow.png
index cd7295dcdd7..7cc7650e680 100644
--- a/addons/web/static/src/img/icons/terp-folder-yellow.png
+++ b/addons/web/static/src/img/icons/terp-folder-yellow.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-go-year.png b/addons/web/static/src/img/icons/terp-go-year.png
index f45efc9dd0c..b09bf94500a 100644
--- a/addons/web/static/src/img/icons/terp-go-year.png
+++ b/addons/web/static/src/img/icons/terp-go-year.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-graph.png b/addons/web/static/src/img/icons/terp-graph.png
index 30dea82a105..01cc0c4e8b9 100644
--- a/addons/web/static/src/img/icons/terp-graph.png
+++ b/addons/web/static/src/img/icons/terp-graph.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png b/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png
index a76138d2e0d..b9c77e11f10 100644
--- a/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png
+++ b/addons/web/static/src/img/icons/terp-gtk-go-back-ltr.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png b/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png
index 10d10b582fe..8e662b6291d 100644
--- a/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png
+++ b/addons/web/static/src/img/icons/terp-gtk-go-back-rtl.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png b/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png
index fa517749d10..4e9092ba03c 100644
--- a/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png
+++ b/addons/web/static/src/img/icons/terp-gtk-jump-to-ltr.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png b/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png
index 7b5785c4963..3c2db42dfde 100644
--- a/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png
+++ b/addons/web/static/src/img/icons/terp-gtk-jump-to-rtl.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-media-pause.png b/addons/web/static/src/img/icons/terp-gtk-media-pause.png
index 2896ad8e27f..3941af88653 100644
--- a/addons/web/static/src/img/icons/terp-gtk-media-pause.png
+++ b/addons/web/static/src/img/icons/terp-gtk-media-pause.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-gtk-select-all.png b/addons/web/static/src/img/icons/terp-gtk-select-all.png
index b71a6493791..d05a295ac62 100644
--- a/addons/web/static/src/img/icons/terp-gtk-select-all.png
+++ b/addons/web/static/src/img/icons/terp-gtk-select-all.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-hr.png b/addons/web/static/src/img/icons/terp-hr.png
index ba0241e6362..1e8eede30ca 100644
--- a/addons/web/static/src/img/icons/terp-hr.png
+++ b/addons/web/static/src/img/icons/terp-hr.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-mail-forward.png b/addons/web/static/src/img/icons/terp-mail-forward.png
index 3d4e694b6dc..637573d310b 100644
--- a/addons/web/static/src/img/icons/terp-mail-forward.png
+++ b/addons/web/static/src/img/icons/terp-mail-forward.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-mail_delete.png b/addons/web/static/src/img/icons/terp-mail_delete.png
index 90fb5239f02..b0b9e4ba691 100644
--- a/addons/web/static/src/img/icons/terp-mail_delete.png
+++ b/addons/web/static/src/img/icons/terp-mail_delete.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-marketing.png b/addons/web/static/src/img/icons/terp-marketing.png
index 1b04b599734..e3545242442 100644
--- a/addons/web/static/src/img/icons/terp-marketing.png
+++ b/addons/web/static/src/img/icons/terp-marketing.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-mrp.png b/addons/web/static/src/img/icons/terp-mrp.png
index c2b4ea31ec3..cd949c89213 100644
--- a/addons/web/static/src/img/icons/terp-mrp.png
+++ b/addons/web/static/src/img/icons/terp-mrp.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-partner.png b/addons/web/static/src/img/icons/terp-partner.png
index aab206a1d42..74b2414739e 100644
--- a/addons/web/static/src/img/icons/terp-partner.png
+++ b/addons/web/static/src/img/icons/terp-partner.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-personal.png b/addons/web/static/src/img/icons/terp-personal.png
index 0890c4d0e51..8e13350629b 100644
--- a/addons/web/static/src/img/icons/terp-personal.png
+++ b/addons/web/static/src/img/icons/terp-personal.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-product.png b/addons/web/static/src/img/icons/terp-product.png
index 99f58d95a8b..1009191c180 100644
--- a/addons/web/static/src/img/icons/terp-product.png
+++ b/addons/web/static/src/img/icons/terp-product.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-project.png b/addons/web/static/src/img/icons/terp-project.png
index cd95ae84e43..2686faba528 100644
--- a/addons/web/static/src/img/icons/terp-project.png
+++ b/addons/web/static/src/img/icons/terp-project.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-purchase.png b/addons/web/static/src/img/icons/terp-purchase.png
index 1e801f57485..3d5fcb67f4f 100644
--- a/addons/web/static/src/img/icons/terp-purchase.png
+++ b/addons/web/static/src/img/icons/terp-purchase.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-report.png b/addons/web/static/src/img/icons/terp-report.png
index ada36a2de24..6586ffcc501 100644
--- a/addons/web/static/src/img/icons/terp-report.png
+++ b/addons/web/static/src/img/icons/terp-report.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-sale.png b/addons/web/static/src/img/icons/terp-sale.png
index ba0241e6362..1e8eede30ca 100644
--- a/addons/web/static/src/img/icons/terp-sale.png
+++ b/addons/web/static/src/img/icons/terp-sale.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock.png b/addons/web/static/src/img/icons/terp-stock.png
index 0365dfdb8e1..fde0f52f28f 100644
--- a/addons/web/static/src/img/icons/terp-stock.png
+++ b/addons/web/static/src/img/icons/terp-stock.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock_align_left_24.png b/addons/web/static/src/img/icons/terp-stock_align_left_24.png
index 844367bb1a7..a5623e0873c 100644
--- a/addons/web/static/src/img/icons/terp-stock_align_left_24.png
+++ b/addons/web/static/src/img/icons/terp-stock_align_left_24.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png b/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png
index 0ffd95a740a..a31c9930bf9 100644
--- a/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png
+++ b/addons/web/static/src/img/icons/terp-stock_effects-object-colorize.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock_format-scientific.png b/addons/web/static/src/img/icons/terp-stock_format-scientific.png
index 01f83950804..5b180e871f3 100644
--- a/addons/web/static/src/img/icons/terp-stock_format-scientific.png
+++ b/addons/web/static/src/img/icons/terp-stock_format-scientific.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock_symbol-selection.png b/addons/web/static/src/img/icons/terp-stock_symbol-selection.png
index 5773be57c9b..56803afdcb6 100644
--- a/addons/web/static/src/img/icons/terp-stock_symbol-selection.png
+++ b/addons/web/static/src/img/icons/terp-stock_symbol-selection.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-stock_zoom.png b/addons/web/static/src/img/icons/terp-stock_zoom.png
index e96f05e5905..088c3b379b4 100644
--- a/addons/web/static/src/img/icons/terp-stock_zoom.png
+++ b/addons/web/static/src/img/icons/terp-stock_zoom.png
Binary files differ
diff --git a/addons/web/static/src/img/icons/terp-tools.png b/addons/web/static/src/img/icons/terp-tools.png
index 379f7617427..4a44ce58e69 100644
--- a/addons/web/static/src/img/icons/terp-tools.png
+++ b/addons/web/static/src/img/icons/terp-tools.png
Binary files differ
diff --git a/addons/web/static/src/img/iconset-a-help.png b/addons/web/static/src/img/iconset-a-help.png
index 4af5ac170d6..a9df2902ed3 100644
--- a/addons/web/static/src/img/iconset-a-help.png
+++ b/addons/web/static/src/img/iconset-a-help.png
Binary files differ
diff --git a/addons/web/static/src/img/iconset-b-remove.png b/addons/web/static/src/img/iconset-b-remove.png
index 497f03b4ceb..48eb9670641 100644
--- a/addons/web/static/src/img/iconset-b-remove.png
+++ b/addons/web/static/src/img/iconset-b-remove.png
Binary files differ
diff --git a/addons/web/static/src/img/logo.png b/addons/web/static/src/img/logo.png
index 8f1c5c6085f..231cc26379f 100644
--- a/addons/web/static/src/img/logo.png
+++ b/addons/web/static/src/img/logo.png
Binary files differ
diff --git a/addons/web/static/src/img/logo2.png b/addons/web/static/src/img/logo2.png
index aca5f4c60d8..6b32937328b 100644
--- a/addons/web/static/src/img/logo2.png
+++ b/addons/web/static/src/img/logo2.png
Binary files differ
diff --git a/addons/web/static/src/img/nologo.png b/addons/web/static/src/img/nologo.png
index 711269813a1..36ff0e1d16c 100644
--- a/addons/web/static/src/img/nologo.png
+++ b/addons/web/static/src/img/nologo.png
Binary files differ
diff --git a/addons/web/static/src/img/pager_first.png b/addons/web/static/src/img/pager_first.png
index 83074ed696f..8f9005bfe2f 100644
--- a/addons/web/static/src/img/pager_first.png
+++ b/addons/web/static/src/img/pager_first.png
Binary files differ
diff --git a/addons/web/static/src/img/pager_last.png b/addons/web/static/src/img/pager_last.png
index dedcede4b62..582eb9620a1 100644
--- a/addons/web/static/src/img/pager_last.png
+++ b/addons/web/static/src/img/pager_last.png
Binary files differ
diff --git a/addons/web/static/src/img/pager_next.png b/addons/web/static/src/img/pager_next.png
index 9b5e7090735..068fa1d980d 100644
--- a/addons/web/static/src/img/pager_next.png
+++ b/addons/web/static/src/img/pager_next.png
Binary files differ
diff --git a/addons/web/static/src/img/pager_previous.png b/addons/web/static/src/img/pager_previous.png
index 7134186008c..7cd2a0de240 100644
--- a/addons/web/static/src/img/pager_previous.png
+++ b/addons/web/static/src/img/pager_previous.png
Binary files differ
diff --git a/addons/web/static/src/img/partner.png b/addons/web/static/src/img/partner.png
index aab206a1d42..74b2414739e 100644
--- a/addons/web/static/src/img/partner.png
+++ b/addons/web/static/src/img/partner.png
Binary files differ
diff --git a/addons/web/static/src/img/placeholder.png b/addons/web/static/src/img/placeholder.png
index 25af75ee815..c2e345e82e5 100644
--- a/addons/web/static/src/img/placeholder.png
+++ b/addons/web/static/src/img/placeholder.png
Binary files differ
diff --git a/addons/web/static/src/img/product.png b/addons/web/static/src/img/product.png
index 99f58d95a8b..1009191c180 100644
--- a/addons/web/static/src/img/product.png
+++ b/addons/web/static/src/img/product.png
Binary files differ
diff --git a/addons/web/static/src/img/toggle-a-bg.png b/addons/web/static/src/img/toggle-a-bg.png
index b9837ab233e..207a348725b 100644
--- a/addons/web/static/src/img/toggle-a-bg.png
+++ b/addons/web/static/src/img/toggle-a-bg.png
Binary files differ
diff --git a/addons/web/static/src/img/ui/field_calendar.png b/addons/web/static/src/img/ui/field_calendar.png
index 99a1f3f9ef1..5fdccf561ba 100644
--- a/addons/web/static/src/img/ui/field_calendar.png
+++ b/addons/web/static/src/img/ui/field_calendar.png
Binary files differ
diff --git a/addons/web/static/src/img/ui/group-expanded.png b/addons/web/static/src/img/ui/group-expanded.png
index 3f16536e123..ca76157826a 100644
--- a/addons/web/static/src/img/ui/group-expanded.png
+++ b/addons/web/static/src/img/ui/group-expanded.png
Binary files differ
diff --git a/addons/web/static/src/img/ui/group-folded.png b/addons/web/static/src/img/ui/group-folded.png
index 2909b0c268f..5fc4e533d1f 100644
--- a/addons/web/static/src/img/ui/group-folded.png
+++ b/addons/web/static/src/img/ui/group-folded.png
Binary files differ
diff --git a/addons/web/static/src/img/user_menu_avatar.png b/addons/web/static/src/img/user_menu_avatar.png
index a2c70ea7d49..f78ea0203d9 100644
--- a/addons/web/static/src/img/user_menu_avatar.png
+++ b/addons/web/static/src/img/user_menu_avatar.png
Binary files differ
diff --git a/addons/web/static/src/img/view_empty_arrow.png b/addons/web/static/src/img/view_empty_arrow.png
index 99561e3abf3..dc2b88a3c82 100644
--- a/addons/web/static/src/img/view_empty_arrow.png
+++ b/addons/web/static/src/img/view_empty_arrow.png
Binary files differ
diff --git a/addons/web/static/src/img/warning.png b/addons/web/static/src/img/warning.png
index cbfb25a89cd..85c1718e877 100644
--- a/addons/web/static/src/img/warning.png
+++ b/addons/web/static/src/img/warning.png
Binary files differ
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js
index 884dc41a9f9..0c73a9b8a3c 100644
--- a/addons/web/static/src/js/chrome.js
+++ b/addons/web/static/src/js/chrome.js
@@ -430,7 +430,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
var fetch_langs = this.rpc("/web/session/get_lang_list", {}).done(function(result) {
self.lang_list = result;
});
- return $.when(fetch_db, fetch_langs).done(self.do_render);
+ return $.when(fetch_db, fetch_langs).always(self.do_render);
},
do_render: function() {
var self = this;
@@ -950,7 +950,7 @@ instance.web.Menu = instance.web.Widget.extend({
},
do_load_needaction: function (menu_ids) {
var self = this;
- menu_ids = _.reject(menu_ids, _.isEmpty);
+ menu_ids = _.compact(menu_ids);
if (_.isEmpty(menu_ids)) {
return $.when();
}
@@ -1184,6 +1184,25 @@ instance.web.UserMenu = instance.web.Widget.extend({
});
}
},
+ on_menu_account: function() {
+ var self = this;
+ if (!this.getParent().has_uncommitted_changes()) {
+ var P = new instance.web.Model('ir.config_parameter');
+ P.call('get_param', ['database.uuid']).then(function(dbuuid) {
+ var state = {
+ 'd': instance.session.db,
+ 'u': window.location.protocol + '//' + window.location.host,
+ };
+ var params = {
+ response_type: 'token',
+ client_id: dbuuid || '',
+ state: JSON.stringify(state),
+ scope: 'userinfo',
+ };
+ instance.web.redirect('https://accounts.openerp.com/oauth2/auth?'+$.param(params));
+ });
+ }
+ },
on_menu_about: function() {
var self = this;
self.rpc("/web/webclient/version_info", {}).done(function(res) {
diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js
index dedb4a49710..6fc837333b6 100644
--- a/addons/web/static/src/js/coresetup.js
+++ b/addons/web/static/src/js/coresetup.js
@@ -555,19 +555,19 @@ instance.web.qweb.default_dict = {
instance.web.qweb.preprocess_node = function() {
// Note that 'this' is the Qweb Node
switch (this.node.nodeType) {
- case 3:
- case 4:
+ case Node.TEXT_NODE:
+ case Node.CDATA_SECTION_NODE:
// Text and CDATAs
var translation = this.node.parentNode.attributes['t-translation'];
if (translation && translation.value === 'off') {
return;
}
- var match = /^(\s*)(.+?)(\s*)$/.exec(this.node.data);
+ var match = /^(\s*)([\s\S]+?)(\s*)$/.exec(this.node.data);
if (match) {
this.node.data = match[1] + instance.web._t(match[2]) + match[3];
}
break;
- case 1:
+ case Node.ELEMENT_NODE:
// Element
var attr, attrs = ['label', 'title', 'alt', 'placeholder'];
while (attr = attrs.pop()) {
diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js
index f1b043bacf9..679afe77bcd 100644
--- a/addons/web/static/src/js/data.js
+++ b/addons/web/static/src/js/data.js
@@ -112,24 +112,27 @@ instance.web.Query = instance.web.Class.extend({
* @returns {jQuery.Deferred<Array<openerp.web.QueryGroup>> | null}
*/
group_by: function (grouping) {
- if (grouping === undefined) {
- return null;
+ var ctx = instance.web.pyeval.eval(
+ 'context', this._model.context(this._context));
+
+ // undefined passed in explicitly (!)
+ if (_.isUndefined(grouping)) {
+ grouping = [];
}
if (!(grouping instanceof Array)) {
grouping = _.toArray(arguments);
}
- if (_.isEmpty(grouping)) { return null; }
+ if (_.isEmpty(grouping) && !ctx['group_by_no_leaf']) {
+ return null;
+ }
var self = this;
-
- var ctx = instance.web.pyeval.eval(
- 'context', this._model.context(this._context));
return this._model.call('read_group', {
groupby: grouping,
fields: _.uniq(grouping.concat(this._fields || [])),
domain: this._model.domain(this._filter),
- context: this._model.context(this._context),
+ context: ctx,
offset: this._offset,
limit: this._limit,
orderby: instance.web.serialize_sort(this._order_by) || false
@@ -325,7 +328,7 @@ instance.web.Model = instance.web.Class.extend({
* Fetches the model's domain, combined with the provided domain if any
*
* @param {Array} [domain] to combine with the model's internal domain
- * @returns The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain
+ * @returns {instance.web.CompoundDomain} The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain
*/
domain: function (domain) {
if (!domain) { return this._domain; }
@@ -337,7 +340,7 @@ instance.web.Model = instance.web.Class.extend({
* combined with the provided context if any
*
* @param {Object} [context] to combine with the model's internal context
- * @returns The union of the user's context and the model's internal context, as well as the provided context if any. In that order.
+ * @returns {instance.web.CompoundContext} The union of the user's context and the model's internal context, as well as the provided context if any. In that order.
*/
context: function (context) {
return new instance.web.CompoundContext(
@@ -487,7 +490,12 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin,
* @returns {$.Deferred}
*/
create: function(data, options) {
- return this._model.call('create', [data], {context: this.get_context()});
+ var self = this;
+ return this._model.call('create', [data], {
+ context: this.get_context()
+ }).done(function () {
+ self.trigger('dataset_changed', data, options)
+ });
},
/**
* Saves the provided data in an existing db record
@@ -502,7 +510,12 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin,
*/
write: function (id, data, options) {
options = options || {};
- return this._model.call('write', [[id], data], {context: this.get_context(options.context)}).done(this.trigger('dataset_changed', id, data, options));
+ var self = this;
+ return this._model.call('write', [[id], data], {
+ context: this.get_context(options.context)
+ }).done(function () {
+ self.trigger('dataset_changed', id, data, options)
+ });
},
/**
* Deletes an existing record from the database
@@ -510,7 +523,12 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin,
* @param {Number|String} ids identifier of the record to delete
*/
unlink: function(ids) {
- return this._model.call('unlink', [ids], {context: this.get_context()}).done(this.trigger('dataset_changed', ids));
+ var self = this;
+ return this._model.call('unlink', [ids], {
+ context: this.get_context()
+ }).done(function () {
+ self.trigger('dataset_changed', ids)
+ });
},
/**
* Calls an arbitrary RPC method
@@ -604,6 +622,13 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin,
alter_ids: function(n_ids) {
this.ids = n_ids;
},
+ remove_ids: function (ids) {
+ this.alter_ids(_(this.ids).difference(ids));
+ },
+ add_ids: function(ids, at) {
+ var args = [at, 0].concat(_.difference(ids, this.ids));
+ this.ids.splice.apply(this.ids, args);
+ },
/**
* Resequence records.
*
@@ -701,22 +726,28 @@ instance.web.DataSetSearch = instance.web.DataSet.extend({
get_domain: function (other_domain) {
this._model.domain(other_domain);
},
+ alter_ids: function (ids) {
+ this._super(ids);
+ if (this.index !== null && this.index >= this.ids.length) {
+ this.index = this.ids.length > 0 ? this.ids.length - 1 : 0;
+ }
+ },
+ remove_ids: function (ids) {
+ var before = this.ids.length;
+ this._super(ids);
+ if (this._length) {
+ this._length -= (before - this.ids.length);
+ }
+ },
unlink: function(ids, callback, error_callback) {
var self = this;
return this._super(ids).done(function(result) {
- self.ids = _(self.ids).difference(ids);
- if (self._length) {
- self._length -= 1;
- }
- if (self.index !== null) {
- self.index = self.index <= self.ids.length - 1 ?
- self.index : (self.ids.length > 0 ? self.ids.length -1 : 0);
- }
+ self.remove_ids( ids);
self.trigger("dataset_changed", ids, callback, error_callback);
});
},
size: function () {
- if (this._length !== undefined) {
+ if (this._length != null) {
return this._length;
}
return this._super();
diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js
index e38d21d1cd2..fb5e391effd 100644
--- a/addons/web/static/src/js/data_export.js
+++ b/addons/web/static/src/js/data_export.js
@@ -4,15 +4,34 @@ var QWeb = instance.web.qweb,
instance.web.DataExport = instance.web.Dialog.extend({
template: 'ExportTreeView',
dialog_title: {toString: function () { return _t("Export Data"); }},
+ events: {
+ 'click #add_field': function () {
+ var self = this;
+ this.$('#field-tree-structure tr.ui-selected')
+ .removeClass('ui-selected')
+ .find('a').each(function () {
+ var id = $(this).attr('id').split('-')[1];
+ var string = $(this).attr('string');
+ self.add_field(id, string);
+ });
+ },
+ 'click #remove_field': function () {
+ this.$('#fields_list option:selected').remove();
+ },
+ 'click #remove_all_field': function () {
+ this.$('#fields_list').empty();
+ },
+ 'click #export_new_list': 'on_show_save_list',
+ },
init: function(parent, dataset) {
var self = this;
- options = {
- buttons : [
- {text: _t("Close"), click: function() { self.close(); }},
- {text: _t("Export To File"), click: function() { self.on_click_export_data(); }}
+ var options = {
+ buttons: [
+ {text: _t("Close"), click: function () { self.close(); }},
+ {text: _t("Export To File"), click: function () { self.on_click_export_data(); }}
],
- close: function(event, ui){ self.close();}
- }
+ close: function () { self.close();}
+ };
this._super(parent, options);
this.records = {};
this.dataset = dataset;
@@ -23,24 +42,6 @@ instance.web.DataExport = instance.web.Dialog.extend({
var self = this;
this._super.apply(this, arguments);
self.$el.removeClass('ui-dialog-content ui-widget-content');
- self.$el.find('#add_field').click(function() {
- if ($('#field-tree-structure tr.ui-selected')) {
- var fld = self.$el.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.$el.find('#field-tree-structure tr').removeClass('ui-selected');
- }
- });
- self.$el.find('#remove_field').click(function() {
- self.$el.find('#fields_list option:selected').remove();
- });
- self.$el.find('#remove_all_field').click(function() {
- self.$el.find('#fields_list').empty();
- });
- this.$el.find('#export_new_list').click(this.on_show_save_list);
var got_fields = new $.Deferred();
this.$el.find('#import_compat').change(function() {
@@ -49,7 +50,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
var import_comp = self.$el.find("#import_compat").val();
self.rpc("/web/export/get_fields", {
model: self.dataset.model,
- import_compat: Boolean(import_comp)
+ import_compat: !!import_comp,
}).done(function (records) {
got_fields.resolve();
self.on_show_data(records);
@@ -79,7 +80,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
var self = this;
if (self.$el.find('#saved_export_list').is(':hidden')) {
self.$el.find('#ExistsExportList').show();
- return;
+ return $.when();
}
return this.exports.read_slice(['name'], {
domain: [['resource', '=', this.dataset.model]]
@@ -192,7 +193,6 @@ instance.web.DataExport = instance.web.Dialog.extend({
},
on_show_data: function(result, after) {
var self = this;
- var imp_cmpt = Boolean(self.$el.find("#import_compat").val());
if (after) {
var current_tr = self.$el.find("tr[id='treerow-" + after + "']");
@@ -220,15 +220,16 @@ instance.web.DataExport = instance.web.Dialog.extend({
frst_click = self.$el.find("tr[id^='treerow-']")[self.row_index-1];
$(frst_click).addClass("ui-selected");
} else {
+ var i;
if (this.rowIndex >=self.row_index) {
- for (var i = (self.row_index-1); i < this.rowIndex; i++) {
+ for (i = (self.row_index-1); i < this.rowIndex; i++) {
scnd_click = self.$el.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--) {
+ for (i = (self.row_index-1); i >= (this.rowIndex-1); i--) {
scnd_click = self.$el.find("tr[id^='treerow-']")[i];
if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) {
$(scnd_click).addClass("ui-selected");
@@ -263,6 +264,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
self.$el.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 };
+ var elem;
switch (keyCode) {
case arrow.left:
if ($(this).hasClass('open')) {
@@ -275,7 +277,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
}
break;
case arrow.up:
- var elem = this;
+ elem = this;
$(elem).removeClass("ui-selected");
while (!$(elem).prev().is(":visible")) {
elem = $(elem).prev();
@@ -286,7 +288,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
$(elem).prev().find('a').focus();
break;
case arrow.down:
- var elem = this;
+ elem = this;
$(elem).removeClass("ui-selected");
while(!$(elem).next().is(":visible")) {
elem = $(elem).next();
@@ -353,14 +355,13 @@ instance.web.DataExport = instance.web.Dialog.extend({
}
},
get_fields: function() {
- var export_field = [];
- this.$el.find("#fields_list option").each(function() {
- export_field.push($(this).val());
- });
- if (!export_field.length) {
+ var export_fields = this.$("#fields_list option").map(function() {
+ return $(this).val();
+ }).get();
+ if (!export_fields.length) {
alert(_t("Please select fields to save export list..."));
}
- return export_field;
+ return export_fields;
},
on_click_export_data: function() {
var self = this;
@@ -374,21 +375,24 @@ instance.web.DataExport = instance.web.Dialog.extend({
alert(_t("Please select fields to export..."));
return;
}
-
exported_fields.unshift({name: 'id', label: 'External ID'});
+
var export_format = this.$el.find("#export_format").val();
+ var ids_to_export = this.$('#export_selection_only').prop('checked')
+ ? this.getParent().get_selected_ids()
+ : this.dataset.ids;
+
instance.web.blockUI();
this.session.get_file({
url: '/web/export/' + export_format,
data: {data: JSON.stringify({
model: this.dataset.model,
fields: exported_fields,
- ids: this.dataset.ids,
+ ids: ids_to_export,
domain: this.dataset.domain,
- import_compat: Boolean(
- this.$el.find("#import_compat").val())
+ import_compat: !!this.$el.find("#import_compat").val(),
})},
- complete: instance.web.unblockUI
+ complete: instance.web.unblockUI,
});
},
close: function() {
diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js
index f5449ed8bba..cef92ccf293 100644
--- a/addons/web/static/src/js/search.js
+++ b/addons/web/static/src/js/search.js
@@ -131,6 +131,7 @@ my.InputView = instance.web.Widget.extend({
paste: 'onPaste',
},
getSelection: function () {
+ this.el.normalize();
// get Text node
var root = this.el.childNodes[0];
if (!root || !root.textContent) {
@@ -139,6 +140,16 @@ my.InputView = instance.web.Widget.extend({
return {start: 0, end: 0};
}
var range = window.getSelection().getRangeAt(0);
+ // In Firefox, depending on the way text is selected (drag, double- or
+ // triple-click) the range may start or end on the parent of the
+ // selected text node‽ Check for this condition and fixup the range
+ // note: apparently with C-a this can go even higher?
+ if (range.startContainer === this.el && range.startOffset === 0) {
+ range.setStart(root, 0);
+ }
+ if (range.endContainer === this.el && range.endOffset === 1) {
+ range.setEnd(root, root.length)
+ }
assert(range.startContainer === root,
"selection should be in the input view");
assert(range.endContainer === root,
@@ -149,6 +160,7 @@ my.InputView = instance.web.Widget.extend({
}
},
onKeydown: function (e) {
+ this.el.normalize();
var sel;
switch (e.which) {
// Do not insert newline, but let it bubble so searchview can use it
@@ -186,6 +198,7 @@ my.InputView = instance.web.Widget.extend({
}
},
setCursorAtEnd: function () {
+ this.el.normalize();
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
@@ -196,13 +209,14 @@ my.InputView = instance.web.Widget.extend({
// from about half the link to half the text, paste in search box then
// hit the left arrow key, getSelection would blow up).
//
- // Explicitly selecting only the inner text node (only child node at
- // this point, though maybe we should assert that) avoiids the issue
+ // Explicitly selecting only the inner text node (only child node
+ // since we've normalized the parent) avoids the issue
range.selectNode(this.el.childNodes[0]);
range.collapse(false);
sel.addRange(range);
},
onPaste: function () {
+ this.el.normalize();
// In MSIE and Webkit, it is possible to get various representations of
// the clipboard data at this point e.g.
// window.clipboardData.getData('Text') and
@@ -224,6 +238,7 @@ my.InputView = instance.web.Widget.extend({
var data = this.$el.text();
// paste raw text back in
this.$el.empty().text(data);
+ this.el.normalize();
// Set the cursor at the end of the text, so the cursor is not lost
// in some kind of error-spawning limbo.
this.setCursorAtEnd();
@@ -326,7 +341,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
}
},
'autocompleteopen': function () {
- this.$el.autocomplete('widget').css('z-index', 3);
+ this.$el.autocomplete('widget').css('z-index', 1004);
},
},
/**
@@ -449,11 +464,12 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
var autocomplete = this.$el.autocomplete({
source: this.proxy('complete_global_search'),
select: this.proxy('select_completion'),
+ search: function () { self.$el.autocomplete('close'); },
focus: function (e) { e.preventDefault(); },
html: true,
autoFocus: true,
minLength: 1,
- delay: 0
+ delay: 0,
}).data('autocomplete');
// MonkeyPatch autocomplete instance
@@ -526,7 +542,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
var val = this.$el.val();
this.$el.val('');
var complete = this.$el.data('autocomplete');
- if ((val && complete.term === undefined) || complete.previous !== undefined) {
+ if ((val && complete.term === undefined) || complete.previous) {
throw new Error("new jquery.ui version altering implementation" +
" details relied on");
}
@@ -1039,7 +1055,9 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in
facet.values.each(function (v) {
var i = _(self.filters).indexOf(v.get('value'));
if (i === -1) { return; }
- $filters.eq(i).addClass('oe_selected');
+ $filters.filter(function () {
+ return Number($(this).data('index')) === i;
+ }).addClass('oe_selected');
});
},
/**
@@ -1129,7 +1147,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in
});
},
toggle_filter: function (e) {
- this.toggle(this.filters[$(e.target).index()]);
+ this.toggle(this.filters[Number($(e.target).data('index'))]);
},
toggle: function (filter) {
this.view.query.toggle(this.make_facet([this.make_value(filter)]));
@@ -1337,20 +1355,22 @@ instance.web.search.CharField = instance.web.search.Field.extend( /** @lends ins
}
});
instance.web.search.NumberField = instance.web.search.Field.extend(/** @lends instance.web.search.NumberField# */{
- value_from: function () {
- if (!this.$el.val()) {
- return null;
- }
- var val = this.parse(this.$el.val()),
- check = Number(this.$el.val());
- if (isNaN(val) || val !== check) {
- this.$el.addClass('error');
- throw new instance.web.search.Invalid(
- this.attrs.name, this.$el.val(), this.error_message);
- }
- this.$el.removeClass('error');
- return val;
- }
+ complete: function (value) {
+ var val = this.parse(value);
+ if (isNaN(val)) { return $.when(); }
+ var label = _.str.sprintf(
+ _t("Search %(field)s for: %(value)s"), {
+ field: '<em>' + this.attrs.string + '</em>',
+ value: '<strong>' + _.str.escapeHTML(value) + '</strong>'});
+ return $.when([{
+ label: label,
+ facet: {
+ category: this.attrs.string,
+ field: this,
+ values: [{label: value, value: val}]
+ }
+ }]);
+ },
});
/**
* @class
@@ -1888,7 +1908,7 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
this._super(parent);
this.fields = _(fields).chain()
.map(function(val, key) { return _.extend({}, val, {'name': key}); })
- .filter(function (field) { return !field.deprecated; })
+ .filter(function (field) { return !field.deprecated && (field.store === void 0 || field.store || field.fnct_search); })
.sortBy(function(field) {return field.string;})
.value();
this.attrs = {_: _, fields: this.fields, selected: null};
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 32e86d69bed..c87922937a2 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -2721,6 +2721,11 @@ instance.web.form.FieldTextHtml = instance.web.form.AbstractField.extend(instanc
self.internal_set_value(self.$textarea.val());
}
});
+ if (this.field.translate) {
+ var $img = $('<img class="oe_field_translate oe_input_icon" src="/web/static/src/img/icons/terp-translate.png" width="16" height="16" border="0"/>')
+ .click(this.on_translate);
+ this.$cleditor.$toolbar.append($img);
+ }
}
},
render_value: function() {
@@ -3241,6 +3246,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
self.display_value_backup = {};
self.render_value();
self.focus();
+ self.view.do_onchange(self);
});
});
@@ -4217,7 +4223,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in
ext: {
autocomplete: {
selectFromDropdown: function() {
- $(this).trigger('hideDropdown');
+ this.trigger('hideDropdown');
var index = Number(this.selectedSuggestionElement().children().children().data('index'));
var data = self.search_result[index];
if (data.id) {
@@ -4226,6 +4232,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in
ignore_blur = true;
data.action();
}
+ this.trigger('setSuggestions', {result : []});
},
},
tags: {
@@ -4960,7 +4967,7 @@ instance.web.form.SelectCreatePopup = instance.web.form.AbstractFormPopup.extend
this.searchview.hide();
}
if (this.view_list) {
- this.view_list.$el.hide();
+ this.view_list.do_hide();
}
this.setup_form_view();
},
diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js
index 840effa9221..4f58b002328 100644
--- a/addons/web/static/src/js/view_list.js
+++ b/addons/web/static/src/js/view_list.js
@@ -503,12 +503,9 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
var reloaded = $.Deferred();
this.$el.find('.oe_list_content').append(
this.groups.render(function () {
- if (self.dataset.index == null) {
- var has_one = false;
- self.records.each(function () { has_one = true; });
- if (has_one) {
+ if (self.dataset.index == null && self.records.length ||
+ self.dataset.index >= self.records.length) {
self.dataset.index = 0;
- }
}
self.compute_aggregates();
reloaded.resolve();
@@ -530,12 +527,13 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
return r.tag === 'field';
}), 'name')
).done(function (records) {
- if (!records[0]) {
+ var values = records[0];
+ if (!values) {
self.records.remove(record);
return;
}
- _(records[0]).each(function (value, key) {
- record.set(key, value, {silent: true});
+ _(_.keys(values)).each(function(key){
+ record.set(key, values[key], {silent: true});
});
record.trigger('change', record);
});
@@ -896,7 +894,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
this.record_callbacks = {
'remove': function (event, record) {
var id = record.get('id');
- self.dataset.remove_ids([id])
+ self.dataset.remove_ids([id]);
var $row = self.$current.children('[data-id=' + id + ']');
var index = $row.data('index');
$row.remove();
@@ -909,12 +907,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
throw new Error(_.str.sprintf( _t("Setting 'id' attribute on existing record %s"),
JSON.stringify(record.attributes) ));
}
- if (!_.contains(self.dataset.ids, value)) {
- // add record to dataset if not already in (added by
- // the form view?)
- self.dataset.ids.splice(
- self.records.indexOf(record), 0, value);
- }
+ self.dataset.add_ids([value], self.records.indexOf(record));
// Set id on new record
$row = self.$current.children('[data-id=false]');
} else {
@@ -925,6 +918,8 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
},
'add': function (ev, records, record, index) {
var $new_row = $(self.render_record(record));
+ var id = record.get('id');
+ if (id) { self.dataset.add_ids([id], index); }
if (index === 0) {
$new_row.prependTo(self.$current);
diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js
index 4e042b60c5d..512fc4ff373 100644
--- a/addons/web/static/src/js/view_list_editable.js
+++ b/addons/web/static/src/js/view_list_editable.js
@@ -429,7 +429,6 @@ openerp.web.list_editable = function (instance) {
var index = this.records.indexOf(source_record) + 1;
record = this.make_empty_record(id);
this.records.add(record, {at: index});
- this.dataset.ids.splice(index, 0, id);
}
return this.reload_record(record);
},
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index fdb2eeee329..78d733110d8 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -1363,8 +1363,8 @@ instance.web.View = instance.web.Widget.extend({
}
args.push(context);
return dataset.call_button(action_data.name, args).then(handler).then(function () {
- if (self.ViewManager.ActionManager) {
- self.ViewManager.ActionManager.__parentedParent.menu.do_reload_needaction();
+ if (instance.webclient) {
+ instance.webclient.menu.do_reload_needaction();
}
});
} else if (action_data.type=="action") {
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 14c7f722ec2..a459486bf05 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -422,6 +422,7 @@
<span class="oe_topbar_name"/>
<ul class="oe_dropdown_menu">
<li><a href="#" data-menu="settings">Preferences</a></li>
+ <li><a href="#" data-menu="account">My OpenERP.com account</a></li>
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><a href="#" data-menu="help">Help</a></li>
<li><a href="#" data-menu="logout">Log out</a></li>
@@ -739,7 +740,7 @@
<td t-foreach="aggregate_columns" t-as="column" class="oe_list_footer oe_number"
t-att-data-field="column.id" t-att-title="column.label">
</td>
- <td t-if="options.deletable"/>
+ <td t-if="options.deletable" class="oe_list_record_delete"/>
</tr>
</tfoot>
</table>
@@ -1743,6 +1744,9 @@
<label for="export_format">Export Formats</label>
<select id="export_format" name="export_format"></select>
+
+ <label for="export_selection_only">Only export selection:</label>
+ <input type="checkbox" id="export_selection_only"/>
</td>
</tr>